CodeシリーズでハッピーなCI/CDを構築しよう

概要

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のソースコード
https://github.com/ymd65536/aws_happy_code/tree/main/part2

出典:CodeシリーズでハッピーなCI/CDを構築しよう

ポイント

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

コメント

タイトルとURLをコピーしました