如何在 Aws cdk 中使用内部函数 !sub 方法?
How to use intrinsic functions !sub method in Aws cdk?
我想将下面的资源用于我的 cdk 应用程序,我将 Python 用于 CDK:
'arn:aws:s3:::${LoggingBucket}/AWSLogs/${AWSAccoutID}/*'
因此我需要替换 LoggingBucket
和 AWSAccountID
的值。
这是我试过的:
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 synth
我仍然遇到与上述相同的错误。
问题:
请给我一个关于如何在CDK的cloudformation中使用!sub函数的解决方案。让我也知道我做错了什么。
谢谢。
由于您在使用 AWS CDK 创建基础设施时使用的是常规 python,因此您可以使用 python 的 built-in 'format' 方法:
'arn:aws:s3:::{}/AWSLogs/{}/*'.format(bucket.bucket_name, core.Environment.account)
或使用旧方法 python 字符串格式化
'arn:aws:s3:::%s/AWSLogs/%s/*' % (bucket.bucket_name, core.Environment.account)
由于您使用的是 Python(或其他编程语言),因此无需使用 Cloudformation 提供的内部函数。
我建议使用一种更优雅、更简单的方法来格式化 arn:
arn= f'arn:aws:s3:::{bucket.bucket_name}/AWSLogs/{core.Environment.account}/*'
我想将下面的资源用于我的 cdk 应用程序,我将 Python 用于 CDK:
'arn:aws:s3:::${LoggingBucket}/AWSLogs/${AWSAccoutID}/*'
因此我需要替换 LoggingBucket
和 AWSAccountID
的值。
这是我试过的:
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 synth
我仍然遇到与上述相同的错误。
问题:
请给我一个关于如何在CDK的cloudformation中使用!sub函数的解决方案。让我也知道我做错了什么。
谢谢。
由于您在使用 AWS CDK 创建基础设施时使用的是常规 python,因此您可以使用 python 的 built-in 'format' 方法:
'arn:aws:s3:::{}/AWSLogs/{}/*'.format(bucket.bucket_name, core.Environment.account)
或使用旧方法 python 字符串格式化
'arn:aws:s3:::%s/AWSLogs/%s/*' % (bucket.bucket_name, core.Environment.account)
由于您使用的是 Python(或其他编程语言),因此无需使用 Cloudformation 提供的内部函数。
我建议使用一种更优雅、更简单的方法来格式化 arn:
arn= f'arn:aws:s3:::{bucket.bucket_name}/AWSLogs/{core.Environment.account}/*'