将账户A中一个堆栈的输出传递到账户B中的另一个堆栈。

0

【以下的问题经过翻译处理】 我有一份CDK堆栈列表,可以在我的DEV、STAGE和PROD AWS账户中部署。

我的其中一个堆栈(ECR堆栈)仅在DEV账户中部署(作为docker镜像的单一来源),当我在其他账户(PROD和STAGE)部署时,如何将ECR仓库URI传递给我的其他堆栈(EcsfargateStack)?

在DEV中,我是这样做的:

const ecsfargateStack= new EcsfargateStack(app, "EcsfargateStack", {
  env: env,
  ecrRepoUri: ECRRepositoryStack.repositoryUri, //repositoryUri exported value from the ECRRepositoryStack
});

但在STG和PROD中,ECRRepositoryStack未部署,但我仍然需要在PROD和STG中部署ecsfargateStack并提供它们ECRRepositoryStack的repositoryUri(如上所述)。

如何从知道ECRRepositoryStack仅在DEV中部署的情况下,获取ECRRepositoryStack的repositoryUri以在我的ecsfargateStack中传递它们到STG和PROD?

==>

在账户123中部署Stack_A(生成repoUri属性),然后在账户456和789中的Stack_B中使用在账户123中生成的属性。

profile picture
专家
已提问 6 个月前4 查看次数
1 回答
0

【以下的回答经过翻译处理】 我知道你想了解在一个CDK项目中是否可以将一个帐号(Account_A)中一个堆栈的输出传递到另一个帐号(Account_B)中的另一个堆栈。像你所说的,在提供的CDK示例中,它正在从“ECRRepositoryStack”堆栈创建出口,这将被堆栈“ecsfargateStack”导入以进行消耗。

答案是否定的,由于底层服务AWS CloudFormation具有堆栈出口和导入的限制,CDK不支持这种用例。

尽管CDK是更具程序性的服务,但来自繁重服务CloudFormation的限制仍然适用。CloudFormation的导出/导入功能是为了交叉引用,因此在同一个AWS帐户和区域中的堆栈可以导入导出的值[1]。因此,CDK的堆栈交叉引用仍然利用相同的功能,因此即使在不同地区也无法实现交叉引用:

# 基础架构堆栈,Lambda函数,DynamoDB表等...
infra = InfraStack(app,“CDK-L3-infrastructure”,env = env)

# 应用程序堆栈通常独立于基础架构堆栈而进行更改
application = ComputeStack(app,“CDK-L3-application”,referenced_function = infra.main_function,referenced_vpc = infra.main_vpc,env = env)

请考虑将需要在另一个区域/帐户中检索的值存储在具有必要托管策略的SecreteManager Secret中。因此,不同区域中的其他堆栈可以通过利用以下内容获取其值。

static fromSecretNameV2(scope, id, secretName)[2]

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则