スタックテンプレートを更新する
CloudFormation スタック内のリソースまたはプロパティを変更するには、スタックのテンプレートを更新する必要があります。そのスタックの既存のテンプレートから始めて、変更を行っていきます。テンプレートをソース管理システムに保存している場合は、テンプレートのコピーを開始点として使用します。そうでない場合は、CloudFormation からテンプレートのコピーを取得できます。
スタックのパラメータや設定 (スタックの Amazon SNS トピックなど) のみを変更する場合は、コピーを取得することなく既存のテンプレートを再利用できます。
CloudFormation スタックテンプレートは、Infrastructure Composer またはテキストエディタを使用して更新できます。
Infrastructure Composer を使用して既存のスタックテンプレートを更新するには
-
CloudFormation コンソール
の [スタック] ページで、更新するスタックの名前を選択します。 -
選択したスタックのスタック詳細ペインで [テンプレート] タブを選択してから、[Infrastructure Composer で表示] を選択します。
-
CloudFormation が Infrastructure Composer でテンプレートを開きます。ここでは、[リソース] パレットからリソース (カード) をドラッグ、ドロップ、設定、接続することができます。詳細については、「How to compose in AWS Infrastructure Composer」を参照してください。
AWS CLI を使用して既存のスタックテンプレートを更新する
-
更新するスタックのテンプレートを取得するには、get-template CLI コマンドを使用します。
-
テンプレートをコピーしてテキストファイルに貼り付け、変更して保存します。テンプレートのみをコピーします。コマンドではテンプレートを引用符で囲みますが、テンプレートを囲んでいる引用符はコピーしません。テンプレート自体は、左中括弧で開始され、右中括弧で終了します。このファイルで、スタックのリソースに対する変更を指定します。
テンプレートを変更するときは、以下の点に留意してください。
-
更新をサポートしないリソースが使用しているパラメータを追加、変更、または削除することはできません。
-
ほとんどのリソースの場合、リソースの論理名を変更することは、そのリソースを削除して新しいリソースと置き換えることと同等です。名前を変更したリソースに依存する他のリソースも更新する必要があり、場合によっては置き換えられます。その他のリソースは、更新を開始するために、 (論理名だけでなく) プロパティの更新が必要になります。
-
リソースによっては、特定のプロパティに設定できる値に関する制限がある場合があります。例えば、RDS データベースインスタンスの
AllocatedStorage
プロパティへの変更は、現在の値よりも大きくする必要があります。更新がこれらのルールに違反すると、その部分が失敗します。 -
1 つのリソースを更新すると、それを参照する他のリソースにも影響がおよぶ可能性があります。
Ref
またはGetAtt
といった関数を使用して別のリソースに基づくプロパティを設定する場合、CloudFormation は、参照先リソースの変更時に参照元リソースも更新します。 -
特定のリソース プロパティを更新した場合の影響については、「AWS リソースタイプのリファレンス」を参照してください。各プロパティについての更新の効果は、以下のいずれかになります。
-
テンプレートの JSON または YAML 構文を検証するには、validate-template CLI コマンドを使用するか、またはコンソールでテンプレートを指定します。コンソールは検証を自動的に実行します。ただし、これらのメソッドはテンプレートの構文のみを検証し、リソースのために指定したプロパティ値がそのリソースについて有効であることを検証しません。より複雑な検証やベストプラクティスの確認には、CloudFormation Linter (cfn-lint)
および CloudFormation Rain (rain fmt) などの追加のツールを使用することもできます。
注記
CloudFormation は、ユーザーが実行しようとする特定の変更を許可せず、変更が許可されないことをユーザーに通知することがあります。ただし、デフォルトで CloudFormation によるリソースの作成と更新の順序は不確定であるため、このメッセージは非同期的に発生する可能性があります。