Conecte AWS con Terraform en lugar de CloudFormation
A Terraform equivalent of the generated AWS template, with an Organization variant and a way to compare it to the wizard.
Conecte AWS con Terraform en lugar de CloudFormation
Cree la misma función de IAM, depósito S3 y exportación de costo y uso que crea la plantilla del asistente CostGlass, pero como Terraform puede revisar y mantener el control de versiones.
- CostGlass genera una plantilla de CloudFormation para AWS. No genera Terraform. Esta página ofrece un equivalente de Terraform escrito a mano.
- Aún inicia el asistente de AWS en CostGlass, porque crea su conexión, su ID externo y su ID de cuenta CostGlass.
- Ningún secreto está codificado: el ID de la cuenta de CostGlass y el ID externo son variables que usted completa.
- Luego pega las salidas de RoleArn y BucketName en el asistente, exactamente como con CloudFormation.
- Debido a que se mantiene manualmente, compare sus permisos con la plantilla del asistente antes de realizar la solicitud. A continuación se muestra un script de comparación.
terraform validate on AWS provider 5.100). Si CostGlass agrega un permiso a la plantilla más adelante, esta página puede retrasarse. Realice siempre la comparación en la última sección antes de presentar la solicitud.- Terraform 1.5 o posterior y proveedor de AWS hashicorp/aws versión ~> 5.0. El recurso de exportación (aws_bcmdataexports_export) necesita una versión 5.x que lo incluya; Si init dice que el tipo de recurso es desconocido, ejecute terraform init -upgrade.
- Las credenciales de AWS para la cuenta que paga la factura (la cuenta de administración de una organización), permitieron crear roles de IAM, depósitos de S3 y exportaciones de datos de facturación.
- El asistente de CostGlass se abre en el paso Implementar (que se explica a continuación).
Obtenga sus dos valores de CostGlass
Terraform necesita dos valores que pertenezcan a su conexión. Nunca los escribas de memoria ni los compartas en el chat.
external_id.CostoGlassAccountId and copy its Predeterminado value, a 12-digit number. This is the value for costglass_account_id.cuenta única
Crea una carpeta con estos archivos. Todo se aplica en nosotros-este-1, como la plantilla de CloudFormation.
variables
| variables | que hace | Predeterminado |
|---|---|---|
costglass_account_id | La cuenta CostGlass AWS permitió asumir el rol. | Ninguno. Requerido. |
external_id | Your connection's External ID. Marked sensitive. | Ninguno. Requerido. |
bucket_name_prefix | El depósito se llama <prefijo>-<su ID de cuenta>. | costglass-cur-exports |
export_name | Nombre de la exportación de Costo y Uso. | CostoGlassCURExportar |
s3_prefix | Carpeta en el cubo. | cur |
enable_instance_scheduler | Agrega los únicos permisos de escritura (iniciar, detener, escalar). | FALSO |
enable_rightsizing | Agrega métricas de CloudWatch y lecturas de Compute Optimizer. | FALSO |
enable_uptime_monitoring | Agrega verificación de estado, alarma y lecturas de salud del objetivo. | FALSO |
export TF_VAR_external_id='...'. El valor también se almacena en el estado Terraform, así que proteja su archivo de estado como una contraseña.Ejecútelo y finalice en CostGlass
terraform init.terraform plan and read it. Debería ver el rol, sus políticas, el depósito y su configuración, y la exportación. No se ha creado nada todavía.terraform apply y confirmar. When it finishes it prints rolArn, Nombre del depósito y ExportArn.rolArn into Role ARN (Outputs: RoleArn) and Nombre del depósito into S3 bucket (Outputs: BucketName). Leave Prefix as canalla/ (change it to match s3_prefix, with a trailing slash, if you changed that) and Region as nosotros-este-1.Organización AWS
In the wizard choose AWS Organization. Ejecute Terraform de cuenta única arriba en cuenta de gestión: it creates the bucket, the export and the role CostGlassCURReader. Member accounts also need the role CostoGlassReadOnly. Elija una de dos formas.
Opción A: un StackSet (el más cercano a la plantilla del asistente)
Agregue este archivo a la misma carpeta. Crea un StackSet administrado por el servicio que implementa la función de miembro en cada cuenta de miembro, ahora y cuando las cuentas se unan más adelante. Primero cumpla con el requisito previo único: en la cuenta de administración, CloudFormation → StackSets → Habilite el acceso confiable con AWS Organizations.
Opción B: una llamada al módulo Terraform por cuenta de miembro
Úselo si desea que Terraform sea propietario de los roles o si solo conecta algunas cuentas. Terraform no puede crear proveedores en un bucle, por lo que cada cuenta necesita su propio alias de proveedor y bloque de módulo. The management account assumes OrganizationAccountAccessRole, which AWS Organizations creates in accounts it created; accounts you invited need an equivalent role.
Colocar member_account_ids in your variables, for example ["111111111111", "222222222222"], and add a provider and module pair for each extra account.
CostGlassCURReader only, the same as the CloudFormation template.Compruebe que coincida con el asistente
Download the YAML from the wizard (Download), save it next to your Terraform, then compare the permission lists. Primero marque las mismas características en ambos lados.
La salida vacía significa que las dos listas son iguales. Expected differences: for an Organization template the YAML also lists organizations:ListRoots y organizations:DescribeOrganization (used by a helper function that Option A replaces with a Terraform lookup). Para la opción B, las políticas de cuentas de miembros aparecen en el plan del módulo, así que compárelas por separado con la plantilla de miembros dentro de YAML. Cualquier otro permiso que aparezca en un lado solo significa que Terraform está desactualizado o que marcó diferentes funciones.
Also compare the Billing export columns: they live in local.cur_columns en principal.tf and must equal the SELECT list in the template's QueryStatement.
FAQ
terraform destroy. Ver Conecte AWS y elimine el acceso.