Elastic Beanstalkの設定はコードで管理されています。
インスタンスタイプやオートスケールの設定が違うため、stagingとproductionで一部ファイルが別です。それ以外の共通の設定は同じファイルを使っているので気を付けて下さい。
staging: deployments/staging production: deployments/production
デプロイの際に上記の設定ファイルを元にデプロイが実行されます。コードでの設定がある場合、インフラも含め反映されます。
急ぎで、GUIで変更することはあると思います。しかし、GUIだけ変更してソースコードを変更しないと、デプロイの際に戻って事故の原因になります。なので、ソースコードに反映してください。
GUIの設定とコードの書き方は、公式 を参考にしてください。
環境変数は環境別に設定する値だけ、deployments/production/00_env_options.config or deployments/staging/00_env_options.config に記載して下さい。
秘密鍵などのSSM経由で参照される値は、デプロイ時に動的に展開されます。
{{resolve:ssm:ssmのパラメータの名前:バージョン}}
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/dynamic-references.html
ワークフローの設定:.github/workflows/deploy.yml デプロイの基本設定: deployments/
- ECRにログイン
- Dockerコンテナをbuild
- short commit hashを含む環境ごとのタグで、ECRにDockerイメージをpush
- elastic beanstalkに該当のイメージを指定してデプロイ
Dockerイメージのタグ例: staging-dfasfste
[デプロイされる環境名]-[commit-hash]
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_ECR_REPO_NAME
切り戻しを早くするため、masterマージの際、Dockerイメージは毎回buildします。
パイプラインが通ったのを確認後、Git上でデプロイしたいコミットに、v○○とタグを打ちます。 タグはvから始まる必要があります。すぐにeb deployが実行されます。
例: v1.0.0
developブランチにpushすると自動でデプロイされます。
普通にデプロイするのと同様に戻したい先commitに対してタグを打ちます。 バグの場合、バグが発生したcommitの1つ前のcommitにたいしてタグを打ちます。
コンテナイメージはbuild済みなので、すぐにeb deployが実行されます。
revetしてdevelopブランチにpushしてください。
こちらの手順書 の手順2を実施
git clone https://github.com/codeforjapan/decidim-cfj.git
Ruby 環境はインストール済とする(ruby 2.7.4p191)
cd decidim-cfj
bundle install
- docker-compose.ymlで
{RepositoryName}
をデプロイしたいECRのイメージパスに修正。 - docker-compose.ymlで
{EBEnvironment}
をデプロイする環境名に修正。 - 作成したい環境の設定をコピー。
deployments/.elasticbeanstalk/config.ymlに設定があるので、基本的に何も聞かれないはずです。
cd deployments
# production
cp production/*.config .ebextensions/
# staging(台数とかログの保持期間が小さい)
cp staging/*.config .ebextensions/
eb create production --process
最後エラーで終わるがOK
eb setenv SECRET_KEY_BASE=$(bin/rails secret)
必要な設定を行い、DBを立ち上げる
その後eb deploy
を実行
Elastic Beanstalk のインスタンスをAレコードとして割り当てる
ロードバランサの設定をする(手順6.2 Configure SSL )
6.3 Create the first admin user に従う(root で)
6.5 Configure the job system with Sidekiq and Redis
sidekiqの設定をする必要はありません。dockerでデプロイされています。
stagingはcloud formationで作成しています。 ./INFRA.md#Redis