ブログリレー

【Auto Scaling】AWSサービスしりとりリレー 第14日目

本ブログリレーの立案者ことNオガワです。

このリレーもいよいよ残すところあと明日の1日となりました。締めは私の上司にお任せしていますので、最終日の記事も温かい目で見ていただけると幸いです。しっかりと、最終日にバトンを回したいと思います。

前回記事のGrafanaからバトンを受け、Aから始まるAutoScalingがお題となります。

今回は、CodeDeployを利用したAutoScaling環境へのデプロイメントを試してみましたので記事します。

前提

  • amazon linux2の環境です。
  • 東京リージョンを利用します。
  • VPC、サブネット、セキュリティグループは設定済み。
  • IAMロールを作成しますが、aws管理ポリシーを利用します。必要最低限という観点では、精査していません。
  • AutoScaling環境へのデプロイメントにフォーカスしていますので、EC2上のログファイルのステートレス化等、その他の設定は考慮しません。

構成

S3へアップロードしたデプロイテスト用のファイルをCodeDeployでAutoScailngグループ内の各インスタンスにデプロイを行います。

事前準備

AutoScaling起動テンプレート用のAMIの準備

以下のCodeDeployエージェントのインストールおよびデプロイ先のディレクトリの作成を行ったAMIを準備します。

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 mkdir -p /var/www/autoscaling-demo

S3バケットの作成

ソースをアップロードするS3バケットをバージョニングを有効にし作成します。今回は、以下のバケットを作成しています。

  • autoscaling-blog-demo

デプロイテスト用のzipをS3バケットへアップロード

以下の構成でzipファイル(app.zip)を作成し、S3バケットのルートへアップロードしておきます。
「appspec.yml」はCodeDeployが参照するデプロイのルールを記述した設定ファイルです。
最終的に、デプロイ先のディレクトリに対して、「deploytest.txt」がデプロイされることを確認します。

app
├── appspec.yml
└── deploytest.txt

今回のそれぞれのファイルの内容は以下で作成しています。

  • appspec.yml

    version: 0.0
    os: linux
    files:
    - source: deploytest.txt
    destination: /var/www/autoscaling-demo
  • deploytest.txt

    test

IAMロールの準備

AutoScalingで起動されるEC2インスタンス用

S3バケット上の読み取り権限が必要なためAWS管理ポリシー「AmazonS3ReadOnlyAccess」をアタッチしたIAMロールを作成します。

CodeDeploy用

CodeDeployがEC2やAutoScaling等の情報を参照する用にAWS管理ポリシー「AWSCodeDeployRole」をアタッチしたIAMロールを作成します。

設定

AutoScalingの設定

起動テンプレートの作成

[テンプレートの起動]→[起動テンプレートを作成]

事前準備で作成したAMIと、EC2インスタンス用のIAMプロファイルを選択し、起動テンプレートを作成します。

AutoScalingグループの作成

[EC2]→[Auto Scalingグループ]→[Auto Scalingグループを作成する]

作成した起動テンプレートを選択し、AutoScalingグループを作成します。
他のステップは割愛しますが、今回はロードバランサは利用せず、グループサイズはデフォルトでインスタンスが1台起動するよう設定しています。

CodeDeployの設定

アプリケーションの作成

[CodeDeploy]→[アプリケーション]→[アプリケーションの作成]

アプリケーション名、プラットフォームを指定し、アプリケーションを作成

デプロイグループの作成

作成したアプリケーションから[デプロイメントグループ]→[デプロイメントグループの作成]

デプロイグループ名、サービスロール、デプロイタイプを入力、選択します。
サービスロールには事前準備で作成したCodeDeploy用のIAMロールを指定します。

作成したAutoScalingグループを選択し、ロードバランシングは無効としデプロイグループを作成します。

デプロイの作成

[作成したデプロイグループ]→[デプロイの作成]

リビジョンの場所に事前にアップロードしたzip(app.zip)を指定し、デプロイを作成します。

作成と同時にデプロイが実行されます。

確認

初回のデプロイ結果

サーバ上にログインし、「deploytest.txt」がデプロイされていることを確認

  • ファイルが存在すること

    [ec2-user@ip-10-2-201-197 ~]$ ls -la /var/www/autoscaling-demo/
    total 4
    drwxr-xr-x 2 root root 28 Jul 13 12:14 .
    drwxr-xr-x 3 root root 30 Jul 12 09:37 ..
    -rw-r--r-- 1 root root  4 Jul 13  2021 deploytest.txt
  • ファイルの中身

    [ec2-user@ip-10-2-201-197 ~]$ cat /var/www/autoscaling-demo/deploytest.txt
    test

AutoScalingで新規追加されたインスタンスへのデプロイ確認

AutoScalingグループでグループサイズを変更し、新規で追加されたインスタンスへのデプロイを確認します。

  • デプロイのログ
    「イベントの開始」を確認するとわかるように「ユーザアクション」ではなく「Auto Scalingグループアクション」により自動的にデプロイされます。

  • ファイルが存在すること(新規に追加したインスタンス分)

    [ec2-user@ip-10-2-200-170 ~]$ ls -la /var/www/autoscaling-demo/
    total 4
    drwxr-xr-x 2 root root 28 Jul 14 00:32 .
    drwxr-xr-x 3 root root 30 Jul 12 09:37 ..
    -rw-r--r-- 1 root root  6 Jul 14  2021 deploytest.txt
  • ファイルの中身(新規に追加したインスタンス分)

    [ec2-user@ip-10-2-200-170 ~]$ cat /var/www/autoscaling-demo/deploytest.txt
    test

さいごに

お読みいただきありがとうございました。また、有志でリレーに参加してくださった皆さん本当にありがとうございます。

余談ですが、先般「Auto Scalingグループ」+「CodeDeploy」のデプロイにおいてアップデートが行われ、より使いやすくなったようです。

AWS公式より引用。

ソフトウェアリビジョンが古くなった EC2 インスタンスを AWS CodeDeploy で自動的に検出および更新することが可能になり、Auto Scaling グループを含むAmazon EC2 デプロイのサポートが向上しました。デプロイ後、CodeDeploy は古くなったインスタンスをチェックし、新しいデプロイを作成して、意図したソフトウェアリビジョンをフリートに適用します。さらに、新しいインスタンスが Auto Scaling グループに追加されると、CodeDeploy は更新済みのリビジョンがインストールされているかどうかをチェックします。

返信を残す

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

CAPTCHA