如何为无服务器应用程序构建terraform模板

问题描述 投票:2回答:1

我有几个lambda,它们可以通过队列或api网关的消息触发,具有不同的存储类型等等。

这些组件中的每一个都位于它们各自的存储器中,但是它们在一起并且在一起它们是相同架构的一部分。我正在尝试构建我的terraform模板,但我关注的一点是这些lambdas中的一些共享资源,例如存储表或s3桶,所以我想知道是否只有一个是一个好主意每个lambda的repo中的main.tf文件只创建lambda本身而不是它的任何其他依赖项,这样我可以通过ci / cd重新部署lambda而不用担心其他组件,我会把所有其他部分放在在中央仓库中或多或少持久的架构,并且只在必要时通过此repos专用ci / cd管道运行它们。我还想到一个包含所有共享资源名称的tfvar文件。

这是一种有效的方法吗?有什么缺点?有哪些替代方案?

terraform
1个回答
-1
投票

你走在正确的轨道上。您可以拥有一个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>

© www.soinside.com 2019 - 2024. All rights reserved.