0Pricing
AWS Solutions Architect · レッスン

起動テンプレートと ASG の設定

適切な AMI、インスタンスタイプ、ユーザーデータを含む起動テンプレートを作成し、最小、最大、希望容量を設定した Auto Scaling Group にアタッチします。

「起動テンプレートと ASG の設定」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。

起動テンプレートとは

Launch Templateは、Auto Scalingグループ(およびEC2に直接)に対して、インスタンスの起動方法を指示するバージョン管理された設計図です。AMI ID、インスタンスタイプ、キーペア、セキュリティグループ、任意のユーザーデータを、再利用可能な1つのドキュメントにまとめます。以前のLaunch Configurationとは異なり、Launch Templateは複数のバージョンをサポートしており、ASGを置き換えずに更新できます。

CLIを使用した起動テンプレートの作成

AWS CLIではcreate-launch-templateを使用してLaunch Templateを作成できます。--launch-template-dataパラメータには、すべてのインスタンス設定を定義するJSONオブジェクトを指定します。バージョン管理により、実行中のインスタンスに影響を与えずにテンプレートを更新し、準備が整った時点でデプロイできます。

aws ec2 create-launch-template \
  --launch-template-name 'MyAppTemplate' \
  --version-description 'v1 initial' \
  --launch-template-data '{
    "ImageId": "ami-0abcdef1234567890",
    "InstanceType": "t3.medium",
    "KeyName": "my-key-pair",
    "SecurityGroupIds": ["sg-0123456789abcdef0"],
    "UserData": "IyEvYmluL2Jhc2gKZWNobyAnSGVsbG8n"
  }'

起動テンプレートのバージョンとデフォルト

すべてのLaunch Templateはバージョン1から始まります。新しいバージョンを作成するときは、変更したフィールドだけを上書きでき、その他の設定は元のバージョンから継承されます。ASGには、$Latestバージョン(常に最新)または$Defaultバージョン(明示的に指定したバージョン)を使用するように設定できます。$Defaultを使用すると段階的なロールアウトを制御でき、$Latestは開発環境で便利です。

# Create a new version based on version 1, changing only instance type
aws ec2 create-launch-template-version \
  --launch-template-name 'MyAppTemplate' \
  --source-version 1 \
  --launch-template-data '{"InstanceType": "t3.large"}'

Auto Scaling Groupの基本概念

Auto Scaling Group(ASG)は、定義した範囲内でEC2インスタンス群を維持します。範囲には最小容量(下限)、最大容量(上限)、希望容量(その時点での目標台数)が含まれます。インスタンスのヘルスチェックに失敗した場合やスケーリングポリシーが実行された場合、ASGはインスタンスを自動的に起動または終了し、最小容量から最大容量までの範囲で希望容量を維持します。

Launch Templateに関連付けたASGの作成

ASGを作成するときは、特定のAMIを直接指定するのではなく、Launch Templateを参照します。また、インスタンスを起動するVPCサブネットも指定します。複数のサブネット(各AZに1つ)に分散すると、組み込みのマルチAZ冗長性を確保できます。1つのAZに障害が発生した場合、ASGは残りのAZで代替インスタンスを自動的に起動します。

aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name 'MyAppASG' \
  --launch-template 'LaunchTemplateName=MyAppTemplate,Version=$Default' \
  --min-size 2 \
  --max-size 10 \
  --desired-capacity 4 \
  --vpc-zone-identifier 'subnet-aaa111,subnet-bbb222,subnet-ccc333'

ASGのヘルスチェック:EC2とELB

デフォルトでは、ASGはEC2ヘルスチェックを使用します。このチェックでインスタンスが異常と判定されるのは、停止または終了している場合、あるいはハイパーバイザーが障害を報告した場合だけです。ロードバランサーを関連付ける場合は、ELBヘルスチェックに切り替え、稼働中であってもHTTP 5xxエラーを返しているインスタンスをASGが置き換えられるようにします。これは試験でよく問われる内容です。アーキテクチャにロードバランサーがある場合は、必ずELBヘルスチェックを選択してください。

# Enable ELB health checks on an existing ASG
aws autoscaling update-auto-scaling-group \
  --auto-scaling-group-name 'MyAppASG' \
  --health-check-type ELB \
  --health-check-grace-period 300

容量設定:最小、最大、希望

適切な容量範囲を設定することは非常に重要です。最小容量によって、アプリケーションが常にトラフィックを処理できる状態を維持します(この値を下回ることはありません)。最大容量は、サービスの上限や予算を使い果たすような過剰なスケーリングを防ぎます。希望容量は初期目標であり、スケーリングポリシーによって動的に調整されます。min=max=desiredに設定すると、ASGは固定サイズのグループとして動作します。これは、Launch Templateのデプロイや容量を固定したい場合に便利です。

ALBターゲットグループのASGへの関連付け

Web層のアプリケーションでは、ASGをApplication Load Balancerのターゲットグループに関連付けます。ASGが起動した各新規インスタンスはターゲットグループに自動登録され、終了したインスタンスは自動的に登録解除されます。これにより、正常に稼働しているインスタンスにのみトラフィックが流れます。また、ASGがロードバランサーレベルの障害を認識できるよう、ヘルスチェックのタイプをELBに設定する必要があります。

aws autoscaling attach-load-balancer-target-groups \
  --auto-scaling-group-name 'MyAppASG' \
  --target-group-arns 'arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/MyTG/abc123'

Launch TemplateのUser Data

User dataは、インスタンスの初回起動時に一度実行されるシェルスクリプト(Base64エンコード)です。Launch Templateでは、パッケージのインストール、エージェント(CloudWatch、SSM)の設定、アプリケーションコードの取得に使用するのが適切です。インスタンスの更新時に問題が発生しないよう、User dataは冪等にしてください。つまり、複数回実行しても安全なスクリプトにします。複雑な構成では、大規模なスクリプトを埋め込むのではなく、AWS Systems Managerや構成管理ツールを呼び出してください。

#!/bin/bash
yum update -y
yum install -y amazon-cloudwatch-agent
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config -m ec2 -c ssm:/MyApp/CWConfig -s
# Start application
cd /opt/myapp && ./start.sh

迅速なスケールアウトのためのWarm Pool

Warm Poolは、ASGの外部に、すぐに使用できる状態の停止済み(または稼働中の)EC2インスタンス群を事前に初期化しておきます。ASGがスケールアウトする必要がある場合、コールド状態のインスタンスを起動する代わりにWarm Poolから取得するため、容量の追加にかかる時間を大幅に短縮できます。Warm Pool内のインスタンスには停止状態の料金(EBSのみで、CPU料金はなし)が発生するため、完全に稼働させた予備インスタンスを維持するよりも大幅に低コストです。

終了ポリシーとAZのバランス

ASGがスケールインするときは、どのインスタンスを終了するかを決める必要があります。デフォルトの終了ポリシーでは、まずインスタンス数が最も多いAZを選択して再分散し、次に最も古いLaunch Templateを選択し、その後、請求時間に最も近いインスタンスを選択します。この順序はカスタマイズできます。たとえば、OldestLaunchTemplateを選択すると、古い設定で稼働しているインスタンスから削除できます。ASGは、サブネットが利用可能になった後や手動変更の後にも、AZの再分散を自動的に実行します。

クイックチェック

このレッスンで学んだAWS Solutions Architect(SAA-C03)の概念について理解度を確認します。

レッスンのまとめ

このレッスンでは、次のことを学びました。Launch Templatesは、複数のバージョンと$Latest/$Defaultバージョンポインターをサポートする、バージョン管理可能で再利用できるインスタンスの設計図です。ASGの容量範囲(最小/最大/希望)はフリートのサイズを管理し、サブネット全体に自動的にマルチAZ分散します。また、ASGをロードバランサーの背後に配置する場合は、アプリケーションレベルの障害でインスタンスが置き換えられるよう、ELBヘルスチェックを有効にする必要があります。次は、ターゲット追跡やステップスケーリングなどのスケーリングポリシーについて学びます。

よくある質問

「起動テンプレートと ASG の設定」レッスンは無料ですか?

はい。「起動テンプレートと ASG の設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。

「起動テンプレートと ASG の設定」で何を学びますか?

適切な AMI、インスタンスタイプ、ユーザーデータを含む起動テンプレートを作成し、最小、最大、希望容量を設定した Auto Scaling Group にアタッチします。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AWS Solutions Architectを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「起動テンプレートと ASG の設定」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAWS Solutions Architectレッスンでコードを書いて実行できますか?

はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 起動テンプレートと ASG の設定
  2. スケーリングポリシー:ターゲット追跡とステップスケーリング
  3. スケジュールスケーリングと予測スケーリング
  4. インスタンスリフレッシュとライフサイクルフック
← AWS Solutions Architectに戻る