获取对象时发生 AWS S3 错误。 S3 错误代码:带有 Terraform 的 NoSuchKey

Posted

技术标签:

【中文标题】获取对象时发生 AWS S3 错误。 S3 错误代码:带有 Terraform 的 NoSuchKey【英文标题】:AWS S3 Error occurred while GetObject. S3 Error Code: NoSuchKey with Terraform 【发布时间】:2022-01-16 13:07:07 【问题描述】:

即使我创建了一个存储桶,我也收到Error occurred while GetObject. S3 Error Code: NoSuchKey,创建存储桶后是否需要等待时间才能使用密钥?

这是我的 terraform 脚本

resource "aws_s3_bucket" "lambda_fn_upload" 
  bucket = var.bucket
  acl = "private"

桶创建成功

aws_s3_bucket.lambda_fn_upload:3 秒后创建完成 [id=lambda-fns-relieved-copper]

并且密钥也使用存储桶对象创建

aws_s3_bucket_object.order_status_file_upload:4s后创建完成[id=lambda-fns/orderStatus/function.zip]

当我尝试在我的 lambda 中使用 s3_key 时,它失败了

resource "aws_lambda_function" "order_status" 
  # For files larger than 10 MB, consider uploading using Amazon S3.
  s3_bucket         = aws_s3_bucket.lambda_fn_upload.id
  s3_key            = "lambda-fns/orderStatus/function.zip"
  # filename      = "../orderStatus/function.zip"
  function_name = "orderStatus"
  role          = aws_iam_role.lambda_fn_role.arn
  handler       = "dist/handlers.orderStatus"

  source_code_hash = filebase64sha256("../orderStatus/function.zip")

  runtime = "nodejs12.x"

  depends_on = [
    aws_s3_bucket.lambda_fn_upload
  ]

我收到以下错误

错误:创建 Lambda 函数时出错 (1):InvalidParameterValueException:GetObject 发生错误。 S3 错误代码:NoSuchKey。 S3 错误消息:指定的密钥不存在。

当我同时运行两个脚本时会出现问题,如果运行存储桶脚本,然后运行 ​​lambda 脚本,它不会失败。

【问题讨论】:

您的 order_status 资源取决于存储桶的创建,而不取决于打包的 Lambda 函数的上传。 在同一区域检查 S3 @jarmod 谢谢你成功了 【参考方案1】:

问题是你的order_status资源依赖于S3存储桶的创建,这很好,但它也应该依赖于打包的Lambda函数的上传。修改Lambda函数依赖,如下:

depends_on = [
    aws_s3_bucket.lambda_fn_upload,
    aws_s3_bucket_object.order_status_file_upload
]

【讨论】:

以上是关于获取对象时发生 AWS S3 错误。 S3 错误代码:带有 Terraform 的 NoSuchKey的主要内容,如果未能解决你的问题,请参考以下文章

AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到

当从 s3 获取对象时,aws lambda 函数被拒绝访问

AWS Glue 作业失败:调用 o71.getDynamicFrame..SdkClientException 时发生错误:无法执行 HTTP 请求:Connect .s3..connect 超时

[Django][AWS S3] botocore.exceptions.clienterror 调用 PutObject 操作时发生错误(访问被拒绝)

AWS S3 getSignedUrl() 返回 403 禁止错误

AWS S3-错误:无法获取本地发行者证书