微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在AWS CDK中使用内在函数!sub方法?

如何解决如何在AWS CDK中使用内在函数!sub方法?

我想将以下资源用于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函数解决方案。让我知道我做错了什么。

谢谢。

解决方法

由于在使用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 举报,一经查实,本站将立刻删除。