Amazon-Web-Services

無法列出所有圖像

  • February 15, 2022

我正在嘗試列出所有名稱為 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’ gives only the 1st image id of the list. i can get it if i can give something like Selector: ’ $ 。圖片

$$ * $$.ImageId’,但 SSM 文件不支持。 有人可以幫助我嗎?我想要的是,我想列出所有帶有 AMI ID 的圖像。

PS:我有完成這項工作的 shell 和 python 腳本。但由於角色和策略限制,我正在尋找 AWS SSM 自動化文件

通過一些快速測試,我不確定你可以。

不過,您可以在 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

請務必更改區域、搜尋字元串等內容。

引用自:https://serverfault.com/questions/1093735