Elastic Beanstalk の概要と設定ファイル(e.g. ebextensions)について
Published: 2019/2/20
Elastic Beanstalk は、 aws で対ユーザーの WEB サーバーを立てるときに、 ほぼほぼ毎回お世話になる。 ただ、一度設定が済んでしまうと、ほとんどその後ほとんどいじらず、勝手によろしく動いてくれるので、新規のプロジェクトの度に beanstalk の設定に苦労している気がした。 この前、久しぶりに一から設定する機会があったので、備忘を兼ねてここにまとめておく。
Elastic Beanstalk とは
heroku を aws に持ってきたようなもの。
普通の rails プロジェクトとの対応表は、大体以下のような感じ。
生 rails | elasticbeanstalk |
---|---|
サーバー構築 | Beanstalk の設定 -> CloudFormation stack の自動生成 |
プロビジョニング | 言語ごと platform による設定 + .ebextensions での commands など |
デプロイ | 言語ごと platform による設定でだいたいよろしくデプロイされる |
AWS のリソースとしては、ロードバランサーとそれに繋がった AutoScalingGroup (の設定) の形で実装される。 それらを設定する際に必要になる Security Group だとか IAM Role だともろもろの付随したリソースが必要になるけれども、それの管理まで一括で行ってくれる。
サーバーの構成は上記のように CloudFormation によって自動化されるが、 具体的な WebApplication のソースコードを動かすためにはもろもろのライブラリやインタプリタなどが必要になり、 ElasticBeanstalk はそれを Platform という形式で選択可能にしている。
Platform は、ElasticBeanstalk に対するデプロイ・プロヴィジョニングスクリプトもろもろを、各言語などごとにあらかじめ用意したもの。
Application と Environment
開発中のアプリを Application といい、実際にウェブアプリとしてのシステム1式を Environment という。
- ひとつの Application に対して複数の Environment を持てる。
- 例: Production Environment + Staging Environment
- Environment には Application の一つのバージョンがデプロイされる
- これを ApplicationVersion という
- ApplicationVersion ≒デプロイ対象のビルド成果物
操作方法
大きく分けて、以下の3種類がある。
- 画面からぽちぽち
eb
の CLI ツールから操作aws
の CLI ツールから操作
エンジニアとして作業する場合、最初は 2 を多用して、 安定してきたら 1 のみの操作になると思われる。
eb
コマンドについて
eb
コマンドは、 ElasticBeanstalk の操作をコマンドライン上からスムーズに実行するためのツール。
実行するたびに、 .elasticbeanstalk/config.yml
に現在の Application や Environment についての情報を保存し、
次回以降実行するときに以前入力した情報は省略できるようになる。
具体的には Application ID や Environment ID など。
毎回入力するには面倒すぎるものが、eb
がもし .elasticbeanstalk/config.yml
から情報を読み出すことができれば、入力が不要になる。
(デフォルト値として利用するので、毎回、明示的に指定することもできる。)
このファイルは開発者の利便性のための設定ファイルなので、デフォルトでは .gitignore
に追加され commit されないようになっている。
public repository でなければ、別に commit してしまってもあまり問題はない。
ライフサイクル
eb init
: Application を作成するeb create
: Environment を作成するeb deploy
: 今のプロジェクト(おそらくコミットHEAD)をデプロイする- ApplicationVersion を作成・アップロードし、
- それを Environment に適用するまでをやってくれる。
プロジェクトのための設定いろいろ
.ebextensions/任意名称.config
にて、プロジェクトの ElasticBeanstalk に対する設定を行うことができる。
なお、 ElasticBeanstalk にはいくつか設定を行うための方法が提供されていて、その優先順位は以下のようになっている。多分。
- 画面 UI でぽちぽちして設定した値
- .ebextensions の中で設定した値
- もろもろのデフォルト値
ebextensions は、 ElasticBeanstalk Environment に対するありとあらゆる設定可能な項目を記述できるようになっている。
特に、大体の場合においてはアプリケーションを動かすにはそのアプリ固有のプロヴィジョニングを行う必要があるので、 エンジニアが一番いじるのは ebextensions だと思われる。
詳細は例えば以下の公式文書を参考にするとよい。
- aws - 設定ファイル (.ebextensions) による高度な環境のカスタマイズ
- aws - すべての環境に対する汎用オプション
- aws - Linux サーバーでのソフトウェアのカスタマイズ
デプロイ・プロヴィジョニング関連については、基本的には Ansible や itamae のようなことが記述できる。
Linux サーバーでのソフトウェアのカスタマイズの方に、その各 clause の記述方法が載っている。
参考までに、一番よく使うであろう commands
によるプロヴィジョニングは以下のようになる。
commands:
your_command_name:
test: "shell command # 成功ステータスで command 実行"
command: "任意のシェルスクリプト"
なお、この config ファイルたちは、 .ebextensions
ディレクトリ下に何個でも配置できる模様。
基本的に json としてマージした設定が、最終的に処理されるものになるっぽい。
commands
が実行されるタイミング
ElasticBeanstalk は、特に環境の作り直しはとても時間がかかるので、デプロイのための試行錯誤をしている最中ではなるべくそれを避けたい。
commands
などのプロヴィジョニング用設定項目は、各デプロイを行うたびに実行されるので、 commands のテストをするためだったらばんばんデプロイしていけばいい。
(自分はこれに気づかず、割と苦労していた。)
Tags: elastic-beanstalkaws
関連記事
(メモ) AWS SQS の High throughput FIFO とは
2023/7/11
SageMaker に関するメモ
2023/4/13
AWS Lambda + ECR の際の IAM 権限まわりについて
2022/11/6
AWS SDK で getaddrinfo で API コールが失敗する時の対処
2022/11/6
実行されている環境が AWS Lambda かどうか判定する方法
2022/10/23