如何配置“ Terraform”以将zip文件上传到“ s3”存储桶,然后将其部署到lambda

Joey Yi Zhao

TerraForm在应用程序中用作基础架构框架。以下是我用于将python代码部署到lambda的配置。它执行三个步骤:1.将所有依赖项和源代码压缩到一个zip文件中;2.将压缩文件上传到s3存储桶;3.部署到lambda函数。

但是发生的是deploy命令terraform apply将失败,并显示以下错误:

Error: Error modifying Lambda Function Code quote-crawler: InvalidParameterValueException: Error occurred while GetObject. S3 Error Code: NoSuchKey. S3 Error Message: The specified key does not exist.
    status code: 400, request id: 2db6cb29-8988-474c-8166-f4332d7309de

  on config.tf line 48, in resource "aws_lambda_function" "test_lambda":
  48: resource "aws_lambda_function" "test_lambda" {



Error: Error modifying Lambda Function Code praw_crawler: InvalidParameterValueException: Error occurred while GetObject. S3 Error Code: NoSuchKey. S3 Error Message: The specified key does not exist.
    status code: 400, request id: e01c83cf-40ee-4919-b322-fab84f87d594

  on config.tf line 67, in resource "aws_lambda_function" "praw_crawler":
  67: resource "aws_lambda_function" "praw_crawler" {

这意味着s3存储桶中不存在部署文件。但是第二次运行命令时它成功。似乎是时间问题。将zip文件上传到s3存储桶后,该zip文件在s3存储桶中不存在。这就是为什么第一次部署失败。但是几秒钟后,第二个命令成功且非常快速地完成。我的配置文件有问题吗?

terraform可以找到完整的配置文件:https : //github.com/zhaoyi0113/quote-datalake/blob/master/config.tf

Adiii

您需要正确添加依赖项才能实现此目的,否则,它将崩溃。

首先压缩文件

# Zip the Lamda function on the fly
data "archive_file" "source" {
  type        = "zip"
  source_dir  = "../lambda-functions/loadbalancer-to-es"
  output_path = "../lambda-functions/loadbalancer-to-es.zip"
}

然后通过指定zip的依赖关系将其上传到s3,source = "${data.archive_file.source.output_path}"这将使其依赖于zip

# upload zip to s3 and then update lamda function from s3
resource "aws_s3_bucket_object" "file_upload" {
  bucket = "${aws_s3_bucket.bucket.id}"
  key    = "lambda-functions/loadbalancer-to-es.zip"
  source = "${data.archive_file.source.output_path}" # its mean it depended on zip
}

然后,您就可以很好地部署Lambda了,要使它行得通,请执行以下操作: s3_key = "${aws_s3_bucket_object.file_upload.key}"

  resource "aws_lambda_function" "elb_logs_to_elasticsearch" {
  function_name = "alb-logs-to-elk"
  description   = "elb-logs-to-elasticsearch"
  s3_bucket   = "${var.env_prefix_name}${var.s3_suffix}"
  s3_key      = "${aws_s3_bucket_object.file_upload.key}" # its mean its depended on upload key
  memory_size = 1024
  timeout     = 900
  timeouts {
  create = "30m"
  }
  runtime          = "nodejs8.10"
  role             = "${aws_iam_role.role.arn}"
  source_code_hash = "${base64sha256(data.archive_file.source.output_path)}"
  handler          = "index.handler"

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何授予Lambda将文件上传到terraform中的s3存储桶的权限?

AWS Lambda:如何在S3存储桶中读取CSV文件,然后将其上传到另一个S3存储桶?

在使用multer重命名文件之前,如何将其上传到s3存储桶?

如何将缩略图文件上传到亚马逊S3存储桶?

如何使用axios将文件上传到Amazon S3存储桶?

如何获取将图像上传到s3存储桶的文件名?

如何将文件上传到AWS S3存储桶?

如何使用Boto将文件上传到S3存储桶中的目录

如何使用Boto将文件上传到S3存储桶中的目录

如何使用Java Apache HttpClient将文件上传到公共AWS S3存储桶

如何从React前端通过Spring后端将文件上传到S3存储桶?

压缩 s3 存储桶中的对象,然后将 zip 文件夹上传到存储桶

-AWS C#.Net Core-如何将.jpg图像上传到S3存储桶而不将其另存为文件

如何使用 CDK 将 zip 上传到 S3

如何通过特定文件类型限制将S3文件上传到存储桶?

如何将内存中的zip文件上传到S3-bucket

如何使用boto3将Github上的文件上传到AWS S3存储桶?

我的Amazon S3存储桶网址是什么?如何将许多文件上传到s3存储桶?

如何将ZIP文件从API管理上传到Blob存储

如何安全地将大文件从浏览器上传到 Amazon S3 上的存储桶?

如何使用AWS CDK中的自定义资源将文件上传到S3存储桶

如何使用带有node.js的s3 api将文件上传到Wasabi存储桶?

如何将控制器中的生成pdf文件上传到S3存储桶

如何使用AWS .NET C#SDK将文件上传到AWS S3存储桶

如何使用Salesforce Apex将更大的文件(大于12 MB)上传到AWS s3存储桶

如何使用angular或javascript中的预签名URL将文件上传到S3存储桶

如何将参数从CloudFormation传递到存储在S3存储桶中的AWS Lambda函数

将Lambda部署到s3存储桶文件夹?

如何自动将文件上传到s3