pass stack output from one stack in account_A to another stack in Account_B

0

Hi team,

I have a list of CDK stacks I can deploy in my dev, stage and prod AWS accounts.

one of my stacks (the ECR stack) is deployed only in the DEV account (as a single source of docker images), how can I pass the ECR repository URI to my other stack (the EcsfargateStack) when I deploy to the other accounts: prod and stage?

in dev I do like this :

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

but in stg and prod ECRRepositoryStack is not deployed but I still need to deploy ecsfargateStack in prod and stg and give them ECRRepositoryStack.repositoryUri, like above

how can I get ECRRepositoryStack.repositoryUri to pass it in my ecsfargateStack in stg and prod knowing that ECRRepositoryStack is uniquely deployed in DEV ?

==>

stack_A(generate repoUri property) is deployed only in account 123, then the property generated in StackA in account 123 needs to be used by Stack_B in accounts 456 and 789.

thank you!!!

Jess
已提問 2 年前檢視次數 1104 次
1 個回答
0
已接受的答案

Hello,

Hope you are doing well!

I understand that you want to know if in a single CDK project, you can pass stack output from one stack in account_A to another stack in Account_B. In the CDK example provided, like you said, it is creating exports from "ECRRepositoryStack" stack, which will be imported by Stack "ecsfargateStack" to consume.

The answer is no, CDK does not support this use-case due to underlying Service AWS CloudFormation has limitation around stack exports and imports.

Although CDK is a more programmatic service, but limitations from the heavy lifting service CloudFormation still apply. The Exports/Imports feature of CloudFormation is for cross-reference so stacks that are in the same AWS account and region can import the exported values[1]. Therefore, the CDK cross-stack reference like this are still leveraging the same feature so not even cross region can be achieved:

# Base infrastructure stack, Lambda Functions, DynamoDB Tables, etc....
infra = InfraStack(app, "CDK-L3-infrastructure", env=env)

# Application stack that generally changes independently of the underlying infrastructure stack
application = ComputeStack(app, "CDK-L3-application", referenced_function=infra.main_function, referenced_vpc=infra.main_vpc, env=env)

Please consider store your values need to be retrieved in another regions/accounts in a SecreteManager Secret along with necessary trust policies. So other stack in different region can just get its value by utilizing

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

Best regards

References:

[1] https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html

[2] https://docs.aws.amazon.com/cdk/api/v1/docs/@aws-cdk_aws-secretsmanager.Secret.html#methods

AWS
已回答 2 年前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南