我正在尝试列出所有名为 Ansible* 的图像。
如果我能成功,我就能用它来清理修补活动期间创建的 AMI。我正在通过 SSM 自动化文档尝试。下面是我的代码。
description: This document is to remove AMI
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
mainSteps:
- name: getImageId
action: 'aws:executeAwsApi'
inputs:
Service: ec2
Api: DescribeImages
Filters:
- Name: 'name'
Values:
- 'Ansible*'
outputs:
- Name: ImageId
Selector: '$.Images[0].ImageId'
Type: String
这里,选择器:“$.Images[0].ImageId”仅提供列表中的第一个图像 ID。如果我可以提供类似选择器:“$.Images[*].ImageId”的内容,我就能得到它,但 SSM 文档不支持这一点。
有人可以帮我吗?我想要的是,我想列出所有带有 AMI ID 的图像。
PS:我有可以完成这项工作的 shell 和 python 脚本。但由于角色和策略限制,我正在寻找 AWS SSM 自动化文档
答案1
通过一些快速测试,我不确定你是否可以。
但是您可以在 CLI 上执行此操作,那么也许您可以使用该boto3
库并通过自动化将其作为 Python 脚本执行executeScript
?
有效的 CLI 命令:
aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn*" --query 'Images[*].Name' --output json
更新:
以下是运行 Python 脚本的自动化文档:
description: Gets all Amazon-owned AMIs.
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
mainSteps:
- name: GetAMIs
action: 'aws:executeScript'
inputs:
Runtime: python3.6
Handler: script_handler
Script: |-
import boto3
import json
def script_handler(events, context):
ec2_client = boto3.client('ec2', region_name='eu-west-2')
images = ec2_client.describe_images(Owners=['amazon'],Filters=[{'Name':'name','Values':['amzn*']}])
amis = []
for image in images['Images']:
amis.append(image['ImageId'])
output = {"AMIs": amis[:10]}
return output
description: gets first 10 Amazon AMIs using boto3
outputs:
- Selector: $.Payload.AMIs
Name: AMIs
Type: StringList
timeoutSeconds: 120
确保更改区域、搜索字符串等内容。