问题描述
在部署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
}