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