概要
CodeシリーズでハッピーなCI/CDを構築しよう をハンズオンする
Part1実際にCodeCommitを使ってみよう
コマンド集
// git-remote-codecommit
python3 -m pip install git-remote-codecommit
// プロファイルの設定
aws_happy_code % aws configure --profile cicd_handson
// 認証情報を確認
cat ~/.aws/credentials
// AWSマネコンのcodecommitで作成したリポジトリcloneする
git clone codecommit::ap-northeast-1://cicd_handson@cicd_handson
//
touch README.md
gid add .
git add .
git commit -m "test"
git push -u
Part2 Dockerコンテナのイメージを自動でビルドしてレジストリに保存する構成
構成詳細
CFNのソースコード
出典:CodeシリーズでハッピーなCI/CDを構築しよう
https://github.com/ymd65536/aws_happy_code/tree/main/part2
ポイント
none
コマンド集
// codecommit上でリポジトリを作成作成する
% aws cloudformation deploy --stack-name codecommit --template-file ./codecommit.yml --tags Name=cicdhandson --profile cicd_handson
% pwd
/codes/cicd/aws_happy_code/part2/cicdhandson
// mainブランチ作成、ステージ追加、コミット、プッシュ
% git checkout -b main
% echo "Hello CodeBuild" > README.md
% git add . && git commit -m "part2"
% git push --set-upstream origin main
// code_build_handsonブランチを切る
% git checkout -b code_build_handson
% touch buildspec.yml
% touch dockerfile
% git add . && git commit -m "part2"
% git push --set-upstream origin code_build_handson
// codebuild用のS3バケットを作成する
% aws cloudformation deploy --stack-name s3 --template-file ./s3.yml --tags Name=cicdhandson --profile cicd_handson
// ECRリポジトリを作成
aws cloudformation deploy --stack-name ecr --template-file ./ecr.yml --tags Name=cicdhandson --profile cicd_handson
// CodeBuidで必要なIAMロールを作成する
aws cloudformation deploy --stack-name codebuild-iam-role --template-file ./codebuild-role.yml --tags Name=cicdhandson --capabilities CAPABILITY_NAMED_IAM --profile cicd_handson
// EventBridgeに必要なIAMロールを作成する
aws cloudformation deploy --stack-name event-bridge-iam-role --template-file ./event-bridge-iam-role.yml --tags Name=cicdhandson --capabilities CAPABILITY_NAMED_IAM --profile cicd_handson
// CodePipelineに必要なIAMロールを作成する
aws cloudformation deploy --stack-name pipeline-iam-role --template-file ./pipeline-iam-role.yml --tags Name=cicdhandson --capabilities CAPABILITY_NAMED_IAM --profile cicd_handson
// CodeBuildのプロジェクトを作成する
aws cloudformation deploy --stack-name code-build --template-file ./code-build.yml --tags Name=cicdhandson --profile cicd_handson
// ★CodePipelineの環境構築
cloudformation deploy --stack-name pipeline --template-file ./pipeline.yml --tags Name=cicdhandson --profile cicd_handson
// CodeCommitでプルリクエストを作成
aws codecommit create-pull-request --title "part2" --description "part2 image ci/cd" --targets repositoryName=cicdhandson,sourceReference=code_build_handson --profile cicd_handson
// マージリクエスト
PULL_REQUEST_ID=`aws codecommit list-pull-requests --profile cicd_handson --pull-request-status OPEN --repository-name cicdhandson --query 'pullRequestIds' --output text` && echo $PULL_REQUEST_ID
COMMITID=`aws codecommit get-branch --repository-name cicdhandson --branch-name code_build_handson --profile cicd_handson --query 'branch.commitId' --output text` && echo $COMMITID
aws codecommit merge-pull-request-by-fast-forward --pull-request-id $PULL_REQUEST_ID --source-commit-id $COMMITID --repository-name cicdhandson --profile cicd_handson
aws ecr describe-repositories --profile cicd_handson --output json
aws ecr list-images --profile cicd_handson --repository-name cicdhandson --query "imageIds[*].imageDigest" --output table
【結果】
-----------------------------------------------------------------------------
| ListImages |
+---------------------------------------------------------------------------+
| sha256:2326ba7ae9bff1c55a618051b86c7d71401712898afe1a833734076962a231e5 |
+---------------------------------------------------------------------------+
Part3 ECRのイメージを使ってLambda関数をデプロイする構成
ポイント
none
コマンド集
// codecommitサービスにリポジトリを作成する
part3 % aws cloudformation deploy --stack-name codecommit --template-file ./codecommit.yml --tags Name=cicdhandson --profile yukio.takakura.admin
// 上記で作成したリポジトリをgit cloneする
part3 % AWS_PROFILE=yukio.takakura.admin git clone codecommit::ap-northeast-1://cicdhandson
// buildspec.yml、dockerfile、app.pyの作成
part3 % cd cicdhandson
cicdhandson % git checkout -b main && echo "Hello Lambda" > README.md
cicdhandson % git add . && git commit -m "part3"
cicdhandson % AWS_PROFILE=yukio.takakura.admin git push --set-upstream origin main
cicdhandson % git checkout -b lambda_handson
cicdhandson % touch buildspec.yml
cicdhandson % touch app.py
cicdhandson % touch dockerfile
cicdhandson % git add . && git commit -m "part3"
cicdhandson % AWS_PROFILE=yukio.takakura.admin git push --set-upstream origin lambda_handson
part3 % aws cloudformation deploy --stack-name s3 --template-file ./s3.yml --tags Name=cicdhandson --profile yukio.takakura.admin
part3 % aws cloudformation deploy --stack-name ecr --template-file ./ecr.yml --tags Name=cicdhandson --profile yukio.takakura.admin
// codebuild用IAMロール
aws cloudformation deploy \
--stack-name codebuild-iam-role \
--template-file ./codebuild-role.yml \
--tags Name=cicdhandson \
--capabilities CAPABILITY_NAMED_IAM \
--profile yukio.takakura.admin &&
// event-bridge-iam用IAMロール
aws cloudformation deploy \
--stack-name event-bridge-iam-role \
--template-file ./event-bridge-iam-role.yml \
--tags Name=cicdhandson \
--capabilities CAPABILITY_NAMED_IAM \
--profile yukio.takakura.admin
// pipeline-iam-role用IAMロール
aws cloudformation deploy \
--stack-name pipeline-iam-role \
--template-file ./pipeline-iam-role.yml \
--tags Name=cicdhandson \
--capabilities CAPABILITY_NAMED_IAM \
--profile yukio.takakura.admin
// code-build
aws cloudformation deploy \
--stack-name code-build \
--template-file ./code-build.yml \
--tags Name=cicdhandson \
--profile yukio.takakura.admin
// code-pipeline
aws cloudformation deploy \
--stack-name pipeline \
--template-file ./pipeline.yml \
--tags Name=cicdhandson \
--profile yukio.takakura.admin
// 手動でAWSマネコン上でCodeCommit上で直接PRの作成〜マージを行う
マネコンのpipelineでパイプライン結果が成功であることを確認する
// lambda関数を実行
aws cloudformation deploy --stack-name lambda --template-file ./lambda.yml --tags Name=cicdhandson --capabilities CAPABILITY_NAMED_IAM --profile yukio.takakura.admin
コメント