【发布时间】:2020-07-19 11:26:16
【问题描述】:
如何使用describe instance Java SDK api 为给定的操作系统获取 AWS Ec2 图像 ID,该操作系统在给定区域也是免费套餐?
我尝试使用describe Instance api,但我不知道如何使用Filters。
AmazonEC2ClientBuilder.defaultClient().describeImages(new DescribeImagesRequest().withFilters(Arrays.asList(
new Filter().withName("is-public").withValues("true"),
new Filter().withName("some name i dont know").withValues("some values i dont know")
)))
我正在努力获取图像 ID,它仅使用 is-public 过滤器返回大量图像。我只想获得符合条件的免费层级核心操作系统实例,而不需要安装额外的软件,如 SQL Server 等。
我试过this documentation,但看不懂。
确切地说,我想在启动标记为符合条件的免费套餐的实例时获取在 AWS 控制台上提供的图像的 AMI id,如下图所示
请给我一个示例代码 sn-p 以获取此免费层级合格图像的ubuntu 18.04 LTS ami-id 如上图所示,即ami-02d55cb47e83a99a0。并建议我如何更改它以获取其他图像(如 Suse、debian 或 redhat 等)的 AMI id。
附注:
我认为即使对于相同的操作系统,每个区域的这些 AMI id 也是不同的,我认为解决方案应该包括类似 region 的内容,以获取该区域中的图像 id。在解决方案中,请包含ap-south-1 的解决方案,因为此屏幕截图适用于该地区。
编辑 1
我知道这与过滤 name 或 description 有关。我可以在withValue() 中使用通配符,就像我想搜索像new Filter().withName("description").withValue("*ubuntu-18.04*") 这样的AMI,其中* 是通配符。但它会返回描述中包含ubuntu-18.04 的所有AMI,包括所有已安装现有软件的付费AMIS。如何过滤以仅获取符合免费层级条件的基本默认 ubuntu 映像。
【问题讨论】:
-
如果您不知道该值,那么我认为您需要 query 而不是 filter ,这里是 aws-cli 命令相应地转换它
aws ec2 describe-instances --query "Reservations[].Instances[].ImageId" -
@Adiii 您好,您提供的命令似乎提供了我帐户中实例的 AMI ID。假设没有实例存在,我想在启动实例之前知道 AMI id。假设我想获得一个 ubuntu 图像的免费 ami id?如果可能的话,如何使用描述图像 api 或任何其他方式获取它。
-
@AWS PS 你能解释一下吗?
-
我明白了,那么你需要
describe imageAPI。这是您可以过滤的最官方的 ubuntu 发行版。aws ec2 describe-images --filters "Name=owner-id,Values=099720109477"或获取所有图片aws ec2 describe-images -
好的,现在我看到了一些有用的东西。你能告诉我这个
099720109477owner-id 对应什么吗?它是 AWS 的官方所有者并提供免费层级 AMI ID?
标签: amazon-web-services amazon-ec2 amazon-ami aws-java-sdk aws-java-sdk-2.x