弊社の基幹システムをVPSからAWSに移行するにあたって、まずはrailsを動かしてみる、という段階で無事に死にました☆
今後のための備忘録です。
前記事: ECS FargateでRails動かそうとして2ヶ月かかって手元に残ったもの【1.docker編】
前回まででやったこと
今回やったこと
githubへのリポジトリの作成は割愛します。
今回はgithubのmasterブランチに変更をpushしたときに本番環境のコンテナイメージが自動更新されるところまでやってみます。
ECR
CodeBuild
途中、環境変数を設定する部分があります。
そこには以下のように設定します。
「ポリシーをアタッチします」を押して、新しいポリシーを追加します。
jsonは以下をコピペします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload"
],
"Resource": "*"
}
]
}
CodePipeline
ここではCodeBuildで設定したリポジトリと同じリポジトリを設定します。
そして、先程作ったCodeBuildのプロジェクト名を設定します。
CodeBuild側の設定は以上ですが、CodeBuildでコンテナをビルドするためにはbuildspec.yml
というファイルが必要になります。
プロジェクトルート
├ docker
│ ├ mysql
│ │ ├ volumes
│ │ │ └ developmentのmysqlの永続化用
│ │ ├ charset.cnf
│ │ ├ password.yml
│ │ └ Dockerfile
│ ├ nginx
│ │ ├ development
│ │ │ ├ default.conf
│ │ │ └ Dockerfile
│ │ ├ production
│ │ │ ├ default.conf
│ │ │ └ Dockerfile
│ │ └ nginx.conf
│ └ rails
│ └ Dockerfile
├ src
│ └ railsアプリのソース
├ .gitignore
├ buildspec.yml ←コイツ
├ docker-compose.common.yml
├ docker-compose.development.yml
├ docker-compose.production.yml
└ README.md
このファイル構成でここまで説明をしていない唯一のファイルです。
ビルドコマンドや、railsコマンド等はこのファイルに書きます。
version: 0.2
phases:
install:
runtime-versions:
nodejs: 10
ruby: 2.6
pre_build:
commands:
- $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
build:
commands:
- docker-compose -f docker-compose.production.yml build
- docker-compose -f docker-compose.production.yml run --rm web rake db:migrate RAILS_ENV=production
- docker-compose -f docker-compose.production.yml run --rm web rake assets:precompile RAILS_ENV=production
- docker tag $WEB_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$WEB_REPO_NAME:$IMAGE_TAG
- docker tag $SERVER_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$SERVER_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$WEB_REPO_NAME:$IMAGE_TAG
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$SERVER_REPO_NAME:$IMAGE_TAG
先程の環境変数はここで読み込まれます。
さて、これで準備ができました。
コードを更新して、githubにpushしてみましょう。
CodePipeline上で更新が始まったことが確認できます。
更新には5分程かかります。
この時間の短縮も、今後の課題の一つです。
CodeBuild上でもリアルタイムで状況が把握できます。
COMPLETEまでフェーズが進めば、今回の目的は達成です。