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

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を組み合わせる環境の構築手順

 

 

設計

■サブネット

  • パブリックサブネット   : 10.0.10.0/24、10.0.11.0/24
  • プライベートサブネット : 10.0.12.0/24、10.0.13.0/24

 

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

  • ap-northeast-1a : 10.0.10.0/24、10.0.12.0/24
  • ap-northeast-1c : 10.0.11.0/24、10.0.13.0/24

 

【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 の設定の意味ですが

  • source: index.html ← デプロイしたいソースを指定します。今回は index.zip ファイルをアップロードしますが、最終的には index.zip の中から index.html ファイルを抽出して展開するので index.html を指定します。
  • destination: /var/www/html/ ← index.html ファイルをデプロイする EC2 インスタンスのどこに配置するのかを指定します。最終的には /var/www/html/index.html になります。

 

 

 

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

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

 

 

 

 

 

 

EC2インスタンスの構築

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

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

 

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

  • AMI:Amazon Linux2
  • インスタンスタイプ:t2.micro
  • セキュリティグループ:80/TCPはソース0.0.0.0/0で許可、22/TCPはログインする環境のグローバルIPアドレスで絞ります。

 

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を組み合わせる環境の構築手順

 

 

 

注意点・確認事項

  • CodeDeployエージェントがインターネットにアクセスできるようにする必要があります。EC2インスタンスをパブリックサブネットに配置する場合は問題ないですが、プライベートサブネットに配置する場合は、NATゲートウェイを導入し、ルートテーブルを設定しインターネットに出れるようにする必要があります。
  • S3バケットのバージョニングを有効化する必要があります。

 

うまくいかなかったこと

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

 

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

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を再起動すれば消えます。

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

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