将账户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
EXPERTE
gefragt vor 6 Monaten6 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen