如何将现有资源从不同的 AWS 账户导入 AWS CDK

Posted

技术标签:

【中文标题】如何将现有资源从不同的 AWS 账户导入 AWS CDK【英文标题】:How to import an existing resource into AWS CDK from a different AWS account 【发布时间】:2021-12-28 22:31:33 【问题描述】:

我有一个使用 CDK 创建的 AWS codpipeline,我想部署到另一个账户中的 codedeploy 部署组。知道如何将另一个帐户中的现有部署组导入我的堆栈吗?

【问题讨论】:

【参考方案1】:

你不能那样做。 CloudFormation 是基于帐户和区域的。您不能创建一个堆栈来管理其他帐户中的资源。

【讨论】:

谢谢,那么我可以在不同的帐户中创建 2 个堆栈,它们相互引用资源吗? @UtibeabasiUmanah 可悲的是,你不能,因为堆栈是帐户和区域范围的。您必须将第一个帐户中的任何值作为输入参数传递给其他帐户中的模板。 好的,假设我有一个代码管道堆栈...我可以从另一个帐户的堆栈中传入一个代码部署部署组吗? @UtibeabasiUmanah 这取决于你想用它做什么。您没有提供任何代码或任何错误消息。所以很难推测。如果您发现困难,请提出新问题并提供您的代码。此外,如果我目前的回答有帮助,我们将不胜感激。【参考方案2】:

目前公认的答案没有错,但也只是故事的一半。

Cloudformation 本身无法管理多个帐户中的资源。这是真的。

但是,您的 CodePipeline 可以在另一个帐户中担任角色并将 Cloduformation 堆栈部署到该帐户。这是拥有 Dev 环境和 Prod 环境时的常见做法 - 您将更改 prod 帐户中任何内容的访问权限限制为 CodePipeline 可以为您承担和部署的单个角色 - 但没有用户可以。 (有关更多信息,请参阅https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create-cross-account.html

如果你有的话。用于您的 Stack Group 的 CDK 应用程序,然后您可以重新使用它来部署到另一个帐户 - 这是被广泛接受的 CDK 的主要用例之一 - 相同基本结构的多帐户部署。

跨账户使用的任何资源都需要在 EC2 实例中拥有自己的 Lambda 或脚本,该实例承担另一个跨账户角色,使他们能够访问该资源以检索您需要的任何内容。

但是,您不能将单个云形成堆栈(或 cdk 堆栈)部署到两个帐户 - 但您可以通过单个 CodePipeline 使用多个堆栈来执行此操作

【讨论】:

以上是关于如何将现有资源从不同的 AWS 账户导入 AWS CDK的主要内容,如果未能解决你的问题,请参考以下文章

使用AWS CLI将现有资源导入CloudFormation

AWS同账户不同地域资源访问(ses到lambda)

Terraform 和 AWS:修改现有策略

将现有 AWS 资源整合到 CloudFormation 堆栈中

如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?

从不同账户部署 AWS Lambda