自动化Cloudformation模板部署

时间:2019-05-19 10:54:57

标签: amazon-web-services amazon-cloudformation

我目前正在使用Cloudformation模板来配置AWS中的资源。

当前,如果需要创建VPC和安全组,首先,我将从模板创建VPC,然后再次为安全组启动另一个模板,在该模板中手动输入VPC ID。

现在,我需要在Cloudformation中自动执行此手动过程。我怎样才能做到这一点?我可以使用AWS Developer工具或其他自动化工具吗?

2 个答案:

答案 0 :(得分:2)

简短答案

您需要遵循一种输出所创建的任何AWS资源的ARN /名称的做法,因此,如果以后需要它们,可以通过在新模板中进行导入来通过简单的引用轻松地做到这一点。

正如Nimo在上面的答案中所解释的,为此,您需要在Export部分中的Outputs函数中使用所有模板,这些模板您希望可以重复使用。然后,您以后可以轻松使用Fn::ImportValue来使用先前创建的资源,而无需知道资源的实际物理ID。这称为跨堆栈引用。

自动化部分的说明

看来您的基础架构需要持续集成和持续部署(CICD),因此您的代码更改将直接/自动部署到AWS。您将必须为此设置管道,以下是最简单但并非唯一的方法:

  1. 使用Github / AWS代码提交等来存储您的CloudFormation代码 并将其触发器设置为分支,例如您的master分支 更改将触发管道,并将部署这些管道 自动更改。

  2. 为此目的使用AWS的本机服务AWS CodePipeline。这是 您可以在其中定义一个具有多个阶段的完整管道,而每个阶段可能有许多动作,每个动作都会创建一个堆栈。所有堆栈都可以使用先前创建的堆栈的输出,并且一些东西也可以传递到参数中。为此,您将必须使用AWS::CodePipeline::Pipeline作为资源来创建一个新堆栈。

  3. 将输出也用于没有导出功能的资源 您认为需要的那些资源。例如,您 如果有的话,可能需要负载均衡器的DNS终结点。

这里是一个Reference Pipeline Stack,它使用s3作为存储代码的源。

答案 1 :(得分:0)

您还没有真正提供足够的信息。如果您正在使用CICD,例如jenkins。

您可以在云形成模板中指定输出变量,其他模板可以引用这些输出变量。

所以你可能会有类似的东西。

Outputs:
  VpcId:
    Value: !Ref VPC
    Export:
      Name: Unique-VpcId

然后将其导入另一个堆栈中,例如

VpcId:
    Fn::ImportValue: Unique-VpcId