Terraform Cloud (т.е. удаленный бэкэнд) Замены среды TF_VAR_ не работают? - PullRequest
0 голосов
/ 03 апреля 2020

Версия Terraform: 0.12.24

Это действительно странно, потому что раньше я использовал синтаксис подстановки TF_VAR_, и он работал нормально.

provider.tf

# Configure the AWS Provider
provider "aws" {
  version = "~> 2.0"
  region  = "ap-southeast-2"
  access_key = var.aws_access_key_id
  secret_key = var.aws_secret_access_key
}

vars.tf

variable "aws_access_key_id" {
  description = "Access Key for AWS IAM User"
}

variable "aws_secret_access_key" {
  description = "Secret Access Key for AWS IAM User"
}

variable "terraform_cloud_token" {
  description = "Token used to log into Terraform Cloud via the CLI"
}

backend.tf для облаков терраформ

terraform {
  backend "remote" {
    organization = "xx"

    workspaces {
      name = "xx"
    }
  }
}

Сборка logs

---------------
TF_VAR_aws_secret_access_key=***
TF_VAR_aws_access_key_id=***
TF_VAR_terraform_cloud_token=***
---------------

Также локально происходит сбой при попытке запустить его в локальном Docker контейнере

Dockerfile

FROM hashicorp/terraform:0.12.24

COPY . /app

COPY .terraformrc $HOME

ENV TF_VAR_aws_secret_access_key 'XX'
ENV TF_VAR_aws_access_key_id 'XX'
ENV TF_VAR_terraform_cloud_token 'XX'

WORKDIR /app

ENTRYPOINT ["/app/.github/actions/terraform-plan/entrypoint.sh"]

точка входа. sh

#!/bin/sh -l

# move terraform cloud configuration file to user root as expected
# by the backend resource
mv ./.terraformrc ~/

terraform init
terraform plan

вывод из docker работа контейнера

$ docker run -it tf-test
---------------
TF_VAR_aws_secret_access_key=XX
TF_VAR_aws_access_key_id=XX
TF_VAR_terraform_cloud_token=XX
---------------

Initializing the backend...

Successfully configured the backend "remote"! Terraform will automatically
use this backend unless the backend configuration changes.

Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "aws" (hashicorp/aws) 2.56.0...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Running plan in the remote backend. Output will stream here. Pressing Ctrl-C
will stop streaming the logs, but will not stop the plan running remotely.

Preparing the remote plan...

To view this run in a browser, visit:
https://app.terraform.io/app/XX/XX/runs/run-XX

Waiting for the plan to start...

Terraform v0.12.24
Configuring remote state backend...
Initializing Terraform configuration...
2020/04/03 01:43:04 [DEBUG] Using modified User-Agent: Terraform/0.12.24 TFC/05d5abc3eb

Error: No value for required variable

  on vars.tf line 1:
   1: variable "aws_access_key_id" {

The root module input variable "aws_access_key_id" is not set, and has no
default value. Use a -var or -var-file command line argument to provide a
value for this variable.


Error: No value for required variable

  on vars.tf line 5:
   5: variable "aws_secret_access_key" {

The root module input variable "aws_secret_access_key" is not set, and has no
default value. Use a -var or -var-file command line argument to provide a
value for this variable.


Error: No value for required variable

  on vars.tf line 9:
   9: variable "terraform_cloud_token" {

The root module input variable "terraform_cloud_token" is not set, and has no
default value. Use a -var or -var-file command line argument to provide a
value for this variable.

1 Ответ

1 голос
/ 03 апреля 2020

Хорошо ... это сбивает с толку, потому что журналы, генерируемые в виртуальных машинах Terraform, передаются в ваш собственный журнал терминала / запуска.

Но это то, что я выяснил. При использовании Terraform Cloud вам доступны два варианта.

  1. Использование виртуальных машин Terraform для запуска ваших terraform команд
  2. Использование собственной (или вашей платформы CI / CD) инфраструктуры чтобы выполнить эти terraform команды.

Execution Mode Settings

Если вы выберете первый вариант (который раздражает по умолчанию) ... вы должны установите переменные окружения на панели инструментов Terraform Cloud. Это связано с тем, что все команды terraform для этого типа выполнения выполняются на их виртуальных машинах, а переменные среды в вашей локальной среде из соображений безопасности не передаются в Terraform.

Example of Terraform Cloud Dashboard Variables Page

Если вы выбрали опцию remote, после этого она будет работать как положено.

...