【问题标题】:ClientError: An error occurred (AccessDenied).. for Step Functions' Lambdas to get_object, despite relevant permissionsClientError:发生错误 (AccessDenied).. 尽管有相关权限,但 Step Functions\' Lambda 到 get_object
【发布时间】:2022-09-11 14:00:04
【问题描述】:

作为 AWS Step Function 流程的一部分,分批运行 20 个或更多,我有一个 Lambda (A),它成功地将文件保存到 s3,然后是另一个 Lambda (B),它使用 boto3 get_object 下载它以进行进一步处理。奇怪的是;由于第二个 Lambda (B) 遇到了ClientError: An error occurred (AccessDenied),因此某些阶跃函数迭代失败,而阶跃函数的某些迭代成功且没有错误。

根据 AWS;保存到 s3 的文件应在保存后立即可用。

两个 Lambda 的政策是这个

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:Abort*",
                "s3:DeleteObject*",
                "s3:GetBucket*",
                "s3:GetObject*",
                "s3:List*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::filesbucket",
                "arn:aws:s3:::filesbucket/*"
            ],
            "Effect": "Allow"
        }
    ]
}

我尝试在 Lambda (B) 中添加一个 boto3 get_waiter('object_exists') 但这没有帮助,并且一些 Step Function 迭代因Waiter ObjectExists failed: An error occurred (403): Forbidden 而失败

任何帮助将不胜感激。

【问题讨论】:

  • 不要在同一个 Step Functions 中进行上传和下载,而是使用 S3 Event 触发 Step 函数进行创建。这样您就不必担心 S3 对象已准备就绪。
  • 谢谢,这可能是一个可行的解决方案,尽管我更愿意坚持这个原始架构,而且我觉得我错过了一些东西。

标签: amazon-web-services amazon-s3 aws-lambda aws-step-functions


【解决方案1】:

我最终所做的工作是在第二个 Lambda (B) 的调用中添加重试;

使用 CDK;

.add_retry(
        errors=["ClientError"],
        interval=Duration.seconds(4),
        max_attempts=12,
        backoff_rate=1.5,
    )

或者在状态机定义中;

   "Retry": [
    ........
    {
      "ErrorEquals": [
        "ClientError"
      ],
      "IntervalSeconds": 4,
      "MaxAttempts": 12,
      "BackoffRate": 1.5
    }
  ]

似乎 AWS 可能需要几秒钟才能让保存到 S3 的对象可供 boto3 下载。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2021-08-12
    • 2014-12-06
    • 1970-01-01
    • 2021-01-12
    • 2022-01-02
    • 2021-09-23
    • 2021-08-26
    相关资源
    最近更新 更多