如何将 ssh 密钥对与 Amazon CloudFormation 中的堆栈创建的实例相关联?

Sha*_*ner 7 ssh amazon-ec2 amazon-cloudformation

之前我已经基于镜像创建了一个 EC2 实例。在创建过程中,亚马逊向导创建了一个密钥对,然后将其提供给我,以便我可以连接。

现在我尝试使用 CloudFormation,以便我的新服务器安装了一些基本软件(LAMP 堆栈)。但是我最终得到的 EC2 实例没有我可以找到的 ssh 密钥对。

在 CloudFormation 上创建堆栈时,是否可以关联密钥对?

我已经读到有一些方法可以通过停止实例、创建克隆以及其他一些步骤来将密钥添加到实例的卷中。但是我在这方面的管理技能并不那么强,所以我希望(对我来说)更简单。

希望这是有道理的 - 非常感谢任何帮助!

Ste*_*pel 8

在 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" }
      }
    }
  },
Run Code Online (Sandbox Code Playgroud)

此片段允许将所需的密钥对名称作为参数传递,或者您可以直接嵌入名称或仅提供默认名称。

祝你好运!


小智 6

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" }
    }
  }
},
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。

另请参阅:https://blogs.aws.amazon.com/application-management/post/Tx3DV2UYG9SC38G/Using-the-New-CloudFormation-Parameter-Types