AWS ChatbotがCDK経由でSNS TopicのSubscriptionに失敗する → dependencyを明示しましょう。
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));
}
}
原因の推測
[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の依存性の計算に利用されないためと思われる。
依存性を考慮してくれるよう、サポートに起票しました。
Discussion