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 CloudFormation ユーザーガイド」のAWS「:EC2::LaunchTemplate:」を参照してください。

    起動テンプレートには、!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. NoDeviceに設定して起動設定にBlockDeviceMapping構造が存在する場合はtrue、起動テンプレートNoDeviceで に空の文字列を指定して、Amazon EC2 がデバイスを省略するようにする必要があります。

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

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

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

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

  8. AWS::::AutoScaling:::AutoScalingGroupリソースから 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::AutoScalingGroup:」を参照してください。

  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:::::::AutoScalingLaunchConfiguration:::::::::::::::::::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プロパティは起動テンプレートでは使用できません。