我有几个lambda,它们可以通过队列或api网关的消息触发,具有不同的存储类型等等。
这些组件中的每一个都位于它们各自的存储器中,但是它们在一起并且在一起它们是相同架构的一部分。我正在尝试构建我的terraform模板,但我关注的一点是这些lambdas中的一些共享资源,例如存储表或s3桶,所以我想知道是否只有一个是一个好主意每个lambda的repo中的main.tf文件只创建lambda本身而不是它的任何其他依赖项,这样我可以通过ci / cd重新部署lambda而不用担心其他组件,我会把所有其他部分放在在中央仓库中或多或少持久的架构,并且只在必要时通过此repos专用ci / cd管道运行它们。我还想到一个包含所有共享资源名称的tfvar文件。
这是一种有效的方法吗?有什么缺点?有哪些替代方案?
你走在正确的轨道上。您可以拥有一个lambdas模块,它接受这些公共资源作为变量。你可以硬编码你的terraform import
资源,并将它们传递给你的lambda:
在modules/lambda
文件夹中
resource "aws_lambda_function" "this" {
"""
My lambda stuff
"""
}
在主文件夹main.tf上
module "lambda1"{
s3_bucket = "${var.common_bucket}"
iam_role = "${var.common_role}"
subnets = "${var.private_subnets}"
....
}
module "lambda2"{
s3_bucket = "${var.common_bucket}"
iam_role = "${var.common_role}"
subnets = "${var.private_subnets}"
....
}
module "lambda3"{
s3_bucket = "${var.common_bucket}"
iam_role = "${var.common_role}"
subnets = "${var.private_subnets}"
....
}
如果你想要导入公共资源,例如规则的iam策略,就这样做
resource "aws_iam_policy" "my_policy" {
}
然后运行命令terraform import aws_iam_policy.my_policy <policy arn>