LoginSignup
1
2

More than 3 years have passed since last update.

Elastic Beanstalkのメモ

Last updated at Posted at 2020-04-23

枯れた技術で極力運用の負荷を減らしたいので調べている。随時更新。

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 で作成されるrole aws-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を使う
  • $ 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等の関連リソースも一括削除してくれる
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2