aws環境の設定はAWS CDKのコードで管理されています。
インスタンスタイプやオートスケールの設定が違うため、stagingとproductionで一部ファイルが別です。それ以外の共通の設定は同じファイルを使っているので気を付けて下さい。
staging: config/staging production: config/production
デプロイの際に上記の設定ファイルを元にデプロイが実行されます。コードでの設定がある場合、インフラも含め反映されます。
急ぎで、GUIで変更することはあると思います。しかし、GUIだけ変更してソースコードを変更しないと、デプロイの際に戻って事故の原因になります。なので、ソースコードに反映してください。
秘密鍵などのSSM経由で参照される値は、デプロイ時に動的に展開されます。
ワークフローの設定:.github/workflows/deploy.yml デプロイの基本設定: decidim-cfj-cdk
- ECRにログイン
- Dockerコンテナをbuild
- short commit hashを含む環境ごとのタグで、ECRにDockerイメージをpush
- ECSに該当のイメージを指定してデプロイ
Dockerイメージのタグ例: staging-dfasfste
[デプロイされる環境名]-[commit-hash]
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_ECR_REPO_NAME
mainブランチに新しい feat:
もしくは、fix:
のprefixがついたcommitが追加された際に
release pleaseがリリース用のPRを作成します。
このリリース用のPRをマージすると、リリースタグが自動で採番され、リリースされます
mainブランチにpushすると自動でデプロイされます。
revertしてmainブランチにpushしてください。
deploy同様の手順
手元に decidim-cfj-cdkのリポジトリをクローンし、以下の作業は全てそのディレクトリ以下で行う
dev.json ファイルを作成し、config ディレクトリ下に配置。
設定ファイルと認証情報ファイルの設定を参考に、credentialsファイルを作成する。
今回は、~/.aws/credentials
に以下のようprofileがdecidim
になるよう作成。(違う名前にした場合、以下読み変えが必要です。)
[decidim]
aws_access_key_id=YOUR_ACCESS_KEY
aws_secret_access_key=YOUR_SECRET_ACCESS_KEY
Amazon Simple Email Service を設定するや、Setup emailを参考に、AWS SESの準備を行う。
2-1. dev.json を編集する
dev.jsonの’smtpDomain’を用意したドメインに書き換える。
AWS Systems Manager のパラメータストアで以下のようなパラメータを手動で作成する。
/decidim-cfj/${props.stage}/AWS_ACCESS_KEY_ID
/decidim-cfj/${props.stage}/AWS_SECRET_ACCESS_KEY
/decidim-cfj/${props.stage}/AWS_CLOUD_FRONT_END_POINT
/decidim-cfj/${props.stage}/RDS_DB_NAME
/decidim-cfj/${props.stage}/RDS_USERNAME
/decidim-cfj/${props.stage}/RDS_PASSWORD
/decidim-cfj/${props.stage}/SECRET_KEY_BASE
/decidim-cfj/${props.stage}/NEW_RELIC_LICENSE_KEY
/decidim-cfj/${props.stage}/SMTP_ADDRESS
/decidim-cfj/${props.stage}/SMTP_USERNAME
/decidim-cfj/${props.stage}/SLACK_API_TOKEN
プライベートリポジトリを作成する を参考に AWS ECRのリポジトリを用意する。
手元の環境で、decidim-cfjのdocker imageをbuildし、 Docker イメージをプッシュするを参考に buildしたdocker imageを用意したリポジトリにpushする。
4-2でpushしたdockerイメージのタグをexportする
$ export IMAGE_TAG=先ほどpushしたimage tag
証明書を発行して管理するを参考に証明書を発行、Arnをメモする
5-2 dev.json を編集する
dev.jsonの’certificates’部分にメモしたArnに書き換える。
使用するリージョンごとに一回実行する必要がある。2回目以降は不要。
$ npx cdk --context stage=dev tag=${IMAGE_TAG} --profile decidim bootstrap
どんなリソースが作成されるのかを確認できる。
$ npx cdk --context stage=dev tag=${IMAGE_TAG} --profile decidim diff
$ npx cdk --context stage=dev tag=${IMAGE_TAG} --profile decidim deploy --all --require-approval never
上記コマンドが成功すれば、デプロイは成功です。
devdecidimStack
とCloudFormationのスタック一覧から検索し、以下のように各StackにCREATE_COMPLETE
が表示されていることを確認してください。
$ aws ecs execute-command --region ap-northeast-1 --cluster devDecidimCluster --task ${タスク名} --container appContainer --interactive --command "/bin/bash" --profile decidim
$ ./bin/rails db:migrate
$ ./bin/rails db:seed SEED=true
dev-decidim-alb-origin.${指定したドメイン}
で管理画面にアクセス
cloudfrontの管理画面に行き作成したcloudfrontの管理画面で代替ドメインに追加したいドメインを加えて保存する
設定したい組織にドメインを設定して、対象のドメインいアクセスする
手順を変えるとエラーでアクセスに失敗します。
decidimではproduction環境のseedは以下のenvをつけて実行する必要があります SEED=true bundle exec rake db:seed