【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

公開日時:2021年08月21日 / 最終更新日時:2021年08月27日

AWS での CI/CD(Continuous Integration/Continuous Delivery)を導入する方法・手順について解説します。

 

 

目次

各サービスの役割概要

以下の 4つのサービスを利用します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

構成図

今回、以下の2つの構成を構築します。

 

上のラインは、CodeCommitとCodePipelineを使った CI/CD 環境になります。

下のラインは、CodeCommit、CodeBuild、CodeDeploy、CodePipeline を使った CI/CD 環境になります。

AWS Cloud9 を利用してソースコードを作成&修正し、git push でプッシュします。

このコマンドを検知して CodePipeline が稼働するという形になります。

 

 

 

 

目標

以下がハンズオンの目標です。

AWS を利用しての CI/CD 環境構築の初心者向けの内容となっています。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

S3 をデプロイ先とした CI/CD 環境を構築する【事前準備+CodeCommit編】

■作成する構成

 

S3 バケットと AWS Cloud9 と CodeCommit の環境を作り、git push までできるようにします。

 

 

S3 バケットの作成

最初に S3 バケットを作成します。

 

 

 

 

 

「バケットを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

バケット名を設定します。

※S3 バケット名は世界でユニークになっている必要があります。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

「このバケットのブロックパブリックアクセス設定」画面で「パブリックアクセスをすべてブロック」のチェックを外します。

更に「オブジェクトが公開される可能性があります。」にチェックを入れます。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

S3 バケットを暗号化する設定をして「バケットを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

S3 バケットが作成されていることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

S3 バケットが Web サイトをホスティングする設定をする

次にこの S3 バケットが Web サイトをホスティングする設定をします。

 

■設定概要

以下の2つの設定をします。

 

 

作成した S3 バケットの「プロパティ」タブをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

「静的ウェブホスティング」「編集」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「静的ウェブホスティング」「有効にする」にチェックを入れます。

「ホスティングタイプ」「静的ウェブサイトをホスティングする」にチェックを入れます。

「インデックスドキュメント」「index.html」と入力します。

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

設定が完了したら「変更の保存」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

次にバケットポリシーの設定をします。

 

 

S3 バケットの「アクセス許可」タブをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

バケットポリシーの「編集」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

AWS からダウンロードしたバケットポリシー

■変更前


  "Version": "2012-10-17", 
  "Statement": [ 
      { 
          "Sid": "PublicReadGetObject", 
          "Effect": "Allow", 
          "Principal": "*", 
          "Action": [ 
              "s3:GetObject" 
          ], 
          "Resource": [ 
              "arn:aws:s3:::xxxxxxxxx/*"  ← ここをバケット名に変更する。
          ] 
      } 
  ] 
}

 

 

 

 

■変更後


  "Version": "2012-10-17", 
  "Statement": [ 
      { 
          "Sid": "PublicReadGetObject", 
          "Effect": "Allow", 
          "Principal": "*", 
          "Action": [ 
              "s3:GetObject" 
          ], 
          "Resource": [ 
              "arn:aws:s3:::devops-test-cicd01/*"  ← ここをバケット名に変更する。
          ] 
      } 
  ] 
}

 

 

 

 

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「設定の保存」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

ポリシーを設定したら「index.html」ファイルを S3 バケットにアップロードします。

 

 

「オブジェクト」タブをクリックして「アップロード」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「index.html」ファイルがアップロードされていることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

「アップロード」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

アップロードされていることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

■動作確認

動作確認をします。

S3 バケット上にある index.html ファイルにアクセスをします。

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

バケットウェブサイトエンドポイントのURLをクリックします。

今回作成したサイトのURL:http://devops-test-cicd01.s3-website-ap-northeast-1.amazonaws.com/

※テスト後すぐにリセットします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

下図のように「Hello, AWS World!!」が表示されることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

CodeCommit の設定

次に「CodeCommit」の設定をします。

 

CodeCommitのダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「リポジトリを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

リポジトリ名を設定して「作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

リポジトリが作成されたことを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

Clolud9 の設定

次に Cloud9 の設定をします。

 

Cloud9 のダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「Create environment」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「Name」に名前を入力し「Next step」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

Cloud9 で利用する EC2 インスタンスのスペックを設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

設定が終わったら「Next step」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

内容を確認して問題がなければ「Create environment」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

しばらくすると下図のような画面になります。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

下の方にコマンドを実行できる場面があります。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

■Cloud9の設定

下図の Cloud9 のアイコンをクリックして「Preferences」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「Project Settings」から「Soft Tabs」「2」に変更します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

■AWS CLI 認証情報ヘルパーの設定

AWS CLI 認証情報ヘルパーの設定をします。

以下のページの通りに設定します。

 

AWS CLI 認証情報ヘルパーを使用した、Linux、macOS、または UNIX での AWS CodeCommit リポジトリへの HTTPS 接続のセットアップ手順

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-https-unixes.html

 

 

「ステップ 3: 認証情報ヘルパーを設定する」をクリックして移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

以下のコマンドを実行します。

xxxxx@gmail.com:~/environment $ git config --global credential.helper '!aws codecommit credential-helper $@'
xxxxx@gmail.com:~/environment $ git config --global credential.UseHttpPath true

 

 

次にアカウントとメールアドレスを設定します。

xxxxx@gmail.com:~/environment $ git config --global user.name "test001"
xxxxx@gmail.com:~/environment $ git config --global user.email "xxxxxx@gmail.com"

 

 

CodeCommit に戻ってリポジトリのクローンを作成します。

「ステップ 3: リポジトリのクローンを作成する」「コピー」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

再度 Cloud9 に戻ってコピーしたコマンドを実行します。

xxxxx@gmail.com:~/environment $ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/devops-test-repo01
Cloning into 'devops-test-repo01'...
warning: You appear to have cloned an empty repository.
xxxxx@gmail.com:~/environment $ 

 

 

 

作成したレポジトリディレクトリに移動します。

xxxxx@gmail.com:~/environment $ ls
devops-test-repo01   README.md
xxxxx@gmail.com:~/environment $ cd devops-test-repo01/
xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ 

 

 

 

 

ここで index.html ファイルを ~/environment/devops-test-repo01 ディレクトリにアップロードします。

下図のように devops-test-repo01 ディレクトリを選択して「File」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

「Upload Local Files」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「index.html」ファイルがアップロードされたことを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

下図のように「index.html」ファイルがアップロードされたことを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

index.htmlファイルがアップロードされたことを確認したら以下の git コマンドを実行します。

git add -A コマンドは変更があったすべてのファイルをインデックスに登録してコミット対象にするコマンドです。

xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git add -A

 

 

次に git commit コマンドを実行します。

「-m」オプションを付けて「init」を設定します。

※initは何でもいいです。"最初のinit"など分かりやすい文字でもいいです。

xxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git commit -m "init"
[master (root-commit) 7946b5e] init
1 file changed, 11 insertions(+)
create mode 100644 index.html
xxxx@gmail.com:~/environment/devops-test-repo01 (master) $ 

 

 

次に git push origin master コマンドで、ローカルのコードをリモートの master ブランチに送ります。

xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git push origin master 
Enumerating objects: 3, done. 
Counting objects: 100% (3/3), done. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 336 bytes | 336.00 KiB/s, done. 
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/devops-test-repo01 
 * [new branch]      master -> master 
xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ 

 

 

 

 

 

上記コマンドを実行後に CodeCommit のダッシュボードに移動して作成したリポジトリを確認すると「index.html」ファイルがアップロードされていることが確認できます。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

現在、ここまでできている状況です。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

 

S3 をデプロイ先とした CI/CD 環境を構築する【事前準備+CodePipeline編】

ここでは、git push コマンドでソースコードをアップロードされたことを検知して CodePipeline が S3 バケットに index.html ファイルをアップロードするところまで構築します。

 

■構成図

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

CodePipeline のダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「パイプラインを作成する」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

パイプラインの設定で以下の項目を設定して「次に」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

 

 

 

 

ソース設定画面で以下のように設定して「次へ」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「ビルドステージを追加する」設定画面で、今回はコードをビルドしないで S3 バケットにアップロードするだけなので何も選択せずに「ビルドステージをスキップ」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

確認画面が表示さるので「スキップ」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「デプロイステージを追加する」設定画面で以下のように設定して「次に」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

内容を確認してもんだがなければ「パイプラインを作成する」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

下図のようにエラーにならないことを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

コードを変更して動作確認をする

次にコードを変更して動作確認をしてみます。

 

Cloud9からコードを変更します。

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

変更したらファイルを Save します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

ファイルを保存後に git commit、git push します。

xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git add -A 
xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git commit -m "fix test 20210824" 
[master d3206f6] fix test 20210824 
 1 file changed, 1 insertion(+) 
xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git push origin master  
Enumerating objects: 5, done. 
Counting objects: 100% (5/5), done. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done. 
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/devops-test-repo01 
   7946b5e..d3206f6  master -> master 
xxxxx@gmail.com:~/environment/devops-test-repo01 (master) $ 

 

 

git push したら CodePipeline の画面を確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

最後にサイトが反映されていることを確認します。

 

バケットウェブサイトエンドポイントのURLをクリックします。

今回作成したサイトのURL:http://devops-test-cicd01.s3-website-ap-northeast-1.amazonaws.com/

※テスト後すぐにリセットします。

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

今回では以下の構成図の構成を構築しました。

AWS Cloud9 でソースコード(index.html)を変更し、git commit、git push で CodePipeline が動作し、自動的に S3 バケットにファイルをアップロードしています。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

EC2インスタンスをデプロイ先とした CI/CD 環境を構築する【事前準備編】

以下の構成図の構成を構築します。

AWS Cloud9 と AWS ComeCommit は上で作業している環境を流用します。

 

■構成図

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

EC2 インスタンスは Web サーバとして使用します。

 

EC2 インスタンスに紐づける IAM ロールを作成する

最初に事前準備として EC2 インスタンスに紐づける IAM ロールを作成します。

 

IAM ダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

左側ペインより「ロール」をクリックして「ロールを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「ロールの作成」画面で以下のように設定して「次のステップ:アクセス権限」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「ロールの作成」画面で「AmazonS3FullAccess」にチェックを入れて「次のステップ:タグ」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「タグの追加(オプション)」では何も設定せずに「次のステップ:確認」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

ロール名を設定し内容を確認して「ロールの作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

ロールが作成されることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

EC2 インスタンスの作成

次に EC2 インスタンスを作成します。

 

EC2 のダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「インスタンスを起動」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

Amazon Linux2 を選択します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

インスタンスタイプで「t2.micro」を選択して「次のステップ:インスタンスの詳細の設定」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「ステップ3:インスタンスの詳細の設定」画面で先ほど作成した IAM ロールを割り当てて「次のステップ:ストレージの追加」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「ステップ4:ストレージの追加」画面でストレージはそのままで「次のステップ:タグの追加」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

EC2 インスタンスにタグを設定して「次のステップ:セキュリティグループの設定」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「ステップ6:セキュリティグループの設定」画面でセキュリティグループの設定をします。

セキュリティのため「ソース」に自宅のグローバルIPを /32 で入力しています。

設定をしたら「確認と作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

最後に「起動」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「新しいキーペアの作成」を選択して、キーペア名をを設定して「キーペアのダウンロード」ボタンをクリックして秘密鍵をダウンロードします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

秘密鍵の中身を下図のようになっています。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

ファイルをダウンロードすると「インスタンスの作成」ボタンをクリックできるようになるのでクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

EC2インスタンスが正常に起動することを確認します。

 

 

EC2 インスタンスの設定

EC2 インスタンスが起動したらログインして各種設定をします。

 

■OSのアップデート

[root@ip-172-31-36-116 ~]# yum update

 

 

■OSの再起動

[root@ip-172-31-36-116 ~]# reboot

 

 

■Apacheのインストール

[root@ip-172-31-36-116 ~]# reboot

 

 

■httpdの起動

[root@ip-172-31-36-116 ~]# systemctl start httpd.service

 

 

■httpdの自動起動の設定

[root@ip-172-31-36-116 ~]# systemctl enable httpd.service

 

 

httpdが起動したらブラウザよりアクセスをしてみます。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

CodeDeploy のエージェントをインストールする

次に EC2 インスタンスに CodeDeploy のエージェントをインストールします。

 

以下のサイトを参考に EC2 インスタンスに CodeDeploy のエージェントをインストールします。

Amazon Linux または RHEL 用の CodeDeploy エージェントをインストールする

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

 

■Rubyをインストールする

[root@ip-172-31-36-116 ~]# yum install ruby

 

 

■wgetをインストールする

[root@ip-172-31-36-116 ~]# yum install wget

 

 

■installファイルをダウンロードする

[root@ip-172-31-36-116 ec2-user]# wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install

 

 

■installファイルを確認する

[root@ip-172-31-36-116 ec2-user]# ls -l 
total 20 
-rw-r--r-- 1 root root 17482 May  7 21:53 install 
[root@ip-172-31-36-116 ec2-user]#

 

 

■codedeployエージェントをインストールする

[root@ip-172-31-36-116 ec2-user]# ./install auto

 

 

■codedeployinstallファイルを確認する

インストールをすると自動的に codedeployエージェントが起動します。

[root@ip-172-31-36-116 ec2-user]# systemctl status codedeploy-agent 
● codedeploy-agent.service - AWS CodeDeploy Host Agent 
   Loaded: loaded (/usr/lib/systemd/system/codedeploy-agent.service; enabled; vendor preset: disabled) 
   Active: active (running) since Tue 2021-08-24 09:51:04 UTC; 48s ago 
  Process: 29978 ExecStart=/bin/bash -a -c [ -f /etc/profile ] && source /etc/profile; /opt/codedeploy-agent/bin/codedeploy-agent start (code=exited, status=0/SUCCESS) 
 Main PID: 29990 (ruby) 
   CGroup: /system.slice/codedeploy-agent.service 
           ├─29990 codedeploy-agent: master 29990 
           └─29994 codedeploy-agent: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller of master 29990 
 
Aug 24 09:51:04 ip-172-31-36-116.ap-northeast-1.compute.internal systemd[1]: Starting AWS CodeDeploy Host Agent... 
Aug 24 09:51:04 ip-172-31-36-116.ap-northeast-1.compute.internal systemd[1]: Started AWS CodeDeploy Host Agent. 
[root@ip-172-31-36-116 ec2-user]#

 

 

codedeployエージェントが起動していることが確認できれば問題ありません。

 

 

ここまでの構成図

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

EC2インスタンスをデプロイ先とした CI/CD 環境を構築する【CodeBuild編】

以下の環境を構築します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

CodeBuild はビルドテストやデプロイ可能なパッケージを作成することができますが、この回ではデプロイ可能なパッケージのみ作成します。

 

CodeBuild 用の S3 バケットを作成する

S3 のダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「バケットを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「バケットを作成」画面で「バケット名」を設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「子のバケットのブロックパブリックアクセス設定」「パブリックアクセスをすべてブロック」にチェックを入れます。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

設定したら「バケットを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

S3バケットが作成されたことを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

CodeBuild の設定

CodeBuild のダッシュボードに移動します。

 

 

 

「ビルドプロジェクトを作成する」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「ビルドプロジェクトを作成する」画面でプロジェクト名を設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

以下のように設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

以下のように設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

ロール名を設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

アーティファクトの設定をします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

Artifact(アーティファクト)とは、単純に日本語に訳すと「人工物」とか「工芸品」という意味になりますが、ここでのアーティファクトは CodeBuild で処理された成果物のことをアーティファクトと呼んでいるようです。

 

 

 

設定が完了したら「ビルドプロジェクトを作成する」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

プロジェクトが作成されることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

サービスロールの設定をする

先ほどプロジェクトを作成した際に、サービスロール(上の例では codebuild-devops-test-cicd02-service-role)を作成しました。

このサービスロールの設定をします。

 

IAM のダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

左側ペインより「ロール」を選択して先ほど設定したサービスロールを選択します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「アクセス権限」タブをクリックして「ポリシーをアタッチします」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

下図のように「AWSCodeDeployDeloyerAccess」にチェックを入れて「ポリシーのアタッチ」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

下図のように2つのポリシーがアタッチされていることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

buildspec.yml ファイルを記述する

次に buildspec.yml ファイルを作成して記述します。

 

Cloud9 に移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

リポジトリを選択して右クリックして「New Folder」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「src」フォルダを作成します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

index.htmlファイルをドラッグ&ドロップして src フォルダ配下に移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

再度リポジトリを選択して「New File」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「buildspec.yml」ファイルを作成します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「buildspec.yml」ファイルを選択します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

以下のサイトを参考に記述します。

 

CodeBuild のビルド仕様に関するリファレンス

https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-spec-ref.html

 

 

ページの中盤に以下のように buildspec.yml ファイルの記述方法の例があるのでこれを利用します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

■buildspec.yml の構成

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

一旦、例の設定を全部コピペします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

CodeDeploy に対して push をしていくので以下のページを参考にして設定をします。

 

Amazon S3 にCodeDeploy のリビジョンをプッシュする(EC2/オンプレミスのデプロイのみ)

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/application-revisions-push.html

 

 

下図のコマンドを後程実行することになります。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

上図の aws deploy push コマンドの説明をもとに Cloud9 の buildspec.yml に記述します。

version: 0.2 
phases: 
  build: 
    commands: 
      - aws deploy push --application-name xxxx --s3-location s3://devops-test-cicd02/artifacts.zip --source src ← aws deploy push コマンドを記述します。
artifacts: 
  files: 
    - '**/*' 

base-directory: src ← 追加します。

 

 

以下のようになります。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

aws deploy push コマンドの説明です。

 

■artifacts の設定

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

buildspec.yml ファイルを編集したら保存します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

以上で、ここまで構築しました。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

EC2インスタンスをデプロイ先とした CI/CD 環境を構築する【CodeDeploy編】

■今回構築する構成図

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

CodeDeploy 用の IAM ロールを作成する

最初に CodeDeploy 用の IAM ロールを作成します。

 

IAM ダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

左側ペインより「ロール」をクリックして「ロールを作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「AWS」サービスを選択して「CodeDeploy」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

ユースケースの選択で「CodeDeploy」をクリックして「次のステップ:アクセス権限」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

自動的にポリシーが選択されているのでそのまま「次のステップ:タグ」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

 

 

 

 

タグの追加画面では特に何も設定せずに「次のステップ:確認」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

ロールの作成画面で、ロール名を設定して「ロールの作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

ロールが作成されたことを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

CodeDeploy のアプリケーションの設定をする

次に CodeDeploy のアプリケーションの設定をします。

 

CodeDeploy のダッシュボードに移動します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

左側ペインより「アプリケーション」をクリックして「アプリケーションの作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

「アプリケーションの設定」画面で以下のように設定して「アプリケーションの作成」ボタンをクリックします。

 

 

 

 

 

 

 

アプリケーションが作成されたことを確認します。

今回は例として「DevOps-test-app01」の名前で作成しました。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

「DevOps-test-app01」を先ほど設定した「buildspec.yml」ファイルの「aws deploy push」コマンドの「xxxx」に設定します。

 

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

■buildspec.yml 

version: 0.2 
phases: 
  build: 
    commands: 
      - aws deploy push --application-name DevOps-test-app01 --s3-location s3://devops-test-cicd02/artifacts.zip --source src 
artifacts: 
  files: 
    - '**/*' 
base-directory: src

 

 

 

 

 

編集したらファイルを保存します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

CodeDeploy のデプロイグループの作成

次に CodeDeploy のデプロイグループを作成します。

 

CodeDeploy のアプリケーションの画面に移動します。

 

 

 

「デプロイグループの作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「デプロイグループの作成」画面で以下のように設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

設定が完了したら「デプロイグループの作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

デプロイグループが作成されることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

Cloud9 上で appspec.yml ファイルの作成

次に Cloud9 上で appspec.yml ファイルを作成します。

appspec.yml ではビルドした結果、何をどこに配布するのかの設定を記載します。

 

Cloud9 に移動します。

 

 

「src」フォルダを選択して右クリックして「New File」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「appspec.yml」ファイルを作成します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

以下のページを参考に appspec.yml ファイルを設定します。

 

CodeDeploy AppSpec ファイルのリファレンス

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file.html

 

 

EC2/オンプレミスコンピューティングプラットフォームの AppSpec ファイルをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

以下を参考にして appspec.yml ファイルを設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

上の5行だけコピーして appspec.yml ファイルに貼り付けます。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

最終的には以下のように編集します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

version: 0.0 
os: linux 
files: 
  - source: index.html ← index.html ファイルを /var/www/html ディレクトリに配置します。
    destination: /var/www/html/

 

 

 

 

ソースファイルを git commit、git push する

次に Cloud9 で作成したソースファイルを git commit、git push します。

 

xxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git add -A 
xxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git commit -m "fix test02 20210825" 
[master 529a7fa] fix test02 20210825 
 3 files changed, 9 insertions(+) 
 create mode 100644 buildspec.yml 
 create mode 100644 src/appspec.yml 
 rename index.html => src/index.html (100%) 
xxxx@gmail.com:~/environment/devops-test-repo01 (master) $ git push origin master 
Enumerating objects: 6, done. 
Counting objects: 100% (6/6), done. 
Compressing objects: 100% (4/4), done. 
Writing objects: 100% (5/5), 518 bytes | 518.00 KiB/s, done. 
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0 
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/devops-test-repo01 
   d3206f6..529a7fa  master -> master 
xxxx@gmail.com:~/environment/devops-test-repo01 (master) $ 

 

 

 

 

 

 

 

ビルドを実行する

ソースコードが更新されたのでビルドを実行します。

 

CodeBuild のダッシュボードに移動します。

 

左側ペインより「ビルドプロジェクト」をクリックして今作作成したビルドプロジェクトを選択します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「ビルドを開始」をクリックして「今すぐ始める」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

ビルドが成功することを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

ビルドが成功したら成果物をデプロイする

CodeBuild でビルドが成功したら次はビルドした成果物を CodeDeploy でデプロイします。

 

左側ペインより「アプリケーション」をクリックして、先ほど作成した対象のアプリケーションを選択して「アプリケーションをデプロイする」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「デプロイ設定」画面で以下のように設定します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「デプロイの作成」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

デプロイが成功することを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

動作確認

先ほど EC2 インスタンスのパブリックIPでアクセスをしたところ、Appache のテストページが表示されましたが、CodeDeploy 後に index.html に切り替わっていることを確認します。

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

デプロイエラーが出た場合

以下のデプロイエラーが出力された場合の対処方法です。

The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.

 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

エラーメッセージを翻訳してもあまり有用な情報はありません。

「展開に失敗した個々のインスタンスが多すぎる、展開に使用できる正常なインスタンスが少なすぎる、または展開グループ内の一部のインスタンスで問題が発生しているため、全体的な展開が失敗しました。」

 

 

CodeDeployのログ(/var/log/aws/codedeploy-agent/codedeploy-agent.log)を確認します。

2021-08-25 09:19:02 INFO  [codedeploy-agent(3012)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.3.2-1902_rpm. 
2021-08-25 09:19:03 INFO  [codedeploy-agent(3012)]: [Aws::CodeDeployCommand::Client 200 0.065689 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"The deployment failed because the application specification file was empty. Make sure your AppSpec file defines at minimum the 'version' and 'os' properties.\",\"log\":\"\"}"},host_command_identifier:"eyJiYXRjaElkIjoiOWE0YzgzOTI3YzUzNzVhYmU2NDdiODM2MjQyZmI3NTYvcHVibGljMDA1IiwiZGVwbG95bWVudElkIjoiQ29kZURlcGxveS9hcC1ub3J0aGVhc3QtMS9wcm9kL29ycGhldXM6cHVibGljMDA1LzI5NTMzMjU4NjU2MzpkLU9ONFY4N01FQyIsImhvc3RJZCI6ImFybjphd3M6ZWMyOmFwLW5vcnRoZWFzdC0xOjI5NTMzMjU4NjU2MzppbnN0YW5jZS9pLTAzODhlZjkyYTdiMDcyOGQ5IiwiY29tbWFuZElkIjoiQXBvbGxvRGVwbG95Q29udHJvbFNlcnZpY2V8YXJuOmF3czplYzI6YXAtbm9ydGhlYXN0LTE6Mjk1MzMyNTg2NTYzOmluc3RhbmNlL2ktMDM4OGVmOTJhN2IwNzI4ZDl8M3wwIiwiY29tbWFuZE5hbWUiOiJCZWZvcmVJbnN0YWxsIiwiY29tbWFuZEluZGV4IjozLCJhdHRlbXB0SW5kZXgiOjF9") 
 
2021-08-25 09:19:03 ERROR [codedeploy-agent(3012)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during perform: InstanceAgent::Plugins::CodeDeployPlugin::ApplicationSpecification::AppSpecValidationException - The deployment failed because the application specification file was empty. Make sure your AppSpec file defines at minimum the 'version' and 'os' properties. - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/application_specification/application_specification.rb:17:in `initialize' 
/opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/application_specification/application_specification.rb:28:in `new'

 

 

「The deployment failed because the application specification file was empty.」が気になります。

本当に appspec.yml ファイルが empty(空っぽ)なのか確認してみました。

 

確かにサイズを確認すると 0B、つまり empty(空)の状態です。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

原因を調査した結果、buildspec.yml と S3 インスタンスの設定等の整合性が取れていませんでした。

 

 

ここまでの構成図

■ここまでの構成図

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

EC2インスタンスをデプロイ先とした CI/CD 環境を構築する【CodePipeline編】

今回は以下の構成図の構成を構築し CodePipeline でパイプライン化(一連の処理)をできるようにします。

 

■構成図

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

CodePipeline の設定をする

最初に CodePipeline の設定をします。

 

CodePipeline のダッシュボードに移動します。

 

左側ペインより「パイプライン」を選択します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「パイプラインを作成する」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

「パイプラインの設定」画面でパイプライン名を設定して「次に」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

「ソース」設定画面で以下のように設定して「次に」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

 

「構築する ‐ オプショナル」設定画面で以下のように設定して「次に」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

 

「デプロイ ‐ オプショナル」設定画面で以下のように設定して「次に」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

最後に「パイプラインを作成する」ボタンをクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

 

 

 

以下のようにパイプラインが作成されることを確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

CodePipeline が作成されると自動的に一連の処理が実行されます。

以下のように「Source」→「Build」→「Deploy」と成功することを確認します。 

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

動作確認

再度ソースコードを変更して自動的にデプロイされることを確認します。

 

■確認前

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

ソースコードを修正します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

git コマンドでコミットしてプッシュします。

xxxx@gmail.com:~/environment/devops-test04-repo (master) $ git add -A 
xxxx@gmail.com:~/environment/devops-test04-repo (master) $ git commit -m "fix2021082706" 
[master 9247a5c] fix2021082706 
 1 file changed, 1 insertion(+), 1 deletion(-) 
xxxx@gmail.com:~/environment/devops-test04-repo (master) $ git push origin master 
Enumerating objects: 7, done. 
Counting objects: 100% (7/7), done. 
Compressing objects: 100% (4/4), done. 
Writing objects: 100% (4/4), 411 bytes | 411.00 KiB/s, done. 
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/devops-test04-repo 
   663c363..9247a5c  master -> master 
xxxx@gmail.com:~/environment/devops-test04-repo (master) $ 

 

 

 

CodePipeline を確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

ブラウザでコースコードが変わっていることが反映されているか確認します。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

AWS CodePipeline でエラーが出力した場合

CodePipeline を実行して以下のエラーが出力した場合の対処方法です。

 

「詳細」をクリックします。

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

 

 

「アクセス権限がありません Unable to access the artifact with Amazon S3 object key 'devops-test02-pipeli/BuildArtif/U0MzGRV' located in the Amazon S3 artifact bucket 'codepipeline-ap-northeast-1-940864005511'. The provided role does not have sufficient permissions.

【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)

 

 

再度 Artifact の S3 バケットの設定を見直します。

 

 

 

 

 

実際にハンズオンをやってみた感想

一度一通り設定して成功してみると、「ここでこれをやっているのか」とか「ここでこんな処理をやっているのか」と理解できますが、最後までやり切るまで結構時間がかかりました。

何度かエラーが出力してはリソースをすべて削除してまっさらな環境にしてからハンズオンを最初からやり直すということを繰り返しました。

引っかかるポイントとしては「CodeBuid」「CodeDeploy」の部分でした。

CodeBuild に関しては「ソースコードをコンパイルし、テストを実行し、デプロイ可能なソフトウェアパッケージを作成できる完全マネージド型のビルドサービス」ということですが、今回のハンズオンでは index.html ファイルをアップロードするだけだったのであまり CodeBuild を利用している実感はありませんでした。

 

エラーやトラブルに関しては、環境を構築している際になぜか東京リージョンから他にリージョン(バージニア北部とか)に代わっていることで存在しないなどのエラーが出力されました。最初に東京リージョンを選択して作業していましたが何がきっかけで他のバージョンに変わったのかは不明です。

 

 

 

 

参考サイト

以下の AWS(Amazon Web Service)ブログを参考にさせていただきました。

 

実際に手を動かして学ぶ!AWS Hands-on for Beginners のご紹介

https://aws.amazon.com/jp/blogs/news/aws-hands-on-for-beginners-01/

 

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-cicd-2020-reg-event-CP_031.html

 

 

上記のサイトから閲覧すると枠が小さすぎてコマンドが見えないことがあるので、以下に大きな枠(1200×700)で動画を貼り付けています。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Secured By miniOrange