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 にデプロイできることが確認できました。