是否可以将在cloudformation之外创建的现有AWS资源合并到现有cloudformation堆栈中?我想这样做,而不必在cloudformation堆栈中添加新资源并将现有资源的数据迁移到该新资源上。我看到AWS现在具有针对云形成堆栈的漂移检测。我想知道是否可以利用它来将现有资源合并到堆栈中。
答案 0 :(得分:5)
将资源导入/采用资源到现有CloudFormation堆栈中的能力是CloudFormation客户的第一要问。我们已经思考了一段时间了,但是还没有找到既能满足客户需求又能在服务运营规模上发挥作用的机制。
由于我们不会在服务之外的任何地方公开堆栈状态信息供您修改,因此只有在提供采用功能之前,您可以采取的唯一方法是将有关资源的元数据存储在参数存储中,或者使用自定义作为包装的资源,以检索有关基础资源的信息,然后通过Fn :: GetAtt将其显示到堆栈中。
答案 1 :(得分:5)
现在您终于可以使用“资源导入”功能了,请参考:
https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md
https://twitter.com/shortjared/status/1193985448164691970?s=21
答案 2 :(得分:3)
您可以通过Parameters将现有资源信息传递到堆栈中来实现。 Here is an example介绍如何将这些参数传递到堆栈。
从Eric Hammond中检出this blog post,描述如何将这些参数合并到堆栈的其余部分中。所描述的用例有些不同,因为如果没有传入它们,它们可以选择创建新资源,但是总体结构适用于您描述的情况。
在这种情况下,我认为“漂移检测”不会帮助您,因为它会显示已部署资源和堆栈中描述的配置之间的差异。在堆栈外部定义/创建的资源将不会被检查。
答案 3 :(得分:2)
答案 4 :(得分:0)
Cloudformer可以帮助您从现有资源创建新堆栈,然后可以向堆栈中添加更多资源。但是,不知道一种将现有堆栈与堆栈外部的现有资源“合并”的方法。
答案 5 :(得分:0)
Amazons CDK(当前在撰写本文时处于开发人员预览阶段)提供了一种方法:
如果您需要引用在CDK应用程序之外定义的资源(例如Amazon S3存储桶或VPC),则可以使用AWS构造中可用的Xxxx.import(...)静态方法。例如,您可以使用Bucket.import()方法来获取BucketRef对象,该对象可以在大多数需要存储桶的地方使用。通过这种模式,可以将在应用程序外部定义的资源视为应用程序的一部分。
来源:https://docs.aws.amazon.com/CDK/latest/userguide/aws_construct_lib.html
它还允许导入现有的CloudFormation模板: https://docs.aws.amazon.com/CDK/latest/userguide/use_cfn_template.html
答案 6 :(得分:0)
就我而言,我需要从我账户中现有的 SAM 输出中导入一个 ARN 值,以便我可以在我的新堆栈中添加正确的调用策略。
我正在寻找 SAM 的 Fn::ImportValue
等价物,并发现核心模块有一个静态 Fn.importValue
方法,您可以这样使用:
const cdk = require('@aws-cdk/core');
const lambda = require('@aws-cdk/aws-lambda')
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
// The below line did the trick
const arn = cdk.Fn.importValue(`your-sam-function-export-name`)
const myLambda = lambda.Function.fromFunctionArn(this, 'myLambda', arn)
// ...
}
}
参考:https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Fn.html