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

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

之前我曾基于镜像创建过 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" }
    }
  }
},

我希望这有帮助。

也可以看看:https://blogs.aws.amazon.com/application-management/post/Tx3DV2UYG9SC38G/Using-the-New-CloudFormation-Parameter-Types

相关内容