スタックテンプレートの変更 - AWS CloudFormation

スタックテンプレートの変更

スタックテンプレートで宣言されたリソースやプロパティを変更するには、スタックのテンプレートを変更する必要があります。更新するリソースのみを確実に更新するには、既存のスタックのテンプレートを開始点として使用し、そのテンプレートを更新します。ソース管理システムでテンプレートを管理している場合は、開始点としてそのテンプレートのコピーを使用します。それ以外の場合は、AWS CloudFormation からスタックテンプレートのコピーを取得できます。

スタックのパラメータや設定のみ (スタックの Amazon SNS トピックなど) を変更する場合は、既存のスタックテンプレートを再利用することができます。スタックテンプレートのコピーを取得したり、スタックテンプレートを変更する必要はありません。

注記

サポートされていない変更がテンプレートに含まれている場合は、AWS CloudFormation は、その変更は許可されていないというメッセージを返します。ただし、デフォルトで AWS CloudFormation によるリソースの作成と更新の順序は不確定であるため、このメッセージは非同期的に発生する可能性があります。

スタックのテンプレートの更新 (コンソール)

  1. AWS CloudFormation コンソール[スタック] ページで、更新するスタックの名前をクリックします。

  2. 選択したスタックの詳細ペインで、[テンプレート] ペインを選択し、[View in Designer (デザイナーで表示)] をクリックします。

    AWS CloudFormation は、AWS CloudFormation デザイナーでスタックのテンプレートのコピーを開きます。

  3. テンプレートの変更。

    AWS CloudFormation デザイナードラッグアンドドロップインターフェース、または統合された JSON および YAML エディタを使用して、テンプレートを変更できます。AWS CloudFormation デザイナーの使用方法の詳細については、「AWS CloudFormation デザイナーとは」を参照してください。

    更新するリソースのみを変更してください。更新しないリソースやプロパティについては、現在のスタック構成と同じ値を使用します。次のアクションのいずれかを完了するとテンプレートを変更できます。

    • 新しいリソースを追加するか、既存のリソースを削除します。

      ほとんどのリソースの場合、リソースの論理名を変更することは、そのリソースを削除して新しいリソースと置き換えることと同等です。名前を変更したリソースに依存する他のリソースも更新する必要があり、場合によっては置き換えられます。その他のリソースは、更新を開始するために、 (論理名だけでなく) プロパティの更新が必要になります。

    • 既存のリソースのプロパティを追加、変更、または削除します。

      特定のリソースのプロパティを更新する効果の詳細については、「AWS リソースタイプのリファレンス」を参照してください。各プロパティについての更新の効果は、以下のいずれかになります。

    • リソースの属性 (MetadataDependsOnCreationPolicyUpdatePolicyDeletionPolicy) を追加、変更、または削除します。

      重要

      CreationPolicy または UpdatePolicy 属性は単独では更新できません。更新できるのは、リソースを追加、変更、または削除する変更を含める場合だけです。たとえば、リソースのメタデータ属性を追加または変更することはできます。

    • パラメータの宣言を追加、変更、または削除します。ただし、更新をサポートしていないリソースで使用されているパラメータを追加、変更、または削除することはできません。

    • マッピングの宣言を追加、変更、または削除します。

      重要

      マッピングの値がスタックで使用されていない場合は、マップ自体を更新することはできません。リソースを追加、変更、または削除する変更を含める必要があります。たとえば、リソースのメタデータ属性を追加または変更することはできます。スタックが使用しているマッピング値を更新する場合は、更新を開始するために他の変更を行う必要はありません。

    • 条件の宣言を追加、変更、または削除します。

      重要

      条件を単独で更新することはできません。条件を更新できるのは、リソースを追加、変更、または削除する変更を含める場合だけです。たとえば、リソースのメタデータ属性を追加または変更することはできます。

    • 出力値の宣言を追加、変更、または削除します。

    リソースまたはプロパティによっては、プロパティ値またはそれらの値の変更に制約がある場合があります。たとえば、AWS::RDS::DBInstance リソースのAllocatedStorage プロパティへの変更は、現在の設定よりも大きくなければなりません。更新に指定された値がこれらの制約を満たさない場合、そのリソースの更新は失敗します。AllocatedStorage 変更に関する特定の制約については、「ModifyDBInstance」を参照してください。

    リソースの更新が、他のリソースのプロパティに影響を与える可能性があります。Ref 関数または Fn::GetAtt 関数を使用して、更新されたリソースの属性をテンプレート内の他のリソースのプロパティ値の一部として指定した場合、AWS CloudFormation も変更されたプロパティへの参照を含むリソースを更新します。たとえば、AWS::RDS::DBInstance リソースの MasterUsername プロパティを更新し、Ref 関数を使用して、DB インスタンス名への参照を含む UserData プロパティを持つ AWS::AutoScaling::LaunchConfiguration リソースがある場合、AWS CloudFormation は、新しい名前で DB インスタンスを再作成し、LaunchConfiguration リソースも更新します。

  4. テンプレートの構文エラーを確認するには、[AWS CloudFormation デザイナー ツールバー] で [テンプレートの検証] ( ) を選択します。

    [Messages (メッセージ)] ペインでエラーを表示して修正し、テンプレートを再度検証します。エラーが表示されない場合、テンプレートの構文は有効です。

  5. [AWS CloudFormation デザイナー ツールバー] で[ファイル] メニュー ( ) を選択し、その後 [保存] を選択してテンプレートを S3 バケットまたはローカルに保存します。

  6. 変更したテンプレートを使用して、スタックを直接更新するか変更セットを使用してスタックを更新します

スタックのテンプレートの取得と更新 (CLI)

  1. 更新するスタックのテンプレートを取得するには aws cloudformation get-template コマンドを使用します。

  2. テンプレートをコピーしてテキストファイルに貼り付け、変更して保存します。テンプレートのみをコピーします。コマンドではテンプレートを引用符で囲みますが、テンプレートを囲んでいる引用符はコピーしません。テンプレート自体は、左中括弧で開始され、右中括弧で終了します。このファイルで、スタックのリソースに対する変更を指定します。

  3. 変更したテンプレートを使用して、スタックを直接更新するか変更セットを使用してスタックを更新します