枯れた技術で極力運用の負荷を減らしたいので調べている。随時更新。
beanstalk固有の方法みたいなものの学習コストは嫌気するが同等のものを揃えるのもそれなりに手間暇かかる感じ
ECS使おうか迷う所だがプロダクション環境でコンテナ頑張る必要ない場合は無理しない勢
ebコマンドのインストール
-
aws公式のレポジトリをクローンしてインストールする
- 書いてある通りにコマンドを打つだけでインストール完了する(トラブルシュートの方法も丁寧に書いてある)
- インストーラーはpyenvを使い、~/.ebcli-virtual-envにインストールしてくれる。インストール後は.bashrcや.zshrcなりにaliasでパスを通したりする必要はあるかも。(注意書きがインストール後に表示される)
-
$ source ~/.ebcli-virtual-env/bin/activate
でebコマンドが使えるようになる。(executableにpathを通せばいちいちsourceする必要はない) - IAMでポリシー作る場合は公式のJSONがある
メモ
コマンドとかメモとか
-
eb init
でアプリの作成 -
eb create
でenvironmentの作成 -
eb platform
はplatform作成に使う。ec2が起動してその中でpackerが動いてイメージを作成してくれる
workspace_type
少なくともApplicationとPlatformがある。前者はサーバーで動作するアプリケーションのgit プロジェクトと思えばよい。後者はPlatformを作成するgitプロジェクト(要はpacker用のプロジェクト)と考えて差し支えないと思う。
ドットディレクトリや各種ファイル
- .platform/hooks
- platform hookを入れておくディレクトリ
- prebuild, predeploy, postdeployファイル等に記述してplatform拡張できる
- Buildfile, Procfile
- アプリケーションのルートディレクトリに配置する
- Buildfileは短期実行されるコマンドを記述
- Procfileは長期実行されるコマンドを記述
- .ebextensions
- このディレクトリ以下に.configのsuffixを持ったyamlを設置するとawsリソースをカスタムできる
- platform.yaml
- カスタムプラットフォーム定義のファイル。アプリのルートディレクトリに設置
- packerを使ってvmがaws内に構築される
- workspace_type=Platformの時に必要になる。
インスタンスデプロイのワークフロー
- secrets-managerに環境変数を寄せている場合は
eb create
で作成されるroleaws-elasticbeanstalk-ec2-role
に適宜policyを付与した - .ebextensions/*.configに色々とアップするfileやらコマンドやらを書ける。設定の公式docはここ
- vmに一応sshでアクセスしたい場合はメンバー分の公開鍵を入れておくとか
- secrets-managerから環境変数を取得してファイルでばら撒きたい場合のコマンド記述とか
カスタムプラットフォームの作成
dockerプラットフォームに関して
beanstalkでdocker使う場合、単一コンテナと複数コンテナを扱う環境を選択できる。
単一の場合は単にec2上でdocker起動させてコンテナを一つ動かすというもので、サイドカーもできないっぽい。logとかはbeanstalkのお作法に従って出力とかになる。
複数の場合はecsクラスタが起動する。ecsにbeanstalkをかぶせるメリットがあるのか疑問。素直にecs使った方が良いような。
コマンド実行
environment構築後に修正できる設定とできない設定とがある。vpcやSecurityGroupは修正できないのでcreateする時にオプションつけて実行する。
-
$ eb init app_name --profile mine
でapplicationを作成- 手元に
.elasticbeanstalk/config.yml
が生成される - .gitignoreで除外設定されている
- 手元に
-
$ eb create app-env-blue
でアプリの稼働環境を作成(自分の都合でGo言語を使う)- platformは
-p go
を直接指定しないと後述のconfigアップロードで失敗する - platform名のvalidationがebコマンドとbotoの間で齟齬を起こしている様子
- eb createができた後に打てるeb platform listで確認できるkeyを使う
- platformは
-
$ eb config save app-env-blue
でapp-env-blue環境のconfigをfetchする-
.elasticbeanstalk/saved_configs/hello-go-env-blue.cfg.yml
としてダウンロードされている - .gitignoreによりcommit対象から除外されている
- 適宜修正してputコマンドでアップロードする
-
-
$ eb terminate app-env-blue
で該当環境を削除できる。ELBやEC2等の関連リソースも一括削除してくれる