
CI/CDをテストしてみる
こんにちは。恥ずかしなら大雑把な概念はわかっているものの、よくわかっていない部分もあるのでAWS で CI/CD をテストしてみたいと思います。
以前 github について弊社スタッフ記事があるのでこちらもご参考ください。
https://www.netassist.ne.jp/techblog/33079/
用意したもの
ローカルでgit command が使える端末
EC2
codecommit,codepipline,codedeply
1.IAM関連
基本的にここは各自の要件にあわせて適切な設定をお願いします。
リポジトリに push する環境用のIAMユーザで AWS CodeCommit 用の認証設定が必要になります。
今回は、
codedeploy 用に AmazonEC2RoleforAWSCodeDeployとAWSCodeDeployRoleを付与したロール
codebuild 用に codecommit に対するカスタムロールを作成付与
EC2用に AmazonEC2RoleforAWSCodeDeploy,AWSCodeDeployRole を付与
を実施しました。もしかしたら過剰に設定した可能性がありますが、一旦精査は後回しにします。
構成イメージ

codecommit作成
リポジトリを作成します。
任意の名称で構いませんが、IAMロールの名称指定で細かく指定する場合は、入力ミスに気をつけてください。
IAM作成
git認証用の設定をしてくだい。今回はhttpsのpush
EC2にはタグ付け
codedeploy 対象になるため、他と被らないように注意してください。
CodeDeploy作成
アプリケーションの作成
コンピューティングプラットフォーム は今回は EC2/オンプレミス を指定
デプロイグループで EC2 に設定するタグと値を指定今回は キーを Deploy、値を prod で設定
CodePipeline 作成
カスタムパイプライン
ソースは codecommit
リポジトリは作ったものを指定
ブランチ名も作ったものを指定
ビルドとテストはスキップ
デプロイは AWS CodeDploy、アプリケーション名とデプロイグループを作ったものを指定
デプロイ先のEC設定
agentインストール
sudo dnf install ruby -y
sudo dnf install wget -y
cd /tmp wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x install
sudo ./install auto
sudo systemctlenable --now codedeploy-agent
操作端末側
任意の方法で
clone git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/XXXXXX
以下のファイルは必須になります。
・appspec.yml
・buildspec.yml
必要なら
・scripts/restart.sh
・app/index.html
appspec.yml
version:0.0
os:linux
files:
-source:/
destination:/var/www/app
hooks:
AfterInstall:
-location:scripts/restart.sh
timeout:60
runas:root
scripts/restart.sh
#!/bin/bash
systemctl restart nginx
chmod +x scripts/restart.sh
buildspec.yml
version: 0.2
phases:
install:
commands:
- echo Installing dependencies…
pre_build:
commands:
- echo Running pre-build commands…
build:
commands:
- echo Building the application…
post_build:
commands:
- echo Build completed successfully!
artifacts:
files:
- '*/'
他なんらかのファイル(実際の htmlファイルなど)
push
$ git add .
$ git status
On branch main
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
modified: appspec.yml
modified: buildspec.yml
modified: scripts/restart.sh
modified: test.html
$ git commit -m "today file"
$ git push origin main
Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com':
Password for 'https://XXXXXXXXXXXXXXXXXXX@git-codecommit.ap-northeast-1.amazonaws.com':
ここで iam に設定したユーザー名とパスワードを問われるので入力してください。
うまくいくと codepipeline上の画面ですべてに緑色のチェックが入ります。

# ll
total 16
-rw-r--r--. 1 root root 0 Jan 5 15:51 20260105
-rw-r--r--. 1 root root 364 Jan 5 15:51 appspec.yml
-rw-r--r--. 1 root root 327 Jan 5 15:51 buildspec.yml
-rw-r--r--. 1 root root 33 Jan 5 15:51 README.md
drwxr-xr-x. 2 root root 24 Jan 5 15:51 scripts
-rw-r--r--. 1 root root 10 Jan 5 15:51 test.html
実際のサーバー場にも同じようにファイルが作成されていたら問題ありません。
リポジトリを更新したら自動でデプロイまで行われたことが確認できました。
実際にはテストのフローを挟むと思いますが、変更したファイルを必要な環境に更新してくれるため、手作業よりも大幅に時間の短縮が見込めます。
ただパイプラインの構築は慣れが必要かもしれません。
AWSでは必須ファイルもあるので、何故かうまくいかないといったことも発生しました。
今回は単純なファイルなため、影響もありませんが、複数人で継続して運用していくには、ルール決め、保守作業なども必要になるかと思います。
また作業内容によってはCI/CDを無理に構築しなくても問題ないかもしれません。
今後AIの台頭によってこういったものがどうなってしまうのかわかりませんが、前提の知識として覚えておこうと思います。





