Terraform Autoscalingグループの迅速な展開方法の学習

あなたのAWSインスタンスの負荷と受信トラフィックを監視するのにうんざりですか? Terraform Autoscaling Groups をデプロイしてすべてを自動化してみてはどうでしょうか? オートスケーリングにより、低い負荷時には一部のサーバーをスリープさせ、高い負荷時にはサーバーを追加することができ、企業の電力コストを節約できます。

このチュートリアルでは、Terraformを使用してAutoscaling Groupsを構築し、Terraformでデプロイする方法を学びます。

続けて、インスタンスのゼロダウンタイムを実現しましょう!

前提条件

この投稿はステップバイステップのチュートリアルになります。一緒に進む場合は、以下を確認してください:

  • Amazon Web Service(AWS)アカウント
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, consider using Visual Studio (VS) Code as it understands the HCL Terraform language well.
  • Terraform – このチュートリアルではTerraform v1.1.5をUbuntu 20.04 LTSで実行していますが、Terraformが動作する任意のオペレーティングシステムでも構いません。

AWS Autoscaling GroupのTerraform構成を構築する

Terraformコマンドを実行してインフラストラクチャを構築・デプロイする前に、Terraform構成ファイルを作成する必要があります。AWSアカウント内でAWS Auto Scaling グループを作成するためのTerraform構成を構築します。

1. 好きなSSHクライアントを使用してマシンにログインします。

2. 次に、~/terraform-autoscaling-demoという名前のフォルダを作成し、そのフォルダを作業ディレクトリに変更します(cd)。このフォルダには、このチュートリアルで作業するすべての構成ファイルが含まれます。

mkdir ~/terraform-autoscaling-demo
cd ~/terraform-autoscaling-demo

3. 好きなコードエディタを開き、次の構成をコピー/貼り付けて、ファイルをmain.tfとして保存します。このmain.tfファイルはAuto ScalingグループのTerraform構成です。

以下のコードはAuto Scaling Launch Configurationweb_config)を作成し、Auto Scalingグループ(autoscalegroup)をプロビジョニングします。Auto Scalingグループにはそのコンポーネントも含まれます(aws_autoscaling_scheduleおよびaws_autoscaling_policy)。

#AWS EC2インスタンスの詳細を含む自動スケーリング起動構成を作成する
resource "aws_launch_configuration" "aws_autoscale_conf" {
#自動スケーリング起動構成の名前を定義する
  name          = "web_config"
#AWS EC2インスタンスのイメージIDを定義する
  image_id      = "ami-04505e74c0741db8d"
#AWS EC2インスタンスのインスタンスタイプを定義する
  instance_type = "t2.micro"
#AWS EC2インスタンスにアクセスするために使用されるキーを定義する
  key_name = "automateinfra"
}

#us-east-1a可用性ゾーン内に自動スケーリンググループを作成する
resource "aws_autoscaling_group" "mygroup" {
#AWS EC2インスタンスが起動される可用性ゾーンを定義する
  availability_zones        = ["us-east-1a"]
#自動スケーリンググループの名前を指定する
  name                      = "autoscalegroup"
#スケーリング時のAWS EC2インスタンスの最大数を定義する
  max_size                  = 2
#スケーリング時のAWS EC2インスタンスの最小数を定義する
  min_size                  = 1
#グレース期間は、AWS EC2インスタンスの健康を確認する前にサービスになる時間です。
  health_check_grace_period = 30
#自動スケーリングは、AWS CLoudwatch Alarmで定義されたAWS EC2インスタンスの健康に基づいて発生します
  health_check_type         = "EC2"
#force_deleteは、プール内のすべてのインスタンスの終了を待たずに自動スケーリンググループを削除します
  force_delete              = true
#最も古いインスタンスが最初に置換される終了ポリシーを定義する
  termination_policies      = ["OldestInstance"]
#スケーリンググループは、AWS EC2インスタンスの構成に依存しています
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
#自動スケーリンググループの自動スケーリングスケジュールを作成する

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
#自動スケーリンググループの最小サイズ
  min_size               = 1
#自動スケーリンググループの最大サイズ
  max_size               = 2
#Desired_capacityは、自動スケーリンググループ内で実行されているEC2インスタンスの数です
  desired_capacity       = 1
#トラフィックがこの時間にピークになると考える場合、自動スケーリングの開始時間を定義します。
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

#自動スケーリンググループの自動スケーリングポリシーを作成する
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
#スケーリングするインスタンス数を定義します。
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
#スケーリングが完了した後、次のスケーリングが開始されるまでの時間(秒)を定義します。
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
#CPU使用率に基づいてAWS EC2インスタンスを自動スケールするAWS CLoudwatch Alarmを作成します。
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
#AWS Cloudwatchアラームの名前を定義する
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
#スケーリングが発生するメトリック名に応じてメトリック名を定義します(CPUに基づく)
  metric_name = "CPUUtilization"
#アラームの関連するメトリックの名前空間
  namespace = "AWS/EC2"
#AWS Cloudwatchアラームがトリガーされた後、60秒待ってから自動スケールします
  period = "60"
  statistic = "Average"
#CPU使用率のしきい値は10%に設定されています
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. ~/terraform-autoscaling-demoに別のファイルを作成してください。provider.tfという名前のファイルを作成し、以下の内容を記述してください。このprovider.tfファイルは、AWS、Oracle、Azureなどのプロバイダを定義します。この設定ファイルにより、Terraformを適切なクラウドサービスに接続できます。

このチュートリアルでは、us-east-1リージョンにリソースを作成します。ただし、AWSがサポートするリージョンのリストを見つけることができます

provider "aws" {
   region = "us-east-1"
 }

5. 最後に、以下のtreeコマンドを実行して、プロジェクトフォルダ(~/terraform-autoscaling-demo)に必要なすべてのファイルが存在することを確認してください。

Verifying the Required Files for Building AWS Autoscaling Group in AWS Cloud

Terraform構成でAWS Autoscalingグループを作成する

これで、Terraform構成ファイルと変数ファイルを正しく設定したので、Terraformを初期化してAWS Autoscalingグループを作成する準備が整いました。

AWS Autoscalingグループをプロビジョニングするには、他のすべてのTerraform構成と同様に、Terraformは3つのコマンドをシーケンスで使用します(terraform initterraform plan、そしてterraform apply)。

1. 〜/terraform-autoscaling-demo ディレクトリで terraform init コマンドを実行します。このコマンドは、リソースを操作するために必要なプラグインとプロバイダを初期化します。

terraform init

すべてがうまくいくと、以下に示すように、Terraform が正常に初期化されたというメッセージが出力されます。

Initializing Terraform

2. 次に、terraform plan コマンドを実行して、構成ファイルの構文が正しいことを確認し、インフラストラクチャにプロビジョニングされるリソースの設計図を取得します。

terraform plan

成功した場合、以下に示すようなプランが表示されます。

Executing the Terraform Plan

3. 最後に、terraform apply コマンドを実行して、トレーニングホイールを外し、AWS AutoScaling グループを作成します。

このコマンドは、Terraform に各構成(*.tf)を読み込んで AWS に送信する状態をコンパイルするよう指示します。Terraform はそれから AWS Autoscaling グループおよびその他のコンポーネントを構築します。

AWS Auto Scaling に追加料金はかかりません。アプリケーションを実行するために必要な AWS リソースのみが必要です。

Applying the Terraform Configuration to Build Autoscaling Group

AWS Cloud で AWS Auto Scaling グループを検証する

これで、Terraform で AWS Auto Scaling グループと関連コンポーネントを作成することができました。しかし、それらが AWS クラウドに存在するかどうかをどのように確認しますか? AWS Management Console で手動で確認して、Auto Scaling グループを検証します。

1. 好きなウェブブラウザを開き、AWS Management Console にログインします。

2. コンソールのホームページで、検索ボックスをクリックし、「EC2」を検索して、EC2ダッシュボードにアクセスしてください。

EC2ダッシュボードで「AWS Auto Scaling グループ」メニューアイテムをクリックして、Auto Scaling グループを管理します。

以下はAuto Scalingの設定を使用してEC2ダッシュボードでAWS EC2インスタンスの希望する数が起動されます。

Verifying the AWS Autoscaling Group with Scaling Policy Containing AWS CloudWatch Alarm

3. 最後に、EC2ダッシュボードで「AWS Auto Scaling Launch Configuration」をクリックします。以下に示すように、Auto Scalingの起動構成(web_config)が表示されます。

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

ロードテストでEC2インスタンスをAuto Scaling

Auto Scalingグループ/ポリシーおよび関連コンポーネントが正しく設定されていることを確認したら、Auto Scalingの機能が正常に動作するかどうかをテストする時がきました。方法は?AutoScalingグループで最近起動したインスタンスに負荷を追加することで確認できます。

1. SSHクライアントを使用してAuto Scalingグループで起動したAWS EC2インスタンスを開いてください。

2. 次に、ターミナルを開き、以下のコマンドを実行してload stress toolstress-ng)をインストールしてください。stressツールを使用すると、Ubuntuマシンにストレスを定義および生成できます。

市場で利用可能な他の負荷テストツールも見つけることができます。

sudo apt install stress-ng
Installing the Load Stress tool on the AWS EC2 instance

3. 以下のstress-ngコマンドを実行して、インスタンスに負荷を生成してください。

以下のコマンドには、以下のフラグが含まれています:

  • --cpu – 負荷が生成されるコア数を示します。
  • -v – 冗長モードを有効にします。
  • --timeout – 負荷が生成される時間を指定します。
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. 以下のtopコマンドを実行して、Linuxプロセスを表示します。

top

以下では、負荷がインスタンスに生成された後にCPUが急上昇することがわかります。

Executing the top command to verify the CPU consumption

5. AWS CloudWatchサービスに移動してください。AWS Cloud上でアラームが生成され、CPUが(10%)を超えたことが通知されます。アラームは、自動スケーリンググループにインスタンスの数を1から2にスケールするよう指示します。

Viewing the Alarm Generated in the AWS CloudWatch Service

6. 最後に、EC2ダッシュボードのインスタンスに移動して、AWS EC2インスタンスを確認します。

1つのインスタンスが起動されたことがわかります。これにより、AWS Autoscalingグループとそのコンポーネントのセットアップが成功したことが確認できます。

Verifying the AWS EC2 instances in the EC2 dashboard

以下のように、AWS AutoScaleグループのアクティビティで自動スケーリングのアクティビティも確認できます。

Verifying the AWS AutoScale group activities

結論

このチュートリアルでは、Terraformを使用してAWS Autoscalingグループとそのコンポーネントをデプロイする方法について学びました。AWS Autoscalingグループを使用して自動スケーリングアプリケーションを構築すると、必要に応じてスケーリングできるため、素早くタスクを完了できます。

{
“error”: “Upstream error…”
}

Source:
https://adamtheautomator.com/terraform-autoscaling-group/