gpt4 book ai didi

amazon-web-services - 在 Terraform 工作空间之间共享资源

转载 作者:行者123 更新时间:2023-12-04 01:03:36 24 4
gpt4 key购买 nike

我有一个在 AWS 中使用 Terraform 部署的基础设施。这个基础设施可以部署到不同的环境中,我正在使用工作空间。

部署中的大多数组件应该为每个工作区单独创建,但我有几个我希望在它们之间共享的关键组件,主要是:

  • IAM 角色和权限
  • 他们应该使用相同的 API 网关,但每个工作空间应该部署到不同的路径和方法

  • 例如:
    resource "aws_iam_role" "lambda_iam_role" {
    name = "LambdaGeneralRole"
    policy = <...>
    }

    resource "aws_lambda_function" "my_lambda" {
    function_name = "lambda-${terraform.workspace}"
    role = "${aws_iam_role.lambda_iam_role.arn}"
    }

    第一个资源是一个 IAM 角色,应该在该 Lambda 的所有实例之间共享,并且不应多次重新创建。

    第二个资源是一个 Lambda 函数,其名称取决于当前工作区,因此每个工作区将部署并跟踪不同 Lambda 的状态。

    如何在不同的 Terraform 工作空间之间共享资源及其状态?

    最佳答案

    对于共享资源,我在单独的模板中创建它们,然后使用 terraform_remote_state 引用它们在我需要有关它们的信息的模板中。

    以下是我如何实现它,可能还有其他方法可以实现它。 YMMV

    在共享服务模板(您将放置 IAM 角色)中,我使用 Terraform 后端将共享服务模板的输出数据存储在 Consul 中。您还需要output您想在其他模板中使用的任何信息。

    shared_services 模板

    terraform {
    backend "consul" {
    address = "consul.aa.example.com:8500"
    path = "terraform/shared_services"
    }
    }

    resource "aws_iam_role" "lambda_iam_role" {
    name = "LambdaGeneralRole"
    policy = <...>
    }

    output "lambda_iam_role_arn" {
    value = "${aws_iam_role.lambda_iam_role.arn}"
    }

    A "backend" in Terraform determines how state is loaded and how an operation such as apply is executed. This abstraction enables non-local file state storage, remote execution, etc.



    在单个模板中,您使用 terraform_remote_state 调用后端作为数据源。并且可以使用该模板中的数据。
    terraform_remote_state :

    Retrieves state meta data from a remote backend



    个人模板
    data "terraform_remote_state" "shared_services" {
    backend = "consul"
    config {
    address = "consul.aa.example.com:8500"
    path = "terraform/shared_services"
    }
    }

    # This is where you use the terraform_remote_state data source
    resource "aws_lambda_function" "my_lambda" {
    function_name = "lambda-${terraform.workspace}"
    role = "${data.terraform_remote_state.shared_services.lambda_iam_role_arn}"
    }

    引用文献 :

    https://www.terraform.io/docs/state/remote.html

    https://www.terraform.io/docs/backends/

    https://www.terraform.io/docs/providers/terraform/d/remote_state.html

    关于amazon-web-services - 在 Terraform 工作空间之间共享资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606011/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com