Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

サーバ構築自動化 On aws sqaleの場合

7,234 views

Published on

  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

サーバ構築自動化 On aws sqaleの場合

  1. 1. サーバ構築自動化 (on AWS)Sqaleの場合 Automation Tech Casual Talks #1 Ryo Kuroda @lamanotrama パペボ所属
  2. 2. Agenda● サービス紹介● puppetのnode管理がだるい● 名前解決がだるい● インスタンス作成がだるい● それでもインスタンス作成がだるい● puppetの適用がだるいだるい作業をやっつけるぞー
  3. 3. サービス紹介
  4. 4. Sqale (Closed Beta)● http://sqale.jp● AWS● 30インスタンスいかないくらい (EC2+RDS)● Amazon Linux 64bit ○ 一部のインスタンスはカーネルをいじっている● Nagiosの運用 ○ Monitoring Casual Talk #1 ○ http://d.hatena.ne. jp/lamanotrama/20120618/1339988584
  5. 5. puppetのnode管理がだるい
  6. 6. × node.ppインスタンスの増減の度に手編集とかやってられない。 node hoge001.sqale.jp { include base include xxxx include yyyyy } node baa001.sqale.jp { include base include zzzz }
  7. 7. External Nodesagentのホスト名を引数で受け取って色々動的に決定できる。 [master] node_terminus = exec externa_nodes = /path/to/script● http://docs.puppetlabs.com/guides/external_nodes.html● yamlで出力 ○ includeするclass ○ enviroment (こいつはあんまりあてにならない) ○ parameters (トップレベルスコープの変数)● 言語は問わない
  8. 8. Sqaleの場合はperlで実装 use Net::Amazon::EC2; use JSON; use YAML;puppetクライアントホストのroleタグを取ってきて、それをincludeするclass名として使う。
  9. 9. 補足運用ルールでサーバの役割をroleタグにJSONの配列で定義することになっています。Net::Amazon::EC2::PaperboyAttriburtes は使ってない?$instance->roles() で簡単にroleをArrayRef取れるものがあるんですが、このときはまだ作ってなかっただけです。
  10. 10. 名前解決がだるい
  11. 11. 特に内部名前解決は必須ec2インスタンスは停止、起動するとIPが変わるので、インスタンス間のやり取りやsshのログインにIPを使うのは現実的ではない。しかし、新規作成時や起動の度に手作業でhostsファイルやDNSのレコードを更新するなんてのはやってられない。
  12. 12. /etc/hosts の自動更新/etc/hosts の自動更新で解決している。1. 5分毎に各インスタンス上でAWSのAPIを叩くスクリプト (hosts-gen.pl)を実行2. 全インスタンスのName(タグ)とpublic IP、private IPを取得3. /etc/hosts を生成 a. スタティックに管理したい情報が /etc/hosts.base にあ れば、内容をマージ <IP> <Name>.sqale.jp <Private IP> <Name>.sqale.lan
  13. 13. どうしてもDNSサーバが欲しい場合一部ミドルウェアがhostsを見てくれないので、その場合だけlocalhostにdnsmasqを立てて、そいつを使うようにしています● /etc/hosts は自動更新● inotifyで監視 ○ 監視スクリプトはsupervisorでdaemonize● 更新があればdnsmasqにHUPシグナルを送り最 新の情報を読み直させる
  14. 14. インスタンス作成がだるい
  15. 15. サービス投入までの流れざっくりとこれだけある1. 新規でまっさらなインスタンスを作成2. 起動したらec2-user(デフォルトユーザ)でログイン3. hostnameを設定4. 最低限必要な内容で/etc/hostsを手編集5. puppetのインストール6. puppetのconfig設定7. puppet agent実行まーだるい
  16. 16. cloud-initインスタンス作成時にuser-dataにスクリプトを埋め込んで、初回boot時に任意の処理を実行できるという便利な仕組みを使う。https://help.ubuntu.com/community/CloudInit独自のシンタックス(cloud config)でも設定できるけど、sqaleではシュルスクリプトで行なっています。
  17. 17. スクリプトでやっていること1. AWSのapiを叩いて、自身のNameを取得2. hostnameを設定 <Name>.sqale.jp3. puppetサーバのIP(apiから取得)とFQDNをhostsに書き込み4. puppetのインストール5. puppet.confを設定6. puppet agent --tags base を実行して基礎構築7. hosts-gen.plでhosts生成
  18. 18. これで前述のだるい作業は全て自動化されました。あとはldap認証でログインして残りの部分(roleに紐付くpuppet class)を適用すれば出来上がりです。ほぼ特権ユーザであるec2-userでのログインは余程のことが無い限り行いません。
  19. 19. 補足スクリプトの中でAPIへアクセスするためにセキュリティー証明書が必要なので、予め証明書を埋め込んだ(だけの)AMIを作っておいて、それを使ってインスタンスをlaunchしています。ただし、今はそんなことをしなくても IAM roles for EC2instances を使ってよりシンプルで安全にアクセスができるようです(未検証)。http://aws.typepad.com/aws_japan/2012/06/iam-roles-for-ec2-instances-simplified-secure-access-to-aws-service-apis-from-ec2.html
  20. 20. それでもインスタンス作成がだるい
  21. 21. ローンチ自体がだるい以上でインスタンスローンチ後の構築は自動化できましたが、そのローンチ自体がわりとだるい。● インスタンスをローンチするには ○ マネジメントコンソールでポチポチポチ… ○ ec2-run-instances [オプション沢山沢山…] --user- data /path/to/cloud-init-sctipt● AMIの指定や、Nameやroleタグ、security-group、インスタン スタイプ等々設定すべき項目が山ほどある ○ 項目が多い -> 間違いを起こしやすい ○ 怠惰さがまだ足りないですね
  22. 22. ec2-instance-launcher 作ったこれだけ ! sudo ec2-instaance-launcher <Name>仕様で決まっていることは全てデフォルトで設定● AMI● instance type● availabability-zone● detailed-monitoring on● Name tag● role tag、secutiry-group は Name =~ /^(w+)d+/● user-data (cloud-initスクリプト)それぞれオプションで上書き可能
  23. 23. 更に● 既存のインスタンスと同Nameのインスタンスは作ら せない ○ ec2側では制限がないので作れてしまうがそれは避けた い● 実行時にpuppetサーバで同名のホストが認証済み な場合は認証情報をリセット ○ puppet cert --clean xxx ○ インスタンスの作り変え等を行った場合、クライアント証 明書が違うということで(cloud-init内の)puppet実行が失 敗してしまうのを回避する為
  24. 24. puppet agent実行がだるい
  25. 25. 運用の話以上で構築周りは自動化ができました。次は運用。manifest等を変更した際のpuppetの適用ってみなさんどうしてます ?
  26. 26. × agentをデーモン起動更新の自動適用って怖くていやだ。却下。
  27. 27. × puppet kickagentをno-clientモードで起動し、puppetサーバ側からremoteでagentを実行できる(push型)。が、いまいち機能が足りない。● role毎にまとめて実行が出来ない ○ --class で指定するにはLDAPでのnode管理が必須● noop実行(dry-run)ができない● ログがしょぼい ○ puppet agent --test で出力されるようなリッチなログが 得られない
  28. 28. parappet (parallel puppet)ガッとまてめて実行で楽をする。● perlで実装● 引数で対象インスタンスのName(タグ)を並べて指定● --para Num で並列実行● --role XXX で特定roleのインスタンスをまとめて指定も● --timeout Num でタイムアウトを指定● --noop● ログがリッチ、且つファイルにもホスト毎に分けて出力report-ikachanプラグインを使って、ircにgreenのログが一気に流れる。テンション上がる!http://mizzy.org/blog/2012/03/31/1/
  29. 29. parappetの仕組み1. perlでオプションをパース2. AWSのapi使ってroleオプション引数から対象インスタンスの リストを作成3. リモートでpuppet --agentを実行するpsshコマンドを組み立 てる4. psshをexecしてパラレルでssh接続し、リモートでpuppetを実 行perlでオプションパースして、pythonなpsshを実行し、リモートでrubyなpuppetを実行するという夢のLLコラボレーション!python力、ruby力が無かったがための苦肉の策!!
  30. 30. PassengerpuppetmsterdのバックエンドがデフォでWEBrick。つまりシングルスレッド。多数のクライアントが同時に接続してくると、猛烈にコケます。というわけでPassengerに変えました。http://projects.puppetlabs.com/projects/1/wiki/Using_PassengerUnicornでもいけるみたいよ。
  31. 31. まとめ
  32. 32. AWS(EC2)は楽しやすいAWSを使うと楽できる(自動化しやすい)のは確かです。ですが、AWS側は楽できる仕組みを用意してくれているだけなので、使い方次第ですね。開発力は必須かと思います。
  33. 33. 今後のこと使っているスクリプト等は公開できる形にしたいと思ったり思わなかったりしてます。その他、各種バックアップなども自動化していますので、そのあたりはまた機会があればお話したいと思います!
  34. 34. ありがとうございました

×