スタックを起動テンプレートに移行する AWS CloudFormation - Amazon EC2 Auto Scaling

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

スタックを起動テンプレートに移行する AWS CloudFormation

既存の AWS CloudFormation スタックテンプレートを起動設定から起動テンプレートに移行できます。これを行うには、起動テンプレートを既存のスタックテンプレートに直接追加した後、そのスタックテンプレート内で、起動テンプレートに Auto Scaling グループを関連付けます。その後、変更したテンプレートを使用してスタックを更新します。

起動テンプレートに移行する場合、このトピックでは、 CloudFormation スタックテンプレートの起動設定を起動テンプレートとして書き換える手順を提供することで、時間を節約できます。起動設定を起動テンプレートに移行する方法の詳細については、「Auto Scaling グループを起動テンプレートに移行する」を参照してください。

起動設定を使用している Auto Scaling グループを検索する

起動設定を使用している Auto Scaling グループを見つけるには
  • 次の describe-auto-scaling-groups コマンドを使用して、指定したリージョン内で起動設定の使用を続けている Auto Scaling グループの名前を一覧表示します。--filters オプションを含めて、 CloudFormation スタックに関連付けられたグループに結果を絞り込みます (aws:cloudformation:stack-nameタグキーでフィルタリングします)。

    aws autoscaling describe-auto-scaling-groups --region REGION \ --filters Name=tag-key,Values=aws:cloudformation:stack-name \ --query 'AutoScalingGroups[?LaunchConfigurationName!=`null`].AutoScalingGroupName'

    出力例を次に示します。

    [ "{stack-name}-group-1", "{stack-name}-group-2", "{stack-name}-group-3" ]

    Auto Scaling グループを検索して出力を移行し、フィルタリングするためのその他の便利な AWS CLI コマンドは、 にありますAuto Scaling グループを起動テンプレートに移行する

重要

スタックリソースの名前AWSEBに が含まれている場合、これは を通じて作成されたことを意味します AWS Elastic Beanstalk。この場合、Beanstalk 環境を更新して、起動設定を削除して起動テンプレートに置き換えるように Elastic Beanstalk に指示する必要があります。

起動テンプレートを使用するようにスタックを更新する

このセクションのステップに従い、 その手順を実行します。

  • 起動設定のプロパティを、起動テンプレートの同等のプロパティに対し記述し直します。

  • 新しい起動テンプレートを Auto Scaling グループと関連付けます。

  • これらの更新内容をデプロイします。

スタックテンプレートを変更してスタックを更新するには
  1. 「AWS CloudFormation ユーザーガイド」の「スタックテンプレートの変更」で説明されている、一般的なスタックテンプレートの変更と同じ手順に従います。

  2. 起動設定を起動テンプレートとして記述し直します。次の例を参照してください。

    例: シンプルな起動設定

    --- Resources: myLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroups: - !Ref EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    例: 同等の起動テンプレート

    --- Resources: myLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Sub ${AWS::StackName}-launch-template LaunchTemplateData: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroupIds: - Ref! EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -x yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    Amazon EC2 がサポートするすべてのプロパティのリファレンス情報については、「 ユーザーガイドAWS::EC2::LaunchTemplate」のAWS CloudFormation 「」を参照してください。

    起動テンプレートには、!Sub ${AWS::StackName}-launch-template 値が指定された LaunchTemplateName プロパティが含まれていることに注意してください。これは、起動テンプレート名にスタック名を含めたい場合に必須です。

  3. IamInstanceProfile プロパティが起動設定に存在する場合は、それを構造に変換し、インスタンスプロファイルの名前または ARN を指定する必要があります。例については、AWS::EC2::LaunchTemplateを参照してください。

  4. 起動設定に AssociatePublicIpAddressInstanceMonitoring、または PlacementTenancy プロパティがある場合は、これらを構造体に変換する必要があります。例については、「」を参照してくださいAWS::EC2::LaunchTemplate

    ただし、Auto Scaling グループに使用したサブネットの MapPublicIpOnLaunch プロパティの値が、起動設定の AssociatePublicIpAddress プロパティの値と一致する場合は例外です。この場合は、AssociatePublicIpAddress プロパティを無視できます。AssociatePublicIpAddress プロパティは、MapPublicIpOnLaunch プロパティを上書きして、起動時にインスタンスがパブリック IPv4 アドレスを受信するかどうかを変更する場合にのみ使用されます。

  5. SecurityGroups プロパティから、セキュリティグループを起動テンプレートの 2 つの場所のどちらかにコピーすることができます。通常は、SecurityGroupIds プロパティにセキュリティグループをコピーします。ただし、起動テンプレート内に AssociatePublicIpAddress プロパティを指定する NetworkInterfaces 構造体を作成する場合は、代わりにネットワークインターフェイスの Groups プロパティに対し、セキュリティグループをコピーする必要があります。

  6. NoDevicetrue が設定された BlockDeviceMapping 構造体が起動設定の中にある場合は、起動テンプレート内の NoDevice に空の文字列を指定して、Amazon EC2 にデバイスを省略させる必要があります。

  7. 起動設定内に SpotPrice プロパティが含まれている場合、起動テンプレートではそれを省略することをお勧めします。スポットインスタンスは現在のスポット料金で起動します。この価格は、オンデマンド料金を超えることはありません。

    スポットインスタンスをリクエストする際には、下記のように相互に排他的な 2 つのオプションが存在します。

    • 1 つ目は、起動テンプレート内で InstanceMarketOptions 構造体を使用することです (非推奨)。詳細については、「 ユーザーガイドAWS::EC2::LaunchTemplate InstanceMarketOptions」のAWS CloudFormation 「」を参照してください。

    • 2 つ目は、Auto Scaling グループに MixedInstancesPolicy 構造体を追加することです。これを行うと、リクエストの方法に、より多くの選択肢が得られるようになります。起動テンプレートのスポットインスタンスリクエストでは、Auto Scaling グループごとに複数のインスタンスタイプを選択することはできません。ただし、インスタンスポリシーを組み合わせることで、Auto Scaling グループごとに複数のインスタンスタイプを選択できます。インスタンスタイプに複数の選択肢があると、スポットインスタンスリクエストに対するメリットが得られます。詳細については、「 ユーザーガイド」のAWS::AutoScaling::AutoScaling「グループ MixedInstancesPolicyAWS CloudFormation 」を参照してください。

  8. AWS::AutoScaling::AutoScalingグループリソースから LaunchConfigurationNameプロパティを削除します。その代わりに、起動テンプレートを追加します。

    次の例では、Ref 組み込み関数は論理 ID を持つAWS::EC2::LaunchTemplateリソースの ID を取得しますmyLaunchTemplateGetAtt 関数は、 Versionプロパティの起動テンプレートの最新バージョン番号 ( など1) を取得します。

    例: インスタンスポリシーの組み合わせなし

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    例: インスタンスポリシーの組み合わせあり

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    Amazon EC2 Auto Scaling がサポートするすべてのプロパティのリファレンス情報については、AWS CloudFormation 「 ユーザーガイド」のAWS::AutoScaling::AutoScaling「グループ」を参照してください。

  9. これらの更新をデプロイする準備ができたら、 CloudFormation手順に従って、変更されたスタックテンプレートでスタックを更新します。詳細については、「AWS CloudFormation ユーザーガイド」の「スタックテンプレートの変更」を参照してください。

スタックリソースの更新時の動作

CloudFormation は、指定した更新されたテンプレートと、スタックテンプレートの以前のバージョンで説明したリソース設定の変更を比較して、スタックリソースを更新します。変更されていないリソース設定は、更新プロセス中も影響を受けません。

CloudFormation は Auto Scaling グループの UpdatePolicy 属性をサポートします。更新中に UpdatePolicyが に設定されている場合AutoScalingRollingUpdate、 はこの手順のステップを実行した後にInServiceインスタンスを CloudFormation 置き換えます。UpdatePolicy が に設定されている場合AutoScalingReplacingUpdate、 は Auto Scaling グループとそのウォームプール (存在する場合) を CloudFormation 置き換えます。

Auto Scaling グループのUpdatePolicy属性を指定しなかった場合、起動テンプレートが正しいかどうかはチェックされますが、Auto Scaling グループのインスタンス全体に変更がデプロイ CloudFormation されることはありません。すべての新しいインスタンスは、起動テンプレートを使用するようになります。ただし、既存のインスタンスは、起動した当初の起動設定のままで実行を継続します (起動設定が存在しない場合は除く)。この例外となるのは、組み合わせのインスタンスポリシーを追加するなどして、購入オプションを変更した場合です。この場合、新しい購入オプションに適合するために、Auto Scaling グループにより、徐々に既存のインスタンスが新しいインスタンスに置き換えられます。

移行を追跡する

移行を追跡するには
  1. AWS CloudFormation コンソールで、更新したスタックを選択し、[Events] (イベント) タブを選択してスタックイベントを表示します。

  2. イベントリストを最新のイベントで更新するには、 CloudFormation コンソールで更新ボタンを選択します。

  3. スタックの更新中は、リソースが更新されるたびに複数のイベントが表示されます。起動テンプレートを作成しようとしたときに、[ステータスの理由] 列に例外が表示され問題が発生したことが示された場合は、「Amazon EC2 Auto Scaling をトラブルシューティングする: 起動テンプレート」で可能性のある原因を参照してください。

  4. (オプション) UpdatePolicy 属性の使用状況に応じて、Amazon EC2 コンソールの Auto Scaling グループのページから Auto Scaling グループの進行状況をモニタリングできます。Auto Scaling グループを選択します。[Activity] (アクティビティ) タブで、[Activity history] (アクティビティ履歴) の下の [Status] (ステータス) 列に、Auto Scaling グループがインスタンスを正常に起動あるいは終了したか、または、依然としてスケーリングが進行中なのかが表示されます。

  5. スタックの更新が完了すると、 はUPDATE_COMPLETEスタックイベント CloudFormation を発行します。詳細については、「AWS CloudFormation ユーザーガイド」の「スタック更新の進行状況の監視」を参照してください。

  6. スタックの更新が完了したら、Amazon EC2 コンソールの [起動テンプレート] ページと [起動設定] ページを開きます。新しい起動テンプレートが作成され、起動設定が削除されていることが確認できます。

起動設定のマッピングリファレンス

参考までに、次の表にAWS::AutoScaling::LaunchConfiguration、リソース内のすべての最上位プロパティと、AWS::EC2::LaunchTemplateリソース内の対応するプロパティを示します。

起動設定のソースプロパティ 起動テンプレートのターゲットプロパティ
AssociatePublicIpAddress NetworkInterfaces.AssociatePublicIpAddress
BlockDeviceMappings BlockDeviceMappings
ClassicLinkVPCId 利用不可
ClassicLinkVPCSecurityGroups 利用不可
EbsOptimized EbsOptimized
IamInstanceProfile IamInstanceProfile.Arn または IamInstanceProfile.Name を入力します。両方を入力することはできません。
ImageId ImageId
InstanceId InstanceId
InstanceMonitoring Monitoring.Enabled
InstanceType InstanceType
KernelId KernelId
KeyName KeyName
LaunchConfigurationName LaunchTemplateName
MetadataOptions MetadataOptions
PlacementTenancy Placement.Tenancy
RamDiskId RamDiskId
SecurityGroups SecurityGroupIds または NetworkInterfaces.Groups を入力します。両方を入力することはできません。
SpotPrice InstanceMarketOptions.SpotOptions.MaxPrice
UserData UserData

1 EC2-Classic は使用できなくなるため、 ClassicLinkVPCIdおよび ClassicLinkVPCSecurityGroupsプロパティは起動テンプレートでは使用できません。 EC2-Classic