

# スタックテンプレートを更新する
<a name="using-cfn-updating-stacks-get-template"></a>

CloudFormation スタック内のリソースまたはプロパティを変更するには、スタックのテンプレートを更新する必要があります。そのスタックの既存のテンプレートから始めて、変更を行っていきます。テンプレートをソース管理システムに保存している場合は、テンプレートのコピーを開始点として使用します。そうでない場合は、CloudFormation からテンプレートのコピーを取得できます。

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

[Infrastructure Composer](infrastructure-composer-for-cloudformation.md) またはテキストエディタを使用して CloudFormation スタックテンプレートを更新できます。

**Infrastructure Composer を使用して既存のスタックテンプレートを更新するには**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. **[スタック]** ページで、更新するスタックの名前を選択します。

1. **[テンプレート]** タブを選択したら、**[Infrastructure Composer で表示]** を選択します。

   CloudFormation が Infrastructure Composer でテンプレートを開きます。

1. 次のいずれかの方法を使用してテンプレートを更新します。
   + **[Canvas]** インターフェイス: ここでは、**[リソース]** パレットからドラッグアンドドロップできます。カードをダブルクリックしてリソースを設定し、**[リソースプロパティ]** パネルを開きます。必要に応じてリソースを接続します。**[Canvas]** インターフェイスの使用に関する詳細な手順については、「[AWS Infrastructure Composer で を構成する方法](https://docs.aws.amazon.com/infrastructure-composer/latest/dg/using-composer-basics.html)」を参照してください。
   + **[テンプレート]** インターフェイス: **[Canvas]** から **[テンプレート]** インターフェイスに切り替えます。テンプレートコードにインライン更新を行います。必要に応じて JSON 形式と YAML 形式に切り替えます。

1. **[検証]** を選択し、テンプレートに構文エラーがないか確認します。

1. CloudFormation に変更をエクスポートする準備ができたら、**[テンプレートの更新]** を選択します。

**AWS CLI を使用して既存のスタックテンプレートを更新する**

1. 更新するスタックのテンプレートを取得するには、[get-template](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/get-template.html) CLI コマンドを使用します。

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

テンプレートを変更するときは、以下の点に留意してください。
+ 更新をサポートしないリソースが使用しているパラメータを追加、変更、または削除することはできません。
+ ほとんどのリソースの場合、リソースの論理名を変更することは、そのリソースを削除して新しいリソースと置き換えることと同等です。名前を変更したリソースに依存する他のリソースも更新する必要があり、場合によっては置き換えられます。その他のリソースは、更新を開始するために、 (論理名だけでなく) プロパティの更新が必要になります。
+ リソースによっては、特定のプロパティに設定できる値に関する制限がある場合があります。例えば、RDS データベースインスタンスの `AllocatedStorage` プロパティへの変更は、現在の値よりも大きくする必要があります。更新がこれらのルールに違反すると、その部分が失敗します。
+ 1 つのリソースを更新すると、それを参照する他のリソースにも影響がおよぶ可能性があります。[`Ref` 関数](resources-section-structure.md#resource-properties-ref) または [`Fn::GetAtt` 関数](resources-section-structure.md#resource-properties-getatt) といった関数を使用して別のリソースに基づくプロパティを設定する場合、CloudFormation は、参照先リソースの変更時に参照元リソースも更新します。
+ 特定のリソースプロパティを更新した場合の影響については、「[AWS リソースおよびプロパティタイプのリファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)」を参照してください。各プロパティについての更新の効果は、以下のいずれかになります。
  + アップデートに関する要件: [中断はありません](using-cfn-updating-stacks-update-behaviors.md#update-no-interrupt)
  + *更新に伴う要件*: [一時的な中断](using-cfn-updating-stacks-update-behaviors.md#update-some-interrupt)
  + 更新に伴う要件: [置換](using-cfn-updating-stacks-update-behaviors.md#update-replacement)
+ テンプレートの JSON または YAML 構文を検証するには、[validate-template](service_code_examples.md#validate-template-sdk) CLI コマンドを使用するか、またはコンソールでテンプレートを指定します。コンソールは検証を自動的に実行します。ただし、これらのメソッドはテンプレートの構文のみを検証し、リソースのために指定したプロパティ値がそのリソースについて有効であることを検証しません。より複雑な検証やベストプラクティスの確認には、[CloudFormation Linter (cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) および [CloudFormation Rain (rain fmt)](https://github.com/aws-cloudformation/rain) などの追加のツールを使用することもできます。

**注記**  
CloudFormation は、ユーザーが実行しようとする特定の変更を許可せず、変更が許可されないことをユーザーに通知することがあります。ただし、デフォルトで CloudFormation によるリソースの作成と更新の順序は不確定であるため、このメッセージは非同期的に発生する可能性があります。