在没有参数化的情况下在 AWS CloudFormation 中引用 EC2 实例的名称标签
Referencing an EC2 instance's name tag in AWS CloudFormation without parameterization
我有一个 CloudFormation 堆栈,它创建一个 EC2 实例并给它一个名称标签。
我想创建一个 CloudWatch 警报,并在警报名称中引用 EC2 实例的名称 - 类似于 AlarmName: !Sub "Status Check Alarm - ${EC2InstanceName}"
。
!Ref
将允许我引用 CloudFormation 脚本的参数,但我不想参数化 EC2 实例名称 - 我不希望或不需要它是可定制的,我也不想希望用户能够为服务器选择自定义名称。
我尝试输出 EC2 实例名称,这样我就可以 !Ref
,但是我遇到了 Invalid template resource property 'Outputs'
错误,所以我不知道我的方法是否有效:
EC2Instance:
Properties: ...
Type: AWS::EC2::Instance
Outputs:
EC2InstanceName:
Description: The server's name.
Value: !GetAtt EC2Instance.Tags.Name
Export:
Name: "EC2InstanceName"
如何在不在脚本顶层参数化名称的情况下引用 EC2 实例的名称?
编辑:
我最终还是使用了参数,所以我可以 !Ref
它们。我想您还可以设置一个“允许值”列表,其中仅包含一个与默认值匹配的值。它很蹩脚,但我想它有效。
Parameters:
EC2InstanceName:
Type: String
Default: "web-server-blah"
Description: The name of the EC2 instance.
您只能对文档中明确命名的属性使用 !GetAtt
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
标签不在其中。
但是如果您为您的实例提供不同的标签,那么您甚至可以在不导出它的情况下引用它(前提是它是一个常量值)。
我明白你想做什么,但 AWS 不支持你想开箱即用的一切。我想象的一种实现方式——您可能不喜欢它——是通过宏或自定义资源(lambda 函数)。
不能用就用!Ref EC2Instance
?我意识到它不会是友好的“名称”标签值,但它可能更有用,尤其是当您有相同“名称”的重复项时。它会让您的警报类似于“状态检查警报 - i-123456789”。
而如果您使用该名称,它可能更像是 10 个警报,内容为“状态检查警报 - WWWServer”,但现在是哪个 WWWServer?
我有一个 CloudFormation 堆栈,它创建一个 EC2 实例并给它一个名称标签。
我想创建一个 CloudWatch 警报,并在警报名称中引用 EC2 实例的名称 - 类似于 AlarmName: !Sub "Status Check Alarm - ${EC2InstanceName}"
。
!Ref
将允许我引用 CloudFormation 脚本的参数,但我不想参数化 EC2 实例名称 - 我不希望或不需要它是可定制的,我也不想希望用户能够为服务器选择自定义名称。
我尝试输出 EC2 实例名称,这样我就可以 !Ref
,但是我遇到了 Invalid template resource property 'Outputs'
错误,所以我不知道我的方法是否有效:
EC2Instance:
Properties: ...
Type: AWS::EC2::Instance
Outputs:
EC2InstanceName:
Description: The server's name.
Value: !GetAtt EC2Instance.Tags.Name
Export:
Name: "EC2InstanceName"
如何在不在脚本顶层参数化名称的情况下引用 EC2 实例的名称?
编辑:
我最终还是使用了参数,所以我可以 !Ref
它们。我想您还可以设置一个“允许值”列表,其中仅包含一个与默认值匹配的值。它很蹩脚,但我想它有效。
Parameters:
EC2InstanceName:
Type: String
Default: "web-server-blah"
Description: The name of the EC2 instance.
您只能对文档中明确命名的属性使用 !GetAtt
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
标签不在其中。
但是如果您为您的实例提供不同的标签,那么您甚至可以在不导出它的情况下引用它(前提是它是一个常量值)。
我明白你想做什么,但 AWS 不支持你想开箱即用的一切。我想象的一种实现方式——您可能不喜欢它——是通过宏或自定义资源(lambda 函数)。
不能用就用!Ref EC2Instance
?我意识到它不会是友好的“名称”标签值,但它可能更有用,尤其是当您有相同“名称”的重复项时。它会让您的警报类似于“状态检查警报 - i-123456789”。
而如果您使用该名称,它可能更像是 10 个警报,内容为“状态检查警报 - WWWServer”,但现在是哪个 WWWServer?