Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Terraform部署到多个AWS帐户?_Amazon Web Services_Terraform - Fatal编程技术网

Amazon web services 使用Terraform部署到多个AWS帐户?

Amazon web services 使用Terraform部署到多个AWS帐户?,amazon-web-services,terraform,Amazon Web Services,Terraform,我一直在寻找一种能够在Terraform中同时部署到多个AWS帐户的方法,并且即将实现。AWS有使用堆栈来实现这一点的概念,但我不确定是否有办法在Terraform中实现这一点?如果是,有什么解决办法 您可以阅读有关Cloudformation解决方案的更多信息。您可以定义哪些可用于在不同区域甚至不同AWS帐户中运行操作 因此,要在您的默认区域执行某些操作(如果未在环境变量/~/.aws/configure/etc中定义,则会提示您执行这些操作),并且在美国东部1中,您也可以执行以下操作: pr

我一直在寻找一种能够在Terraform中同时部署到多个AWS帐户的方法,并且即将实现。AWS有使用堆栈来实现这一点的概念,但我不确定是否有办法在Terraform中实现这一点?如果是,有什么解决办法

您可以阅读有关Cloudformation解决方案的更多信息。

您可以定义哪些可用于在不同区域甚至不同AWS帐户中运行操作

因此,要在您的默认区域执行某些操作(如果未在环境变量/
~/.aws/configure
/etc中定义,则会提示您执行这些操作),并且在美国东部1中,您也可以执行以下操作:

provider "aws" {
  # ...
}

# Cloudfront ACM certs must exist in US-East-1
provider "aws" {
  alias  = "cloudfront-acm-certs"
  region = "us-east-1"
}
provider "aws" {
  # ...
}

# Assume a role in the DNS account so we can add records in the zone that lives there
provider "aws" {
  alias   = "dns"
  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}
然后,您可以这样引用它们:

data "aws_acm_certificate" "ssl_certificate" {
  provider    = "aws.cloudfront-acm-certs"
  ...
}

resource "aws_cloudfront_distribution" "cloudfront" {
  ...
  viewer_certificate {
    acm_certificate_arn = "${data.aws_acm_certificate.ssl_certificate.arn}"
    ...
  }
}
因此,如果您希望同时跨多个帐户执行操作,则可以使用以下方法:

provider "aws" {
  # ...
}

# Cloudfront ACM certs must exist in US-East-1
provider "aws" {
  alias  = "cloudfront-acm-certs"
  region = "us-east-1"
}
provider "aws" {
  # ...
}

# Assume a role in the DNS account so we can add records in the zone that lives there
provider "aws" {
  alias   = "dns"
  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}
这样说:

data "aws_route53_zone" "selected" {
  provider     = "aws.dns"
  name         = "test.com."
}

resource "aws_route53_record" "www" {
  provider = "aws.dns"
  zone_id  = "${data.aws_route53_zone.selected.zone_id}"
  name     = "www.${data.aws_route53_zone.selected.name}"
  ...
}

或者,您可以在中为不同的AWS帐户提供凭据,例如,或使用。

我还建议将您的解决方案与:

命名工作区允许在多个工作区之间方便地切换 单个后端中单个配置的实例。他们 在许多情况下都很方便,但不能解决所有问题 问题

多个工作空间的一个常见用途是创建一个并行的、不同的 复制一组基础结构以测试一组更改 在修改主生产基础结构之前。例如,一个 开发人员处理一组复杂的基础结构更改可能会 创建一个新的临时工作区,以便自由试验 在不影响默认工作空间的情况下进行更改

非默认工作空间通常与中的要素分支相关 版本控制。默认工作区可能对应于 “master”或“trunk”分支,用于描述 生产基础设施。创建要素分支以进行开发时 如果发生更改,该功能的开发人员可能会创建相应的 并在其中部署主工作区的临时“副本” 基础架构,以便在不影响 生产基础设施。一旦更改被合并并部署到 在默认工作区中,可以销毁测试基础结构并 临时工作区已删除

在支持的后端列表中

它非常易于使用(类似于使用git分支),并与所选AWS帐户相结合

terraform workspace list
   dev
 * prod
   staging

关于配置AWS提供程序以使用多个帐户的一些参考资料:



  • 太棒了,你搞定了。到目前为止,我一直在使用bash脚本来旋转AWS键和秘密,最多也只是黑客而已。。。。加1,接受并加上星号;)