🍌

[CFn]SKIPPED_SUSPENDED_ACCOUNTという停止(閉鎖要求)状態アカウントへの状態フラグが登場したので確認してみました

2023/06/08に公開

「SKIPPED_SUSPENDED_ACCOUNT」フラグが登場

DevelopersIO BASECAMP一期参加者の加藤です。

2023年6月7日の発表で、StackSetでクロスアカウントにリソースを作成する際、停止(閉鎖要求)状態のアカウントに対しての状態フラグが「FAILED」から「SKIPPED_SUSPENDED_ACCOUNT」に変更されました。

https://aws.amazon.com/jp/about-aws/whats-new/2023/06/aws-cloudformation-stacksets-suspended-accounts-deployments/

早速、上記を確認してきました。


手順

表示の確認にあたり↓こちらの記事から、手順を再勉強しました。
https://dev.classmethod.jp/articles/cloudformation-stacksets-sample-sns-topic/

クロスアカウントへのStacketの実行手順については、内容の焼き増しを避ける意味で省略しますが、今回の確認に必要である為、予め「停止(閉鎖要求)状態」であるアカウントを用意し、対象に含めてスタックセットを実行してみます。

※ここでいう「停止状態」は「閉鎖」→「アカウントを閉鎖する」を実行してから90日間の保留状態にあるアカウントを指します。


結果

生きているアカウント

停止状態のアカウント

詳細ステータス列に、アップデート記事に記載のあった「SKIPPED_SUSPENDED_ACCOUNT」なる表示が出ているのを確認出来ました。


確認してみて

残念ながら、私は停止状態のアカウントに対するデプロイが「FAILED」になる時代の挙動を体験せぬまま今日を迎えたのですが、アップデート記事にもあったように、このフラグの追加の目的が「デプロイの高速化」である事から、以前までは途中でスタックセット全体の実行が失敗してしまうか、或いはWait状態のまま、時間切れのような事が起こるまで、待たされて結果失敗する。という挙動だったのではないかと想像します。

それが改良されたのではという理解に落ち着きました。


終わりに

余談

余談ではありますが、恥ずかしながら StackSetの利用でクロスリージョン・クロスアカウントに同じリソースをデプロイ可能という情報については以前一度視界に入ってはいたものの、「クロスアカウントに」というワードに込められる強めの願いとして、Aアカウントで実行したAテンプレートのCOMPLETE等をトリガーに、BアカウントでBテンプレートの実行が開始されるという理想があり、それが叶わない事を知り、当該機能を試すのを先に送ったまま忘れておりました。

勿論以下のように、StackSetとCondition(や、ここでは使っていませんがMapping)とAWS::AccountID等の擬似パラメータを駆使すればリソースの出し訳は可能ですが、クロスアカウントで一挙手で完結させたいケースは大半が、別アカウントで作成されたリソースのIDなどを引き渡して利用したい為、この方法だと目的は達成されず、結果クロスリージョンの場合はこちらの記事のようにパラメーターストアやLambdaを駆使する方法しかない認識を持っています。(クロスアカウントはこれも難しそう)

これに関する上手いやり方をご存知の方がいらっしゃれば、是非勉強不足な私にご教示いただければ幸いです。

sample.yml
AWSTemplateFormatVersion: "2010-09-09"
# ------------------------------------------------------------#
# Metadata
# ------------------------------------------------------------#
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: Stack
        Parameters:
          - AccountA
          - AccountB
# ------------------------------------------------------------#
# Parameters
# ------------------------------------------------------------#
Parameters:
  AccountA:
    Type: String

  AccountB:
    Type: String
# ------------------------------------------------------------#
# Conditions
# ------------------------------------------------------------#
Conditions:
  AccountACondition: !Equals
    - !Ref AccountA
    - !Ref AWS::AccountId

  AccountBCondition: !Equals
    - !Ref AccountB
    - !Ref AWS::AccountId
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
Resources:
  # ------------------------------------------------------------#
  # VPC
  # ------------------------------------------------------------#
  VPCA:
    Type: AWS::EC2::VPC
    Condition: AccountACondition
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: vpc-a

  VPCB:
    Type: AWS::EC2::VPC
    Condition: AccountBCondition
    Properties:
      CidrBlock: 10.1.0.0/16
      Tags:
        - Key: Name
          Value: vpc-b






アカウントA

アカウントB

クロスアカウントのスタックセットの実行を再学習するきっかけになりました。

短い内容で恐縮ですが、以上でした。
お読みいただき有難うございました!

デベキャン

Discussion