Optimice las implementaciones sin servidor con varias cuentas mediante los flujos de trabajo y Actions AWS CDK GitHub - 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.

Optimice las implementaciones sin servidor con varias cuentas mediante los flujos de trabajo y Actions AWS CDK GitHub

Sarat Chandra Pothula y VAMSI KRISHNA SUNKAVALLI, Amazon Web Services

Resumen

Las organizaciones que implementan una infraestructura sin servidor en múltiples entornos Cuentas de AWS y suelen enfrentarse a desafíos como la duplicación de código, los procesos manuales y las prácticas incoherentes. La solución de este patrón muestra cómo utilizar los flujos de trabajo reutilizables de AWS Cloud Development Kit (AWS CDK) In Go y GitHub Actions para agilizar la administración de la infraestructura sin servidor con varias cuentas. Esta solución demuestra cómo se pueden definir los recursos de la nube como código, implementar procesos estandarizados de integration/continuous despliegue continuo (CI/CD) y crear componentes modulares y reutilizables.

Con estas herramientas, las organizaciones pueden administrar de manera eficiente los recursos entre cuentas, implementar procesos de implementación coherentes y simplificar arquitecturas complejas sin servidor. El enfoque también mejora la seguridad y el cumplimiento al aplicar prácticas estandarizadas para su uso y, en última instancia Cuentas de AWS, mejorar la productividad y reducir los errores en el desarrollo e implementación de aplicaciones sin servidor.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Compatibilidad de lenguajes: Go es un lenguaje popular para aplicaciones sin servidor. Sin embargo, además de Go, AWS CDK es compatible con otros lenguajes de programación, incluidos C#, Java, Python y TypeScript. Si su organización ya tiene bases de código o conocimiento experto en otros lenguajes, es posible que tenga que adaptarlas o aprender Go para utilizar plenamente la solución descrita en el patrón.

  • Curva de aprendizaje: la AWS CDK adopción de los flujos de trabajo GitHub reutilizables y Go Go (si son nuevos en la organización) puede implicar una curva de aprendizaje para los desarrolladores y los DevOps equipos. Es posible que se necesiten formación y documentación para garantizar una adopción fluida y un uso efectivo de estas tecnologías.

Arquitectura

En el siguiente diagrama se muestran los componentes de la arquitectura y el flujo de trabajo de esta aplicación.

Arquitectura de los flujos de trabajo de AWS CDK y GitHub Actions para la administración de infraestructuras sin servidor con varias cuentas.

Esta solución realiza los pasos que se indican a continuación:

  1. El desarrollador clona el repositorio, crea una nueva rama y realiza cambios en el código de la aplicación en su entorno local.

  2. El desarrollador confirma estos cambios e introduce la nueva rama en el repositorio. GitHub

  3. El desarrollador crea una solicitud de incorporación de cambios en el GitHub repositorio y propone fusionar su rama de funcionalidad o nueva funcionalidad con la rama principal.

  4. Esta solicitud de incorporación activa el flujo de trabajo de GitHub las acciones de integración continua (CI). Los flujos de trabajo de CI y de implementación continua (CD) de este patrón utilizan flujos de trabajo reutilizables, que son plantillas modulares predefinidas que se pueden compartir y ejecutar en diferentes proyectos o repositorios. Los flujos de trabajo reutilizables promueven la estandarización y la eficiencia de los CI/CD procesos.

  5. El flujo de trabajo de CI configura el entorno necesario, genera una etiqueta de Docker para la imagen y crea la imagen de Docker utilizando el código de la aplicación.

  6. El flujo de trabajo de CI se autentica AWS mediante la función central de Cuenta de AWS GitHub OIDC. Para los flujos de trabajo de CI, la función central de Cuenta de AWS GitHub OIDC utiliza AWS Security Token Service (AWS STS) para obtener credenciales temporales. Estas credenciales permiten al rol crear y enviar imágenes de Docker al repositorio Amazon ECR de la central. Cuenta de AWS

  7. El flujo de trabajo de CI envía la imagen de Docker creada a Amazon ECR.

  8. El flujo de trabajo de CI almacena la etiqueta de imagen en el Almacén de parámetros de Systems Manager.

  9. Cuando el flujo de trabajo de CI se complete correctamente, se mostrará la etiqueta de imagen de Docker.

  10. Al activar el flujo de trabajo de CD, el desarrollador introduce manualmente la etiqueta de imagen de la imagen de Docker que quiere implementar. Esta etiqueta de imagen corresponde a la etiqueta que se generó y se envió a Amazon ECR durante el flujo de trabajo de CI.

  11. El desarrollador activa manualmente el flujo de trabajo de CD, que utiliza el flujo de trabajo reutilizable de CD.

  12. El flujo de trabajo de CD se autentica mediante el AWS uso de la función central de OIDC Cuenta de AWS GitHub . En el caso del flujo de trabajo del CD, AWS STS se utiliza primero para asumir la función central Cuenta de AWS GitHub de OIDC. Luego, este rol asume los roles de arranque de CDK para las implementaciones de las cuentas de destino.

  13. El flujo de trabajo del CD lo utiliza AWS CDK para sintetizar plantillas AWS CloudFormation .

  14. El flujo de trabajo de CD despliega la aplicación en el destino Cuenta de AWS mediante CDK deploy, mediante la etiqueta de imagen especificada manualmente para la función Lambda.

Tools (Herramientas)

Servicios de AWS

  • AWS Cloud Development Kit (AWS CDK)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.

  • AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el Cuentas de AWS mundo Regiones de AWS. CloudFormation es una parte integral del proceso de AWS CDK implementación. El CDK sintetiza CloudFormation las plantillas y, CloudFormation a continuación, las utiliza para crear o actualizar los recursos del AWS entorno.

  • Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.

  • AWS Identity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni 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.

  • AWS Systems Manager Parameter Store proporciona un almacenamiento jerárquico y seguro para la gestión de los datos de configuración y la gestión de secretos.

Otras herramientas

  • Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.

  • GitHub Actions es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con los repositorios. GitHub Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación.

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

Repositorio de código

El código de este patrón está disponible en el cicd-github-actions repositorio GitHub aws-cdk-golang-serverless-.

Prácticas recomendadas

  • Diseño modular: organice su AWS CDK código en conjuntos o pilas modulares y reutilizables, lo que promoverá la reutilización y el mantenimiento del código en múltiples cuentas y proyectos.

  • Separación de preocupaciones: separe el código de la infraestructura del código de la aplicación, lo que permitirá la implementación y la administración independientes de cada componente.

  • Control de versiones e inmutabilidad: trate su infraestructura como código (IaC) y utilice Git para el control de versiones. Adopte principios de infraestructura inmutables creando nuevos recursos en lugar de modificar los existentes.

  • Pruebas y validación: implemente estrategias de prueba integrales, que incluyan pruebas unitarias, pruebas de integración y end-to-end pruebas, para garantizar la exactitud y confiabilidad del código y las implementaciones. AWS CDK

  • Seguridad y cumplimiento: siga las mejores prácticas AWS de seguridad, como el acceso con privilegios mínimos, la comunicación segura y el cifrado de datos. Implemente comprobaciones de cumplimiento y mecanismos de auditoría para garantizar el cumplimiento de las políticas y los requisitos normativos de la organización. Implemente las prácticas recomendadas de seguridad para las imágenes de contenedores, como hacer exámenes en busca de vulnerabilidades, imponer la firma de imágenes y cumplir con los requisitos de cumplimiento de la organización.

  • Supervisión y registro: configure mecanismos de supervisión y registro para realizar un seguimiento del estado y el rendimiento de las aplicaciones y la infraestructura sin servidor. Servicios de AWS Úselo como Amazon CloudWatch AWS CloudTrail y con AWS X-Ray fines de monitoreo y auditoría.

  • Automatización y CI/CD: utilice flujos de trabajo GitHub reutilizables y otras CI/CD herramientas para automatizar los procesos de creación, prueba e implementación, lo que puede ayudar a respaldar despliegues consistentes y repetibles en varias cuentas.

  • Administración del entorno: mantenga entornos separados (por ejemplo, desarrollo, pruebas y producción). Implemente estrategias para promover cambios entre entornos, garantizando las pruebas y la validación adecuadas antes de las implementaciones de producción.

  • Documentación y colaboración: documente el código de la infraestructura, los procesos de implementación y las prácticas recomendadas para facilitar el intercambio de conocimientos y la colaboración dentro de su equipo.

  • Optimización de costos: implemente estrategias de monitoreo y optimización de costos, como ajustar el tamaño de los recursos, usar el autoescalado y aprovechar los servicios de optimización de AWS costos como y. AWS Budgets AWS Cost Explorer

  • Recuperación ante desastres y copia de seguridad: planifique escenarios de recuperación ante desastres mediante la implementación de mecanismos de copia de seguridad y restauración para sus aplicaciones sin servidor y sus recursos de infraestructura.

  • Mejora continua: revise y actualice periódicamente sus prácticas, herramientas y procesos para adaptarlos a las prácticas recomendadas, las recomendaciones de seguridad y los avances tecnológicos más recientes del ecosistema sin servidor.

  • Mejore el nivel de seguridad: AWS PrivateLinkutilícelo para mejorar el nivel de seguridad de su nube privada virtual (VPC) mediante la configuración de los puntos de enlace de la interfaz de la VPC para Amazon ECR y Parameter Store. AWS Lambda AWS Systems Manager

Epics

TareaDescripciónHabilidades requeridas

Cree un repositorio de Amazon ECR en la central Cuenta de AWS.

Para compartir imágenes de contenedores entre varias Cuentas de AWS, debe configurar el acceso multicuenta para Amazon ECR. En primer lugar, cree un repositorio de Amazon ECR en la central Cuenta de AWS.

Para crearlo, ejecute este comando:

aws ecr create-repository --repository-name sample-repo

En una tarea posterior, conceda acceso a las demás tareas Cuentas de AWS que necesiten utilizar la imagen del contenedor.

AWS DevOps

Agregue permisos entre cuentas al repositorio de Amazon ECR.

Para añadir permisos entre cuentas al repositorio de Amazon ECR en la central Cuenta de AWS, ejecute el siguiente código:

{ "Version": "2008-10-17", "Statement": [ { "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", ], "Condition": { "StringLike": { "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*" } } }, { "Sid": "new statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Target_Account_ID>:root" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", ], } ] }
AWS DevOps

Configure un rol para el rol GitHub de OIDC en la central. Cuenta de AWS

  1. Configure AWS el OIDC GitHub de confianza como una identidad federada, lo que incluye añadir el proveedor del GitHub OIDC AWS y configurar el rol y la política de confianza en IAM. Para ello, siga las instrucciones de la documentación sobre cómo configurar OpenID Connect en Amazon Web Services. GitHub

  2. Una vez creado el rol, agregue los permisos necesarios al rol. Por ejemplo, añada permisos para Amazon ECR y AWS Systems Manager Parameter Store. Para obtener más información, consulte Configuración de un rol para el proveedor de identidad del GitHub OIDC en la documentación de IAM.

AWS DevOps

Inicie el AWS entorno en el objetivo Cuentas de AWS.

Configure un entorno de CDK en una red específica Cuenta de AWS Región de AWS que permita los despliegues entre cuentas desde una cuenta central y aplique los principios de privilegios mínimos a la función de ejecución. CloudFormation

Para arrancar un entorno, ejecute el siguiente comando AWS :

cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy>
AWS DevOps

Conceda acceso al rol central de Cuenta de AWS OIDC a los roles de Cuenta de AWS bootstrap de destino.

El bootstrap del CDK crea las siguientes funciones de IAM, diseñadas para que las asuma la central Cuenta de AWS durante las distintas etapas del proceso de despliegue del CDK:

  • Rol de publicación de archivos

  • Rol de publicación de imágenes

  • Rol de búsqueda

  • Rol de implementación

Cada rol tiene permisos específicos adaptados a su finalidad, siguiendo el principio de privilegio mínimo. El nombre «Target_Account_IDyTarget_Region» de cada función ayuda a indicar que estas funciones son únicas en las distintas regiones. Cuentas de AWS Este enfoque permite una identificación y una administración claras en configuraciones de varias cuentas y varias regiones.

Target Account CDK Bootstrap Roles arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region> arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region> arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region> arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>
  • Actualice la política de permisos del rol de OIDC en la cuenta central para que pueda asumir roles en la cuenta de destino. Esta configuración permite implementar pilas de CDK en diferentes Cuentas de AWS. Al permitir que el rol de OIDC de la cuenta central adopte los permisos necesarios de la cuenta de destino, se crea un puente seguro para las implementaciones de CDK entre cuentas. Este enfoque mantiene un control de acceso adecuado y, al mismo tiempo, facilita una administración fluida de la infraestructura de varias cuentas.

Para actualizar la política de permisos del rol de OIDC en la central Cuenta de AWS, usa el siguiente código:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>", "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>", "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>", "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>" ] } ] }
AWS DevOps
TareaDescripciónHabilidades requeridas

Clone el repositorio del proyecto.

Para clonar el GitHub repositorio de este patrón, ejecute el siguiente comando:

git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git
AWS DevOps

Vaya a la ruta de Dockerfile.

Para ir a la ruta de Dockerfile, ejecute el siguiente comando:

cd lambda
AWS DevOps

Autentique Docker con Amazon ECR.

Amazon ECR requiere un acceso seguro a sus repositorios de contenedores privados. Al iniciar sesión de esta manera, permite que Docker interactúe de forma segura con Amazon ECR en su máquina o CI/CD entorno local.

Para autenticar Docker con Amazon ECR, ejecute el siguiente comando:

aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com

Revise los marcadores de posición AWS_REGION y AWS_Account_ID con su información.

AWS DevOps

Cree la imagen de Docker.

Para compilar la imagen de Docker, ejecute el siguiente comando:

docker build --platform linux/arm64 -t sample-app .
AWS DevOps

Etiquete y envíe la imagen de Docker.

Para etiquetar y enviar la imagen de Docker en el repositorio de Amazon ECR, ejecute los siguientes comandos:

docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG>
docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG>

Revise los marcadores de posición AWS_Account_ID, AWS_REGION, ECR_REPOSITORY y DOCKER_TAG con su información.

AWS DevOps
TareaDescripciónHabilidades requeridas

Sintetice la pila de CDK con variables específicas del entorno.

Para generar la CloudFormation plantilla para su infraestructura tal como se define en el código CDK, ejecute el siguiente comando:

ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth

Revise los siguientes marcadores de posición con su información:

  • environment: se sustituye por un nombre de entorno específico, como dev. staging o prod.

  • image_tag: sustitúyalo por una etiqueta específica para una imagen de Docker, como v1.0.0 o latest.

  • ecr_repo_arn: sustitúyalo por el nombre de recurso de Amazon (ARN) de un repositorio de Amazon ECR.

AWS DevOps

Implemente la pila de CDK.

Para implementar la pila de CDK en su servidor Cuenta de AWS, ejecute el siguiente comando. El indicador --require-approval never significa que el CDK aprobará y ejecutará todos los cambios automáticamente. Esto incluye los cambios que CDK normalmente consideraría que necesitan una revisión manual (como los cambios en la política de IAM o la eliminación de recursos). Asegúrese de que el código y la CI/CD canalización de su CDK estén bien probados y sean seguros antes de usar la --require-approval never bandera en entornos de producción.

ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never
AWS DevOps
TareaDescripciónHabilidades requeridas

Cree una rama de características y agregue los cambios.

Utilice el repositorio clonado que creó anteriormente, cree una rama de características y, a continuación, agregue los cambios al código de la aplicación. Utilice los siguientes comandos:

git checkout -b <feature_branch> git add . git commit -m "add your changes" git push origin <feature_branch>

A continuación, se muestran algunos ejemplos de cambios:

  • Cambios en la lógica de la función de Lambda

  • Adición de nuevas características o funcionalidades al código de Lambda

  • Corrección de errores u optimización del código existente en la función de Lambda

GitHub Las acciones utilizarán los flujos de trabajo reutilizables y activarán las CI/CD canalizaciones.

AWS DevOps

Combine los cambios.

Cree una solicitud de extracción y fusione los cambios con la rama principal.

AWS DevOps

Resolución de problemas

ProblemaSolución

AccessDeniederrores al implementar recursos en Cuentas de AWS, por ejemplo,AccessDenied: User not authorized to perform: "sts:AssumeRole".

Para ayudar a resolver este problema, siga estos pasos para verificar los permisos entre cuentas:

  • Asegúrese de que existan los roles y políticas de IAM necesarios para las implementaciones entre cuentas.

  • Compruebe que los permisos assume de los roles estén configurados correctamente.

Problemas de compatibilidad debido a discordancias entre versiones; por ejemplo, un error undefined: awscdkStack con una versión de CDK desactualizada.

Para ayudar a resolver este problema, haga lo siguiente para comprobar que está utilizando las versiones necesarias de AWS CDK and Go:

  • Asegúrate de usar versiones compatibles del AWS CDK and Go.

  • Compruebe si hay problemas conocidos o cambios importantes en las versiones recientes.

Errores en las canalizaciones de CI/CD; por ejemplo, Error: No such file or directory debido a una configuración incorrecta de YAML o Permission denied para ramas protegidas.

Para ayudar a resolver los problemas relacionados con la configuración de GitHub Actions, comprueba que los flujos de trabajo reutilizables estén correctamente referenciados y configurados.

Recursos relacionados

Recursos de AWS

Otros recursos