web-dev-qa-db-ja.com

AWS MarketplaceでCentOS 7イメージのAMI IDを見つける方法

AWSサイトにログインし、「起動」ボタンを押して、禁止されている手順に従ってEC2インスタンスを起動しました。ここで、Ansibleスクリプトからインスタンスを起動したいのですが、これを行うには、起動したいイメージのAMI IDが必要です(と思います)。

問題は、「マーケットプレイス」から画像を起動しているため、AMI IDが見つからないことです。特に、私はCentos 7イメージを使用しています。これは、ウェブインターフェースで簡単に見つけることができます。マーケットプレイスに移動して「centos」を検索します。欲しい画像は最初に見つかったものですが、画像について提供された情報にはAMI IDが含まれていないようですスクリプトから起動する必要があります。回避策は、イメージを手動で起動し、実行中のイメージを検査するときにAMI IDが提供されることです。しかし、それを見つける簡単な方法はありますか?

20
bandjalong

CentOSは、AMI製品コードを wiki に公開しています。このwikiは、最新のCentOS 7 AMIに関する次の情報を提供します。

  • 所有者:aws-marketplace
  • 製品コード: aw0evgkw8e5c1q413zgy5pjce

この情報を使用して、AWS CLIで describe-images をクエリできます。

例:

aws ec2 describe-images \
    --owners 'aws-marketplace' \
    --filters 'Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce' \
    --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' \
    --output 'text'

出力:

AMI-6d1c2007

このクエリは、コレクションを作成日でソートし、コレクション内の最後の(最新の)要素を選択することで選択された単一のAMI IDを返します。

CentOS Wikiによると、multiple AMI ids may be associated with a product key。したがって、このクエリは、現在この製品に一致するものが1つしか存在しないため、現在単一のAMIのみを返します。

40
Anthony Neace

すべてのCentos7イメージを探している場合

$ aws ec2 describe-images \
      --owners aws-marketplace \
      --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce \
      --query 'Images[*].[CreationDate,Name,ImageId]' \
      --filters "Name=name,Values=CentOS Linux 7*" \
      --region us-west-2 \
      --output table \
  | sort -r
|  2018-06-13T15:58:14.000Z|  CentOS Linux 7 x86_64 HVM EBS ENA 1805_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-AMI-77ec9308.4  |  AMI-3ecc8f46  |
|  2018-05-17T09:30:44.000Z|  CentOS Linux 7 x86_64 HVM EBS ENA 1804_2-b7ee8a69-ee97-4a49-9e68-afaee216db2e-AMI-55a2322a.4   |  AMI-5490ed2c  |
|  2018-04-04T00:11:39.000Z|  CentOS Linux 7 x86_64 HVM EBS ENA 1803_01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-AMI-8274d6ff.4  |  AMI-0ebdd976  |
|  2017-12-05T14:49:18.000Z|  CentOS Linux 7 x86_64 HVM EBS 1708_11.01-b7ee8a69-ee97-4a49-9e68-afaee216db2e-AMI-95096eef.4   |  AMI-b63ae0ce  |

redHatで利用可能な同様のクエリを追加します

aws ec2 describe-images \
    --owners 309956199498 \
    --query 'Images[*].[CreationDate,Name,ImageId]' \
    --filters "Name=name,Values=RHEL-7.?*GA*" \
    --region us-east-1 \
    --output table \
  | sort -r
|  2018-03-23T20:42:08.000Z |  RHEL-7.5_HVM_GA-20180322-x86_64-1-Hourly2-GP2  |  AMI-6871a115 |
|  2017-08-08T15:37:31.000Z |  RHEL-7.4_HVM_GA-20170808-x86_64-2-Hourly2-GP2  |  AMI-c998b6b2 |
|  2017-07-24T15:44:39.000Z |  RHEL-7.4_HVM_GA-20170724-x86_64-1-Hourly2-GP2  |  AMI-cdc999b6 |
|  2016-10-26T22:32:29.000Z |  RHEL-7.3_HVM_GA-20161026-x86_64-1-Hourly2-GP2  |  AMI-b63769a1 |
|  2015-11-12T21:06:58.000Z |  RHEL-7.2_HVM_GA-20151112-x86_64-1-Hourly2-GP2  |  AMI-2051294a |
|  2015-02-25T20:24:23.000Z |  RHEL-7.1_HVM_GA-20150225-x86_64-1-Hourly2-GP2  |  AMI-12663b7a |
|  2015-02-09T22:54:40.000Z |  RHEL-7.0_HVM_GA-20150209-x86_64-1-Hourly2-GP2  |  AMI-60a1e808 |
|  2014-10-17T20:29:24.000Z |  RHEL-7.0_HVM_GA-20141017-x86_64-1-Hourly2-GP2  |  AMI-a8d369c0 |
|  2014-05-28T19:17:11.000Z |  RHEL-7.0_GA_HVM-x86_64-3-Hourly2               
|  AMI-785bae10 |
7

TerraformでAMIルックアップをテストする良い方法として、ここで他の回答を使用しました。

使用しています...

aws ec2 describe-images \
    --owners aws-marketplace \
    --filters '[
        {"Name": "name",                "Values": ["CentOS Linux 7*"]},
        {"Name": "virtualization-type", "Values": ["hvm"]},
        {"Name": "architecture",        "Values": ["x86_64"]},
        {"Name": "image-type",          "Values": ["machine"]}
    ]' \
    --query 'sort_by(Images, &CreationDate)[-1]' \
    --region us-east-1 \
    --output json

...ルックアップの試行錯誤の機会を与えてくれた

data "aws_AMI" "centos" {
  most_recent = true
  owners      = ["aws-marketplace"]

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  filter {
    name   = "architecture"
    values = ["x86_64"]
  }

  filter {
    name   = "image-type"
    values = ["machine"]
  }

  filter {
    name   = "name"
    values = ["CentOS Linux 7*"]
  }
}

resource "aws_launch_configuration" "launch_configuration" {
  name_prefix = "${var.name}-"

  image_id = "${data.aws_AMI.centos.image_id}"
  instance_type        = "t2.nano"
  iam_instance_profile = "${aws_iam_instance_profile.instance_profile.name}"
  security_groups      = ["${aws_security_group.lc_security_group.id}"]

  user_data = "${data.template_file.user_data.rendered}"

  lifecycle {
    create_before_destroy = true
  }
}
1
Bruno Bronosky