AWS Hands-on for Beginners「AWS Code サービス群を活用して、CI/CD のための構成を構築しよう!」が、初心者向けでわかりやすかったので、そのときの作業メモです。
作業内容
CodeCommit
リポジトリ test-repository 作成。
IAM Role
EC2 用 S3 Full Access ロール S3FullAccess4EC2 作成。
EC2
デプロイしたい Amazon Linux2 インスタンスを適当に作成して S3FullAccess4EC2 Role 紐付け。
デプロイ時に名前がわかるように Name タグに test-ec2 とつける。
CodeDeploy Agent
CodeDeploy を利用したいのでエージェントを ssh 接続してインストール。
sudo yum install ruby wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install chmod +x ./install sudo ./install auto
S3
アーティファクト保存用バケット test-bucket-artifact 作成。
CodeBuild
dev-build-test 作成して、以下の設定を行う。
- Source
- AWS CodeCommit
- test-repository
- Branch
- develop
- Environment
- Amazon Linux2
- Standard
- 最新版
- Artifact
- S3
- test-bucket-artifact
IAM Role
作成された codebuild-dev-build-test-service-role に AWSCodeDeployDeployerAccess をアタッチ。
buildspec.yml
以下の内容で作成。
version: 0.2
phases:
build:
commands:
- aws deploy push --application-name dev-app-test --s3-location s3://test-bucket-artifact/dev-artifact.zip --source .
artifacts:
files:
- '**/*'
base-directory: .
CodeDeploy
次項の Role を事前に作成して dev-app-test という名前の EC2 向けアプリケーションの作成。
appspec.yml を作成して、 test-repository にコミット。
/tmp にデプロイして確認する。
root ユーザーではなく、ec2-user に chown する。
version: 0.0
os: linux
files:
- source: /
destination: /tmp
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
IAM Role
AWS サービス - CodeDeploy - CodeDeploy から AWSCodeDeployRole を紐付けたロール codedeploy-dev-test-app-service-role 作成。
Deploy group
dev-web- Role
codedeploy-dev-test-app-service-role
- Enviroment
- EC2
- Name :
test-ec2
- Name :
- EC2
- Agent install
- None
- Load balancer
- Off
Deploy
アプリケーションからラジオボタンで選択してアプリケーションをデプロイする- デプロイグループ
dev-web
- リビジョンの場所
- s3://test-bucket-artifact/dev-artifact.zip
- デプロイグループ
CodePipeliine
dev-pipeline を作成して、以下の設定を行う。
- Source
- AWS CodeCommit
- test-repository
- develop
- Build stage
- AWS CodeBuild
- Project name
- dev-build-test
- Deploy provider
- AWS CodeDeploy
- dev-app-test
- dev-web
- AWS CodeDeploy
パイプラインの動作確認
develop ブランチを test-repository に push するとパイプラインが動作して、リポジトリ配下の内容すべてが /tmp にデプロイされる。
所感
CodeDeploy はエージェントいれたり事前準備も多いため、 CodeBuild だけですますことが多い状況でした。
そのため、CodePipeline も利用せずにいたのですが、CodeCommit からフックしようとすると CodePipeline が必須という仕様。
GitHub とか BitBucket 利用なら WebHook できるのに、CodeCommit を使う場合は CodePipeline 経由の必要があるため、ついでに CodeDeploy も試してみましたが、思ったよりも簡単に EC2 にデプロイできることが確認できました。