【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

公開日時:2021年09月25日 / 最終更新日時:2021年10月09日

AWS CodeDeploy と Auto Scaling + ALB(Application Load Balancer)を組み合わせる環境の構築手順について解説します。

いろいろ嵌るポイントがありましたので最後にまとめています。

 

 

CodeDeploy の解説です。

AWS CodeDeploy

 

 

【AWS】DevOps(CI/CD)の導入手順(Angular、Git、CodePipeline、CodeCommit、CodeBuild、CodeDeploy、Auto Scaling、ALB の組み合わせ)

 

 

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

 

 

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

 

 

CodeDeploy でデプロイエラーになった場合は以下の記事を参考にしてください。

【AWS】CodePipeline での CodeDeploy でのデプロイでエラーになった場合のトラブル対応手順

 

 

 

構成図

今回構築する構成図です。

パブリックサブネットとプライベートサブネットをそれぞれ2つずつ作ります。

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

設計

■サブネット

 

■アベイラビリティゾーン

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

ALB の設定でパブリックサブネットとプライベートサブネットが同じアベイラビリティゾーンに設定されている必要があります。

もしパブリックサブネットのアベイラビリティゾーンが a,d でプライベートサブネットのアベイラビリティゾーンが c,d の環境では、d のラインだけしか同一ではないので ALB の設定ができなくなります。

 

 

S3 バケットの作成と設定

最初にデプロイするソースコード(アーティファクト)を保存する S3 バケットを作成します。

このバケットに index.htmlファイルとappspec.ymlファイルを保存します。

 

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

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

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

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

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

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

今回は外部からアクセスする要件がないため、「パブリックアクセスをすべてブロック」にチェックが入っていることを確認します。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

「バケットのバージョニング」の設定で「有効にする」にチェックを入れます。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

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

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

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

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

index.htmlファイルとappspec.ymlファイルを作成して index.zip として圧縮する

S3 バケットを作成したら index.html ファイルと appspec.yml ファイルを作成して index.zip として圧縮します。

 

■index.html

<html>
  <head>

     <meta http-equiv="content-type" charset="UTF-8">
   <title>Sample Website - AWS CodeDeploy & Auto Scaling</title>
  </head>
  <body style="text-align:center;font-family:Verdana;margin:1%;">
   <h1 style="color:navy">ようこそ!サンプルサイトへ</h1>
   <hr>
   <p>This is a simple, static website that we deploy by AWS CodeDeploy.</p>
   <h2>Website Version: 4.0</h2>
  </body>
</html>

 

 

■appspec.yml

version: 0.0

os: linux

files:

  - source: index.html

    destination: /var/www/html/

 

appspec.yml の設定の意味ですが

 

 

 

上記ファイルを圧縮して index.zip ファイルにして S3 バケットにアップロードします。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

EC2インスタンスの構築

次に EC2 インスタンスを構築します。

構築する EC2 インスタンスに CedeDeploy を利用して「index.html」をデプロイします。

 

以下の構成で EC2 インスタンスを構築します。

 

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

 

EC2インスタンスの設定

以下のコマンドを実行して EC2 インスタンスを設定します。

 

 

■yum updateで最新化

[root@test01 ~]# yum update

 

 

■Rubyのインストール

[root@test01 ~]# yum install ruby

 

 

■wgetのインストール

※すでに入っていることもあります。

[root@test01 ~]# yum install wget

 

 

■CodeDeploy Agentのパッケージをダウンロード

[root@test01 ~]# wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install

 

 

■installファイルに実行権限を付与

[root@test01 ~]# chmod +x ./install

 

 

■インストール実行

[root@test01 ~]# ./install auto 
I, [2021-09-23T14:34:16.044362 #6769]  INFO -- : Starting Ruby version check. 
I, [2021-09-23T14:34:16.044587 #6769]  INFO -- : Starting update check. 
I, [2021-09-23T14:34:16.044699 #6769]  INFO -- : Attempting to automatically detect supported package manager type for system... 
I, [2021-09-23T14:34:16.054428 #6769]  INFO -- : Checking AWS_REGION environment variable for region information... 
I, [2021-09-23T14:34:16.054497 #6769]  INFO -- : Checking EC2 metadata service for region information... 
I, [2021-09-23T14:34:16.068369 #6769]  INFO -- : Checking AWS_DOMAIN environment variable for domain information... 
I, [2021-09-23T14:34:16.068435 #6769]  INFO -- : Checking EC2 metadata service for domain information... 
I, [2021-09-23T14:34:16.075016 #6769]  INFO -- : Downloading version file from bucket aws-codedeploy-ap-northeast-1 and key latest/LATEST_VERSION... 
I, [2021-09-23T14:34:16.075455 #6769]  INFO -- : Endpoint: https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/LATEST_VERSION 
I, [2021-09-23T14:34:16.145231 #6769]  INFO -- : Running version matches target version, skipping install 
I, [2021-09-23T14:34:16.145364 #6769]  INFO -- : Update check complete. 
I, [2021-09-23T14:34:16.145393 #6769]  INFO -- : Stopping updater. 
[root@test01 ~]# service codedeploy-agent status 

 

 

■CodeDeploy Agentが起動されていることを確認

[root@test01 ~]# service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 2535
[root@test01 ~]#

 

 

■Nginxのインストール

[root@test01 ~]# amazon-linux-extras install nginx1

 

 

■Nginxの起動確認

[root@test01 ~]# systemctl status nginx 
● nginx.service - The nginx HTTP and reverse proxy server 
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) 
   Active: inactive (dead) 
[root@test01 ~]# systemctl start nginx 
[root@test01 ~]# systemctl status nginx 
● nginx.service - The nginx HTTP and reverse proxy server 
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) 
   Active: active (running) since Fri 2021-09-24 13:19:38 UTC; 3s ago 
  Process: 8003 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) 
  Process: 7999 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) 
  Process: 7998 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) 
 Main PID: 8005 (nginx) 
   CGroup: /system.slice/nginx.service 
           tq8005 nginx: master process /usr/sbin/nginx 
           mq8006 nginx: worker process 
 
Sep 24 13:19:38 test01.ap-northeast-1.compute.internal systemd[1]: Starting The nginx HTTP and rever.... 
Sep 24 13:19:38 test01.ap-northeast-1.compute.internal nginx[7999]: nginx: the configuration file /e...k 
Sep 24 13:19:38 test01.ap-northeast-1.compute.internal nginx[7999]: nginx: configuration file /etc/n...l 
Sep 24 13:19:38 test01.ap-northeast-1.compute.internal systemd[1]: Started The nginx HTTP and revers.... 
Hint: Some lines were ellipsized, use -l to show in full. 
[root@test01 ~]# 

 

 

 

IAMロールの作成

次に EC2インスタンスに割り当てる IAMロールを作成します。

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

IAMロールのアタッチ

作成した IAM ロールを EC2 インスタンスにアタッチします。

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

 

 

AMI の取得

EC2インスタンスを設定したら AMI を取得します。

 

EC2インスタンスを停止します。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

起動テンプレートの作成

AMIを作成したら起動テンプレートを作成します。

※元の AMI を登録解除すると起動テンプレートも使えなくなるので注意。

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

 

Auto Scalingグループを作成する

次に Auto Scaling グループを作成します。

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

動作確認

Auto Scaling グループを作成後に EC2 インスタンスが自動的に起動していることを確認します。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

CodeDeployの実行

CodeDeployを実行します。

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

アプリケーションの作成

アプリケーションを作成します。

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

デプロイグループの作成

デプロイグループを作成します。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

デプロイの作成

デプロイの作成をします。

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

 

デプロイが始まります。

しばらくすると以下のようにステータスが表示されます。

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

動作確認

ブラウザを起動してサイトにアクセスをします。

 

【AWS】CodeDeployとAuto Scaling+ALBを組み合わせる環境の構築手順

 

 

 

注意点・確認事項

 

うまくいかなかったこと

以下、うまくいかなかったことで現在調査していることです。

 

ターゲットグループに追加されない

Auto Scalingグループの設定をしましたが、最初のEC2インスタンスはターゲットグループに追加されましたが、動作確認でその EC2インスタンスを手動で終了(削除)したところ、次の EC2インスタンスが追加されませんでした。現在、調査しています。

 

最初の Health Check をどうするか悩んだ

最初の Health Check をどうするか悩みました。

Health Check のために /var/www/html/index.html を配置したところ、Health Check は成功しますが、CodeDeploy でindex.zip をデプロイする際にすでに index.html ファイルがあるということでエラーになりました。

その為、ヘルスチェック用に「test.html」ファイルを配置しましたが果たしてこれでいいのか調べています。

 

EC2 インスタンスに割り当てた IAM ロールが引き継がれない 

CodeDeploy 用に EC2 インスタンスに IAM ロールを割り当て、AMI を作成し、AMI から起動テンプレートを作成し、Auto Scaling グループに割り当てましたが、Auto Scaling により EC2インスタンスが起動された後に IAM ロールの設定を確認すると IAM ロールは割り当てされていませんでした。

 

ちなみに適切な IAM ロールが割り当てられていない、もしくは権限が足りないと以下のようなエラーメッセージが出力されます。

 

■/var/log/aws/codedeploy-agent/codedeploy-agent.log

2021-09-24 14:28:26 ERROR [codedeploy-agent(2724)]: InstanceAgent::Plugins::CodeDeploysing credentials - please check if this instance was started with an IAM instance prof 
2021-09-24 14:29:56 INFO  [codedeploy-agent(2724)]: Version file found in /opt/codedepent version OFFICIAL_1.3.2-1902_rpm. 
2021-09-24 14:29:56 ERROR [codedeploy-agent(2724)]: InstanceAgent::Plugins::CodeDeploysing credentials - please check if this instance was started with an IAM instance prof 
2021-09-24 14:31:26 INFO  [codedeploy-agent(2724)]: Version file found in /opt/codedepent version OFFICIAL_1.3.2-1902_rpm. 
2021-09-24 14:31:26 ERROR [codedeploy-agent(2724)]: InstanceAgent::Plugins::CodeDeploysing credentials - please check if this instance was started with an IAM instance prof 
2021-09-24 14:32:56 INFO  [codedeploy-agent(2724)]: Version file found in /opt/codedepent version OFFICIAL_1.3.2-1902_rpm. 
2021-09-24 14:32:56 ERROR [codedeploy-agent(2724)]: InstanceAgent::Plugins::CodeDeploysing credentials - please check if this instance was started with an IAM instance prof 
2021-09-24 14:34:26 INFO  [codedeploy-agent(2724)]: Version file found in /opt/codedepent version OFFICIAL_1.3.2-1902_rpm. 

 

このエラーメッセージは適切なIAMロールを割り当ててOSを再起動すれば消えます。

 

 

 

 

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

コメントを残す

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

AlphaOmega Captcha Medica  –  What Do You See?
     
 

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

Secured By miniOrange