amazon-web-services - AWS CDK:如何在同一应用程序中引用跨堆栈资源?
问题描述
我有一个应用程序,它有两个堆栈,都在同一个区域/帐户中。其中一个堆栈需要另一个堆栈中存在的 lambda 的 ARN。我如何参考这个?
// within stackA constructor
public StackA(Construct scope, String id, StackProps props) {
SingletonFunction myLambda = SingletonFunction.Builder.create(this, "myLambda")
// some code here
.build()
CfnOutput myLambdaArn = CfnOutput.Builder.create(this, "myLambdaArn")
.exportName("myLambdaArn")
.description("ARN of the lambda that I want to use in StackB")
.value(myLambda.getFunctionArn())
.build();
}
App app = new App();
Stack stackA = new StackA(app, "stackA", someAProps);
Stack stackB = new StackB(app, "stackB", someBProps);
stackB.dependsOn(stackA);
如何将 ARN 传递到 StackB?
解决方案
您可以访问不同堆栈中的资源,只要它们位于同一账户和 AWS 区域中。以下示例定义了堆栈 stack1,它定义了一个 Amazon S3 存储桶。然后它定义了第二个堆栈 stack2,它从 stack1 中获取存储桶作为构造函数属性。
// Helper method to build an environment
static Environment makeEnv(String account, String region) {
return Environment.builder().account(account).region(region)
.build();
}
App app = new App();
Environment prod = makeEnv("123456789012", "us-east-1");
StackThatProvidesABucket stack1 = new StackThatProvidesABucket(app, "Stack1",
StackProps.builder().env(prod).build());
// stack2 will take an argument "bucket"
StackThatExpectsABucket stack2 = new StackThatExpectsABucket(app, "Stack,",
StackProps.builder().env(prod).build(), stack1.getBucket());
推荐阅读
- firebase - 有没有办法通过命令行在 Firebase 模拟器中创建发布订阅消息?
- android - 社交登录在 Android 浏览器应用程序中不起作用
- javascript - 在按下按钮之前反应组件触发警报以及用户输入之前的 POST 请求
- javascript - 为什么我不能在护照 js 中向 serializeUser 添加电子邮件?
- macos - 无法使用前端 dockerfile.v0 解决:无法读取 dockerfile:来自发件人的错误:打开 /private/tmp/AVScanB2wT:权限被拒绝
- yii2 - Yii2 模块或控制器路由
- node.js - NestJS:使用动态模块设置元数据(将 ServeStaticModule 标记为公共)
- plot - 重新排序散景图例
- flutter - 如何使用 offStage 小部件?
- javascript - 模运算在阈值签名 (TSS) 实现中不起作用