Terraform – como importar AWS S3 bucket

Escenario: tenemos un terraform que no contempla un S3 que necesitamamos configurar. En este caso, queremos configurar el CORS de ese bucket.

Añadir recurso Terraform

Añadimos el recurso en nuestro main.tf

resource "aws_s3_bucket" "example-cdn-static-files" {
bucket="example-cdn-static-files"
acl="private"
}

Nos faltaría no obstante, completar nuestro actual tfstate porque de lo contrario Terraform notará un cambio y querrá desplegar ocasionando errores.

+ aws_s3_bucket.example-cdn-static-files
 acceleration_status: "<computed>"
 acl: "private"
 arn: "<computed>"
 bucket: "example-cdn-static-files"
 bucket_domain_name: "<computed>"
 force_destroy: "false"
 hosted_zone_id: "<computed>"

Esto se conseguirá mediante la opción “import”.

Terraform import

Ejecutamos:

# tfwrapper import aws_s3_bucket.example-cdn-static-files example-cdn-static-files
aws_s3_bucket.example-cdn-static-files: Importing from ID "example-cdn-static-files"...
aws_s3_bucket.example-cdn-static-files: Import complete!
Imported aws_s3_bucket (ID:example-cdn-static-files)
Imported aws_s3_bucket_policy (ID:example-cdn-static-files)
Import success! The resources imported are shown above. These are
now in your Terraform state. Import does not currently generate
configuration, so you must do this next. If you do not create configuration
for the above resources, then the next `terraform plan` will mark
them for destruction.

Faltará hacer un terraform plan último para acabar de perfilar el Terraform (policies, etc)

Terraforming

Existe una tool que me encontré hace poco, http://terraforming.dtan4.net. Básicamente lo que hace es leer nuestra infraestructura y nos dice que código Terraform hemos de generar. Se necesitarán al menos permisos de AWS en modo lectura.

Ejemplo ejecución:

# docker run --rm --name terraforming -e AWS_ACCESS_KEY_ID=XXXXXXXXXXX -e AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXX -e AWS_DEFAULT_REGION=eu-west-1 quay.io/dtan4/terraforming:latest terraforming s3 > main.tf

Esto dejará en el archivo main.tf, todo lo relacionado con S3 en formato Terraform.  Nos ahorra el trabajo de tener de picarlo a mano. Luego con otra instrucción también nos genera el código de tfstate

# docker run --rm --name terraforming -e AWS_ACCESS_KEY_ID=XXXXXXXXXXX -e AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXX -e AWS_DEFAULT_REGION=eu-west-1 quay.io/dtan4/terraforming:latest terraforming s3 --tfstate > state.tf

Links

Leave a Reply

Your email address will not be published. Required fields are marked *