https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorials-github.html
-- 1. コマンド等のインストール
-- 1.1 aws cli version 2 インストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
-- 1.2 jqインストール
sudo yum -y install jq
-- 1.3 gitインストール
sudo yum -y install git
-- 2. CodeDeploy のサービスロール作成
-- 2.1 ロール作成
vim role02.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"codedeploy.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name role02 \
--assume-role-policy-document file://role02.json
-- 2.2 ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole \
--role-name role02
-- 3. Amazon EC2 インスタンスの IAM インスタンスプロファイルを作成する
-- 3.1 IAMポリシー作成
vim policy01.json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json
-- 3.2 IAMロール作成
vim role01.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json
-- 3.3 ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01 \
--role-name role01
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore \
--role-name role01
-- 3.4 インスタンスプロファイルを作成
aws iam create-instance-profile --instance-profile-name profile01
aws iam list-instance-profiles | grep InstanceProfileName
-- 3.5 インスタンスプロファイルにロールを追加
aws iam add-role-to-instance-profile --instance-profile-name profile01 --role-name role01
aws iam list-instance-profiles-for-role --role-name role01
[Create a new repository] ページで、次の操作を実行します。
[リポジトリ名] ボックスに「CodeDeployGitHubDemo」と入力します。
[Public] を選択します。
GitHubにログインしアクセストークンを作成。パスワードの代わりに使用する
Settings
→ Developer settings
→ Personal access tokens
→ Generate new token
git config --global credential.helper 'cache --timeout=86400'
mkdir /tmp/CodeDeployGitHubDemo
cd /tmp/CodeDeployGitHubDemo
touch README.md
git init
git add README.md
git commit -m "My first commit"
git remote add origin https://github.com/username/CodeDeployGitHubDemo.git
git push -u origin master
-- 5. サンプルアプリケーションを GitHub リポジトリにアップロードする
aws s3 cp s3://aws-codedeploy-ap-northeast-1/samples/latest/SampleApp_Linux.zip .
unzip SampleApp_Linux.zip
rm SampleApp_Linux.zip
git add .
git commit -m "Added sample app"
git push
-- 6. インスタンスのプロビジョニング
aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=CodeDeployDemo}]' \
--subnet-id subnet-11111111111111111 \
--iam-instance-profile Name=profile01
CodeDeploy エージェントのインストール
※インスタンスにログインして実行
sudo yum update
sudo yum install ruby
sudo yum install wget
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status
-- 7. アプリケーションおよびデプロイグループの作成
aws deploy create-application \
--application-name app01
aws deploy list-applications
aws deploy create-deployment-group \
--application-name app01 \
--ec2-tag-filters Key=Name,Type=KEY_AND_VALUE,Value=CodeDeployDemo \
--deployment-group-name depgroup01 \
--service-role-arn arn:aws:iam::999999999999:role/role02
aws deploy list-deployment-groups \
--application-name app01
-- 8. アプリケーションをインスタンスにデプロイする
git log
aws deploy create-deployment \
--application-name app01 \
--deployment-config-name CodeDeployDefault.OneAtATime \
--deployment-group-name depgroup01 \
--description "description01" \
--github-location repository=username/CodeDeployGitHubDemo,commitId=2222222222222222222222222222222222222222
aws deploy list-deployments
-- 9. デプロイの監視と検証
aws deploy list-deployments \
--application-name app01 \
--deployment-group-name depgroup01 \
--query "deployments" \
--output text
aws deploy get-deployment \
--deployment-id d-333333333 \
--query "deploymentInfo.[status, creator]" \
--output text
http://ec2-192-0-2-1.ap-northeast-1.compute.amazonaws.com
-- 10. クリーンアップ
-- デプロイグループの削除
aws deploy delete-deployment-group \
--application-name app01 \
--deployment-group-name depgroup01
aws deploy list-deployment-groups \
--application-name app01
-- アプリケーションの削除
aws deploy delete-application \
--application-name app01
aws deploy list-applications
-- インスタンス削除
aws ec2 describe-instances
aws ec2 terminate-instances \
--instance-ids i-44444444444444444
-- インスタンスプロファイルの削除
aws iam remove-role-from-instance-profile --instance-profile-name profile01 --role-name role01
aws iam delete-instance-profile --instance-profile-name profile01
aws iam list-instance-profiles | grep InstanceProfileName
-- IAMロールの削除
aws iam list-roles | grep role01
aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::999999999999:policy/policy01
aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
aws iam delete-role --role-name role01
-- IAMポリシーの削除
aws iam list-policies | grep policy01
aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01
-- CodeDeploy のサービスロールの削除
aws iam list-roles | grep role02
aws iam detach-role-policy \
--role-name role02 \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole
aws iam delete-role --role-name role02