Aprovisione un producto de Terraform en AWS Service Catalog mediante un repositorio de código - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Aprovisione un producto de Terraform en AWS Service Catalog mediante un repositorio de código

Creado por el Dr. Rahul Sharad Gaikwad () y Tamilselvan P () AWS AWS

Entorno: PoC o piloto

Tecnologías: infraestructura; DevOps

Carga de trabajo: todas las demás cargas de trabajo

AWSservicios: AWS Service Catalog; Amazon EC2

Resumen

AWSService Catalog admite el aprovisionamiento de autoservicio con control para sus configuraciones de HashiCorp Terraform. Si usa Terraform, puede usar Service Catalog como la única herramienta para organizar, gobernar y distribuir sus configuraciones de Terraform AWS a escala. Puede acceder a las funciones clave de Service Catalog, como la catalogación de plantillas de infraestructura como código (IaC) estandarizadas y previamente aprobadas, el control de acceso, el aprovisionamiento de recursos en la nube con el menor acceso con privilegios, el control de versiones, el uso compartido en miles de AWS cuentas y el etiquetado. Los usuarios finales, como ingenieros, administradores de bases de datos y científicos de datos, consultan una lista de productos y versiones a los que tienen acceso y pueden implementarlos con una sola acción.

Este patrón le ayuda a implementar AWS recursos mediante el uso del código de Terraform. Se accede al código de Terraform del GitHub repositorio a través de Service Catalog. Con este enfoque, usted integra los productos con sus flujos de trabajo de Terraform existentes. Los administradores pueden crear carteras de Service Catalog y añadirles productos AWS Launch Wizard mediante Terraform.

Los beneficios de esta solución son los siguientes:

  • Gracias a la función de reversión de Service Catalog, si se produce algún problema durante la implementación, puede revertir el producto a una versión anterior.

  • Puede identificar fácilmente las diferencias entre las versiones del producto. Esto le ayuda a resolver los problemas durante la implementación.

  • Puede configurar una conexión al repositorio en el catálogo de servicios, por ejemplo GitHub, a GitLab, o AWS CodeCommit. Puede realizar cambios en el producto directamente a través del repositorio.

Para obtener información sobre las ventajas generales de AWS Service Catalog, consulte Qué es Service Catalog.

Requisitos previos y limitaciones

Requisitos previos 

Arquitectura

Pila de tecnología de destino

  • AWS Service Catalog

  • AWSLambda

Arquitectura de destino

Diagrama de arquitectura del aprovisionamiento de un producto de Terraform en Service Catalog desde un repositorio de código

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Cuando la configuración de Terraform está lista, un desarrollador crea un archivo.zip que contiene todo el código de Terraform. El desarrollador carga el archivo.zip en el repositorio de código que está conectado a Service Catalog.

  2. Un administrador asocia el producto Terraform a una cartera de Service Catalog. El administrador también crea una restricción de lanzamiento que permite a los usuarios finales aprovisionar el producto.

  3. En Service Catalog, los usuarios finales lanzan AWS recursos mediante la configuración de Terraform. Pueden elegir qué versión del producto implementar.

Herramientas

AWSservicios y herramientas

  • AWSLambda es un servicio informático que le ayuda a ejecutar código sin necesidad de aprovisionar o administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • AWSService Catalog le ayuda a administrar de forma centralizada los catálogos de servicios de TI AWS aprobados. Los usuarios finales pueden implementar rápidamente solo los servicios de TI aprobados que necesitan, de acuerdo con las limitaciones establecidas por su organización.

Otros servicios

  • Go es un lenguaje de programación de código abierto compatible con Google.

  • Python es un lenguaje de programación informático de uso general.

Repositorio de código

Si necesita ejemplos de configuraciones de Terraform que pueda implementar a través de Service Catalog, puede usar las configuraciones del repositorio GitHub Amazon Macie Organization Setup Using Terraform. No es necesario utilizar los ejemplos de código de este repositorio.

Prácticas recomendadas

  • En lugar de proporcionar los valores de las variables en el archivo de configuración de Terraform (terraform.tfvars), configure los valores de las variables al lanzar el producto a través de Service Catalog.

  • Conceda acceso a la cartera solo a usuarios o administradores específicos.

  • Siga el principio de privilegios mínimos y conceda los permisos mínimos necesarios para realizar una tarea. Para obtener más información, consulte las prácticas recomendadas de seguridad y conceder privilegios mínimos en la IAM documentación.

Epics

TareaDescripciónHabilidades requeridas

(Opcional) Instale Docker.

Si desea ejecutar las funciones de AWS Lambda en su entorno de desarrollo, instale Docker. Para ver instrucciones, consulte Install Docker Engine (Instalar motor de Docker) en la documentación de Docker.

DevOps ingeniero

Instale el motor AWS de Service Catalog para Terraform.

  1. Introduzca el siguiente comando para clonar el repositorio de AWSService Catalog Engine for Terraform.

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. Navegue hasta el directorio raíz del repositorio clonado.

  3. Escriba el siguiente comando. Esto instala el motor.

    run ./bin/bash/deploy-tre.sh -r

    La AWS región establecida en su perfil predeterminado no se utiliza durante la instalación automática. En su lugar, debe proporcionar la región al ejecutar este comando.

DevOps ingeniero, AWS administrador
TareaDescripciónHabilidades requeridas

Cree una conexión con el GitHub repositorio.

  1. Inicie sesión en la consola AWS de administración y, a continuación, abra la consola de herramientas para desarrolladores. Para acceder a la consola de herramientas para desarrolladores, elija un servicio como AWS CodePipeline AWS CodeCommit, o AWS CodeDeploy.

  2. En el panel de navegación izquierdo, selecciona Configuración y, a continuación, selecciona Conexiones.

  3. Seleccione Crear conexión.

  4. Seleccione el repositorio en el que mantiene el código fuente de Terraform. Por ejemplo, puede elegir Bitbucket o GitHub Enterprise Server. GitHub

  5. Introduzca un nombre para la conexión y, a continuación, seleccione Connect.

  6. Cuando se le pida, autentique el repositorio.

    Una vez completada la autenticación, se crea la conexión y el estado cambia a activo.

AWSadministrador
TareaDescripciónHabilidades requeridas

Cree el producto Service Catalog.

  1. Abra la consola AWS de Service Catalog.

  2. Vaya a la sección Administración y, a continuación, seleccione Lista de productos.

  3. Seleccione Crear producto.

  4. En la página Crear producto, en la sección Detalles del producto, elija el tipo de producto externo. Service Catalog utiliza este tipo de producto para respaldar los productos de Terraform Community Edition.

  5. Introduzca un nombre y un propietario para el producto Service Catalog.

  6. Seleccione Especifique su repositorio de códigos mediante un CodeStar proveedor.

  7. Introduce la siguiente información para tu repositorio:

    • Conéctese a su proveedor mediante AWS CodeConnections: seleccione la conexión que creó anteriormente.

    • Repositorio: seleccione el repositorio.

    • Sucursal: seleccione la rama.

    • Ruta del archivo de plantilla: elija la ruta en la que se almacena el archivo de plantilla de código. El nombre del archivo debe terminar portar.gz.

  8. En Nombre y descripción de la versión, proporciona información sobre la versión del producto.

  9. Seleccione Crear producto.

AWSadministrador

Cree una cartera.

  1. Abra la consola AWS de Service Catalog.

  2. Vaya a la sección Administración y, a continuación, elija Portafolios.

  3. Selecciona Crear cartera

  4. Escriba los siguientes valores:

    • Portfolio name: Sample terraform

    • Descripción de la cartera: Sample portfolio for Terraform configurations

    • Propietario: tu información de contacto, como el correo electrónico

  5. Seleccione Crear.

AWSadministrador

Añada el producto Terraform a la cartera.

  1. Abra la consola AWS de Service Catalog.

  2. Vaya a la sección Administración y, a continuación, seleccione Lista de productos.

  3. Seleccione el producto Terraform que creó anteriormente.

  4. Elija Acciones y, a continuación, elija Agregar producto a la cartera.

  5. Elige la Sample terraform cartera.

  6. Seleccione Añadir producto a la cartera.

AWSadministrador

Cree la política de acceso.

  1. Abra la consola AWS Identity and Access Management (IAM).

  2. En el panel de navegación, seleccione Políticas.

  3. En el panel de contenido, elija Create policy (Crear política).

  4. Elija la JSONopción.

  5. Introduzca el ejemplo de JSON política en Política de acceso, en la sección de información adicional de este patrón.

  6. Elija Next (Siguiente).

  7. En la página Revisar y crear, en el cuadro Nombre de la política, escribaTerraformResourceCreationAndArtifactAccessPolicy.

  8. Elija Crear política.

AWSadministrador

Cree una política de confianza personalizada.

  1. Abra la consola AWS Identity and Access Management (IAM).

  2. Seleccione Roles en el panel de navegación.

  3. Elija Crear rol.

  4. En Tipo de entidad de confianza, elija Política de confianza personalizada.

  5. En el editor JSON de políticas, introduzca la JSON política de ejemplo en Política de confianza en la sección Información adicional de este patrón.

  6. Elija Next (Siguiente).

  7. En Políticas de permisos, elige la TerraformResourceCreationAndArtifactAccessPolicy que hayas creado anteriormente.

  8. Elija Next (Siguiente).

  9. En Detalles del rol, en el cuadro Nombre del rol, escribaSCLaunch-product

    Importante: El nombre del rol debe empezar porSCLaunch.

  10. Elija Crear rol.

AWSadministrador

Añada una restricción de lanzamiento al producto Service Catalog.

  1. Inicie sesión en la consola AWS de administración como usuario con permisos administrativos.

  2. Abra la consola AWS de Service Catalog.

  3. En el panel de navegación, elija Portafolios.

  4. Elija la cartera que creó anteriormente.

  5. En la página Detalles de la cartera, elija la pestaña Restricciones y, a continuación, elija Crear restricción.

  6. En Producto, selecciona el producto Terraform que creaste anteriormente.

  7. En Restricción de lanzamiento, en Método, elija Introducir el nombre del rol.

  8. En el cuadro Nombre del rol, escribaSCLaunch-product.

  9. Seleccione Crear.

AWSadministrador

Conceda acceso al producto.

  1. Abra la consola AWS de Service Catalog.

  2. En el panel de navegación, elija Portafolios.

  3. Elija la cartera que creó anteriormente.

  4. Seleccione la pestaña Acceso y, a continuación, elija Conceder acceso.

  5. Elija la pestaña Funciones y, a continuación, seleccione la función a la que debe tener acceso para implementar este producto.

  6. Elija Grant access (Conceder acceso).

AWSadministrador

Lance el producto.

  1. Inicie sesión en la consola AWS de administración como usuario con permisos para implementar el producto Service Catalog.

  2. Abra la consola AWS de Service Catalog.

  3. En el panel de navegación, elija Productos.

  4. Elija el producto que creó anteriormente y, a continuación, elija Lanzar producto.

  5. Introduzca un nombre de producto y defina los parámetros necesarios.

  6. Seleccione Lanzar producto.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Valide la implementación.

Hay dos máquinas de estado de AWS Step Functions para el flujo de trabajo de aprovisionamiento de Service Catalog:

  • ManageProvisionedProductStateMachine—Service Catalog invoca esta máquina de estados al aprovisionar un nuevo producto de Terraform y al actualizar un producto aprovisionado de Terraform existente.

  • TerminateProvisionedProductStateMachine—Service Catalog invoca esta máquina de estados al cancelar un producto aprovisionado por Terraform existente.

Se comprueban los registros de la máquina de ManageProvisionedProductStateMachine estados para confirmar que el producto se ha aprovisionado.

  1. Inicie sesión en la consola AWS de administración y, a continuación, abra la consola AWS Step Functions.

  2. En el panel de navegación izquierdo, elija State machines.

  3. Elija ManageProvisionedProductStateMachine.

  4. En la lista de ejecuciones, introduzca el ID del producto aprovisionado para localizar la ejecución.

    Nota: Los nombres de los buckets de backend de los archivos de estado comienzan por. sc-terraform-engine-state-

  5. Valide que se hayan creado todos los recursos necesarios en la cuenta.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Elimine los productos aprovisionados.

  1. Inicie sesión en la consola AWS de administración como usuario con permisos para implementar el producto Service Catalog.

  2. Abra la consola AWS de Service Catalog.

  3. En el panel de navegación de la izquierda, elija Productos aprovisionados.

  4. Seleccione el producto que ha creado.

  5. En la lista de acciones, elija Finalizar.

  6. En el cuadro de texto de confirmación, introduzca yterminate, a continuación, seleccione Finalizar el producto aprovisionado.

  7. Repita estos pasos para cancelar todos los productos aprovisionados.

DevOps ingeniero

Quite el motor AWS de Service Catalog para Terraform.

  1. Inicie sesión en la consola AWS de administración como usuario con permisos administrativos.

  2. Abra la consola de Amazon S3.

  3. En el panel de navegación, elija Buckets.

  4. Seleccione el sc-terraform-engine-logging-XXXX depósito.

  5. Selecciona Vacío.

  6. Repita los pasos 4 y 5 para los siguientes cubos:

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. Abra la AWS CloudFormation consola y, a continuación, compruebe que se encuentra en la región correctaAWS.

  8. En el panel de navegación de la izquierda, selecciona Stacks.

  9. Selecciona ySAM-TRE, a continuación, elige Eliminar. Espere a que se elimine la pila.

  10. Seleccione yBootstrap-TRE, a continuación, elija Eliminar. Espere a que se elimine la pila.

AWSadministrador

Recursos relacionados

AWSdocumentación

Documentación de Terraform

Información adicional

Política de acceso

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }

Política de confianza

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }