问题描述
我想从我正在运行的堆栈中导出一个值,然后将它作为“全局”参数导入另一个堆栈,以便我可以操纵它并将其用于 S3 存储桶名称。我已经知道我可以使用以下内容在资源中的一行中单独导入值:
{ "Fn::ImportValue" : { "Fn::Sub" : "${StackName}-ParameterName" } }
但是有没有办法将它导入我的参数部分?
感谢您的帮助
解决方法
但是有没有办法将它导入我的参数部分?
没有这样的选择。最接近的方法是将全局值保存在 SSM Parameter Store 中,并使用 CloudFormation 中的 dynamic references 作为 Default
中的 Parameters
值。
有两种方法可以实现这一点
-
使用SSM Parameter Store,将源栈中的值存储到SSM参数存储中
BasicParameter: Type: AWS::SSM::Parameter Properties: Name: AvailabilityZone Type: String Value: Ref: AvailabilityZone
然后将值直接引用到参数部分,如下所示:
---
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
...
AvailabilityZone:
Description: Amazon EC2 instance Availablity Zone
Type: AWS::SSM::Parameter::Value<String>
Default: AvailabilityZone
Mappings: {}
Conditions: {}
Resources:
myinstance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone:
Ref: AvailabilityZone
...
完整的例子可以在here
- 您在启动堆栈时使用源堆栈的输出并将它们传递到目标堆栈。
配置的源堆栈输出
Outputs:
InstanceID:
Description: The Instance ID
Value: !Ref EC2Instance
在目标堆栈中使用它们:
aws \
--region us-east-1 \
cloudformation deploy \
--template-file cfn.yml \
--stack-name mystack \
--no-fail-on-empty-changeset \
--tags Application=awesomeapp \
--parameter-overrides \
"Somevar=OUTUT_FROM_SOURCE_STACK"