如何解决如何在AWS CDK中使用内在函数!sub方法?
我想将以下资源用于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合成器
我仍然遇到与上述相同的错误。
问题:
请给我一个关于如何在CDK的cloudformation中使用!sub函数的解决方案。让我知道我做错了什么。
谢谢。
解决方法
由于在使用AWS CDK创建基础架构时使用的是常规python,因此可以使用python内置的'format'方法:
'arn:aws:s3:::%s/AWSLogs/%s/*' % (bucket.bucket_name,core.Environment.account)
或使用旧的python字符串格式化方式
/// <summary>Interface A</summary>
public interface A {
/// <summary>Attribute A</summary>
string AttributeA;
}
/// <summary>Interface B</summary>
public interface B : A {
/// <summary>Attribute B</summary>
string AttributeB;
}
,
由于您使用的是Python(或其他编程语言),因此无需使用Cloudformation提供的内部函数。
我建议格式化arn的一种更优雅,更简单的方法:
arn= f'arn:aws:s3:::{bucket.bucket_name}/AWSLogs/{core.Environment.account}/*'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。