1K Views
September 21, 18
スライド概要
Ansible Night in Tokyo 2018.09 の LT 資料です
https://ansible-users.connpass.com/event/100344/
From: https://www.slideshare.net/laughk/elasticbeanstalk-ansible
インフラエンジニア @ コネヒト (2022-08-20 現在)
ElasticBeanstalk で Ansible を使っている話 2018.09.21 Ansible Night in Tokyo 2018.09 LT Kei IWASAKI at SQUEEZE Inc.
お前誰よ Kei IWASAKI Twitter: @laugh_k Github: @laughk 株式会社SQUEEZE所属 スラスラわかるPython(翔泳社) という本の共著者 の⼀⼈ 最近は Django REST Framework, AngularJS でWeb 開発をやりながらもインフラ周りやそれ以外の改 善を模索したりしてます
宿泊施設の運⽤管理サービスの 開発・インフラやってます
CM Python ⼊⾨者向けの本 スラスラわかる Python 発売中!
今⽇の話
ElasticBeanstalk で Ansible を使っている話
ElasticBeanstalk https://aws.amazon.com/jp/elasticbeanstalk/
“ AWS Elastic Beanstalk は、Java、.NET、PHP、 “ Node.js、Python、Ruby、Go および Docker を使 ⽤して開発されたウェブアプリケーションやサー ビスを、Apache、Nginx、Passenger、IIS など使 い慣れたサーバーでデプロイおよびスケーリング するための、使いやすいサービスです。 “ お客様はコードをアップロードするだけで、 “ Elastic Beanstalk が、キャパシティーのプロビジ ョニング、ロードバランシング、Auto Scaling か らアプリケーションの状態モニタリングまで、デ プロイを⾃動的に処理します。同時に、お客様の アプリケーションが稼動している AWS リソース の完全なコントロールを維持でき、いつでも基本 的なリソースにアクセスすることができます。
ElasticBeanstalk ものすごくざっくり説明すると AWS が提供してくれる Heroku っぽい環境 実態は EC2, ALB, RDS, SQS あたりを AutoScale で よしなにしてくれている 直接インフラを触ることもできる 専⽤ CLI があり、コマンド⼀発でアプリケーショ ンをデプロイできる スタートアップなどで⼿間をかけずに Webアプリ を動かすにはかなりお⼿軽でよい選択肢
ElasticBenstalk 簡単な構成管理ツールのような機構もある ebextensions https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/ latest/dg/ebextensions.html
ebextensions
ebextensions アプリケーションのトップディレ クトリに .ebextensions ディレク トリを掘ってそこに YAML or JSON でいろいろ書ける ちょっとしたパッケージのインス トールや AWS のリソースを管理 したりできる アプリケーションをデプロイする タイミングで実⾏される
ebextensions の例 Resources: AWSEBAutoScalingGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: HealthCheckType: ELB HealthCheckGracePeriod: 300
ebextensions の例 packages: yum: git: [] libffi-devel: [] libxml2-devel: [] libxslt-devel: []
ebextensions の例 files: "/etc/httpd/conf.d/server-status.conf": mode: "000644" owner: root group: root content: | <Location /server-status> SetHandler server-status Require local </Location>
ebextensions 便利!
なんだけども そこまで万能でもない
ebextensions のつらみ あくまで ElasticBeanstalk で管理できるものをよ しなにするためのもの。それ以外のものを管理し ようとすると⼀気に難易度が上がる 適⽤時の挙動がブラックボックス。実際にどうや って設定した内容が適⽤されるのか追うのが難し いことがある 開発フローとの兼ね合いによっては、ちょっとし た con g ファイルの変更をするのにアプリケーシ ョンの Hot x をリリースする必要になるケースも
ebextensions のつらみ 実際 Celery (Python製のジョブキュー) や Datadog を導⼊しようとしたときにかなり苦労した
_⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈_ > そこでAnsibleですよ <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
ElasticBeanstalk x Ansible
ElasticBeanstalk x Ansible ebextension で基本的に以下のことだけやってもらう ようする Ansible のインストール playbook の取得 local_action の実⾏だけやってもらうようにする
これで済むようにする container_commands: "01.setup_and_execute_ansible": command: "ansible-playbook playbook.yml" ※ イメージです
Plan 1. インフラ的に管理したいものに限って Playbook 管 理する 例: 監視関連のもの、ミドルウェアの設定 など 2. Playbook を Github リポジトリで管理 3. ebextension 経由では Github から playbook の tarball を取得し、 local_action で Playbook で適⽤ 4. ⼿元のPCからも直接SSH経由で Playbook を適⽤可 能にする
ElasticBeanstalk x Ansible のために やったこと Ansible のインストールとPlaybookの取得はシェル スクリプト password 情報を扱うための vault_file は KMS で 暗号化。復号化は ElasticBeanstalk 管理下の EC2 に IAM Role を割り当てて対応 EC2 で local_action , PC からは通常どおり SSH で やるためにそれ⽤の dynamic inventory を作成
Dynamic Inventory の例 PC EC2
やってみた結果
ebextensions container_commands: "01.setup_and_execute_ansible": command: | /bin/bash \ .ebextensions/setup-and-exec-ansible-playbook.sh wrapper スクリプトはやっぱり必要だった
Playbook の適⽤
アプリケーションのデプロイ時
AutoScale 発動時
Playbook だけ普通に適⽤
ElasticBeanstalk x Ansible な環境にしてよかったこと
ElasticBeanstalk x Ansible な環境に してよかったこと AutoScale でよしなにしてくれる感じが上がった アプリケーションの Hot x 切らなくても設定変更 の適⽤ができるようになった Galaxy Role が使えるようになった など 圧倒的にインフラ環境に整備がやりやすくなった
ElasticBeanstalk x Ansible な環境に 思うこと ElasticBeanstalk がある程度よしなにやってくれる ところにいい感じに Ansible を使える状況は結構楽 mitamae でも同様なことはできそう とはいえこの状況はそもそもインフラに求めるも のが ElasticBeanstalk の守備範囲を超えてしまっ ていることでもある。より適切な環境への移設を 検討したほうがよさそう
おしまい