🔖

AWS ChatbotがCDK経由でSNS TopicのSubscriptionに失敗する → dependencyを明示しましょう。

2021/04/26に公開

TL;DR

CDKでSlackChannelConfigurationをUpdateする際、SNS TopicがChatbot側には登録されているがSubscriptionが失敗することがある。
SlackChannelConfiguration に対して SNS Topic を addDependency しましょう

経緯

AWS Chatbotに対してCDKでSubscriptionを設定しようとすると、SNS Topic側のSubscriptionリソースでは設定できない。
代わりに、SlackChannelConfiguration クラスの notificationTopics で設定することになる。

しかし、notificationTopicsはCloudFormationにリソースの依存関係を伝えないらしい。
したがって、addDependencyで明示的に依存関係を追加することになる。

サンプルコード

export type ChatbotStackProps = {
  topics: Topic[];
} & cdk.StackProps;

export class ChatbotStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props: ChatbotStackProps) {
    super(scope, id, props);

    const role = chatbotRole(this, "chatbotRole");

    const slackConfiguration = new SlackChannelConfiguration(this, "chatbotToFatal", {
      slackChannelConfigurationName: "alert_fatal_configuration",
      slackChannelId: getSlackChannelID(),
      slackWorkspaceId: slack.workspaceId,
      notificationTopics: props.topics,
      role: role,
    });
    // 明示的に依存関係をしていない場合、SlackConfigurationが先にデプロイされTopicのSubscribeが失敗する可能性がある。
    props.topics.map((topics) => slackConfiguration.node.addDependency(topics));
  }
}

原因の推測

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html

[AWS::Chatbot::SlackChannelConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html#cfn-chatbot-slackchannelconfiguration-snstopicarns)[SnsTopicArns](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html#cfn-chatbot-slackchannelconfiguration-snstopicarns)がCloudFormationの依存性の計算に利用されないためと思われる。

依存性を考慮してくれるよう、サポートに起票しました。

GitHubで編集を提案

Discussion