4
respostas

Terraform não consegue importar chave pública

"Error: Error launching source instance: InvalidKeyPair.NotFound: The key pair 'terraform-aws' does not exist status code: 400, request id: 3c4d487a-f051-45f2-bb90-3020c0798c7a

on main.tf line 7, in resource "aws_instance" "dev": 7: resource "aws_instance" "dev" {"

# Configure the AWS Provider
provider "aws" {
  version = "~> 2.0"
  region  = "sa-east-1"
}

resource "aws_instance" "dev" {
    count = 2
    ami = "ami-0619116924c87f2f8"
    instance_type = "t2.micro"
    # each region must have its own key pairs
    key_name = "terraform-aws"
    #public_key = "file("${$${HOME}/.ssh/terraform-aws.pub}")"
    tags = {
        Name = "dev${count.index}"
    }
}   
4 respostas

Tentei indicar o path pra public_key também, mas não entendi a sintaxe do modulo file, se puder me ajudar com isso também. Acho que seria mais interessante subir a chave por código, já que é a primeira vez que vou usá-la.

Minha solução foi criar um resorce definindo a chave, mas tive que passar o conteúdo da chave, o que também não é desejável.

Configure the AWS Provider

provider "aws" { version = "~> 2.0" region = "sa-east-1" }

resource "aws_key_pair" "terraform-aws" { key_name = "terraform-aws" public_key = <conteúdo-da-chave-publica> }

resource "aws_instance" "dev" { count = 2 ami = "ami-0619116924c87f2f8" instance_type = "t2.micro"

# each region must have its own key pairs
key_name = "terraform-aws"

tags = {
    Name = "dev${count.index}"
}

}

Encontrei uma forma de rodar um algoritmo para gerar uma chave nova e usar ela como recurso para subir a chave para AWS.


resource "tls_private_key" "privkey" {
    algorithm = "RSA" 
    rsa_bits = 4096
}

resource "aws_key_pair" "terraform-aws" {
  key_name   = "terraform-aws"
  public_key = "${tls_private_key.privkey.public_key_openssh}"
}

resource "aws_key_pair" "terraform-aws-us-east-1" {
  provider = "aws.us-east-1"

  key_name   = "terraform-aws"
  public_key = "${tls_private_key.privkey.public_key_openssh}"
}

Olá Guilherme, tudo bem? Peço desculpas pela demora em ti responder! Agora esse problema é estranho, você lembra se você conseguiu importar a sua chave pública diretamente na AWS? O primeiro passo é termos a chave criada localmente, depois temos que ter certeza que nossa chave SSH privada está dentro do diretório ~/.ssh, porque esse é o diretório padrão de chaves SSH, e o linux vai buscar a chave privada correspondente no momento da conexão SSH dentro desse diretório, então a chave privada "terraform-aws" deve estar dentro do diretório ~/.ssh. O outro passo é importar a chave pública na AWS, depois disso sempre que criarmos uma nova instancia na AWS, a mesma já vai conter a nossa chave pública e já vamos conseguir realizar a conexão SSH. Então você poderia verificar a importação da chave pública (terraform-aws.pub) na AWS deu certo?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software