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

发布于 2025-01-11 01:42:07 字数 720 浏览 0 评论 0原文

我正在使用 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。

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

I am writing one Lambda function using Python. And I need to collect a list of AMIs which is having a specified tag key-value pair and write it to an S3 Bucket as a JSON file. My code is in below,

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))

My Lambda is working as expected except for one thing. My output is overwriting. So I am only able to write one AMI ID at a time.

Can somebody help me to resolve this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月野兔 2025-01-18 01:42:08

您将每个图像 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))

You're writing the object to S3 for each and every image ID. Instead, accumulate the image IDs in a list, and then upload that to S3 at the end. For example:

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))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文