无法列出所有图片

无法列出所有图片

我正在尝试列出所有名为 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

确保更改区域、搜索字符串等内容。

相关内容