

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

# AWS CloudFormation スタックを起動テンプレートに移行する
<a name="migrate-launch-configurations-with-cloudformation"></a>

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

このトピックで説明する、CloudFormation スタックテンプレートの起動設定を起動テンプレートとして書き換える手順により、起動テンプレートへの移行に要する時間を節約できます。起動設定を起動テンプレートに移行する方法の詳細については、「[Auto Scaling グループを起動テンプレートに移行する](migrate-to-launch-templates.md)」を参照してください。

**Topics**
+ [起動設定を使用している Auto Scaling グループを検索する](#find-auto-scaling-groups-to-migrate)
+ [起動テンプレートを使用するようにスタックを更新する](#update-stack-to-use-launch-template)
+ [スタックリソースの更新時の動作](#understand-update-behavior)
+ [移行を追跡する](#track-the-migration)
+ [起動設定のマッピングリファレンス](#launch-configuration-mapping-reference)

## 起動設定を使用している Auto Scaling グループを検索する
<a name="find-auto-scaling-groups-to-migrate"></a>

**起動設定を使用している Auto Scaling グループを見つけるには**
+ 次の [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) コマンドを使用して、指定したリージョン内で起動設定の使用を続けている Auto Scaling グループの名前を一覧表示します。CloudFormation スタックに関連付けられたグループに結果を絞り込むには、`--filters` オプションを含めます (`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 グループを起動テンプレートに移行する](migrate-to-launch-templates.md)。

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

## 起動テンプレートを使用するようにスタックを更新する
<a name="update-stack-to-use-launch-template"></a>

このセクションのステップに従い、 その手順を実行します。
+ 起動設定のプロパティを、起動テンプレートの同等のプロパティに対し記述し直します。
+ 新しい起動テンプレートを Auto Scaling グループと関連付けます。
+ これらの更新内容をデプロイします。

**スタックテンプレートを変更してスタックを更新するには**

1. 「*AWS CloudFormation ユーザーガイド*」の「[スタックテンプレートを更新する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-get-template.html)」で説明されている、一般的なスタックテンプレートの変更と同じ手順に従います。

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

   **例: シンプルな起動設定**

   ```
   ---
   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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)」を参照してください。

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

1. `IamInstanceProfile` プロパティが起動設定に存在する場合は、それを構造に変換し、インスタンスプロファイルの名前または ARN を指定する必要があります。例については、「[AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)」を参照してください。

1. 起動設定に `AssociatePublicIpAddress`、`InstanceMonitoring`、または `PlacementTenancy` プロパティがある場合は、これらを構造体に変換する必要があります。例については、「[AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)」を参照してください。

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

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

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

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

   スポットインスタンスをリクエストする際には、下記のように相互に排他的な 2 つのオプションが存在します。
   + 1 つ目は、起動テンプレート内で `InstanceMarketOptions` 構造体を使用することです (非推奨)。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[AWS::EC2::LaunchTemplate InstanceMarketOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancemarketoptions.html)」を参照してください。
   + 2 つ目は、Auto Scaling グループに `MixedInstancesPolicy` 構造体を追加することです。これを行うと、リクエストの方法に、より多くの選択肢が得られるようになります。起動テンプレートのスポットインスタンスリクエストでは、Auto Scaling グループごとに複数のインスタンスタイプを選択することはできません。ただし、インスタンスポリシーを組み合わせることで、Auto Scaling グループごとに複数のインスタンスタイプを選択できます。インスタンスタイプに複数の選択肢があると、スポットインスタンスリクエストに対するメリットが得られます。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html)」を参照してください。

1. [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) リソースから、`LaunchConfigurationName` プロパティを削除します。その代わりに、起動テンプレートを追加します。

   以下の例では、[Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 組み込み関数が、論理 ID `myLaunchTemplate` を含む [AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) リソースの ID を取得しています。[GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) 関数は、`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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html)」を参照してください。

1. これらの更新をデプロイする準備ができたら、CloudFormation の手順に従い、変更済みのスタックテンプレートを使用してスタックを更新します。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[スタックテンプレートを更新する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-get-template.html)」を参照してください。

## スタックリソースの更新時の動作
<a name="understand-update-behavior"></a>

CloudFormation は、提供した更新済みテンプレートと、以前のバージョンのスタックテンプレートに対し記述したリソース設定との間で変更点を比較し、スタックリソースの更新を行います。変更されていないリソース設定は、更新プロセス中も影響を受けません。

CloudFormation は、Auto Scaling グループの [UpdatePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html) 属性をサポートしています。更新時、`UpdatePolicy` に `AutoScalingRollingUpdate` が設定されている場合、ここでの手順の実行後に、CloudFormation によって `InService` インスタンスが置き換えられます。`UpdatePolicy` に `AutoScalingReplacingUpdate` が設定されている場合、CloudFormation は、 Auto Scaling グループと (それが存在する場合には) そのウォームプールを置き換えます。

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

起動設定から起動テンプレートに移行するために変更をロールバックする必要がある場合は、必ずロールバック操作をテストしてください。

## 移行を追跡する
<a name="track-the-migration"></a>

**移行を追跡するには**

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)で、更新したスタックを選択し、[**Events**] (イベント) タブを選択してスタックイベントを表示します。

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

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

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

1. スタックの更新完了時、CloudFormation は `UPDATE_COMPLETE` スタックイベントを発行します。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[スタック更新の進行状況を監視する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-monitor-stack.html)」を参照してください。

1. スタックの更新が完了したら、Amazon EC2 コンソールの [[起動テンプレート] ページ](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates)と [[起動設定] ページ](https://console.aws.amazon.com/ec2/v2/home?#LaunchConfigurations)を開きます。新しい起動テンプレートが作成され、起動設定が削除されていることが確認できます。

## 起動設定のマッピングリファレンス
<a name="launch-configuration-mapping-reference"></a>

参照目的として、[AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-launchconfiguration.html) リソースのすべての最上位プロパティと、[AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) リソース内の対応プロパティを次のリストに示します。


| 起動設定のソースプロパティ | 起動テンプレートのターゲットプロパティ | 
| --- | --- | 
| 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 | 

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