You need to enable JavaScript to run this app. 如何使用Lambda函数为多个S3存储桶开启版本控制?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lambda函数为多个S3存储桶开启版本控制?

Lambda实现批量开启S3存储桶版本控制操作指南

1. 前置IAM权限配置

首先需要为Lambda执行角色配置对应权限,最小权限示例如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:PutBucketVersioning"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

如果只需要对指定存储桶操作,可以把s3:ListAllMyBuckets权限移除,并且将s3:PutBucketVersioning的Resource限定为对应桶的ARN即可

2. Lambda函数代码示例(Python运行时)

以下代码支持两种使用模式:指定固定桶列表批量操作,或遍历账号下所有存储桶操作:

import boto3

s3_client = boto3.client('s3')

# 模式1:指定需要开启版本控制的桶列表,不需要全量操作的话用这个
TARGET_BUCKETS = ['bucket-1', 'bucket-2', 'bucket-3']
# 模式2:如果要全量开启所有桶的版本控制,把上面的TARGET_BUCKETS设为[]即可

def lambda_handler(event, context):
    processed_buckets = []
    failed_buckets = []
    
    # 如果没有指定目标桶,拉取账号下所有存储桶
    target_buckets = TARGET_BUCKETS
    if not target_buckets:
        all_buckets_resp = s3_client.list_buckets()
        target_buckets = [bucket['Name'] for bucket in all_buckets_resp['Buckets']]
    
    for bucket_name in target_buckets:
        try:
            # 开启版本控制
            s3_client.put_bucket_versioning(
                Bucket=bucket_name,
                VersioningConfiguration={
                    'Status': 'Enabled'
                }
            )
            processed_buckets.append(bucket_name)
            print(f"成功为桶{bucket_name}开启版本控制")
        except Exception as e:
            failed_buckets.append(f"{bucket_name}: {str(e)}")
            print(f"为桶{bucket_name}开启版本控制失败: {str(e)}")
    
    return {
        'statusCode': 200,
        'processed_buckets': processed_buckets,
        'failed_buckets': failed_buckets
    }

3. 配置与注意事项

  • Lambda运行时选择Python 3.9及以上版本即可,内存配置128MB完全满足需求,超时时间建议设置为30秒,如果存储桶数量超过100个可以适当调长超时时间
  • 已经开启版本控制的存储桶重复调用该接口不会产生副作用,状态不会被修改
  • 如果需要排除特定存储桶,可以在遍历target_buckets的时候加过滤逻辑跳过对应桶名
  • 首次运行建议先指定1-2个测试桶验证逻辑正常后,再进行全量操作

内容的提问来源于stack exchange,提问作者user15927821

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 00:15:05