为AWS实例

问题描述 投票:0回答:4
describe-images

命令,它将打印出很多信息。 我的要求是仅获取图像ID,以便我可以使用它来创建启动配置或使用最新的AMI-ID启动实例。

最新功能是可以使用AWS Systems Manager参数存储|获得最新的Amazon Linux AMI IDS的功能| AWS计算博客
名称空间由两个部分组成:

参数商店前缀(树):

/aws/service/ami-amazon-linux-latest/
amazon-web-services amazon-ec2 autoscaling
4个回答
26
投票

AMI名称别名:(例如)AMZN-AMI-HVM-X86_64-GP2

这些:
  • aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn*" --query 'sort_by(Images, &CreationDate)[].Name' Get-EC2ImageByName -Name amzn* | Sort-Object CreationDate | Select-Object Name
    可以更改为:
  • aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --region us-east-1 Get-SSMParameter -Name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 -region us-east-1 Plus,它可以在cloudformation模板中使用:

# Use public Systems Manager Parameter Parameters : LatestAmiId : Type : 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: ‘/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2’ Resources : Instance : Type : 'AWS::EC2::Instance' Properties : ImageId : !Ref LatestAmiId


awscli

用于过滤输出并获得唯一所需属性的方法是使用过滤器的组合,在AWS
describe-images
命令上查询如下:

aws ec2 describe-images \ --owners 'amazon' \ --filters 'Name=description,Values=Amazon Linux AMI*' \ --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' \ --output 'text'

命令解释:

12
投票
拥有者:对于亚马逊的图像,请使用“ Amazon”。要查询自己的图像,请使用“self'

filters:您可以使用过滤器列表来过滤您所需的实例。我更喜欢

description

,因为我发现某些图像缺少了

名。 
值支持通配符。

在过滤器上更多
Query:查询可用于仅过滤输出所需的内容。您也可以在输出中存在的字段上排序。我已经对图像和创建日期进行了排序,以获取最后一个创建的图像并过滤
imageId

输出:根据您计划消费的方式,输出可以是

json
  • Text
  • 使用python 您可以使用以下Python脚本进行相同的操作: import boto3 from operator import itemgetter client = boto3.client('ec2') response = client.describe_images( Filters=[ { 'Name': 'description', 'Values': [ 'Amazon Linux AMI*', ] }, ], Owners=[ 'amazon' ] ) # Sort on Creation date Desc image_details = sorted(response['Images'],key=itemgetter('CreationDate'),reverse=True) ami_id = image_details[0]['ImageId'] update: 您可以使用细粒过滤器来获得更快的响应。 @Jack的答案工作中提到的过滤器。 filters = [ { 'Name': 'name', 'Values': ['amzn-ami-hvm-*'] },{ 'Name': 'description', 'Values': ['Amazon Linux AMI*'] },{ 'Name': 'architecture', 'Values': ['x86_64'] },{ 'Name': 'owner-alias', 'Values': ['amazon'] },{ 'Name': 'owner-id', 'Values': ['137112412989'] },{ 'Name': 'state', 'Values': ['available'] },{ 'Name': 'root-device-type', 'Values': ['ebs'] },{ 'Name': 'virtualization-type', 'Values': ['hvm'] },{ 'Name': 'hypervisor', 'Values': ['xen'] },{ 'Name': 'image-type', 'Values': ['machine'] } ] # Use above filters response = client.describe_images( Filters=filters, Owners=[ 'amazon' ] )
  • 从参考:
  • Https://aws.amazon.com/blogs/compute/query-for-the-the-latest-amazon-linux-ami-ids-id-s-using-aws-systems-manager-parameter-parameter-store/ 专门针对AWS云形式:
  • # Use public Systems Manager Parameter Parameters: LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref LatestAmiId

从AWS CLI:

aws ssm get-parameters-by-path --path "/aws/service/ami-amazon-linux-latest" --region us-east-1

powershell:
Get-SSMParametersByPath -Path "/aws/service/ami-amazon-linux-latest" -region us-east-1

vaulstein和John Rotenstein的答案帮助我理解了这一解决方案。谢谢!

在我的情况下,我们有很多由不同所有者发布的私人AMI(有2-3),并且使用Centos或Amazonlinux2作为基础创建了他们的自定义私人AMIS。任务是找到在X86体系结构上使用的最新AMI,并基于Amazonlinux2。
注意我不使用 - 所有者,因为在我的情况下,AMIS由不同的团队发布并具有不同的所有者ID。但是,如果您有一个发表这些的单一所有者/团队,则建议包括滤除所有其他不需要的AMI的选项。

2
投票

aws ec2 describe-images \ --query 'sort_by(Images, &CreationDate)[-1].Name' \ --region eu-west-1 \ --no-include-deprecated \ --executable-users self \ --output text \ --filters "Name=name,Values=here-ami-amzn2-*" \ "Name=architecture,Values=x86_64" \ "Name=image-type,Values=machine" \ "Name=state,Values=available" \ "Name=virtualization-type,Values=hvm" \ "Name=root-device-type,Values=ebs"

解释: 我们在这里做的是:

this获得由CreationDate排序的结果。我们正在从结果中获取-1(最后/最新)项目的名称。

--query 'sort_by(Images, &CreationDate)[-1].Name'

注意可用的AMI可能因地区而异,因此请确保指定您打算实例化的区域。
--region eu-west-1 \

避免弃用AMIS(如果有)。我们没有任何东西,但决定将来要安全。
--no-include-deprecated \

确保您实际上是您使用的。

--executable-users self \
这是可选的。如果文本,则返回AMI名称,而无需双引号

2
投票
--output text \

filters用于缩小结果并排除不需要的结果。幸运的是,我们的组织以AMI名称易于与Wither Amzn2或CentOS区分开的方式命名了AMIS。我们想要Amazon Linux 2ami

--filters "Name=name,Values=org-name-ami-amzn2-*" \

我们具有AMIS的ARM和X86_64版本,并且我的团队代码仅在X86_64上进行了测试。因此,选择:

"Name=architecture,Values=x86_64" \

这可能具有不同的价值,我认为对于大多数人来说,这将是机器
"Name=image-type,Values=machine" \

仅在可用状态下选择AMI:

"Name=state,Values=available" \

这是虚拟化实现的方式。大多数人可以安全选择HVM:
"Name=virtualization-type,Values=hvm" \

conlose Amis具有root卷为EBS

"Name=root-device-type,Values=ebs" 

我在这里看到了一个类似的脚本

https://github.com/bwood/latest-ami/blob/master/latest-ami.py


如何出于某种原因,当运行时,我会遇到错误


您可以使用Terraform中的过滤器选项

获得最新的Amazon Ami Image 2023

data "aws_ami" "base_ami" { most_recent = true owners = ["amazon"] filter { name = "name" values = ["al2023-ami-2023.*-x86_64"] } filter { name = "architecture" values = ["x86_64"] } filter { name = "virtualization-type" values = ["hvm"] } }
*架构刚刚添加了

resource "aws_instance" "ec2_instance" { ami = data.aws_ami.base_ami.id count = "1" subnet_id = "<your subnet>" instance_type = "<instance type>" key_name = "<private_key>" }


2025/02:

awsssm get-parameter -name“/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64” - grigion us-east-east-1-query“ parameter.value” - - 输出文本

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.