1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

メンバーアカウントの AWS エンタープライズサポートアクティベーションを自動化する

Posted at

モチベーション

エンタープライズサポート加入以降に AWS Organizations 内に追加されたメンバーアカウントはエンタープライズサポートに登録されていません。新規メンバーアカウントをエンタープライズプランの対象とするには組織の管理アカウントでサポートケースを起票し、アクティベーション (有効化) を依頼する必要があります。

これを自動化したいケースを想定しています。

実装例

英語窓口にエンタープライズサポートの有効化を依頼した場合は自動的にアクティベーションが実施され、ケースのクローズまで行われます。これを前提に AWS Step Functions でケース起票、クローズ確認、通知までをステートマシン化するシンプルな例です。

入力

Amazon EventBrige で AWS Organizations の CreateAccount イベントや AWS Control Tower の CreateManagedAccount イベントをトリガーにステートマシンを起動させることを想定して、入力は以下のように単一アカウントとしています。1つのサポートケースで複数アカウント ID の有効化を依頼すること自体は可能です。

{
  "AccountId": "<有効化を依頼する Account ID>"
}

ステートマシン定義

処理の流れは以下のようになります。
ケースの起票とステータスの確認は AWS SDK service integrations を使用しています。

  • CeateCase ステートでステートマシン起動時の入力から受け取ったアカウント ID を有効化対象として、英語窓口のサポートケースを起票
  • CreateCase ステートのタスク結果として返される Case ID をもとに DescribeCases ステートを実行
    • DescribeCases API には Case ID をリストで渡す必要があるため、組み込み関数の States.Array を利用する
    • タスク結果もリストになるため、OutputPath で $.Cases[0] を指定
  • Choise ステートで DescirbeCases のアウトプットからケースのステータスを確認
    • resolved なら SNS Pulibsh ステートに進む
    • それ以外の場合は Wait ステートで指定時間の待機後、再度 DescribeCases を実行
  • SNS Publish ステートで指定の SNS Topic にメッセージを発行
    • Message には DescribeCases ステートのアウトプットをそのまま渡す
statemachine.asl.json
{
  "Comment": "A description of your state machine",
  "StartAt": "CreateCase",
  "States": {
    "CreateCase": {
      "Type": "Task",
      "Parameters": {
        "Subject": "Enterprise Activation Request for Linked account",
        "ServiceCode": "customer-account",
        "SeverityCode": "low",
        "CategoryCode": "other-account-issues",
        "CommunicationBody.$": "States.Format('Please enable Enterprise support for following account ID:\n{}\n', $.AccountId)",
        "Language": "en",
        "IssueType": "customer-service"
      },
      "Resource": "arn:aws:states:::aws-sdk:support:createCase",
      "Next": "DescribeCases"
    },
    "DescribeCases": {
      "Type": "Task",
      "Parameters": {
        "CaseIdList.$": "States.Array($.CaseId)",
        "IncludeResolvedCases": true
      },
      "Resource": "arn:aws:states:::aws-sdk:support:describeCases",
      "Next": "Choice",
      "OutputPath": "$.Cases[0]"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.Status",
          "StringEquals": "resolved",
          "Next": "SNS Publish"
        }
      ],
      "Default": "Wait"
    },
    "SNS Publish": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Message.$": "$",
        "TopicArn": "arn:aws:sns:us-east-1:123456789012:your-sns-topic"
      },
      "End": true
    },
    "Wait": {
      "Type": "Wait",
      "Seconds": 30,
      "Next": "DescribeCases"
    }
  }
}

Workflow Studio 上では以下のように表示されます。

image.png

実行例

といってもこの画像からは正常終了していることくらいしかわからないですが。。

image.png

以上です。
参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?