Creación de nuestro Backend con Terraform
Clase 20 de 27 • Curso de Infraestructura Como Código con Terraform
Contenido del curso
Clase 20 de 27 • Curso de Infraestructura Como Código con Terraform
Contenido del curso
Miguel Andrés Isaza Barona
Felipe Robinet
fabio gomez guzman
Ronald Rodriguez
Cristian Córdova
German Tellez Vanegas
John Alexander Agudelo Galeano
Yolanda Lopez
FAUSTO CAMARGO
Giancarlo Zevallos Lecca
Matías A
Alfonso Baqueiro Bernal
Fabrizzio Aron Aranda La Rosa
Cristopher Adasme
Flavio Fernando Barrantes Sotelo
Daniel Ramos
Felipe Jurado Murillo
Juan Sebastian Otero
Christian Camilo Castillo
Yaiser Avila Rodriguez
Ricardo Ruiz
Daniel Cure
Oscar Adolfo Vargas López
Para los que tengan problemas ejecutando terraforn init con el backend:
Tuve problemas, pero la solución fue eliminar la carpeta terraform y el archivo de estado... funciono sin dar ningún permiso... sugiero seguir los pasos que indica Yolanda
Efectivamente borrar la carpeta .terraform funciono para mi.
Que es un bucket?
Son contenedores de objetos. Son como las "unidades" que utiliza S3 para hacer el almacenamiento de diversas cosas. Archivos, ficheros... :D En la doc oficial puedes encontrar más info. Link
Recuerden que los nombres de los buckets deben ser unicos en todo aws. A raíz de esto pueden tener problemas al ejecutar el comando "terraform init" si alguno de nosotros tiene creado ese bucket en aws.
Cómo se puede manejar el backend para varios ambientes, dev y prod?
Deberias tener un backend para cada ambiente. En la demo que hago, en la sección de backend esta el parametro key este valor es el nombre el el nombre de tu backend, este valor tambien se puedo enviar como parametro al momento de la ejecución cuando inicializas con el comando init. entonces podrias utilizarlo de esta forma para que sea mas sencillo identificar dev y prod. lo puedes hacer de esta forma:
#prod terraform init --backend-config="key=prod/tfstate" #dev terraform init --backend-config="key=dev/tfstate"
Los que tiene problemas para crear el bucket, la forma actualizada 2022 es la siguiente: Tres archivos Main. tf ---- variables. tf ------ providers. tf
Contenido de los archivos: main. tf
resource "aws_s3_bucket" "b" { bucket = "NOMBREDELBUCKET" tags = { Name = "Mi bucket" Environment = "Dev" } } resource "aws_s3_bucket_acl" "example" { bucket = aws_s3_bucket.itt.id acl = "private" }
variables. tf
variable "aws_access_key" { default = "TULLAVE" } variable "aws_secret_key" { default = "TUSECRET" } variable "aws_region" { default = "LAREGION" }
providers. tf
provider "aws" { access_key = "${var.aws_access_key}" secret_key = "${var.aws_secret_key}" region = "${var.aws_region}" }
Hola Fausto, en realidad lo que haces funcionalmente está correcto, pero no es una buena práctica porque estás exponiendo tus credenciales. Otro punto es que el código que mostró en clase la profesora sí funciona.
terraform init -backend-config="profile=myProfileAws"
Cuando hay mas de un perfil de AWS en el pc, hay q decirle a Terraform el perfil a utilizar, si no da acceso denegado ya que use el profile default
No estoy seguro que se diga ENCRIPTACION en Español, la forma correcta que he visto en la mayoría de ocasiones es CIFRADO.
Para los tengan problemas al crear el bucket, el archivo state se guarda en un bucket que tengas creado anteriormente, estaba colocando el nombre backend-terraform-platzi tanto en la definicion de la variables como en el backend.tf
Vendría a quedar masomenos así
backend.tf
terraform { backend "s3" { bucket = "platzi-aws" # nombre del bucket que ya tengas creado, aqui es donde se guardará el archivo de estado key = "dev" region = "us-east-2" } }
y en variables.tf
variable "bucket_name" { default = "backend-terraform-platzi" # el nombre del bucket a crear } variable "acl" { default = "private" } variable "tags" { default = {Environment = "Dev", CreatedBy = "terraform"} }
Holi, les quiero compartir la manera que pude realizar el terraform init
# Consideraciones: # - Nombre de bucket S3 debe ser unico # - Cuidar que nombre de S3 ya exista antes de ejecutar el terraform init para el backend # - Nombre del bucket S3 en backend.tf debe ser el mismo que el creado # - A la fecha del comentario, no es necesario especificar el atributo ACL del recurso S3 👌 # 1. Terraform init con los archivos bases (excluyendo backend.tf) terraform init # 2. Crear bucket s3 terraform apply -auto-approve # 3. Crear backend.tf e inicializar terraform terraform init
Al ejecutar el terraform init me generaba el error de que el bucket no existe.
Entonces, me funcionó generar primero el bucket usando el aws-cli:
aws s3api create-bucket --bucket "my-bucket" --create-bucket-configuration LocationConstraint=us-east-2
y luego el comando terraform init se ejecutó sin problemas
Aún no entiendo como hace referencia al archivo tsstate para en backend
Al momento de realizar terraform apply me surgio el siguiente error: Error: Error creating S3 bucket: BucketAlreadyExists: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again. status code: 409, request id: 3F3563EDC14F144C
Eln nombre del Bucket ya existe, en AWS el nombre del bucket debe ser unico a nivel global, trata de personalizar el nombre lo mejor posile. ej. terraform-platzi-pedro-ficticio-20
solucion error del init:
terraform init -backend-config="bucket=bucket name" -backend-config="key=dev" -backend-config="region=us-east-1" -backend-config="shared_credentials_file=C:/Terraform/curso/.aws/credentials"
el tag de acl dentro en la declaración del recurso ya está deprecado, por lo que hay que crear par de recursos adicionales para poder proceder con la cración del backend privado
Para más info, seguir este link:
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_acl
Yo tambien estaba teniendo problemas para crear el bucket con el nombre de backend-terraform-platzi. El error que me daba era este:
Error: creating Amazon S3 (Simple Storage) Bucket (backend-terraform-platzi): BucketAlreadyExists: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
Al parecer los buckets deben de tener un nombre unico en AWS, asi que lo que hice fue cambiar el nombre por uno distinto pero unico y volver a ejecutar el comando terrform init y despues terraform apply -auto-approve
Muy mal que no indiquen al ejecutar terraform init se deba configurar permisos en la creacion del bucket en AWS
esta configuración hecha la hago fuera de mi carpeta de aws donde ya lance mi ec2 y mi sg ?