10
respostas

[Bug] Terraform backend

Quando rodo o comando de terraform apply depois do init aparece o seguinte erro

Planning failed. Terraform encountered an error while generating this plan.

╷
│ Error: No valid credential sources found
│
│   with module.homolog.provider["registry.terraform.io/hashicorp/aws"],
│   on ..\..\infra\Provider.tf line 12, in provider "aws":
│   12: provider "aws" {
│
│ Please see https://registry.terraform.io/providers/hashicorp/aws
│ for more information about providing credentials.
│
│ Error: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, exceeded maximum number of attempts, 3, request  
│ send failed, Get "http://169.254.169.254/latest/meta-data/iam/security-credentials/": dial tcp 169.254.169.254:80: connectex: A socket operation was        
│ attempted to an unreachable network.
│
╵
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">=4.6.0"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  region  = "us-west-2"
}
10 respostas

Olá, Vitor. Tudo bem?

O erro indica que o Terraform não está conseguindo encontrar as credenciais da AWS necessárias para realizar as operações.

Para resolver, você pode validar as credenciais do usuário:

  • Baixe e instale o AWS CLI através do link AWS CLI.

  • Depois de instalado você pode configurar a AWS usando o comando aws configure, onde será requisitado a chave secreta (secret key), que pode ser criada nessa pagina clicando em "criar chave de acesso" na aba "credenciais do AWS IAM".

Outro detalhe é que notei que você está utilizando uma versão diferente para o provedor AWS, no caso você está utilizando 4.6.0 e a do instrutor é 3.27 , faça uma nova tentativa usando a mesma versão do instrutor (version = "~> 3.27").

Fico à disposição. Bons estudos!

Fiz todas as mudança indicada e apresentou esse erro.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Esse e o meu EKS.yml

name: Kubernetes

on: workflow_call:

jobs: EKS: runs-on: ubuntu-latest steps:

  - uses: actions/checkout@v3
  
  - name: Configure AWS credentials
    uses: aws-actions/configure-aws-credentials@v1
    with:
      aws-access-key-id: ${{ secrets.CHAVEDEACESSO }}
      aws-secret-access-key: ${{ secrets.CHAVEDEACESSOSSECRETA }}
      aws-region: us-east-2

  - name: Clone repository
    run: git clone https://github.com/vitorgrisolia/Infra_CI_Kubernetes.git

  - name: HashiCorp - Setup Terraform
    uses: hashicorp/setup-terraform@v2.0.3

  - name: Terraform Init
    run: terraform -chdir=Infra_CI_Kubernetes/env/Homolog init

  # - name: Terraform Plan
  #   run: terraform -chdir=Infra_CI_Kubernetes/env/Homolog plan

  - name: Terraform Apply
    run: terraform -chdir=Infra_CI_Kubernetes/env/Homolog apply -auto-approve

  # O passo de destruição geralmente não deve estar aqui. Considere movê-lo para outro workflow ou etapa.

  # - name: Terraform Destroy (se necessário)
  #   run: terraform -chdir=Infra_CI_Kubernetes/env/Homolog destroy -auto-approve

Consegui arrumar, tive que mudar para uma versção

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 4.33"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  region  = "us-east-2"
}

Pede para entrar com um valor, Qual e o valor ?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Vitor!

A mensagem que aparece diz que o Terraform vai executar as ações descritas e pede uma confirmação. Você pode digitar yes para que as mudanças de criação de infraestrutura sejam feitas.

Abraços!

Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: aed3502c-64fd-4616-ba58-b2650e577be6, api error InvalidParameterValue: Value (us-west-2a) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.public[0],
│   on .terraform\modules\prod.vpc\main.tf line 98, in resource "aws_subnet" "public":
│   98: resource "aws_subnet" "public" {
│
╵
╷
│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: ae3a0741-78da-4de8-a1b9-42b10ed065a1, api error InvalidParameterValue: Value (us-west-2c) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.public[2],
│   on .terraform\modules\prod.vpc\main.tf line 98, in resource "aws_subnet" "public":
│   98: resource "aws_subnet" "public" {
│
╵
╷
│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: 7313604a-b352-432b-8668-17c2ae7fd46c, api error InvalidParameterValue: Value (us-west-2b) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.public[1],
│   on .terraform\modules\prod.vpc\main.tf line 98, in resource "aws_subnet" "public":
│   98: resource "aws_subnet" "public" {
│
╵
╷
│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: 03787645-744f-4fc0-b4f4-f5628f65492c, api error InvalidParameterValue: Value (us-west-2b) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.private[1],
│   on .terraform\modules\prod.vpc\main.tf line 234, in resource "aws_subnet" "private":
│  234: resource "aws_subnet" "private" {
│
╵
╷
│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: c44c8d48-1768-4588-9ecd-19ef69494710, api error InvalidParameterValue: Value (us-west-2c) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.private[2],
│   on .terraform\modules\prod.vpc\main.tf line 234, in resource "aws_subnet" "private":
│  234: resource "aws_subnet" "private" {

│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: ce0f6456-d98f-4166-8a59-e613cdbfd799, api error InvalidParameterValue: Value (us-west-2a) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.private[0],
│   on .terraform\modules\prod.vpc\main.tf line 234, in resource "aws_subnet" "private":
│  234: resource "aws_subnet" "private" {

│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: 3e7e0836-46c4-4d1e-b4af-794b462bb2da, api error InvalidParameterValue: Value (us-west-2a) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.
│
│   with module.prod.module.vpc.aws_subnet.database[0],
│   on .terraform\modules\prod.vpc\main.tf line 354, in resource "aws_subnet" "database":
│  354: resource "aws_subnet" "database" {

│ Error: creating EC2 Subnet: operation error EC2: CreateSubnet, https response error StatusCode: 400, RequestID: 506e0375-2108-4cc2-9819-6d52bc3d611e, api error InvalidParameterValue: Value (us-west-2b) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-2a, us-east-2b, us-east-2c.

│   with module.prod.module.vpc.aws_subnet.database[1],
│   on .terraform\modules\prod.vpc\main.tf line 354, in resource "aws_subnet" "database":
│  354: resource "aws_subnet" "database" {
│

Olá Vitor!

Este erro relacionado à subnet está ocorrendo porque o código que você está executando tenta criar subnets em zonas de disponibilidade na região us-west-2, enquanto o ambiente está configurado para permitir apenas a região us-east-2.

Para corrigir este problema, você pode seguir algumas abordangens, segue 2 sugestões:

  1. Atualizar a região das subnets: Se for necessário usar a região us-east-2, altere a configuração das availabilityZone no seu código para usar us-east-2a, us-east-2b, us-east-2c em vez de us-west-2a, us-west-2b, us-west-2c.

  2. Alterar a região para us-west-2: Se realmente deseja usar a região us-west-2, verifique se a configuração da VPC e outros recursos estão definidos para essa região. Isso pode ser feito na configuração principal do Terraform:

provider "aws" {
  region = "us-west-2"
}

deu certo em ate certa parte.

│ Error: creating EKS Cluster (homolog2): operation error EKS: CreateCluster, https response error StatusCode: 409, RequestID: cf01a1b3-fec9-4627-a789-853a9d7d1d35, ResourceInUseException: Cluster already exists with name: homolog2
│
│   with module.prod.module.eks.aws_eks_cluster.this[0],
│   on .terraform\modules\prod.eks\main.tf line 27, in resource "aws_eks_cluster" "this":
│   27: resource "aws_eks_cluster" "this" {
│
╵
╷
│ Error: creating RDS DB Subnet Group (vpc-eks): operation error RDS: CreateDBSubnetGroup, https response error StatusCode: 400, RequestID: a02a7d2f-a3da-4b61-8d4b-52bc46ac8bbe, DBSubnetGroupAlreadyExists: The DB subnet group 'vpc-eks' already exists.
│
│   with module.prod.module.vpc.aws_db_subnet_group.database[0],
│   on .terraform\modules\prod.vpc\main.tf line 381, in resource "aws_db_subnet_group" "database":
│  381: resource "aws_db_subnet_group" "database" {
│
╵
╷
│ Error: creating EC2 EIP: operation error EC2: AllocateAddress, https response error StatusCode: 400, RequestID: ffeafae5-8c96-4d09-8486-272b340f6188, api error AddressLimitExceeded: The maximum number of addresses has been reached.
│
│   with module.prod.module.vpc.aws_eip.nat[1],
│   on .terraform\modules\prod.vpc\main.tf line 1059, in resource "aws_eip" "nat":
│ 1059: resource "aws_eip" "nat" {

Olá Vitor!

Esses erros indicam que alguns recursos que você está tentando criar já existem.

  1. O erro ResourceInUseException: Cluster already exists with name: homolog2 indica que um cluster como o nome homol2 já está criado e terraform apply está tentando criar novamente. Caso este cluster exista você pode excluir e criá-lo novamente, ou também renomear no seu Terraform.

  2. O erro DBSubnetGroupAlreadyExists: The DB subnet group 'vpc-eks' already exists indica que um grupo de subnets com o nome vpc-eks já está criado. Neste também você pode utilizar a mesma abordagem você pode excluir e criá-lo novamente, ou também renomear no seu Terraform.

  3. O erro AddressLimitExceeded: The maximum number of addresses has been reached indica que você atingiu o limite máximo de Elastic IPs (EIPs) disponíveis na sua conta AWS.

OBS: Neste item 3 o limite padrão de Elastic IPs - (EIPs) por região em uma conta são 5. Isso significa que você pode ter até 5 endereços IP elásticos alocados por região por conta.