即
我的项目.我的堆栈.py
from aws_cdk import core
from aws_cdk.aws_s3 import Bucket
class MyStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
self.s3_bucket = Bucket(self, "s3-bucket-id")
app.py
from aws_cdk import core
from my_project.my_stack import MyStack
app = core.App()
my_stack = MyStack(app, "my-stack")
app.synth()
if __name__ == "__main__":
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(my_stack.s3_bucket.bucket_name)
# ^ raises -- AttributeError: 's3.ServiceResource' object has no attribute 'bucket_name'
运行python app.py
将引发AttributeError:'s3.ServiceResource'对象没有属性'bucket\u name'
当
aws-cdk
实例化一个表示资源的类时,它不一定是已部署的。s3_bucket.bucket_name
的值是一个令牌,表示在其他cloudformation资源中引用的bucket名称字符串。部署非cdk应用程序后,在该应用程序中获取bucket名称的最佳方法是将该值存储在可从应用程序访问的位置这可以是使用^{} 的cloudformation输出值或SSM参数。你可以这样做:
然后从ssm获取参数值。或者您可以静态地命名bucket,并引用bucket name字符串而不是参数名
在应用程序运行时能够透明地引用这样的资源的想法已经被实验过,punchcard是最显著的例子,但是现在构造标记化的值只在CDK应用程序的上下文中被理解
相关问题 更多 >
编程相关推荐