AWS / Cloudformation:如何将参数值导出/导入到另一个堆栈(YAML)

时间:2017-03-28 10:16:48

标签: amazon-web-services amazon-cloudformation

我有一个简单的问题。我正在测试云形成中值的导出/导入。

问题是:如何根据来自其他堆栈的链接条件创建资源?

我想我应该从其他堆栈中导入值,但不知道如何......

这是我的" export-test-stack"



AWSTemplateFormatVersion: '2010-09-09'

Description: Export

Parameters:
  EnvType: 
    Description: How many Instances you want to deploy?
    Default: two
    Type: String
    AllowedValues: 
      - two
      - three
    ConstraintDescription: must specify number of deployed Instances

Conditions: 
  Deploy3EC2: !Equals [ !Ref EnvType, three ]
       
Resources:
  Ec2Instance1:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      SecurityGroupIds:
      - sg-5d011027
      ImageId: ami-0b33d91d
  Ec2Instance2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro  
      SecurityGroupIds:
      - sg-5d011027
      ImageId: ami-0b33d91d
  Ec2Instance3:
    Type: AWS::EC2::Instance
    Condition: Deploy3EC2
    Properties:
      InstanceType: t2.micro
      SecurityGroupIds:
      - sg-5d011027
      ImageId: ami-0b33d91d

      
Outputs:
  EC2Conditions:
    Description: Number of deployed instances
    Value: !Ref EnvType
    Export:
      Name: blablabla




这是我的#34; import-test-stack"



AWSTemplateFormatVersion: '2010-09-09'

Description: Import
        
Resources:
  Ec2Instance1:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      SecurityGroupIds:
      - sg-7309dd0a
      ImageId: ami-70edb016
  Ec2Instance2:
    Type: AWS::EC2::Instance
    Condition: ??????  <<<<<<<<<
    Properties:
      InstanceType: t2.micro  
      SecurityGroupIds:
      - sg-7309dd0a
      ImageId: ami-70edb016
&#13;
&#13;
&#13;

关于跨堆栈引用,所以我想在&#34; import-test-stack&#34;中部署Ec2Instance2。只有当我选择在之前的&#34; export-test-stack&#34;中部署三个实例时。怎么做?

因此,如果我选择部署三个实例,我想在&#34; import stack&#34;中使用条件。要部署另外两个实例,如果我选择部署两个实例,它将只在&#34; import-stack&#34;

中部署一个实例

我知道条件如何工作,但仍然无法找到方法,如何在交叉引用堆栈中使用。

我知道这是一个愚蠢的例子,但我只想在尽可能简单的模板上进行测试。

2 个答案:

答案 0 :(得分:0)

您有两种选择:继续使用分隔堆栈或将它们组合以创建nested stack.

使用嵌套堆栈,您可以使用一个堆栈的输出作为另一个堆栈的输入。

如果要继续使用分隔堆栈,请使用Fn::ImportValue函数导入从另一个堆栈导出的输出值。

Exporting Stack Output Values页面已涵盖这两个角度。此外,如果您选择使用Fn::ImportValuecross-stack reference walkthrough可能对您有帮助。

答案 1 :(得分:0)

这将使您导入正确的值: Fn :: ImportValue:EC2条件

您也可以使用规则。您可以根据输出值来设置规则。