使用 Python Boto 3 在文件中追加字符串

Append String in a file Using Python Boto 3

我正在使用 Python 编写一个 Lambda 函数。我需要收集具有指定标签键值对的 AMI 列表,并将其作为 JSON 文件写入 S3 存储桶。我的代码在下面,

import boto3

import json

client = boto3.client('ec2') 


def lambda_handler(event, context):
    
    response = client.describe_images(Owners=['self'])
    versions = response['Images']
    for x in range(len(versions)):
        if {'Key': 'product', 'Value': 'code'} in  response['Images'][x]['Tags']:
            ImageId=versions[x]['ImageId']
            print(ImageId)
            s3 = boto3.resource('s3')
            obj = s3.Object('my-ami-bucketforelk','hello.json')
            obj.put(Body=json.dumps(ImageId))

除了一件事,我的 Lambda 工作正常。我的输出被覆盖。所以我一次只能写一个AMI ID。

有人可以帮我解决这个问题吗?

您正在为每个图像 ID 将对象写入 S3。相反,将图像 ID 累积在一个列表中,然后最后将其上传到 S3。例如:

import json
import boto3

ec2 = boto3.client('ec2')
s3 = boto3.resource('s3')

def lambda_handler(event, context):
    response = ec2.describe_images(Owners=['self'])
    versions = response['Images']
    images = []

    for x in range(len(versions)):
        if {'Key': 'product', 'Value': 'code'} in response['Images'][x]['Tags']:
            ImageId=versions[x]['ImageId']
            images.append(ImageId)

    obj = s3.Object('my-ami-bucketforelk', 'hello.json')
    obj.put(Body=json.dumps(images))