之前我曾基于镜像创建过 EC2 实例。在创建过程中,Amazon 向导创建了一对密钥,然后将其提供给我,以便我进行连接。
现在我尝试改用 CloudFormation,这样我的新服务器就安装了一些基本软件(LAMP 堆栈)。但我最终得到的 EC2 实例没有我能找到的 ssh 密钥对。
有没有办法在 CloudFormation 上创建堆栈时关联密钥对?
我读到过,有几种方法可以通过停止实例、创建克隆以及一些其他步骤将密钥添加到实例的卷中。但我在这方面的管理技能不是很强,所以我希望找到一种(对我来说)更直接的方法。
希望这是有意义的 - 任何帮助都非常感谢!
答案1
有没有办法在 CloudFormation 上创建堆栈时关联密钥对?
当然,它确实可以通过在此过程中关联你现有的密钥对来工作;AWS CloudFormation 示例模板以相应的片段为特征,例如简单 EC2 实例示例包含您正在寻找的片段:
"Parameters" : {
"KeyName" : {
"Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
"Type" : "String"
}
},
[...]
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"UserData" : { "Fn::Base64" : "80" }
}
}
},
此片段可以将所需的密钥对名称作为参数传递,或者您可以直接嵌入名称或仅提供默认名称。
祝你好运!
答案2
AWS CloudFormation 参数还可以为您提供您账户和区域中所有可用密钥的列表。只需将参数的“类型”更改为所需的 AWS 类型即可。在本例中,它将是“AWS::EC2::KeyPair::KeyName”。
使用“CloudFormation 参数类型”,上述示例将是:
"Parameters" : {
"KeyName" : {
"Description" : "EC2 KeyPair to enable SSH access to the instance",
"Type" : "AWS::EC2::KeyPair::KeyName"
},
},
[...]
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"UserData" : { "Fn::Base64" : "80" }
}
}
},
我希望这有帮助。