{CodeDeploy}チュートリアル: CodeDeploy を使用して GitHub からアプリケーションをデプロイする

 

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

 

-- 4. GitHub リポジトリを作成する

[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


-- GitHubリポジトリとアクセストークンの削除