如何获取 AWS Autoscaling 启动实例的 pem 文件

How to get pem file for AWS Autoscaling launched instance

我有一个 Terraform 脚本可以启动 VPC、子网、数据库、自动缩放和其他一些东西。自动缩放使用默认 Windows Server 2012 R2 映像来启动新实例(包括初始实例)。每个实例在启动后都在执行 Chef 安装。我需要登录实例,以便确认 Chef 已安装,但我没有任何 .pem 密钥。我如何使用 Autoscalinglaunch_configuration 启动实例并输出 .pem 文件以便我之后可以登录? 这是脚本的自动缩放部分:

resource "aws_autoscaling_group" "asgPrimary" {
  depends_on = ["aws_launch_configuration.primary"]
  availability_zones        = ["${data.aws_availability_zones.available.names[0]}"]
  name                      = "TerraformASGPrimary"
  max_size                  = 1
  min_size                  = 1
  wait_for_capacity_timeout = "0"
  health_check_grace_period = 300
  health_check_type         = "ELB"
  desired_capacity          = 1
  force_delete              = false
  wait_for_capacity_timeout = "0"
  vpc_zone_identifier = ["${aws_subnet.private_primary.id}"]
  #placement_group           = "${aws_placement_group.test.id}"
  launch_configuration      = "${aws_launch_configuration.primary.name}"
  load_balancers = ["${aws_elb.elb.name}"]
}

这是我的启动配置:

resource "aws_launch_configuration" "primary" {
  depends_on = ["aws_subnet.primary"]
  name          = "web_config_primary"
  image_id      = "${data.aws_ami.amazon_windows_2012R2.id}"
  instance_type = "${var.ami_type}"
  security_groups = ["${aws_security_group.primary.id}"]
  user_data = "${template_file.user_data.rendered}"
}

我需要避免使用 Amazon CLI 或网页本身 - 关键是要自动化以便在我的所有其他解决方案中重用。

用于 RDS/SSH EC2 实例的 .pem 文件不会在 EC2 实例启动期间生成。使用AWS管理控制台时可能看起来像这样,但实际上是先生成密钥对,然后在启动时将密钥对分配给EC2实例。

要获取您的 .pem 文件,首先:

  1. 生成新的密钥对。参见 Amazon EC2 Key Pairs。执行此操作后,您将能够下载 .pem 文件。
  2. 使用 key_name 参数将该密钥对分配给您的 Auto Scaling 组的启动配置。

这是一个例子:

resource "aws_launch_configuration" "primary" {
  depends_on = ["aws_subnet.primary"]
  name          = "web_config_primary"
  image_id      = "${data.aws_ami.amazon_windows_2012R2.id}"
  instance_type = "${var.ami_type}"
  security_groups = ["${aws_security_group.primary.id}"]
  user_data = "${template_file.user_data.rendered}",
  key_name = "my-key-pair"
}

参见:https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#key_name