【问题标题】:jsii error when attempting to create a budget via AWS CDK in python尝试在 python 中通过 AWS CDK 创建预算时出现 jsii 错误
【发布时间】:2020-10-19 11:23:58
【问题描述】:

我正在尝试通过 AWS CDK 创建预算。

这里是代码,这是从参考官方文档和做类似事情的 TypeScript 解决方案拼凑而成的。

email = 'yo@yo.yo'
value = 90.0
subscription = sns_sub.EmailSubscription(email)
topic = sns.Topic(self, id='notification_topic', display_name='budget notifications',
                          topic_name='budget_notifications')
topic.add_subscription(subscription)
budget_data_props = aws_budgets.CfnBudget.BudgetDataProperty(budget_type='COST', time_unit='MONTHLY', 
                                                             budget_name='CDK budget',
                                                             budget_limit=aws_budgets.CfnBudget.SpendProperty(amount=value, unit='USD'))
np = aws_budgets.CfnBudget.NotificationProperty(comparison_operator='GREATER_THAN',
                                                notification_type='FORECASTED', threshold=90.0,
                                                threshold_type='PERCENTAGE')
sub = aws_budgets.CfnBudget.SubscriberProperty(address=topic.topic_arn, subscription_type='SNS')
nws = aws_budgets.CfnBudget.NotificationWithSubscribersProperty(notification=np, subscribers=[sub])

budget_props = aws_budgets.CfnBudgetProps(budget=budget_data_props, notifications_with_subscribers=nws)
budget = aws_budgets.CfnBudget(self, 'cdk budget', budget=budget_props)

我得到的错误是:

错误:

值与 union 中的任何类型都不匹配:Wire struct type '@aws-cdk/aws-budgets.CfnBudgetProps' 与预期不符 '@aws-cdk/aws-budgets.CfnBudget.BudgetDataProperty',预期对象 参考,得到 {"$jsii.struct":{"fqn":"@aws-cdk/aws-budgets.CfnBudgetProps","data":{"budget":{"$jsii.struct":{"fqn":"@ aws-cdk/aws-budgets.CfnBudget.BudgetDataProperty","data":{"budgetType":"COST","timeUnit":"MONTHLY","budgetLimit":{"$jsii.struct":{"fqn" :"@aws-cdk/aws-budgets.CfnBudget.SpendProperty","data":{"amount":10,"unit":"USD"}}},"budgetName":"CDK budget","costFilters":null,"costTypes":null,"plannedBudgetLimits":null,"timePeriod":null}}},"notificationsWithSubscribers":{"$jsii.struct":{"fqn":"@aws -cdk/aws-budgets.CfnBudget.NotificationWithSubscribersProperty","data":{"notification":{"$jsii.struct":{"fqn":"@aws-cdk/aws-budgets.CfnBudget.NotificationProperty","数据":{"comparisonOperator":"GREATER_THAN","notificationType":"FORECASTED","threshold":90,"thresholdType":"PERCENTAGE"}}},"subscribers":[{"$jsii.struct": {"fqn":"@aws-cdk/aws-budgets.CfnBudget.SubscriberProperty","data":{"address":"${Token[TOKEN.56]}","subscriptionType":"SNS"}} }]}}}}}}

我正在使用带有类型提示的 IDE,所以我不知道这是如何出现类型不匹配的。

感谢您的阅读和您的见解。

【问题讨论】:

    标签: python aws-cdk


    【解决方案1】:

    当使用 python 和创建一个 Construct 时,你有两个选项来传递 props。直接使用 Props 对象或使用 Props 对象的参数作为键/值对。您正在混合这两种方法。由于您正在创建一个 Props 对象,因此您应该直接传递它

    budget = aws_budgets.CfnBudget(self, 'cdk budget', budget_props)
    

    你也可以这样做,而不是创建一个 Props 对象

    budget = aws_budgets.CfnBudget(
        self, 'cdk budget', 
        budget=budget_data_props, 
        notifications_with_subscribers=nws
    )
    

    【讨论】:

    • 并不是说这不是一个潜在的解决方案,但我以两种方式进行了这些更改并留下了同样的错误。这可能只是问题的一部分吗?
    • 您可能会遇到不同的错误,因为它们真的很难解释。鉴于您在“值与联合中的任何类型不匹配:Wire struct type '@aws-cdk/aws-budgets.CfnBudgetProps' 与预期的 '@aws-cdk/aws-budgets.CfnBudget.BudgetDataProperty 不匹配”问题中发布的错误'," 这就是说在这一行:budget = aws_budgets.CfnBudget(self, 'cdk budget', budget=budget_props) “budget=”期待 BudgetDataProperty 但得到 CfnBudgetProps。切换到这个并粘贴你得到的错误。 CfnBudget(self, 'cdk 预算', budget_props)
    • 如果你想在你的解决方案中添加 notification_with_subscribers 应该是一个数组。我会给你一个绿色的复选标记。
    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 2018-11-14
    • 2017-03-23
    • 2022-08-18
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多