gpt4 book ai didi

amazon-web-services - ec2 的 AWS Cloudformation 默认 key 对

转载 作者:行者123 更新时间:2023-12-03 07:33:53 26 4
gpt4 key购买 nike

我有一个用于创建 ec2 实例的 cloudformation 模板。该模板还会启动一个 httpd 以及所提供的一些内容。

我使用参数部分来允许指定或选择键 - 请参阅下面的代码片段:

Parameters:
paramKeyPair:
Description: KeyPairName
Type: AWS::EC2::KeyPair::KeyName

我通过 AWS CLI 调用 ec2 实例,如下所示:

aws cloudformation create-stack --stack-name stack-ec2instance --template-body file://demo-ec2instance --parameters ParameterKey=paramKeyPair,ParameterValue=peterKeyPair

因此可以创建实例,并且可以将 key 对作为参数传递 - 但是 - 坦率地说,我实际上并不太关心实例是否可以访问。它只是一个可以启动或关闭的网络服务器。 SSH 访问很好,但没什么大不了的。

事实上,如果我从 cloudformation 模板中删除了 keypair 参数 - 并删除了 AWS CLI 调用中的关联引用 - Cloudformation 将很乐意在没有 key 对的情况下启动实例。太棒了!

我真正想要的是云信息来处理 key 对是否存在。我认为最好的方法是更新代码,使参数具有默认值“None”(例如),然后可以从 AWS CLI 运行 ec2 实例,并且如果 key 对参数不是指定后,AWS 就会知道根本不用理会 key 对。

问题在于,通过将类型指定为 AWS::EC2::KeyPair::KeyName,AWS CLI 需要实际值。

我没有主意了 - 如果其他人已经解决了这个问题 - 我将非常感激。谢谢彼得。

最佳答案

如果我理解正确,您希望能够将参数保留在 Cloudformation 模板中,但仅在指定值时才将 key 对“分配”给实例,否则不要将 key 对分配给 ec2实例资源。您可以使用 AWS::NoValue 伪参数来执行此操作。

这是一个示例模板:


Description: My EC2 instance

Parameters:
SSHKeyName:
Type: String

Conditions:

Has-EC2-Key:
!Not [ !Equals [ !Ref SSHKeyName, '' ] ]

Resources:

Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: <InstanceImageID>
InstanceType: t2.micro
KeyName: !Ref SSHKeyName
KeyName:
Fn::If:
- Has-EC2-Key
- Ref: SSHKeyName
- Ref: AWS::NoValue
<other properties as required

因此,条件检查 SSHKeyName 值是否为空,如果为空,则 KeyName 属性将被忽略,如果不为空,则将使用 SSHKeyName 的值。

关于amazon-web-services - ec2 的 AWS Cloudformation 默认 key 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70881426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com