本ブログリレーの立案者こと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 は更新済みのリビジョンがインストールされているかどうかをチェックします。
近況は、自社のAWSの導入、運用支援に関しての提案~設計をメインに活動しています。過去はオンプレ環境のホスティング事業メインで活動しておりました。どうぞよろしくお願いいたします。