AWS CDK创建aws_codestarnotifications.CfnNotificationRule并设置目标

时间:2020-07-24 14:18:09

标签: python aws-cdk

我正在尝试使用CDK创建一个简单的堆栈,其中代码流水线会触发lambda。

我碰壁试图设置CfnNotificationRule的目标:

THE_PIPELINE_ARN = "arn:aws:codepipeline:eu-west-2:121212121212:the-pipeline"

class ExampleStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
    
        notification_topic = aws_sns.Topic(self, "TheNotificationTopic")

        notification_rule = aws_codestarnotifications.CfnNotificationRule(
            self,
            "StackStatusChangeNotificationRule",
            detail_type="FULL",
            event_type_ids=[
                "codepipeline-pipeline-action-execution-succeeded",
                "codepipeline-pipeline-action-execution-failed",
            ],
            name="TheStackCodeStarNotificationsNotificationRule",
            resource=THE_PIPELINE_ARN,
            targets= # what goes here?
            )
        

我希望通知转至notification_topic定义的SNS主题。

我认为这应该是基于的aws_cdk.aws_codestarnotifications.TargetProperty https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-codestarnotifications.CfnNotificationRule.TargetProperty.html 但Python似乎不存在该类型。

1 个答案:

答案 0 :(得分:2)

好的,终于确定了,TargetProperty是CfnNotificationRule的嵌套类,而不是模块中的类(与文档相反)。因此正确的代码如下:

THE_PIPELINE_ARN = "arn:aws:codepipeline:eu-west-2:121212121212:the-pipeline"

class ExampleStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
    
        notification_topic = aws_sns.Topic(self, "TheNotificationTopic")

        notification_rule = aws_codestarnotifications.CfnNotificationRule(
            self,
            "StackStatusChangeNotificationRule",
            detail_type="FULL",
            event_type_ids=[
                "codepipeline-pipeline-action-execution-succeeded",
                "codepipeline-pipeline-action-execution-failed",
            ],
            name="TheStackCodeStarNotificationsNotificationRule",
            resource=THE_PIPELINE_ARN,
            targets= [aws_codestarnotifications.CfnNotificationRule.TargetProperty(
                      target_type="SNS",
                      target_address=notification_topic.topic_arn),
                     ]
            )