Elasticbeanstalk で Ansible を使っている話

464 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

profile-image

インフラエンジニア @ コネヒト (2022-08-20 現在)

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ElasticBeanstalk で Ansible を使っている話 2018.09.21 Ansible Night in Tokyo 2018.09 LT Kei IWASAKI at SQUEEZE Inc.

2.

お前誰よ Kei IWASAKI Twitter: @laugh_k Github: @laughk 株式会社SQUEEZE所属 スラスラわかるPython(翔泳社) という本の共著者 の⼀⼈ 最近は Django REST Framework, AngularJS でWeb 開発をやりながらもインフラ周りやそれ以外の改 善を模索したりしてます

3.

宿泊施設の運⽤管理サービスの 開発・インフラやってます

4.

CM Python ⼊⾨者向けの本 スラスラわかる Python 発売中!

5.

今⽇の話

6.

ElasticBeanstalk で Ansible を使っている話

7.

ElasticBeanstalk https://aws.amazon.com/jp/elasticbeanstalk/

8.

“ AWS Elastic Beanstalk は、Java、.NET、PHP、 “ Node.js、Python、Ruby、Go および Docker を使 ⽤して開発されたウェブアプリケーションやサー ビスを、Apache、Nginx、Passenger、IIS など使 い慣れたサーバーでデプロイおよびスケーリング するための、使いやすいサービスです。 “ お客様はコードをアップロードするだけで、 “ Elastic Beanstalk が、キャパシティーのプロビジ ョニング、ロードバランシング、Auto Scaling か らアプリケーションの状態モニタリングまで、デ プロイを⾃動的に処理します。同時に、お客様の アプリケーションが稼動している AWS リソース の完全なコントロールを維持でき、いつでも基本 的なリソースにアクセスすることができます。

9.

ElasticBeanstalk ものすごくざっくり説明すると AWS が提供してくれる Heroku っぽい環境 実態は EC2, ALB, RDS, SQS あたりを AutoScale で よしなにしてくれている 直接インフラを触ることもできる 専⽤ CLI があり、コマンド⼀発でアプリケーショ ンをデプロイできる スタートアップなどで⼿間をかけずに Webアプリ を動かすにはかなりお⼿軽でよい選択肢

10.

ElasticBenstalk 簡単な構成管理ツールのような機構もある ebextensions https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/ latest/dg/ebextensions.html

11.

ebextensions

12.

ebextensions アプリケーションのトップディレ クトリに .ebextensions ディレク トリを掘ってそこに YAML or JSON でいろいろ書ける ちょっとしたパッケージのインス トールや AWS のリソースを管理 したりできる アプリケーションをデプロイする タイミングで実⾏される

13.

ebextensions の例 Resources: AWSEBAutoScalingGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: HealthCheckType: ELB HealthCheckGracePeriod: 300

14.

ebextensions の例 packages: yum: git: [] libffi-devel: [] libxml2-devel: [] libxslt-devel: []

15.

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>

16.

ebextensions 便利!

17.

なんだけども そこまで万能でもない

18.

ebextensions のつらみ あくまで ElasticBeanstalk で管理できるものをよ しなにするためのもの。それ以外のものを管理し ようとすると⼀気に難易度が上がる 適⽤時の挙動がブラックボックス。実際にどうや って設定した内容が適⽤されるのか追うのが難し いことがある 開発フローとの兼ね合いによっては、ちょっとし た con g ファイルの変更をするのにアプリケーシ ョンの Hot x をリリースする必要になるケースも

19.

ebextensions のつらみ 実際 Celery (Python製のジョブキュー) や Datadog を導⼊しようとしたときにかなり苦労した

20.

_⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈_ > そこでAnsibleですよ <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

21.

ElasticBeanstalk x Ansible

22.

ElasticBeanstalk x Ansible ebextension で基本的に以下のことだけやってもらう ようする Ansible のインストール playbook の取得 local_action の実⾏だけやってもらうようにする

23.

これで済むようにする container_commands: "01.setup_and_execute_ansible": command: "ansible-playbook playbook.yml" ※ イメージです

24.

Plan 1. インフラ的に管理したいものに限って Playbook 管 理する 例: 監視関連のもの、ミドルウェアの設定 など 2. Playbook を Github リポジトリで管理 3. ebextension 経由では Github から playbook の tarball を取得し、 local_action で Playbook で適⽤ 4. ⼿元のPCからも直接SSH経由で Playbook を適⽤可 能にする

25.

ElasticBeanstalk x Ansible のために やったこと Ansible のインストールとPlaybookの取得はシェル スクリプト password 情報を扱うための vault_file は KMS で 暗号化。復号化は ElasticBeanstalk 管理下の EC2 に IAM Role を割り当てて対応 EC2 で local_action , PC からは通常どおり SSH で やるためにそれ⽤の dynamic inventory を作成

26.

Dynamic Inventory の例 PC EC2

27.

やってみた結果

28.

ebextensions container_commands: "01.setup_and_execute_ansible": command: | /bin/bash \ .ebextensions/setup-and-exec-ansible-playbook.sh wrapper スクリプトはやっぱり必要だった

29.

Playbook の適⽤

30.

アプリケーションのデプロイ時

31.

AutoScale 発動時

32.

Playbook だけ普通に適⽤

33.

ElasticBeanstalk x Ansible な環境にしてよかったこと

34.

ElasticBeanstalk x Ansible な環境に してよかったこと AutoScale でよしなにしてくれる感じが上がった アプリケーションの Hot x 切らなくても設定変更 の適⽤ができるようになった Galaxy Role が使えるようになった など 圧倒的にインフラ環境に整備がやりやすくなった

35.

ElasticBeanstalk x Ansible な環境に 思うこと ElasticBeanstalk がある程度よしなにやってくれる ところにいい感じに Ansible を使える状況は結構楽 mitamae でも同様なことはできそう とはいえこの状況はそもそもインフラに求めるも のが ElasticBeanstalk の守備範囲を超えてしまっ ていることでもある。より適切な環境への移設を 検討したほうがよさそう

36.

おしまい