ubuntu 18.04 的打包器构建器 source_ami_filter?

sum*_*tty 1 packer amazon-web-services

我正在尝试使用包装机。

我能够通过以下方式为 ubuntu 16.04 创建图像

"source_ami_filter": {
          "filters": {
            "virtualization-type": "hvm",
            "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
            "root-device-type": "ebs"
          },
Run Code Online (Sandbox Code Playgroud)

但是当它通过将 16.04 修改为 18.04 来尝试相同的文件管理器时

"source_ami_filter": {
          "filters": {
            "virtualization-type": "hvm",
            "name": "ubuntu/images/*ubuntu-xenial-18.04-amd64-server-*",
            "root-device-type": "ebs"
          },
Run Code Online (Sandbox Code Playgroud)

我收到以下错误。

==> amazon-ebs: Prevalidating any provided VPC information
==> amazon-ebs: Prevalidating AMI Name: packer-example 1592389575
==> amazon-ebs: No AMI was found matching filters: {
==> amazon-ebs:   Filters: [{
==> amazon-ebs:       Name: "virtualization-type",
==> amazon-ebs:       Values: ["hvm"]
==> amazon-ebs:     },{
==> amazon-ebs:       Name: "name",
==> amazon-ebs:       Values: ["ubuntu/images/*ubuntu-xenial-18.04-amd64-server-*"]
==> amazon-ebs:     },{
==> amazon-ebs:       Name: "root-device-type",
==> amazon-ebs:       Values: ["ebs"]
==> amazon-ebs:     }],
==> amazon-ebs:   Owners: ["099720109477"]
==> amazon-ebs: }
Build 'amazon-ebs' errored: No AMI was found matching filters: {
  Filters: [{
      Name: "virtualization-type",
      Values: ["hvm"]
    },{
      Name: "name",
      Values: ["ubuntu/images/*ubuntu-xenial-18.04-amd64-server-*"]
    },{
      Name: "root-device-type",
      Values: ["ebs"]
    }],
  Owners: ["099720109477"]
}

==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: No AMI was found matching filters: {
  Filters: [{
      Name: "virtualization-type",
      Values: ["hvm"]
    },{
      Name: "name",
      Values: ["ubuntu/images/*ubuntu-xenial-18.04-amd64-server-*"]
    },{
      Name: "root-device-type",
      Values: ["ebs"]
    }],
  Owners: ["099720109477"]
}
Run Code Online (Sandbox Code Playgroud)

想知道过滤器值是如何工作的:

  1. 18.04?

  2. 对于另一个图像(linux/redhat)?

有人可以清除我对此的疑问吗?

Ala*_*Dea 5

重要说明:您应该像我在此处的示例中那样设置所有者属性,否则您将敞开心扉引入与您的模式匹配的恶意 AMI。该名称字段是用户控制的,而不是检查。

更新:由于这是关于 Packer 而不是 Terraform,这里是 Packer 解决方案:

"source_ami_filter": {
  "filters": {
    "virtualization-type": "hvm",
    "architecture": "x86_64",
    "name": "ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*",
    "block-device-mapping.volume-type": "gp2",
    "root-device-type": "ebs"
  },
  "owners": ["099720109477"],
  "most_recent": true
},
Run Code Online (Sandbox Code Playgroud)

这是我善意但偏离主题的 Terraform 解决方案:

data "aws_ami" "ubuntu-18_04" {
  most_recent = true
  owners = ["${var.ubuntu_account_number}"]

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*"]
  }
}

variable "ubuntu_account_number" {
  default = "099720109477"
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想使用自己的 KMS CMK 对其进行加密:

resource "aws_ami_copy" "ubuntu-18_04-encrypted" {
  name              = "${data.aws_ami.ubuntu-18_04.name}-encrypted"
  description       = "${data.aws_ami.ubuntu-18_04.description} (encrypted)"
  source_ami_id     = "${data.aws_ami.ubuntu-18_04.id}"
  source_ami_region = "${var.region}"
  encrypted         = true

  tags {
    ImageType      = "encrypted-ubuntu-18_04"
  }
}

data "aws_ami" "ubuntu-18_04" {
  most_recent = true
  owners = ["${var.ubuntu_account_number}"]

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*"]
  }
}

variable "ubuntu_account_number" {
  default = "099720109477"
}
Run Code Online (Sandbox Code Playgroud)

我从我的Terraform 中引用了这些: GitHub 上的最新 Ubuntu 18.04 LTS 加密 AMI 要点

  • 这是一个 Terraform 示例,而不是 Packer 示例?这个问题不应该被标记为 Terraform,因为它实际上纯粹是一个 Packer 问题。它也可能应该被关闭,因为这只是 Ubuntu 发行版命名上的一个小错误。 (2认同)