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 の守備範囲を超えてしまっ
ていることでもある。より適切な環境への移設を
検討したほうがよさそう
おしまい

Elasticbeanstalk で Ansible を使っている話