You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS Transfer Family,按S3桶触发指定Lambda函数(无需中间Lambda)

解决AWS Transfer Family分桶触发对应Lambda函数的纯配置方案

核心思路

通过为每个S3桶创建专属工作流,搭配条件判断和权限隔离,实现上传到不同桶的文件自动触发对应Lambda函数,全程无需中间函数或额外编码。

具体步骤

1. 给Lambda函数配置Transfer调用权限

为每个目标Lambda函数(b1、b2)添加资源策略,允许AWS Transfer Family服务调用它们:

  • 打开Lambda控制台,进入b1函数页面,切换到配置>权限>资源策略,添加以下策略(替换占位符为你的实际信息):
{
  "Version": "2012-10-17",
  "Id": "transfer-invoke-b1",
  "Statement": [
    {
      "Sid": "AllowTransferService",
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:你的区域:你的账户ID:function:b1",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "你的账户ID"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:transfer:你的区域:你的账户ID:server/你的Transfer服务器ID"
        }
      }
    }
  ]
}
  • 对b2函数执行相同操作,替换函数名和对应ARN即可。

2. 创建分桶专属工作流

为每个S3桶创建独立的Transfer工作流,绑定对应Lambda并设置触发条件:

工作流1(对应bucket1 + b1)

  1. 进入AWS Transfer Family控制台,选择工作流>创建工作流。
  2. 添加Invoke Lambda动作:
    • 选择Lambda函数b1。
    • 设置条件表达式:${transfer:bucket} == "bucket1"(只有上传到bucket1的文件才会触发此动作)。
  3. 配置工作流的IAM角色:
    • 创建或选择一个IAM角色,添加以下权限策略,限定仅能访问bucket1和调用b1:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": ["s3:GetObject", "s3:PutObject"],
            "Resource": "arn:aws:s3:::bucket1/*"
          },
          {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:你的区域:你的账户ID:function:b1"
          }
        ]
      }
      
  4. 完成工作流创建,命名为workflow-bucket1-b1。

工作流2(对应bucket2 + b2)

重复上述步骤,将Lambda函数改为b2,条件表达式改为${transfer:bucket} == "bucket2",IAM角色权限限定为bucket2和b2,命名为workflow-bucket2-b2。

3. 关联工作流到Transfer服务器

  1. 进入Transfer服务器的配置页面,切换到工作流标签。
  2. 点击添加工作流,依次添加刚创建的两个工作流。
  3. 保存配置后,当文件上传到bucket1时,会触发workflow-bucket1-b1调用b1;上传到bucket2时触发workflow-bucket2-b2调用b2。

备选方案(按用户分桶)

如果你的业务是不同用户对应不同S3桶,可以直接给每个Transfer用户关联专属工作流:

  • 进入用户配置页面,在工作流中选择对应桶的工作流(比如用户A关联workflow-bucket1-b1),无需设置条件表达式,更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:11:29