在 Terragrunt 环境存储库中使用 TFENV 和 TFENV_AUTO_INSTALL 时出现并发 terraform 安装问题

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

问题:

在 Terragrunt 存储库中使用

TFENV_AUTO_INSTALL
环境变量时,许多不同 Terraform 版本的并发安装会触发竞争条件。

这会导致错误,其中 tfenv 尝试在并行管道作业中同时安装多个版本的 Terraform,从而导致权限被拒绝的问题。

我的代码仓库:

dev-account01
├── eu-west-1
│   ├── iam_roles
│   │    ├──  .terraform-version
│   │    ├──  main.tf
│   ├── networking
│   │    ├── .terraform-version
│   │    ├── main.tf

对于每个模块都有不同的

terrform version
1.6.21.5.5

PS:在我的实际设置中,我有更多的区域、更多的模块和更多的帐户。

错误信息:

/home/user/.tfenv/lib/tfenv-exec.sh: line 43:  /home/user/.tfenv/versions/1.6.2/terraform: Permission denied
/home/user/.tfenv/lib/tfenv-exec.sh: line 43: exec: /home/user/.tfenv/versions/1.6.2/terraform: cannot execute: Permission denied

可重现场景:

  1. 在 Terragrunt 存储库中启用
    TFENV_AUTO_INSTALL
  2. 触发具有多个作业/计划的管道,尝试安装以前未使用的许多版本的 Terraform。

预期行为:

TFENV_AUTO_INSTALL
应优雅或按顺序处理并发安装,避免竞争条件和权限被拒绝错误。

或者有什么方法可以序列化每个帐户中我的 terraform 模块中存在的不同 terraform 版本的安装?

terraform terragrunt atlantis
1个回答
0
投票

您可能会考虑使用包装器脚本来序列化 Terraform 版本安装,确保一次仅安装一个版本 (

tfenv install
),避免竞争条件和权限问题。

在管道中执行 Terragrunt 命令之前

运行此脚本 (
tfenv_serial_install.sh)。

#!/bin/bash # Wrapper script for tfenv to install Terraform versions serially # Lock file to synchronize tfenv installations LOCK_FILE="/tmp/tfenv-install.lock" # Function to install Terraform version install_tf_version() { version=$1 ( flock -x 200 tfenv install "$version" ) 200>$LOCK_FILE } # Extract Terraform versions from .terraform-version files and install them serially for tf_version_file in $(find . -name ".terraform-version"); do version=$(cat "$tf_version_file") install_tf_version "$version" done
    
© www.soinside.com 2019 - 2024. All rights reserved.