【问题标题】:How to use intrinsic functions !sub method in Aws cdk?如何在 Aws cdk 中使用内部函数!sub 方法?
【发布时间】:2020-10-22 10:10:49
【问题描述】:

我想将此资源用于我的 cdk 应用程序,我将 Python 用于 CDK:

'arn:aws:s3:::${LoggingBucket}/AWSLogs/${AWSAccoutID}/*'

因此我需要替换LoggingBucketAWSAccountID 的值。

这是我尝试过的:

bucket = s3.Bucket(self, "my-bucket", bucket_name = 'my-bucket')

core.Fn.sub('arn:aws:s3:::${LoggingBucket}/AWSLogs/${AWSAccoutID}/*',[bucket.bucket_name, core.Environment.account])

但我收到core.Fn.sub 行的此错误:

AttributeError: type object 'property' has no attribute '__jsii_type__'
Subprocess exited with error 1

然后我也尝试了这个:

mappings = {
    'LoggingBucket': bucket.bucket_name,
    'AWSAccountID': core.Environment.account
}

core.Fn.sub('arn:aws:s3:::${LoggingBucket}/AWSLogs/${AWSAccoutID}/*',mappings)

$ cdk 合成器

我仍然遇到与上述相同的错误。

问题:

请给我一个关于如何在 CDK 的 cloudformation 中使用 !sub 功能的解决方案。让我知道我做错了什么。

谢谢。

【问题讨论】:

    标签: python amazon-cloudformation aws-cdk


    【解决方案1】:

    由于您在使用 AWS CDK 创建基础设施时使用的是常规 python,因此您可以使用 python 的内置“格式”方法:

    'arn:aws:s3:::{}/AWSLogs/{}/*'.format(bucket.bucket_name, core.Environment.account)
    

    或者使用旧的python字符串格式化方式

    'arn:aws:s3:::%s/AWSLogs/%s/*' % (bucket.bucket_name, core.Environment.account)
    

    【讨论】:

      【解决方案2】:

      由于您使用的是 Python(或其他编程语言),因此无需使用 Cloudformation 提供的内在函数。

      我建议一种更优雅、更简单的方式来格式化 arn:

      arn= f'arn:aws:s3:::{bucket.bucket_name}/AWSLogs/{core.Environment.account}/*'
      

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 2021-04-08
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-06
        • 2021-10-15
        相关资源
        最近更新 更多