Terraform 0.12 Lambda和Beanstalk软件包部署

问题描述

在部署lambda代码之前,我们告诉terraform代码在lambda基础结构上查找和部署哪个s3存储桶。 如今,开发人员可以通过简单地提供本地存储代码绝对路径来通过terraform部署lambda代码

terraform还能在部署beantalk应用程序捆绑包时使用这种方法吗?

我正在以这种方式部署我的lambda代码(下面的示例),这在部署elasticbeanstalk应用程序捆绑包中也可行吗?

  data "archive_file" "my_lambda" {
  type        = "zip"
  source_dir  = "../../my_lambda"
  output_path = "../../my_lambda.zip"
}

resource "aws_lambda_function" "my_lambda" {
  function_name    = "my_lambda"
  filename         = data.archive_file.my_lambda.output_path
  source_code_hash = data.archive_file.my_lambda.output_base64sha256
  handler          = "src/my_lambda.handler"
  role             = aws_iam_role.my_lambda.arn
  runtime          = "nodejs12.x"
  memory_size      = "128"
  timeout          = "60"
  environment {
    variables = {
      VAR1                = var.VAR1
      VAR2                = var.VAR2
      VAR3                = var.VAR3
    }
  }
}

解决方法

不确定您的确切意思是什么,但是您可以准备terraform zip格式的部署程序包,将其上传到S3,并使用EB应用程序版本进行部署。

您可以使用archive_file来压缩应用程序的文件夹:

data "archive_file" "ebzip" {
  type        = "zip"
  source_dir  = "/path/to/my-eb-app"
  output_path = "/tmp/my-eb-app.zip"
}

然后,您可以使用aws_s3_bucket_object将其上传到部署存储桶:

resource "aws_s3_bucket_object" "ebapp" {
  bucket = "your_bucket_name"
  key    = "new_object_key"
  source = archive_file.ebzip.output_path
}

最后,您可以在aws_elastic_beanstalk_application_version中使用它:


resource "aws_elastic_beanstalk_application_version" "default" {
  name        = "tf-test-version-label"
  application = "tf-test-name"
  description = "application version created by terraform"
  bucket      = "your_bucket_name"
  key         = aws_s3_bucket_object.ebapp.id
}