Terraform Cli не принимает учетные данные AWS - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь создать экземпляр ec2, используя terraform. Передача учетных данных через terraform cli не выполняется, а жесткое кодирование в main.tf работает нормально

Это для динамического создания экземпляра ec2 с использованием terraform

terraform применяет работы со следующими main.tf

provider "aws" {
  region     = "us-west-2"
  access_key = "hard-coded-access-key"
  secret_key = "hard-coded-secret-key"
}
resource "aws_instance" "ec2-instance" {
  ami = "ami-id"
  instance_type = "t2.micro"
  tags {
    Name = "test-inst"
   }
}

пока не работает:

terraform apply -var access_key="hard-coded-access-key" -var secret_key="hard-coded-secret-key"

Есть ли какая-либо разница в двух вышеуказанных способах выполнения команд? Согласно документации terraform, оба вышеперечисленных должны работать.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Ответ @Felipe правильный, но я никогда не буду рекомендовать определять ключ доступа и секретный ключ в variables.tf. Что вам нужно сделать, это оставить его мигать и установить ключи, используя aws configure, или для создания других параметров ключи для развертывания terraform только с использованием aws configure --profile terraform или без профиля aws configur

поэтому ваш файл connection.tf или main.tf будет выглядеть так:

provider "aws" {
  #You can use an AWS credentials file to specify your credentials.
  #The default location is $HOME/.aws/credentials on Linux and OS X, or "%USERPROFILE%\.aws\credentials" for Windows users
  region              = "us-west-2"
# profile configured during aws configure --profile
  profile             = "terraform"
# you can also restrict account here, to allow particular account for deployment
  allowed_account_ids = ["12*****45"]
}

Вы также можете указать отдельный файл для секретного ключа и ключа доступа. Причина этого в том, что Variables.tf является частью вашего языка конфигурации или bitbucket, поэтому лучше не помещать эти чувствительные ключи в variables.tf

Вы можете создать файл где-нибудь в своей системе и указать путь к ключам в разделе провайдера.

provider "aws" {
  region              = "us-west-2"
  shared_credentials_file = "$HOME/secret/credentials"
}

Вот формат файла учетных данных

[default]
aws_access_key_id = A*******Z
aws_secret_access_key = A*******/***xyz
0 голосов
/ 02 июля 2019

Каждый terraform модуль может использовать входные переменные, включая основной модуль. Но прежде чем использовать входные переменные, вы должны объявить их.

Создайте файл variables.tf в той же папке, где находится ваш файл main.tf:

variable "credentials" {
  type = object({
    access_key = string
    secret_key = string
  })

  description = "My AWS credentials"
}

Затем вы можете ссылаться на входные переменные в вашем коде следующим образом:

provider "aws" {
  region     = "us-west-2"
  access_key = var.credentials.access_key
  secret_key = var.credentials.secret_key
}

И вы можете запустить:

terraform apply -var credentials.access_key="hard-coded-access-key" -var credentials.secret_key="hard-coded-secret-key"

Или вы можете создать файл terraform.tfvars со следующим содержимым:

# ------------------
# AWS Credentials
# ------------------
credentials= {
  access_key = "hard-coded-access-key"
  secret_key = "hard-coded-secret-key"
}

А потом просто запустите terraform apply.

Но ключевым моментом является то, что вы должны объявить входные переменные перед их использованием.

...