标签: terraform

使用Terraform时的最佳做法

我正在将我们的基础设施交换成terraform.实际管理terraform文件和状态的最佳实践是什么?我意识到它的基础设施是代码,我会将我的.tf文件提交到git中,但我也提交了tfstate吗?它应该驻留在S3这样的地方吗?我最终希望CI能够管理所有这些,但这已经非常紧张,需要我找出文件的移动部分.

我真的只是想看看那里的人们是如何在生产中使用这种类型的东西的

terraform devops

91
推荐指数
4
解决办法
3万
查看次数

我应该将.tfstate文件提交给Git吗?

关于是否将.tfstate文件提交到Git 的问题,我有点疑惑.该Terraform文档状态:

Terraform terraform.tfstate默认情况下也会将一些状态放入文件中.这个状态文件非常重要; 它将各种资源元数据映射到实际资源ID,以便Terraform知道它正在管理什么.必须保存此文件并将其分发给可能运行Terraform的任何人.我们建议简单地将其置于版本控制中,因为它通常不会太大.

另一方面,现在,使用Terraform时最佳实践的接受和赞成回答如下:

Terraform配置可用于在不同的基础架构上配置多个盒子,每个盒子可以具有不同的状态.由于它也可以由多个人运行,因此该状态应该位于集中位置(如S3),而不是 git.

(原作者的重点,而不是我)

谁是对的,如果是的话,为什么?

terraform devops

63
推荐指数
4
解决办法
1万
查看次数

尝试在 AWS 中创建存储桶 ACL 时出现错误 AccessControlListNotSupported

最近我尝试aws_s3_bucket_acl使用 Terraform 部署资源,并收到错误:

\n
\n

错误:为存储桶名称创建 S3 存储桶 ACL 时出错:AccessControlListNotSupported:存储桶不允许 ACL \xe2\x94\x82 状态代码:400

\n
\n

我不明白为什么这不会创建。不过,我检查了 AWS 文档 [ 1 2 ],看起来他们最近在 2023 年 4 月进行了更新,默认禁用了 ACL。

\n

amazon-s3 amazon-web-services terraform

59
推荐指数
3
解决办法
4万
查看次数

如何在 Terraform 中使用 AWS account_id 变量

我想在 terraform 中访问我的 AWS 账户 ID。aws_caller_identity我可以根据文档找到它。那么我如何使用我创建的变量呢?在下面的情况下,我尝试在 S3 存储桶名称中使用它:

data "aws_caller_identity" "current" {}
output "account_id" {
  value = data.aws_caller_identity.current.account_id
}

resource "aws_s3_bucket" "test-bucket" {
  bucket = "test-bucket-${account_id}"
}
Run Code Online (Sandbox Code Playgroud)

尝试以这种方式使用account_id变量会给我带来错误,A reference to a resource type must be followed by at least one attribute access, specifying the resource name.我希望我没有正确调用它?

amazon-s3 amazon-web-services terraform

57
推荐指数
2
解决办法
6万
查看次数

Terraform 会损坏您在 macOS Intel 上的计算机

我在 macOS Ventura 13.3.1 上遇到 terraform 问题。当我尝试初始化 terragrunt 时:

地形初始化

我有信息表明

Terraform 会损坏您的计算机

我的同事正在使用 M1 和 terraform 版本 1.0.11,他没有问题。我尝试了最新版本和1.0.11,但仍然有这个错误。我通过 tfenv 安装了 terraform。

在此输入图像描述

macos terraform terragrunt

51
推荐指数
4
解决办法
2万
查看次数

使用terraform设置由计划事件源触发的lambda函数

我想每五分钟运行一次AWS lambda函数.在AWS管理控制台中,这很容易设置,在lambda函数的"事件源"选项卡下,但如何使用Terraform进行设置?

我试图用aws_lambda_event_source_mapping资源,但事实证明,它使用的API仅支持从室壁运动和DynamoDB事件.当我尝试将它与预定的事件源一起使用时,创建超时.

amazon-web-services terraform

49
推荐指数
2
解决办法
2万
查看次数

Terraform:将AWS托管策略附加到角色的正确方法?

我想将一个预先存在的AWS托管角色附加到策略,这是我当前的代码:

resource "aws_iam_role_policy_attachment" "sto-readonly-role-policy-attach" {
  role       = "${aws_iam_role.sto-test-role.name}"
  policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来建模托管策略,然后引用它而不是硬编码ARN?看起来每当我对ARN /路径或其他类似的东西进行硬编码时,我通常会发现以后有更好的方法.

Terraform中是否存在对托管策略建模的内容?或者硬编码ARN是"正确"的方式吗?

amazon-web-services amazon-iam terraform

49
推荐指数
3
解决办法
2万
查看次数

Terraform:获取状态锁时出错:ConditionalCheckFailedException

terraform plan在管道中发生了以下错误:

Error: Error locking state: Error acquiring the state lock: ConditionalCheckFailedException: The conditional request failed
Lock Info:
ID:        9db590f1-b6fe-c5f2-2678-8804f089deba
Path:      ...
Operation: OperationTypePlan
Who:       ...
Version:   0.12.25
Created:   2020-05-29 12:52:25.690864752 +0000 UTC
Info:      
Terraform acquires a state lock to protect the state from being written
by multiple users at the same time. Please resolve the issue above and try
again. For most commands, you can disable locking with the "-lock=false"
flag, but this is not recommended.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我确定没有其他并发计划。有没有办法处理这个问题?我应该如何解除这个锁?

gitlab-ci terraform

49
推荐指数
5
解决办法
4万
查看次数

Terraform AWS 提供商错误:属性值不可配置。无法为“acl”配置值:其值将自动决定

就在今天,每当我运行时terraform apply,我都会看到类似这样的错误:Can\'t configure a value for "lifecycle_rule": its value will be decided automatically based on the result of applying this configuration.

\n

昨天还在工作。

\n

以下是我运行的命令:terraform init && terraform apply

\n

以下是初始化的提供者插件列表:

\n
- Finding latest version of hashicorp/archive...\n- Finding latest version of hashicorp/aws...\n- Finding latest version of hashicorp/null...\n- Installing hashicorp/null v3.1.0...\n- Installed hashicorp/null v3.1.0 (signed by HashiCorp)\n- Installing hashicorp/archive v2.2.0...\n- Installed hashicorp/archive v2.2.0 (signed by HashiCorp)\n- Installing hashicorp/aws v4.0.0...\n- Installed hashicorp/aws v4.0.0 (signed by HashiCorp)\n
Run Code Online (Sandbox Code Playgroud)\n …

amazon-s3 amazon-web-services terraform terraform-provider-aws

47
推荐指数
3
解决办法
3万
查看次数

如何通过 Terraform 0.12 中的列表(对象)for_each

我需要部署 GCP 计算实例列表。我如何通过像这样的对象列表中的“vms”循环 for_each:

    "gcp_zone": "us-central1-a",
    "image_name": "centos-cloud/centos-7",
    "vms": [
      {
        "hostname": "test1-srfe",
        "cpu": 1,
        "ram": 4,
        "hdd": 15,
        "log_drive": 300,
        "template": "Template-New",
        "service_types": [
          "sql",
          "db01",
          "db02"
        ]
      },
      {
        "hostname": "test1-second",
        "cpu": 1,
        "ram": 4,
        "hdd": 15,
        "template": "APPs-Template",
        "service_types": [
          "configs"
        ]
      }
    ]    
}
Run Code Online (Sandbox Code Playgroud)

foreach loops list object terraform

43
推荐指数
5
解决办法
7万
查看次数