Packer 无法与 AWS 实例通信

Packer unable to communicate with AWS Instance

我只是在玩打包机,我创建了一个简单的模板,如下所示:

{
  "variables": {
    "aws_access_key": "{{env `AWS_ACCESS_KEY`}}",
    "aws_secret_key": "{{env `AWS_SECRET_KEY`}}"
  },
  "builders": [
    {
      "type": "amazon-ebs",
      "access_key": "{{user `aws_access_key`}}",
      "secret_key": "{{user `aws_secret_key`}}",
      "region": "us-east-1",
      "vpc_id": "MY_DEFAULT_VPC_ID",
      "subnet_id": "MY_PUBLIC_SUBNET_ID",
      "source_ami": "ami-a025aeb6",
      "instance_type": "t2.micro",
      "ssh_username": "ubuntu",
      "ami_name": "packer-example {{timestamp | clean_resource_name}}"
    }
  ]
}

当我 运行 packer build initial_ami.json 我得到以下错误。

amazon-ebs: output will be in this color.

==> amazon-ebs: Prevalidating any provided VPC information
==> amazon-ebs: Prevalidating AMI Name: packer-example 1628354042
    amazon-ebs: Found Image ID: ami-a025aeb6
==> amazon-ebs: Creating temporary keypair: packer_***********
==> amazon-ebs: Creating temporary security group for this instance: packer_****
==> amazon-ebs: Authorizing access to port 22 from [0.0.0.0/0] in the temporary security groups...
==> amazon-ebs: Launching a source AWS instance...
==> amazon-ebs: Adding tags to source instance
    amazon-ebs: Adding tag: "Name": "Packer Builder"
    amazon-ebs: Instance ID: i-******
==> amazon-ebs: Waiting for instance (i-*****) to become ready...
==> amazon-ebs: Using SSH communicator to connect: 172.**.*.**
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Timeout waiting for SSH.
==> amazon-ebs: Terminating the source AWS instance...
==> amazon-ebs: Cleaning up any extra volumes...
==> amazon-ebs: No volumes to clean up, skipping
==> amazon-ebs: Deleting temporary security group...
==> amazon-ebs: Deleting temporary keypair...
Build 'amazon-ebs' errored after 6 minutes 51 seconds: Timeout waiting for SSH.

==> Wait completed after 6 minutes 51 seconds

==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: Timeout waiting for SSH.

==> Builds finished but no artifacts were created.

所以一切正常,直到它尝试连接实例的 ssh 端口。它似乎正在使用 172.... IP,所以我认为它不会连接到实例。我的问题是:

  1. 这个问题是不是因为 packer 正在创建一个没有 public IP 的实例?
  2. 如果是这样,那么我如何强制加壳器创建一个具有 public IP 的实例,然后使用该 public IP 连接到 ssh 服务?

好的,我明白了,我们需要做的就是设置:

"associate_public_ip_address": true 在模板文件的构建器部分。

我建议您在构建 Packer 映像时不要使用 public IP,而是将 ssh_interface 设置为 private_ip,这样如果您将它用作ci/cd 流程的一部分,否则如果您更频繁地构建它们,您将收取大量数据传输成本