

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.

# DevOps
<a name="devops-pattern-list"></a>

**Topics**
+ [Acelere MLOps con las plantillas Backstage y de autoservicio de Amazon AI SageMaker](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [Automatice las operaciones de AWS infraestructura con Amazon Bedrock](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [Automatice CloudFront las actualizaciones cuando cambien los puntos finales del equilibrador de carga mediante Terraform](automate-cloudfront-updates-when-load-balancer-endpoints-change.md)
+ [Automatice las CodeGuru revisiones de Amazon para aplicaciones de AWS CDK Python mediante GitHub Actions](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatice el despliegue de lagos de AWS Supply Chain datos en una configuración de múltiples repositorios mediante GitHub Actions, Artifactory y Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatice la evaluación de recursos de AWS](automate-aws-resource-assessment.md)
+ [Instalar sistemas SAP automáticamente mediante herramientas de código abierto](install-sap-systems-automatically-by-using-open-source-tools.md)
+ [Automatice la implementación de productos y la cartera de AWS Service Catalog mediante AWS CDK](automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.md)
+ [Automatice la gestión dinámica de canalizaciones para implementar soluciones de hotfix en entornos de Gitflow mediante el uso y AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Automatice la eliminación de AWS CloudFormation pilas y recursos asociados](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatización de la ingesta y visualización de métricas personalizadas de Amazon MWAA en Amazon Managed Grafana mediante Terraform](automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.md)
+ [Automatice la implementación de conjuntos de pilas mediante AWS CodePipeline y AWS CodeBuild](automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.md)
+ [Adjunte automáticamente una política gestionada por AWS para Systems Manager a los perfiles de EC2 instancia mediante Cloud Custodian y AWS CDK](automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.md)
+ [Cree CI/CD canalizaciones y clústeres de Amazon ECS de forma automática para microservicios mediante AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Cree e inserte imágenes de Docker en Amazon ECR mediante GitHub Actions y Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Cree y pruebe aplicaciones iOS con AWS CodeCommit CodePipeline, AWS y AWS Device Farm](build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm.md)
+ [Configure autenticación TLS mutua para aplicaciones ejecutadas en Amazon EKS](configure-mutual-tls-authentication-for-applications-running-on-amazon-eks.md)
+ [Automatice la creación de recursos de Amazon WorkSpaces Applications mediante AWS CloudFormation](automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.md)
+ [Crear un analizador de registros personalizado para Amazon ECS mediante un enrutador de registros Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Cree un marco de orquestación de recursos basado en API con GitHub Actions y Terragrunt](create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.md)
+ [Cree solicitudes de cambios automatizadas para la AWS infraestructura gestionada por Terraform mediante Actions GitHub](create-automated-pull-requests-for-terraform-managed-aws-infrastructure.md)
+ [Crear automáticamente canalizaciones de CI dinámicas para proyectos de Java y Python](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Despliega canarios de CloudWatch Synthetics con Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Implemente una ChatOps solución para gestionar los resultados de los escaneos SAST mediante Amazon Q Developer en aplicaciones de chat, acciones personalizadas y CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [Implementación de sistemas de agentes en Amazon Bedrock con el marco CrewAI mediante Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Implemente un trabajo de AWS Glue con una canalización de CodePipeline CI/CD de AWS](deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline.md)
+ [Implemente código en varias regiones de AWS mediante AWS CodePipeline CodeCommit, AWS y AWS CodeBuild](deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild.md)
+ [Implemente cargas de trabajo desde DevOps canalizaciones de Azure a clústeres privados de Amazon EKS](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Ejecución de consultas SQL en Amazon Redshift mediante Terraform](execute-redshift-sql-queries-using-terraform.md)
+ [Exportar los informes de AWS Backup de toda la organización en AWS Organizations como un archivo CSV](export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.md)
+ [Exportar etiquetas de una lista de EC2 instancias de Amazon a un archivo CSV](export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.md)
+ [Genere una CloudFormation plantilla de AWS que contenga las reglas administradas por AWS Config mediante Troposphere](generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.md)
+ [Otorgue a las instancias de SageMaker notebook acceso temporal a un CodeCommit repositorio de otra cuenta de AWS](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [Implemente una estrategia GitHub de ramificación de Flow para entornos de cuentas múltiples DevOps](implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.md)
+ [Implementa una estrategia de ramificación de Gitflow para entornos de múltiples cuentas DevOps](implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.md)
+ [Implemente una estrategia de ramificación troncal para entornos de cuentas múltiples DevOps](implement-a-trunk-branching-strategy-for-multi-account-devops-environments.md)
+ [Implemente un escaneo Checkov personalizado y centralizado para aplicar la política antes de implementar AWS la infraestructura](centralized-custom-checkov-scanning.md)
+ [Implementación de diagnósticos y solución de problemas de Kubernetes con tecnología de IA con la integración de K8sGPT y Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Detecta automáticamente los cambios e inicia diferentes CodePipeline canalizaciones para un monorepo en CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Integre un repositorio de Bitbucket con AWS Amplify mediante AWS CloudFormation](integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.md)
+ [Lance un CodeBuild proyecto en todas las cuentas de AWS mediante Step Functions y una función de proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Administración de la conmutación por error de multi-AZ para clústeres de EMR mediante el Controlador de recuperación de aplicaciones](multi-az-failover-spark-emr-clusters-arc.md)
+ [Gestione blue/green las implementaciones de microservicios en varias cuentas y regiones mediante los servicios de código de AWS y las claves multirregionales de AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Supervise los repositorios de Amazon ECR en busca de permisos comodín mediante AWS y AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Optimice las implementaciones sin servidor con varias cuentas mediante los flujos de trabajo y Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [AWS Service Catalog Aprovisione productos en función de AWS CloudFormation plantillas mediante GitHub acciones](provision-aws-service-catalog-products-using-github-actions.md)
+ [Aprovisionamiento de roles de IAM con privilegio mínimo mediante la implementación de una solución de máquina expendedora de roles](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)
+ [Publica CloudWatch las métricas de Amazon en un archivo CSV](publish-amazon-cloudwatch-metrics-to-a-csv-file.md)
+ [Elimine EC2 las entradas de Amazon Cuentas de AWS de un lado a otro AWS Managed Microsoft AD mediante AWS Lambda la automatización](remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.md)
+ [Elimine EC2 las entradas de Amazon en el mismo Cuenta de AWS AWS Managed Microsoft AD formulario mediante AWS Lambda la automatización](remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.md)
+ [Ejecute pruebas unitarias para trabajos ETL de Python AWS Glue utilizando el marco pytest](run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.md)
+ [Configure una CI/CD canalización mediante AWS CodePipeline y AWS CDK](set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.md)
+ [Configuración del registro centralizado a escala empresarial mediante Terraform](set-up-centralized-logging-at-enterprise-scale-by-using-terraform.md)
+ [Configure el end-to-end cifrado para aplicaciones en Amazon EKS mediante cert-manager y Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Simplificación de la implementación de aplicaciones multiusuario de Amazon EKS mediante Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Simplificación del desarrollo y la implementación de los bots de Amazon Lex mediante un flujo de trabajo automatizado](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Coordine la dependencia de los recursos y la ejecución de tareas mediante la construcción AWS Fargate WaitCondition hook](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Utilice repositorios de código fuente de Git de terceros en AWS CodePipeline](use-third-party-git-source-repositories-in-aws-codepipeline.md)
+ [Cree una CI/CD canalización para validar las configuraciones de Terraform mediante AWS CodePipeline](create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.md)
+ [Más patrones](devops-more-patterns-pattern-list.md)

# Acelere MLOps con las plantillas Backstage y de autoservicio de Amazon AI SageMaker
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates"></a>

*Ashish Bhatt, Shashank Hirematt y Shivanshu Suryakar, de Amazon Web Services*

## Resumen
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-summary"></a>

Las organizaciones que utilizan sistemas de operaciones de aprendizaje automático (MLOps) se enfrentan a importantes desafíos a la hora de escalar, estandarizar y proteger su infraestructura de aprendizaje automático. Este patrón presenta un enfoque transformador que combina [Backstage](https://backstage.io/), un portal para desarrolladores de código abierto, con [Amazon SageMaker AI](https://aws.amazon.com/sagemaker/) y módulos reforzados de infraestructura como código (IaC) para mejorar la forma en que sus equipos de ciencia de datos pueden desarrollar, implementar y gestionar los flujos de trabajo de aprendizaje automático.

[Los módulos de IaC para este patrón se proporcionan en el repositorio de módulos. GitHub AWS AIOps ](https://github.com/awslabs/aiops-modules/tree/main/modules/sagemaker) Estos módulos ofrecen plantillas prediseñadas para configurar la infraestructura de ML y crear entornos de ML coherentes. Sin embargo, los científicos de datos a menudo tienen dificultades para usar estas plantillas directamente porque requieren tener experiencia en infraestructura. Al añadir un portal para desarrolladores como Backstage, los científicos de datos pueden implementar entornos de ML estandarizados de forma sencilla sin necesidad de comprender los detalles de la infraestructura subyacente.

Al utilizar Backstage como plataforma de autoservicio e integrar plantillas de SageMaker IA preconfiguradas, puede:
+ Acelerar la rentabilidad de sus iniciativas de ML.
+ Garantizar una seguridad y una gobernanza coherentes.
+ Proporcionar a los científicos de datos entornos estandarizados y que cumplan con las normas.
+ Reducir los gastos operativos y la complejidad de la infraestructura.

Este patrón proporciona una solución que aborda los desafíos críticos MLOps y también proporciona un marco escalable y repetible que permite la innovación y, al mismo tiempo, mantiene los estándares organizacionales.

**Público objetivo**

Este patrón está dirigido a una amplia audiencia relacionada con el ML, la arquitectura de nube y la ingeniería de plataformas dentro de una organización. Esto incluye:
+ **Ingenieros de ML** que desean estandarizar y automatizar las implementaciones de flujos de trabajo de ML.
+ **Científicos de datos** que desean obtener acceso de autoservicio a entornos de ML preconfigurados y que cumplan con las normas.
+ **Ingenieros de plataformas** que se encargan de crear y mantener las plataformas internas para desarrolladores y la infraestructura compartida.
+ **Arquitectos de nube** que diseñan soluciones de nube escalables, seguras y rentables para MLOps.
+ **DevOps ingenieros** interesados en extender las prácticas de integración continua y entrega continua (CI/CD) al aprovisionamiento de infraestructuras y flujos de trabajo de aprendizaje automático.
+ **Gerentes y directores técnicos** que supervisan las iniciativas de ML y desean mejorar la productividad del equipo, la gobernanza y el tiempo de comercialización.

Para obtener más información sobre MLOps los desafíos, los MLOps módulos de SageMaker IA y cómo la solución proporcionada por este patrón puede satisfacer las necesidades de sus equipos de aprendizaje automático, consulte la sección de información [adicional](#accelerate-mlops-with-backstage-and-sagemaker-templates-additional).

## Requisitos previos y limitaciones
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-prereqs"></a>

**Requisitos previos **
+ AWS Identity and Access Management [Funciones y permisos](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#prerequisites) (IAM) para aprovisionar recursos en su Cuenta de AWS
+ Comprensión de los conceptos de [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html), [SageMaker Projects](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-whatis.html), [SageMaker Pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html) y [SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)
+ Comprensión de los principios de IaC y experiencia con herramientas como [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)

**Limitaciones**
+ **Cobertura limitada de plantillas**. [Actualmente, la solución solo admite los AIOps módulos SageMaker relacionados con la IA de la solución más ampliaAIOps .](https://github.com/awslabs/aiops-modules) Otros módulos, como Ray en Amazon Elastic Kubernetes Service (Amazon EKS), MLflow Apache Airflow y el ajuste de precisión para Amazon Bedrock, aún no están disponibles como plantillas de Backstage.
+ **Ajustes predeterminados no configurables**. Las plantillas utilizan configuraciones predeterminadas fijas de los módulos sin personalización. AIOps SageMaker No puede modificar los tipos de instancias, los tamaños de almacenamiento, las configuraciones de red ni las políticas de seguridad mediante la interfaz Backstage, lo que limita la flexibilidad en casos de uso específicos.
+ **solo admite AWS**. La plataforma está diseñada exclusivamente para AWS despliegues y no admite escenarios multinube. Organizations que utilizan servicios en la nube de forma externa Nube de AWS no pueden usar estas plantillas para sus necesidades de infraestructura de aprendizaje automático.
+ **Administración de credenciales manual** Debe proporcionar sus AWS credenciales de forma manual para cada implementación. Esta solución no proporciona la integración con los proveedores de identidad corporativa ni la rotación automática de credenciales. AWS IAM Identity Center
+ **Administración del ciclo de vida limitado**. Las plantillas carecen de funciones integrales de gestión del ciclo de vida de los recursos, como políticas de limpieza automatizadas, recomendaciones de optimización de costes y detección de desviaciones en la infraestructura. Debe gestionar y supervisar manualmente los recursos implementados tras su creación.

## Arquitectura
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-architecture"></a>

El siguiente diagrama muestra la arquitectura de la solución para un portal de desarrolladores unificado que estandariza y acelera la implementación de la infraestructura de aprendizaje automático con SageMaker IA en todos los entornos.

![\[Arquitectura para un portal de desarrolladores unificado con Backstage, CNOE, GitHub Actions y Seed-Farmer.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c16160cf-d637-423e-93a7-485ffbb28646/images/233adab3-83cf-42f3-a1de-72d0b8ade5ae.png)


En esta arquitectura:

1. AWS los planes de [modernización de aplicaciones](https://github.com/aws-samples/appmod-blueprints.git) proporcionan la configuración de la infraestructura con un clúster de [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) como base para el marco [Cloud Native Operational Excellence (CNOE)](https://cnoe.io/). Esta solución integral aborda los complejos desafíos de administración de la infraestructura nativa en la nube al proporcionar una plataforma de desarrollador interna (IDP) escalable. Los esquemas ofrecen un enfoque estructurado para configurar una infraestructura sólida y flexible que pueda adaptarse a las cambiantes necesidades organizativas.

1. El marco de código abierto CNOE consolida las DevOps herramientas y resuelve la fragmentación del ecosistema mediante un enfoque unificado de ingeniería de plataformas. Al reunir herramientas y tecnologías dispares, simplifica el complejo panorama del desarrollo nativo en la nube para que sus equipos puedan centrarse en la innovación en lugar de en la gestión de la cadena de herramientas. El marco proporciona una metodología estandarizada para seleccionar, integrar y gestionar las herramientas de desarrollo.

1. Con CNOE, Backstage se implementa como una out-of-the-box solución dentro del clúster de Amazon EKS. Backstage incluye una autenticación sólida a través de [Keycloak](https://www.keycloak.org/) y flujos de trabajo de implementación integrales a través de [Argo CD](https://argo-cd.readthedocs.io/en/stable/). Esta plataforma integrada crea un entorno centralizado para gestionar los procesos de desarrollo y proporciona un único lugar para que los equipos accedan, implementen y supervisen su infraestructura y aplicaciones en varios entornos.

1. Un GitHub repositorio contiene plantillas de AIOps software preconfiguradas que cubren todo SageMaker el ciclo de vida de la IA. Estas plantillas abordan las necesidades críticas de infraestructura de aprendizaje automático, como el aprovisionamiento de SageMaker Studio, la formación de modelos, los procesos de inferencia y la supervisión de modelos. Estas plantillas lo ayudan a acelerar sus iniciativas de ML y a garantizar la coherencia entre los distintos proyectos y equipos.

1. [GitHub Actions](https://github.com/features/actions) [implementa un flujo de trabajo automatizado que activa de forma dinámica el aprovisionamiento de recursos mediante la utilidad Seed-Farmer.](https://github.com/awslabs/seed-farmer) Este enfoque integra el catálogo de Backstage con el repositorio de AIOps módulos y crea un proceso de despliegue de infraestructura simplificado. La automatización reduce las intervenciones manuales, minimiza los errores humanos y garantiza que la infraestructura se cree de forma rápida y coherente en los distintos entornos.

1. [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) lo ayuda a definir y aprovisionar la infraestructura como código, y garantiza una implementación de recursos repetible, segura y compatible en todas las Cuentas de AWS especificadas. Este enfoque proporciona el máximo control con una intervención manual mínima, de modo que puede crear plantillas de infraestructura estandarizadas que se puedan replicar y auditar fácilmente y con versiones que pueda controlar.

## Tools (Herramientas)
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/) es un servicio de aprendizaje automático gestionado que le ayuda a crear y entrenar modelos de aprendizaje automático y, a continuación, implementarlos en un entorno hospedado listo para la producción.

**Otras herramientas**
+ [Backstage](https://backstage.io/) es un marco de código abierto que lo ayuda a crear portales internos para desarrolladores.
+ [GitHub Actions](https://github.com/features/actions) es una CI/CD plataforma que automatiza los flujos de trabajo de desarrollo de software, incluidas tareas como la creación, las pruebas y la implementación de código.

**Repositorios de código**

Este patrón utiliza código y plantillas de los siguientes GitHub repositorios:
+ [AIOps plataforma interna para desarrolladores (IDP) con repositorio Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ SageMaker [Módulos relacionados con la IA del repositorio de módulos AWS AIOps ](https://github.com/awslabs/aiops-modules)
+ [Ingeniería moderna](https://github.com/aws-samples/appmod-blueprints) en el repositorio AWS

**Implementación**

Esta implementación utiliza un patrón de implementación de nivel de producción para Backstage del repositorio [Ingeniería moderna en AWS](https://github.com/aws-samples/appmod-blueprints). Este enfoque simplifica considerablemente el proceso de configuración e incorpora las AWS mejores prácticas de seguridad y escalabilidad.

La sección [Epics](#accelerate-mlops-with-backstage-and-sagemaker-templates-epics) de este patrón describe el enfoque de implementación. Para obtener instrucciones de step-by-step implementación detalladas, consulte la [guía de implementación](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md) completa disponible en la [plataforma AIOps interna para desarrolladores (IDP) con](https://github.com/aws-samples/sample-aiops-idp-backstage/) el repositorio Backstage. La implementación incluye:
+ Implementación inicial de la plataforma de Backstage
+ Integración de plantillas de SageMaker software con Backstage
+ Consumo y mantenimiento de plantillas de Backstage

La guía de implementación también incluye instrucciones para el mantenimiento continuo, solución de problemas y escalado de la plataforma.

## Prácticas recomendadas
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-best-practices"></a>

Siga estas mejores prácticas para garantizar la seguridad, la gobernanza y la excelencia operativa en sus implementaciones de MLOps infraestructura.

**Administración de plantillas**
+ Nunca realice cambios importantes en las plantillas activas.
+ Pruebe siempre las actualizaciones minuciosamente antes de implementarlas en la producción.
+ Mantenga versiones de plantillas claras y bien documentadas.

**Seguridad**
+ Fije GitHub las acciones a algoritmos de hash seguros y específicos (SHAs) para ayudar a prevenir los ataques a la cadena de suministro.
+ Use roles de IAM con privilegios mínimos y permisos granulares.
+ Guarde las credenciales confidenciales en [GitHub Secrets](https://docs.github.com/en/actions/concepts/security/secrets) y [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html).
+ Nunca codifique las credenciales de forma rígida en las plantillas.

**Gobernanza y seguimiento**
+ Implemente estándares integrales de etiquetado de recursos.
+ Permita un seguimiento preciso de los costos y la supervisión del cumplimiento.
+ Mantenga registros de auditoría claros para detectar los cambios en la infraestructura.

Esta guía proporciona una base sólida para implementar estas mejores prácticas mediante el uso de los módulos Backstage, SageMaker AI e IaC.

## Epics
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-epics"></a>

### Configure su entorno de ML
<a name="set-up-your-ml-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementación de Backstage. | En este paso, se utilizan los planos del AWS repositorio [Modern Engineering on](https://github.com/aws-samples/appmod-blueprints) para crear una infraestructura sólida y escalable que integre múltiples componentes a fin de crear un IDP centralizado Servicios de AWS para los flujos de trabajo de aprendizaje automático. Siga las instrucciones de la [sección de implementación de Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#backstage-deployment) de la guía de implementación para clonar el repositorio, instalar las dependencias, iniciar la AWS CDK configuración de las variables de entorno e implementar la plataforma Backstage.La infraestructura utiliza Amazon EKS como plataforma de orquestación de contenedores para implementar componentes de IDP. La arquitectura de Amazon EKS incluye configuraciones de red seguras para establecer patrones estrictos de acceso y aislamiento de la red. La plataforma se integra con los mecanismos de autenticación para que pueda proteger el acceso de los usuarios a todos los servicios y entornos. | Ingeniería de plataformas | 
| Configura tus plantillas de IA. SageMaker  | En este paso, se utilizan los scripts de la [plataforma GitHub AIOps interna para desarrolladores (IDP) con el repositorio de Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). Siga las instrucciones de la sección de [configuración de SageMaker plantillas](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-template-setup) de la guía de implementación para clonar el repositorio, configurar los requisitos previos y ejecutar el script de configuración.Este proceso crea un repositorio que contiene las plantillas de SageMaker IA necesarias para la integración con Backstage. | Ingeniería de plataformas | 
| Integre las**** plantillas de SageMaker IA con Backstage. | Siga las instrucciones de la sección de [integración de SageMaker plantillas](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-templates-integration) de la guía de implementación para registrar sus plantillas de SageMaker IA.Este paso integra los AIOps módulos (plantillas de SageMaker IA del último paso) en su implementación de Backstage para que pueda satisfacer sus necesidades de infraestructura de aprendizaje automático de manera autónoma. | Ingeniería de plataformas | 
| Usa las plantillas de SageMaker IA de Backstage. | Siga las instrucciones de la sección [Uso de SageMaker plantillas](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#using-sagemaker-templates) de la guía de implementación para acceder al portal de Backstage y crear el entorno de aprendizaje automático en SageMaker Studio.En el portal de Backstage, puedes seleccionar entre las plantillas de SageMaker IA disponibles, incluidas opciones para entornos de SageMaker Studio, SageMaker libretas, plantillas de SageMaker proyectos personalizadas y procesos de implementación de modelos. Tras proporcionar los parámetros de configuración, la plataforma crea repositorios dedicados automáticamente y aprovisiona los AWS recursos a través GitHub de Actions y Seed-Farmer. Puede supervisar el progreso mediante los registros de GitHub acciones y el catálogo de componentes de Backstage. | Científico de datos, ingeniero de datos, desarrollador | 

### Administración de las plantillas para la gobernanza y el cumplimiento
<a name="manage-templates-for-governance-and-compliance"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice las plantillas de SageMaker IA. | Para actualizar una plantilla de SageMaker IA en Backstage, sigue estos pasos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Ingeniería de plataformas | 
| Cree y administre varias versiones de una plantilla. | Para realizar cambios o mejoras importantes, es posible que desees crear varias versiones de una plantilla de SageMaker IA.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Ingeniería de plataformas | 

### Amplíe su entorno de ML
<a name="extend-your-ml-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Amplía la cobertura de plantillas más allá de la SageMaker IA. | La solución actual solo implementa AIOps plantillas SageMaker relacionadas con la IA. Puede ampliar el entorno de aprendizaje automático añadiendo [AIOps módulos](https://github.com/awslabs/aiops-modules) e integrando plantillas de software personalizadas para aplicaciones Servicios de AWS y aplicaciones adicionales. Puede crear estos elementos mediante la interfaz de diseño de plantillas de Backstage; solo tiene que implementar acciones de scaffolder personalizadas o mantener los repositorios de plantillas con metadatos estándar. La plataforma admite el control de versiones de plantillas, el uso compartido entre equipos y los flujos de trabajo de validación para garantizar la coherencia. Para obtener más información, consulte la [documentación de Backstage](https://backstage.io/docs/overview/what-is-backstage/).También puede implementar patrones de herencia de plantillas para crear versiones especializadas de plantillas base. Esta extensibilidad le permite administrar diversos AWS recursos y aplicaciones además de la SageMaker IA, al tiempo que conserva la experiencia simplificada de los desarrolladores y mantiene los estándares de su organización. | Ingeniería de plataformas | 
| Utilice la inyección dinámica de parámetros. | Las plantillas actuales utilizan configuraciones predeterminadas sin personalización y ejecutan la CLI de Seed-Farmer para implementar recursos con variables predeterminadas. Puede ampliar la configuración predeterminada mediante la inyección dinámica de parámetros para las configuraciones específicas del módulo. | Ingeniería de plataformas | 
| Mejore la seguridad y conformidad. | Para mejorar la seguridad en la creación de los recursos de AWS, puede habilitar la integración del control de acceso basado en roles (RBAC) con el inicio de sesión único (SSO), SAML, OpenID Connect (OIDC) y políticas como la aplicación del código. | Ingeniería de plataformas | 
| Añada una limpieza de recursos automatizada. | Puede habilitar características para políticas de limpieza automatizadas y, además, añadir funciones de detección y corrección de desviaciones en la infraestructura. | Ingeniería de plataformas | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine la infraestructura de Backstage y los recursos de SageMaker IA. | Cuando haya terminado de usar su entorno de aprendizaje automático, siga las instrucciones de la sección [Limpieza y administración de recursos](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#cleanup-and-resource-management) de la guía de implementación para eliminar la infraestructura de Backstage y eliminar los recursos de SageMaker IA de su entorno de aprendizaje automático. | Ingeniería de plataformas | 

## Resolución de problemas
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| AWS CDK errores de arranque |  Compruebe AWS las credenciales y la configuración de la región. | 
| Problemas de acceso al clúster de Amazon EKS | Compruebe la configuración de **kubectl** y los permisos de IAM. | 
| Problemas de conectividad del equilibrador de carga de aplicación | Asegúrese de que los grupos de seguridad permitan el tráfico entrante en el puerto 80/443. | 
| GitHub problemas de integración | Verifique los permisos de los GitHub tokens y el acceso a la organización. | 
| SageMaker Fallos de implementación de la IA | Compruebe las [cuotas de Servicio de AWS](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) y los permisos de IAM. | 

## Recursos relacionados
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-resources"></a>
+ [Ingeniería de plataformas](https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-caf-platform-perspective/platform-eng.html) (en la guía *Cloud Adoption Framework de AWS : perspectiva de las plataformas*)
+ [Documentación de Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/)
+ [Plantillas de software de Backstage](https://backstage.io/docs/features/software-templates/) (sitio web de Backstage)
+ [AIOps repositorio de módulos](https://github.com/awslabs/aiops-modules) (colección de módulos iAC reutilizables para ML)
+ [AIOps plataforma interna para desarrolladores (IDP) con repositorio Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ [Ingeniería moderna](https://github.com/aws-samples/appmod-blueprints) en el repositorio AWS
+ [Sitio web de excelencia operativa nativa en la nube (CNOE)](https://cnoe.io/)

## Información adicional
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-additional"></a>

**Retos empresariales**.

Las organizaciones que se embarcan en sus MLOps iniciativas o las amplían con frecuencia se enfrentan a los siguientes desafíos empresariales y técnicos:
+ **Entornos incoherentes**. La falta de entornos de desarrollo e implementación estandarizados dificulta la colaboración y aumenta los riesgos de implementación.
+ **Gastos generales de aprovisionamiento manual**. La configuración manual de una infraestructura de aprendizaje automático con SageMaker Studio, los depósitos de Amazon Simple Storage Service (Amazon S3), las funciones de IAM y las canalizaciones lleva mucho tiempo CI/CD y es propensa a errores, y desvía a los científicos de datos de su tarea principal de desarrollar modelos.
+ **Falta de capacidad de descubrimiento y reutilización**. La falta de un catálogo centralizado dificulta la búsqueda de los modelos, conjuntos de datos y canalizaciones de ML existentes. Esto lleva a que el trabajo sea redundante y a que se pierdan oportunidades de reutilización.
+ **Gobernanza y cumplimiento complejos**. Garantizar que los proyectos de ML cumplan con las políticas de seguridad organizacionales, las normas de privacidad de datos y los estándares de cumplimiento como la Ley de Portabilidad y Responsabilidad de Seguros Médicos (HIPAA) y el Reglamento General de Protección de Datos (GDPR) puede ser un desafío sin barreras de protección automatizadas.
+ **Reduzca el tiempo para generar valor**. El efecto acumulativo de estos desafíos se traduce en ciclos de vida prolongados de los proyectos de ML y retrasa la obtención del valor empresarial derivado de las inversiones en ML.
+ **Riesgos de seguridad.** Las configuraciones incoherentes y los procesos manuales pueden introducir vulnerabilidades de seguridad que dificultan la aplicación de los privilegios mínimos y el aislamiento de la red.

Estos problemas prolongan los ciclos de desarrollo, aumentan la sobrecarga operativa e introducen riesgos de seguridad. La naturaleza iterativa del ML requiere flujos de trabajo repetibles y una colaboración eficiente.

Gartner prevé que para 2026, el 80 % de las organizaciones de ingeniería de software contarán con equipos de plataformas. (Consulte [Platform Engineering Empowers Developers to be Better, Faster, Happier](https://www.gartner.com/en/experts/top-tech-trends-unpacked-series/platform-engineering-empowers-developers) [Cómo la ingeniería de plataformas permite a los desarrolladores ser mejores, más rápidos y más felices] en el sitio webde Gartner). Esta predicción destaca cómo un IDP puede acelerar la entrega de software. Como IDP, Backstage ayuda a restablecer el orden en una infraestructura compleja para que los equipos puedan entregar código de alta calidad de forma rápida y segura. La integración de Backstage con AIOps módulos reforzados le ayuda a pasar de la solución de problemas reactiva a la prevención proactiva.

**MLOps SageMaker módulos**

Los [AIOps módulos](https://github.com/awslabs/aiops-modules) del GitHub repositorio utilizados para este patrón proporcionan una base valiosa para la estandarización AWS mediante la MLOps IaC reforzada y reutilizable. Estos módulos resumen las mejores prácticas para el aprovisionamiento de SageMaker proyectos, canalizaciones y recursos de red y almacenamiento asociados, con el objetivo de reducir la complejidad y acelerar la configuración de los entornos de aprendizaje automático. Puede usar estas plantillas para varios casos de MLOps uso a fin de establecer patrones de implementación consistentes y seguros que fomenten un enfoque más gobernado y eficiente de los flujos de trabajo de aprendizaje automático. 

El uso directo de AIOps los módulos suele requerir que los equipos de plataformas implementen y administren estas plantillas de IaC, lo que puede suponer un desafío para los científicos de datos que desean un acceso de autoservicio. Para descubrir y comprender las plantillas disponibles, configurar los parámetros necesarios y activar su implementación, es posible que sea necesario navegar por las Servicio de AWS consolas o interactuar directamente con las herramientas de la iAc. Esto puede generar fricciones, aumentar la carga cognitiva de los científicos de datos que prefieren centrarse en tareas de ML y, si estas plantillas no se gestionan a través de una interfaz centralizada y fácil de usar, puede provocar una parametrización incoherente o desviarse de los estándares de la organización. La integración de estos potentes AIOps módulos con un IDP como Backstage ayuda a abordar estos desafíos, ya que proporciona una experiencia de autoservicio optimizada, una mayor capacidad de detección y controles de gobierno más sólidos para utilizar estos componentes básicos estandarizados. MLOps 

**Backstage como IDP**

Una plataforma interna para desarrolladores (IDP) es una capa de autoservicio creada por equipos de plataformas para simplificar y estandarizar la forma en que los desarrolladores crean, implementan y administran las aplicaciones. Abstrae la complejidad de la infraestructura y proporciona a los desarrolladores acceso fácil a las herramientas, entornos y servicios a través de una interfaz unificada.

El objetivo principal de un IDP es mejorar la experiencia y la productividad de los desarrolladores mediante las siguientes acciones:
+ Habilitar el autoservicio para tareas como la creación e implementación de servicios.
+ Promover la coherencia y el cumplimiento mediante plantillas estándar.
+ Integrar herramientas en todo el ciclo de vida del desarrollo (CI/CD, supervisión y documentación).

Backstage es un portal para desarrolladores de código abierto creado por Spotify y que ahora forma parte de Cloud Native Computing Foundation (CNCF). Ayuda a las organizaciones a crear su propio IDP, ya que proporciona una plataforma centralizada y ampliable para administrar los componentes, las herramientas y la documentación del software. Con Backstage, los desarrolladores pueden hacer lo siguiente:
+ Descubrir y gestionar todos los servicios internos a través de un catálogo de software.
+ Crear nuevos proyectos mediante plantillas predefinidas a través del complemento scaffolder.
+ Acceda a herramientas integradas, como CI/CD canalizaciones, paneles de Kubernetes y sistemas de monitoreo, desde un solo lugar.
+ Mantenga una documentación coherente y basada en rebajas en todo momento. TechDocs

**Preguntas frecuentes**

**¿Cuál es la diferencia entre usar esta plantilla de Backstage y desplegar SageMaker Studio manualmente a través de la consola? SageMaker **

La plantilla Backstage ofrece varias ventajas en comparación con el despliegue manual de la AWS consola, como las configuraciones estandarizadas que siguen las mejores prácticas de la organización, el despliegue automatizado del iAC con Seed-Farmer y las políticas de seguridad integradas y las medidas de cumplimiento AWS CDK, y la integración mediante los flujos de trabajo de los desarrolladores de la organización. GitHub La plantilla también crea implementaciones reproducibles con control de versiones, lo que facilita la replicación de los entornos en diferentes etapas (desarrollo, puesta en marcha, producción) y mantiene la coherencia entre los equipos. Además, la plantilla incluye funciones de limpieza automatizadas y se integra con el sistema de gestión de identidades de su organización a través de Backstage. El despliegue manual a través de la consola requiere una AWS amplia experiencia y no proporciona el control de versiones ni el mismo nivel de estandarización y gobernanza que ofrece la plantilla. Por estas razones, las implementaciones de consola son más adecuadas para realizar experimentos puntuales que los entornos de producción de ML.

**¿Qué es Seed-Farmer y por qué lo utiliza esta solución?**

Seed-Farmer es una herramienta de organización de AWS despliegues que gestiona los módulos de infraestructura mediante el. AWS CDK Este patrón utiliza Seed-Farmer porque proporciona componentes de infraestructura estandarizados y reutilizables que están diseñados específicamente para las AI/ML cargas de trabajo, gestiona Servicios de AWS automáticamente las complejas dependencias entre ellos y garantiza despliegues consistentes en diferentes entornos.

**¿Necesito instalar el para usar estas plantillas? AWS CLI **

No, no es necesario que lo instales AWS CLI en tu ordenador. Las plantillas se ejecutan íntegramente a través de GitHub Actions en la nube. AWS Las credenciales (clave de acceso, clave secreta y token de sesión) se proporcionan a través de la interfaz de Backstage y el despliegue se realiza automáticamente en el entorno de GitHub Actions.

**¿Cuánto tiempo se tarda en implementar un entorno de SageMaker Studio?**

Una implementación típica de SageMaker Studio tarda entre 15 y 25 minutos en completarse. Esto incluye el AWS CDK arranque (de 2 a 3 minutos), la configuración de la cadena de herramientas de Seed-Farmer (de 3 a 5 minutos) y la creación de recursos (de 10 a 15 minutos). El tiempo exacto depende de su configuración de red Región de AWS y de la complejidad de la misma.

**¿Puedo implementar varios SageMaker entornos en el mismo Cuenta de AWS?**

Sí, puede. Cada implementación crea recursos con nombres únicos en función del nombre del componente que proporcione en la plantilla. Sin embargo, tenga en cuenta las Servicio de AWS cuotas: cada cuenta puede tener un número limitado de SageMaker dominios por región, así que [compruebe sus cuotas](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) antes de crear varios entornos.

# Automatice las operaciones de AWS infraestructura con Amazon Bedrock
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock"></a>

*Ishwar Chauthaiwale y Anand Bukkapatnam Tirumala, Amazon Web Services*

## Resumen
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-summary"></a>

En las soluciones nativas en la nube, la automatización de las operaciones de infraestructura comunes desempeña un papel fundamental a la hora de mantener entornos eficientes, seguros y rentables. La gestión manual de las operaciones lleva mucho tiempo y es propensa a errores humanos. Además, los miembros del equipo con distintos niveles de AWS experiencia deben realizar estas tareas y, al mismo tiempo, garantizar el cumplimiento de los protocolos de seguridad. Este patrón demuestra cómo usar Amazon Bedrock para automatizar las operaciones de AWS infraestructura comunes mediante el procesamiento del lenguaje natural (NLP).

Este patrón puede ayudar a las organizaciones a desarrollar código reutilizable, modular y seguro para implementar una infraestructura basada en IA generativa en varios entornos. Al centrarse en la infraestructura como código (IaC) y en la automatización, ofrece DevOps beneficios clave, como el control de versiones, las implementaciones coherentes, la reducción de los errores, el aprovisionamiento más rápido y la mejora de la colaboración.

El patrón implementa una arquitectura segura que permite a los equipos gestionar las operaciones relacionadas con aspectos clave, entre los que se incluyen: Servicios de AWS 
+ Administración del control de versiones para un bucket de Amazon Simple Storage Service (Amazon S3)
+ Creación de instantáneas de Amazon Relational Database Service (Amazon RDS)
+ Administración de instancias de Amazon Elastic Compute Cloud (Amazon EC2)

La arquitectura emplea puntos finales de Amazon Virtual Private Cloud (Amazon VPC) y redes privadas para una comunicación segura, con AWS Lambda funciones que funcionan como ejecutores de tareas dentro de subredes privadas. Amazon S3 proporciona administración de datos e implementa funciones y permisos integrales AWS Identity and Access Management (IAM) para garantizar los controles de acceso adecuados. Esta solución no incluye una característica de historial de chat y el chat no se almacena.

## Requisitos previos y limitaciones
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-prereqs"></a>
+ Un activo Cuenta de AWS.
+ Deben existir medidas de control de acceso adecuadas para proteger y controlar el acceso. Algunos ejemplos de control de acceso incluyen el uso AWS Systems Manager de modelos básicos de acceso, una función de IAM para la implementación y funciones basadas en servicios, la inhabilitación del acceso público a los buckets de Amazon S3 y la configuración de una cola de espera.
+ [Una () clave gestionada por el cliente. AWS Key Management ServiceAWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)
+ AWS Command Line Interface (AWS CLI) versión 2 o posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) y [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) en el entorno de implementación.
+ [Instalación](https://registry.terraform.io/providers/-/aws/latest/docs/guides/version-4-upgrade) y configuración de Terraform AWS Provider, versión 4 o posterior.
+ La versión 1.5.7 o posterior de Terraform [instalada](https://developer.hashicorp.com/terraform/install) y configurada.
+ Revise y [defina los esquemas de OpenAPI para los grupos de acciones del agente en Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html) para protegerse del acceso no autorizado y mantener la integridad de los datos.
+ [El [acceso está habilitado](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) en su Cuenta de AWS dispositivo para los modelos Amazon Titan Text Embeddings v2 necesarios y para los modelos de base Claude 3.5 Sonnet o Claude 3 Haiku.](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) [Para evitar errores en la implementación, confirme que la implementación de destino es compatible con los modelos requeridos Región de AWS .](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)
+ Una nube privada virtual (VPC) configurada que sigue las prácticas recomendadas de [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-design.html).
+ Revisión completa de la [política de IA responsable de Amazon](https://aws.amazon.com/ai/responsible-ai/policy/).

**Versiones de producto**
+ Amazon Titan Text Embeddings V2
+ Anthropic Claude 3.5 Sonnet or Claude 3 Haiku
+ Terraform AWS Provider versión 4 o posterior
+ Terraform versión 1.5.7 o posterior

## Arquitectura
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-architecture"></a>

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

![\[Flujo de trabajo para automatizar operaciones comunes de infraestructura de AWS mediante Amazon Bedrock.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/924e503f-bfc5-4452-abdf-d72a58d4d36f/images/bd56ad29-b435-4543-8ee8-dc4e1d38df18.png)


La arquitectura de la solución consta de varias capas que funcionan juntas para procesar las solicitudes en lenguaje natural y ejecutar las operaciones correspondientes AWS :

1. El usuario realiza solicitudes de operaciones a través de la consola de chat de Amazon Bedrock.

1. El chatbot utiliza las bases de conocimiento de Amazon Bedrock para procesar las solicitudes. Implementa el modelo Amazon Titan Text Embeddings v2 para el procesamiento del lenguaje natural.

1. Si la petición del usuario incluye una solicitud de acción, el grupo de acción de Amazon Bedrock utiliza el modelo Anthropic Claude 3 Haiku o Claude 3.5 Sonnet (según su elección) como lógica de ejecución y define las operaciones mediante un esquema OpenAPI.

1. El grupo de acción llega a los [puntos de conexión de Amazon VPC mediante](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) una comunicación AWS PrivateLink de servicio segura.

1. Se accede a la AWS Lambda función a través de los puntos de conexión de Amazon VPC para los servicios de Amazon Bedrock.

1. Las funciones de Lambda son el motor de ejecución principal. Según la solicitud, la función de Lambda llama a la API para realizar acciones en los Servicios de AWS. La función de Lambda también gestiona el enrutamiento y la ejecución de las operaciones.

1. Se Servicios de AWS realizan la solicitud de obtención de la API de la función Lambda y las operaciones correspondientes.

1. La función de Lambda calcula una carga útil de salida que Amazon Bedrock entiende.

1. Esta carga útil se envía a Amazon Bedrock mediante una comunicación PrivateLink de servicio segura. El modelo de lenguaje de gran tamaño (LLM) que usa Amazon Bedrock comprende esta carga útil y la convierte en un formato comprensible para las personas.

1. A continuación, el resultado se muestra al usuario en la consola de chat de Amazon Bedrock.

La solución permite las siguientes operaciones principales:
+ Amazon S3: permite habilitar el control de versiones en bucket.
+ Amazon RDS: permite crear instantáneas de bases de datos para realizar copias de seguridad.
+ Amazon EC2: permite enumerar las instancias y controlar el inicio y la parada de estas.

## Tools (Herramientas)
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-tools"></a>

**Servicios de AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) es un servicio totalmente gestionado que pone a su disposición modelos básicos de alto rendimiento (FMs) de las principales empresas emergentes de IA y Amazon a través de una API unificada.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante comandos en su consola de línea de comandos.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) brinda capacidad de computación escalable en la Nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) es una configuración sin servidor bajo demanda para Amazon OpenSearch Service.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)le ayuda a crear conexiones unidireccionales y privadas desde sus nubes privadas virtuales (VPCs) a servicios externos a la VPC.
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) lo ayuda a configurar, utilizar y escalar una base de datos relacional en la Nube de AWS.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) lo ayuda a administrar las aplicaciones y la infraestructura que se ejecutan en la Nube de AWS. Simplifica la administración de aplicaciones y recursos, reduce el tiempo necesario para detectar y resolver problemas operativos y le ayuda a administrar sus AWS recursos de forma segura y a escala.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.

**Otras herramientas**
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio aws-samples/. GitHub infra-ops-orchestrator](https://github.com/aws-samples/infra-ops-orchestrator)

## Prácticas recomendadas
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-best-practices"></a>
+ Supervise los registros de ejecución de Lambda con regularidad. Para obtener más información, consulte [Supervisión y solución de problemas de funciones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Para obtener más información sobre las prácticas recomendadas, consulte Prácticas recomendadas [para trabajar con funciones](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html). AWS Lambda 
+ Revise las configuraciones de seguridad periódicamente para garantizar la conformidad con los requisitos de su organización. Para más información, consulte [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-bp.html).
+ Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-epics"></a>

### Implementar la solución
<a name="deploy-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar un repositorio en su máquina local, ejecute el siguiente comando:<pre>git clone "git@github.com:aws-samples/infra-ops-orchestrator.git"<br />cd infra-ops-orchestrator</pre> | AWS DevOps, DevOps ingeniero | 
| Edite las variables de entorno. | Edite el archivo `terraform.tfvars` en el directorio raíz del repositorio clonado. Revise los marcadores de posición indicados por `[XXXXX]` y actualícelos según su entorno. | AWS DevOps, DevOps ingeniero | 
| Cree la infraestructura. | Para crear la infraestructura, ejecute los comandos siguientes:<pre>terraform init</pre><pre>terraform plan</pre>Revise el plan de ejecución detenidamente. Si los cambios planificados son aceptables, ejecute el comando siguiente:<pre>terraform apply --auto-approve</pre> | AWS DevOps, DevOps ingeniero | 

### Acceso a la solución
<a name="access-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Acceda a la solución. | Tras una implementación correcta, siga estos pasos para utilizar la interfaz basada en el chat:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-infrastructure-operations-by-using-amazon-bedrock.html) | AWS DevOps, DevOps ingeniero | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos creados. | Para eliminar toda la infraestructura creada por este patrón, ejecute el comando siguiente:<pre>terraform plan -destroy </pre>Revise el plan de eliminación detenidamente. Si las eliminaciones planificadas son aceptables, ejecute el comando siguiente:<pre>terraform destroy</pre>Nota: Este comando eliminará de forma permanente todos los recursos creados por este patrón. El comando solicitará una confirmación antes de eliminar cualquier recurso. | AWS DevOps, DevOps ingeniero | 

## Resolución de problemas
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Comportamiento del agente  | Para obtener información sobre este problema, consulte [Prueba y solución de problemas del comportamiento de los agentes](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) en la documentación de Amazon Bedrock. | 
| Problemas de la red de Lambda | Para obtener información sobre estos problemas, consulte [Solución de problemas de red en Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) en la documentación de Lambda. | 
| Permisos de IAM | Para obtener información sobre estos problemas, consulte [Solución de problemas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) en la documentación de IAM. | 

## Recursos relacionados
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-resources"></a>
+ [Creación de una instantánea de base de datos para una instancia de base de datos Single-AZ para Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [Definición de los esquemas de OpenAPI para los grupos de acciones del agente en Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html)
+ [Habilitar el control de versiones en buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)
+ [Cómo funciona Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [Recuperación de datos y generación de respuestas de IA con bases de conocimientos de Amazon Bedrock](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Acceda de forma segura a Services Over AWS PrivateLink](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Detención e iniciación de una instancia de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
+ [Utilice grupos de acciones para definir las acciones que debe realizar su agente](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html)

# Automatice CloudFront las actualizaciones cuando cambien los puntos finales del equilibrador de carga mediante Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamilselvan P, Mohan Annam y Naveen Suthar, Amazon Web Services*

## Resumen
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-summary"></a>

Cuando los usuarios de Amazon Elastic Kubernetes Service (Amazon EKS) eliminan y vuelven a instalar su configuración de entrada mediante gráficos de Helm, se crea un nuevo equilibrador de carga de aplicación (ALB). Esto crea un problema porque Amazon CloudFront sigue haciendo referencia al registro DNS anterior de la ALB. Como resultado, no se podrá acceder a los servicios destinados a este punto de conexiön. (Para más información sobre este flujo de trabajo problemático, consulte [Información adicional](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional)).

Para resolver este problema, este patrón describe el uso de una AWS Lambda función personalizada que se desarrolló con Python. Esta función Lambda detecta automáticamente cuando se crea un nuevo ALB mediante las reglas de Amazon. EventBridge A continuación AWS SDK para Python (Boto3), la función actualiza la CloudFront configuración con la nueva dirección DNS del ALB, lo que garantiza que el tráfico se dirija al punto final correcto.

Esta solución automatizada mantiene la continuidad del servicio sin enrutamiento ni latencia adicionales. El proceso ayuda a garantizar que CloudFront siempre haga referencia al punto final DNS del ALB correcto, incluso cuando la infraestructura subyacente cambie.

## Requisitos previos y limitaciones
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Ejemplo de aplicación web para pruebas y validaciones que se implementa en Amazon EKS mediante Helm. Para más información, consulte [Implementación de aplicaciones con Helm en Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) en la documentación de Amazon EKS.
+ Configure CloudFront para enrutar las llamadas a un ALB creado por un controlador de [ingreso](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Helm. Para obtener más información, consulte [Instalar el controlador de AWS Load Balancer con Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) en la documentación de Amazon EKS y [Restringir el acceso a los balanceadores de carga de aplicaciones](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) en la documentación. CloudFront 
+ Terraform se [instala](https://developer.hashicorp.com/terraform/install?product_intent=terraform) y configura en un espacio de trabajo local.

**Limitaciones**
+ Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Terraform, versión 1.0.0 o posterior
+ La versión 4.20 o posterior del [Proveedor de AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) para Terraform

## Arquitectura
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-architecture"></a>

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

![\[Flujo de trabajo para actualizar CloudFront con una nueva dirección DNS de ALB detectada mediante una regla. EventBridge\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


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

1. El controlador de entrada de Amazon EKS crea un nuevo equilibrador de carga de aplicación (ALB) cada vez que se reinicia o implementa Helm.

1. EventBridge busca eventos de creación de ALB.

1. El evento de creación de ALB activa la función de Lambda.

1. La función Lambda se implementó en base a Python 3.9 y utiliza la API boto3 para realizar llamadas. Servicios de AWS La función Lambda actualiza la CloudFront entrada con el nombre DNS más reciente del balanceador de carga, que se recibe de los eventos de creación del balanceador de carga.

## Tools (Herramientas)
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Servicios de AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) acelera la distribución de tu contenido web al distribuirlo a través de una red mundial de centros de datos, lo que reduce la latencia y mejora el rendimiento.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos finales de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

[El código de este patrón está disponible en el GitHub aws-cloudfront-automation-terraform repositorio -samples.](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples)

## Epics
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-epics"></a>

### Configuración de la estación de trabajo local
<a name="set-up-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar y configurar la CLI de Git. | Para instalar y configurar la interfaz de la línea de comandos (CLI) de Git en su estación de trabajo local, siga las instrucciones de [Introducción a la instalación de Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) en la documentación de Git. | DevOps ingeniero | 
| Cree la carpeta del proyecto y añada los archivos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

### Aprovisionamiento de la arquitectura de destino mediante la configuración de Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la solución. | Para implementar recursos en el objetivo Cuenta de AWS, siga los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

### Verifique la implementación
<a name="verify-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

### Limpieza de la infraestructura
<a name="clean-up-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie la infraestructura. | Para limpiar la infraestructura que creó anteriormente, realice los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Error al validar las credenciales del proveedor | Al ejecutar los comandos `apply` o `destroy` de Terraform desde su equipo local, es posible que se produzca un error similar al siguiente:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre>Este error se debe a la caducidad del token de seguridad de las credenciales usadas en la configuración de la máquina local.Para resolver el error, consulte [Establecer y ver los ajustes de configuración](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) en la documentación AWS Command Line Interface (AWS CLI). | 

## Recursos relacionados
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS resources**
+ [Restrinja el acceso a los balanceadores de carga de aplicaciones](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Enrute el tráfico de Internet con el AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentación de Terraform**
+ [AWS Proveedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Instalar Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Estado remoto](https://developer.hashicorp.com/terraform/language/state/remote)

## Información adicional
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Flujo de trabajo problemático**

![\[Flujo de trabajo que produce la entrada en el DNS de out-of-date ALB. CloudFront\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


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

1. Cuando el usuario accede a la aplicación, la llamada va a. CloudFront

1. CloudFront enruta las llamadas al Application Load Balancer (ALB) correspondiente.

1. El ALB incluye las direcciones IP de destino, que son las direcciones IP del pod de aplicaciones. A partir de ahí, el ALB proporciona al usuario los resultados esperados.

Sin embargo, este flujo de trabajo tiene un problema. Las implementaciones de aplicaciones se realizan a través de gráficos de Helm. Siempre que hay una implementación o si alguien reinicia Helm, también se vuelve a crear la entrada correspondiente. Como resultado, el controlador del equilibrador de carga externo vuelve a crear el ALB. Además, durante cada recreación, el ALB se vuelve a crear con un nombre de DNS diferente. Debido a esto, CloudFront tendrá una entrada obsoleta en la configuración de origen. Debido a que esta entrada está obsoleta, el usuario no podrá acceder a la aplicación. Este problema provoca un tiempo de inactividad para los usuarios.

**Solución alternativa**

Otra posible solución es crear un [DNS externo](https://github.com/kubernetes-sigs/external-dns) para el ALB y, a continuación, apuntarlo al punto final de la zona alojada privada de Amazon Route 53. CloudFront Sin embargo, este enfoque añade otro salto en el flujo de la aplicación, lo que podría provocar la latencia de la aplicación. La solución de la función de Lambda de este patrón no interrumpe el flujo de actual.

# Automatice las CodeGuru revisiones de Amazon para aplicaciones de AWS CDK Python mediante GitHub Actions
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy y Sarat Chandra Pothula, Amazon Web Services*

## Resumen
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

Nota: A partir del 7 de noviembre de 2025, no podrá crear nuevas asociaciones de repositorios en Amazon CodeGuru Reviewer. Para obtener información sobre los servicios con capacidades similares a las de CodeGuru Reviewer, consulte el [cambio de disponibilidad de Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) en la documentación de CodeGuru Reviewer.

Este patrón muestra la integración de las revisiones de código CodeGuru automatizadas de Amazon para aplicaciones de AWS Cloud Development Kit (AWS CDK) Python, orquestadas a través GitHub de acciones. La solución implementa una arquitectura sin servidor definida en Python AWS CDK . Al automatizar el análisis de código experto dentro del proceso de desarrollo, este enfoque puede hacer lo siguiente para los proyectos de AWS CDK Python:
+ Mejorar la calidad del código.
+ Optimizar los flujos de trabajo.
+ Maximizar los beneficios de la informática sin servidor.

## Requisitos previos y limitaciones
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ AWS Command Line Interface [(AWS CLI) versión 2.9.11 o posterior, [instalada y configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html).](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Una GitHub cuenta activa y un GitHub repositorio con permisos de flujo de trabajo de lectura y escritura y creación de solicitudes de extracción (PR) mediante GitHub Actions para garantizar que el flujo de trabajo de PR funcione correctamente.
+ Una función de OpenID Connect (OIDC) en GitHub Actions para implementar la solución en. Cuenta de AWS Utilice el [constructo de AWS CDK](https://github.com/aws-samples/github-actions-oidc-cdk-construct) para crear el rol.

**Limitaciones**
+ Amazon CodeGuru Profiler [admite aplicaciones](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support) escritas en todos los lenguajes de máquinas virtuales Java (JVM) (como Scala y Kotlin) y en tiempos de ejecución y Python 3.6 o versiones posteriores.
+ Amazon CodeGuru Reviewer solo [admite asociaciones](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html) con repositorios de código Java y Python de los siguientes proveedores de código fuente: AWS CodeCommit Bitbucket GitHub, GitHub Enterprise Cloud y GitHub Enterprise Server. Además, los repositorios de Amazon Simple Storage Service (Amazon S3) solo se admiten mediante Actions. GitHub 
+ No existe una forma automatizada de imprimir los resultados durante la canalización de procesos de integración e implementación continuos (CI/CD). En su lugar, este patrón utiliza GitHub las acciones como método alternativo para gestionar y mostrar los resultados.
+ Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

En el siguiente diagrama se muestra la arquitectura para esta solución.

![\[Flujo de trabajo para integrar la revisión de CodeGuru código para las aplicaciones Python de AWS CDK mediante GitHub Actions.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


Como se muestra en el diagrama, cuando un desarrollador crea una solicitud de cambios (PR) para su revisión, GitHub Actions activa los siguientes pasos:

1. Suposición de la función de IAM: la canalización utiliza la función de IAM que se especifica en GitHub Secrets para realizar las tareas de despliegue.

1. Análisis de código
   + CodeGuru Reviewer analiza el código almacenado en el bucket de Amazon S3. Identifica los defectos y proporciona recomendaciones para corregirlos y optimizarlos.
   + CodeGuru La seguridad escanea en busca de infracciones y vulnerabilidades de las políticas.

1. Revisión de resultados
   + La canalización imprime un enlace al panel de resultados en la salida de la consola.
   + Si se detectan resultados críticos, la canalización devuelve un error inmediatamente.
   + En el caso de tener resultados de gravedad alta, normal o baja, el proceso continúa al siguiente paso.

1. Aprobación de PR
   + El revisor debe aprobar manualmente el PR.
   + Si se deniega el PR, se produce un error en la canalización y se detienen los pasos de implementación adicionales.

1. Implementación de CDK: tras la aprobación del PR, comienza el proceso de implementación de CDK. Configura lo siguiente Servicios de AWS y los recursos:
   + CodeGuru Generador de perfiles
   + AWS Lambda función
   + Cola de Amazon Simple Queue Service (Amazon SQS)

1. Generación de datos de creación de perfiles: para generar suficientes datos de creación de perfiles para CodeGuru Profiler:
   + La canalización invoca la función de Lambda varias veces mediante el envío periódico de mensajes a la cola de Amazon SQS.

## Tools (Herramientas)
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
+ [CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) es un kit de desarrollo en la nube de línea de comandos que le ayuda a interactuar con su AWS CDK aplicación.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) recopila datos de rendimiento en tiempo de ejecución de sus aplicaciones activas y proporciona recomendaciones que pueden ayudarle a ajustar el rendimiento de las aplicaciones.
+ [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) utiliza el análisis de programas y el aprendizaje automático para detectar posibles defectos difíciles de encontrar para los desarrolladores. A continuación, CodeGuru Profiler ofrece sugerencias para mejorar el código de Java y Python.
+ Amazon CodeGuru Security es una herramienta de seguridad de aplicaciones estática que utiliza el aprendizaje automático para detectar infracciones y vulnerabilidades de las políticas de seguridad. Proporciona sugerencias para abordar los riesgos de seguridad y genera métricas para que pueda realizar un seguimiento del estado de seguridad de sus aplicaciones.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Otras herramientas**
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) 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.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python).

## Prácticas recomendadas
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ Siga las [prácticas recomendadas para desarrollar e implementar una infraestructura en la nube con la AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html).
+ Siga las [prácticas recomendadas de seguridad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) cuando utilice los flujos de trabajo de Servicios de AWS In GitHub Actions, entre las que se incluyen:
  + No guarde las credenciales en el código del repositorio.
  + [Obtenga un rol de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles) para recibir credenciales temporales y utilícelas siempre que sea posible.
  + [Otorgue el mínimo privilegio al](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) rol de IAM utilizado en los flujos de trabajo de GitHub Actions. Conceda únicamente los permisos necesarios para realizar las acciones en sus flujos de trabajo de GitHub Actions. 
  + [Supervisa la actividad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials) del rol de IAM que se usa en los flujos de trabajo de GitHub Actions.
  + Cambie periódicamente las credenciales a largo plazo que utilice.

## Epics
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configura las AWS credenciales. | Para exportar las variables que definen la pila Cuenta de AWS y Región de AWS dónde la vas a implementar, ejecuta los siguientes comandos:<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Las AWS credenciales de la AWS CDK se proporcionan a través de variables de entorno. | AWS DevOps, DevOps ingeniero | 
| Clonar el repositorio. | Para clonar un repositorio en su máquina local, ejecute el siguiente comando:<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps, DevOps ingeniero | 
| Instale el kit de herramientas de CDK. | Para confirmar que el Kit de herramientas de CDK está instalado y comprobar la versión, ejecute el siguiente comando: <pre>cdk --version</pre>Si la versión del kit de herramientas de CDK es anterior a la versión 2.27.0, ejecute el siguiente comando para actualizar a esa versión.<pre>npm install -g aws-cdk@2.27.0</pre>Si el kit de herramientas de CDK *no* está instalado, ejecute el siguiente comando para instalarlo:<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingeniero | 
| Instale las dependencias requeridas. | Ejecute el siguiente comando para instalar las dependencias de proyecto necesarias:<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps, DevOps ingeniero | 
| Arranque el entorno de CDK. | Para [arrancar](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) un entorno de AWS CDK, ejecute los siguientes comandos.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Tras arrancar correctamente el entorno, debería aparecer el siguiente resultado.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps, DevOps ingeniero | 

### Implementación de la aplicación de CDK
<a name="deploy-the-cdk-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Sintetiza la AWS CDK aplicación. | Para sintetizar una AWS CDK aplicación, ejecuta el siguiente comando:<pre>cdk synth</pre>Para obtener más información sobre este comando, consulte [cdk synthesize](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html) en la documentación. AWS CDK  | AWS DevOps, DevOps ingeniero | 
| Implementación de recursos. | Ejecute el siguiente comando para implementar los recursos:<pre>cdk deploy --require-approval never</pre>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 utilizar la `--require-approval never` bandera en entornos de producción. | AWS DevOps, DevOps ingeniero | 

### Crea GitHub secretos y un token de acceso personal
<a name="create-github-secrets-and-personal-access-token"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los secretos necesarios en GitHub. | Para permitir que los flujos de trabajo de GitHub Actions accedan a AWS los recursos de forma segura sin exponer información confidencial del código de tu repositorio, crea secretos. Para crear los secretos de GitHub un repositorio y `ROLE_TO_ASSUME` `CodeGuruReviewArtifactBucketName``AWS_ACCOUNT_ID`, sigue las instrucciones de la documentación de GitHub Actions sobre cómo [crear secretos para un repositorio](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository).A continuación, encontrará más información sobre las variables:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps ingeniero | 
| Crea un token de acceso GitHub personal. | Para configurar una forma segura de autenticar tus flujos de trabajo de GitHub Actions e interactuar con ellos GitHub, haz lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps ingeniero | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de recursos. | Para limpiar tu aplicación de AWS CDK Python, ejecuta el siguiente comando:<pre>cdk destroy --all</pre> | DevOps ingeniero | 

## Resolución de problemas
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Muestre el enlace a los resultados del panel. | No hay forma de imprimir los resultados durante el CI/CD oleoducto. En cambio, este patrón utiliza GitHub las acciones como un método alternativo para gestionar y mostrar los resultados. | 

## Recursos relacionados
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS resources**
+ [AWS Kit Cloud Development](https://aws.amazon.com/cdk/)
+ [ CodeGuru Documentación de Amazon](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [AWS Identity and Access Management](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [¿Qué es AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub documentación**
+ [Configuración de OpenID Connect en Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Acciones](https://github.com/features/actions)
+ [Reutilización de los flujos de trabajo](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [Activación de un flujo de trabajo](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 

# Automatice el despliegue de lagos de AWS Supply Chain datos en una configuración de múltiples repositorios mediante GitHub Actions, Artifactory y Terraform
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes"></a>

*Keshav Ganesh, Amazon Web Services*

## Resumen
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-summary"></a>

Este patrón proporciona un enfoque automatizado para implementar y administrar lagos de AWS Supply Chain datos mediante capacidades de integración continua y despliegue continuo () de múltiples repositorios. CI/CD) pipeline. It demonstrates two deployment methods: automated deployment using GitHub Actions workflows, or manual deployment using Terraform directly. Both approaches use Terraform for infrastructure as code (IaC), with the automated method adding GitHub Actions and JFrog Artifactory for enhanced CI/CD

La solución aprovecha AWS Supply Chain y Amazon Simple Storage Service (Amazon S3) para establecer la infraestructura del lago de datos y, al mismo tiempo, utiliza cualquiera de los dos métodos de implementación para automatizar la configuración y la creación de recursos. AWS Lambda Esta automatización elimina los pasos de configuración manual y garantiza la uniformidad de las implementaciones en todos los entornos. Además, AWS Supply Chain elimina la necesidad de contar con una amplia experiencia en extracción, transformación y carga (ETL) y puede proporcionar información y análisis impulsados por Amazon Quick Sight.

Al implementar este patrón, las organizaciones pueden reducir el tiempo de implementación, mantener la infraestructura como código y administrar los lagos de datos de la cadena de suministro mediante un proceso automatizado y controlado por versiones. El enfoque de múltiples repositorios proporciona un control de acceso detallado y permite el despliegue independiente de diferentes componentes. Los equipos pueden elegir el método de implementación que mejor se adapte a sus herramientas y procesos existentes.

## Requisitos previos y limitaciones
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs"></a>

**Requisitos previos **

Asegúrese de que lo siguiente esté instalado en su máquina local:
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versión 2
+ [GitHub CLI](https://docs.github.com/en/get-started/git-basics/set-up-git)
+ [Python v3.13](https://www.python.org/downloads/)
+ [Terraform v1.12](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) o posterior

Asegúrese de que se cuente con lo siguiente antes de la implementación:
+ Un activo Cuenta de AWS.
+ Una [nube privada virtual (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) con dos [subredes privadas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) Cuenta de AWS en Región de AWS la que elija.
+ Permisos suficientes para el rol AWS Identity and Access Management (IAM) utilizado para la implementación en los siguientes servicios:
  + AWS Supply Chain — Se prefiere Full Access para implementar sus componentes, como conjuntos de datos y flujos de integración, además de acceder a ellos desde. Consola de administración de AWS
  + Amazon CloudWatch Logs: para crear y administrar grupos de CloudWatch registros.
  + Amazon Elastic Compute Cloud (Amazon EC2): para grupos de seguridad de Amazon EC2 y puntos de conexión de Amazon Virtual Private Cloud (Amazon VPC).
  + Amazon EventBridge : para uso de AWS Supply Chain.
  + IAM: para crear funciones AWS Lambda de servicio.
  + AWS Key Management Service (AWS KMS) — Para acceder al depósito AWS KMS keys de artefactos de Amazon S3 y al depósito AWS Supply Chain provisional de Amazon S3.
  + AWS Lambda — Para crear las funciones Lambda que despliegan los AWS Supply Chain componentes.
  + Amazon S3: para acceder al depósito de artefactos de Amazon S3, al depósito de registro de acceso al servidor y al AWS Supply Chain depósito provisional. Si utiliza la implementación manual, también necesitará permisos para el depósito de artefactos Terraform de Amazon S3.
  + Amazon VPC: para crear y administrar una VPC.

Si prefiere utilizar los flujos de trabajo de GitHub Actions para la implementación, haga lo siguiente:
+ Configure [OpenID Connect (OIDC)](https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws#configuring-the-role-and-trust-policy) para el rol de IAM con los permisos mencionados anteriormente.
+ Cree un rol de IAM con permisos similares para acceder al. Consola de administración de AWS Para obtener más información, consulte [Crear un rol para conceder permisos a un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) en la documentación de IAM.

Si prefiere realizar una implementación manual, haga lo siguiente:
+ Cree un usuario de IAM para que asuma la función de IAM con los permisos mencionados anteriormente. Para obtener más información, consulte [Crear un rol para conceder permisos a un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) en la documentación de IAM.
+ [Asuma el rol](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-role.html) en su terminal local.

Si prefieres usar los flujos de trabajo de GitHub Actions para la implementación, configura lo siguiente:
+ Una [cuenta JFrog Artifactory](https://jfrog.com/artifactory/?utm_source=google&utm_medium=cpc_search&utm_campaign=SearchDSKBrandAPACIN202506&utm_term=jfrog%20cloud&gads_network=g&utm_content=u-bin&gads_campaign_id=22674833884&gads_adgroup_id=184501797241&gads_extension_id=233003714635&gads_target_id=aud-312135645780:kwd-1598615735032&gads_matchtype=b&gad_source=1&gad_campaignid=22674833884&gbraid=0AAAAADqV85U5B37iapTR9IIFHBvydF5AQ&gclid=CjwKCAjwiY_GBhBEEiwAFaghvqdNV-odNLZXPHjT7NAwf8lA-QuMtg666hgvDW1oCJ4nn7wvf869_xoCW4IQAvD_BwE) para obtener el nombre de host, el nombre de usuario y el token de acceso al inicio de sesión.
+ Una [clave de JFrog proyecto y un repositorio](https://jfrog.com/help/r/jfrog-platform-administration-documentation/step-1-set-up-a-new-project) para almacenar artefactos.

**Limitaciones**
+ La AWS Supply Chain instancia no admite técnicas complejas de transformación de datos.
+ AWS Supply Chain es la más adecuada para los dominios de la cadena de suministro porque proporciona análisis e información integrados. Para cualquier otro dominio, se AWS Supply Chain puede utilizar como almacén de datos como parte de la arquitectura del lago de datos.
+ Es posible que sea necesario mejorar las funciones Lambda utilizadas en esta solución para gestionar los reintentos de API y la administración de memoria en una implementación a escala de producción.
+ Algunas Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-architecture"></a>

Puedes implementar esta solución mediante flujos de trabajo de GitHub Actions automatizados o manualmente con Terraform.

**Despliegue automatizado con Actions GitHub **

En el siguiente diagrama, se muestra la opción de despliegue automatizado que utiliza los flujos de trabajo de GitHub Actions. JFrog Artifactory se utiliza para la gestión de artefactos. Almacena la información y los resultados de los recursos para utilizarlos en una implementación de varios repositorios.

![\[Opción de despliegue automatizado que utiliza los flujos de trabajo de GitHub Actions y JFrog.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/d454a5c5-ed51-421c-a87f-ff74cfcb30be.png)


**Despliegue manual con Terraform**

El siguiente diagrama muestra la opción de despliegue manual a través de Terraform. En lugar de JFrog Artifactory, Amazon S3 se utiliza para la administración de artefactos.

![\[Opción de implementación manual mediante Terraform y Amazon S3.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/1130e728-44d5-4ae7-9586-1e497f54352a.png)


**Flujo de trabajo de una implementación**

Los diagramas muestran el siguiente flujo de trabajo:

1. Implemente conjuntos de datos de AWS Supply Chain servicios, infraestructura y bases de datos mediante uno de los siguientes métodos de implementación:
   + **Implementación automatizada**: utiliza los flujos de trabajo de GitHub Actions para organizar todos los pasos de la implementación y utiliza JFrog Artifactory para la gestión de artefactos.
   + **Implementación manual**: ejecuta los comandos de Terraform directamente para cada paso de la implementación y usa Amazon S3 para la administración de artefactos.

1. Cree los AWS recursos de apoyo necesarios para el funcionamiento del AWS Supply Chain servicio:
   + Puntos de enlace y grupos de seguridad de Amazon VPC
   + AWS KMS keys
   + CloudWatch Registros, grupos de registros

1. Cree e implemente los siguientes recursos de infraestructura:
   + Funciones Lambda que administran (crean, actualizan y eliminan) la instancia de AWS Supply Chain servicio, los espacios de nombres y los conjuntos de datos.
   + AWS Supply Chain organizar un bucket de Amazon S3 para la ingesta de datos

1. Implemente la función Lambda que gestiona los flujos de integración entre el depósito provisional y los conjuntos de datos. AWS Supply Chain Una vez completada la implementación, los pasos restantes del flujo de trabajo gestionan la ingesta y el análisis de los datos.

1. Configure la ingesta de datos de origen en el bucket AWS Supply Chain provisional de Amazon S3.

1. Una vez que se añaden los datos al AWS Supply Chain bucket provisional de Amazon S3, el servicio activa automáticamente el flujo de integración de los AWS Supply Chain conjuntos de datos.

1. AWS Supply Chain se integra con Quick Sight Analytics para crear paneles basados en los datos ingeridos.

## Tools (Herramientas)
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-tools"></a>

**Servicios de AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) le ayuda a centralizar los registros de todos sus sistemas y aplicaciones Servicios de AWS para que pueda supervisarlos y archivarlos de forma segura.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante los comandos de su consola de línea de comandos.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) brinda capacidad de computación escalable en la Nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos de enlace de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)le ayuda a gestionar de forma centralizada el acceso mediante el inicio de sesión único (SSO) a todas sus aplicaciones y a las de la nube. Cuentas de AWS 
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) le ayuda a crear y controlar claves criptográficas para proteger sus datos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon Q](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) in AWS Supply Chain es un asistente de IA generativa interactivo que le ayuda a gestionar su cadena de suministro de forma más eficiente mediante el análisis de los datos de su lago de AWS Supply Chain datos.
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) es un servicio de inteligencia empresarial (BI) a escala de la nube que lo ayuda a visualizar, analizar y generar informes de sus datos en un único panel.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)es una aplicación gestionada basada en la nube que se puede utilizar como almacén de datos en las organizaciones para los dominios de la cadena de suministro, que se puede utilizar para generar información y realizar análisis de los datos ingeridos.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS. Un [punto de conexión de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) es un dispositivo virtual que le ayuda a conectar de forma privada su VPC a una red compatible Servicios de AWS sin necesidad de una pasarela de Internet, un dispositivo NAT, una conexión VPN o una conexión. AWS Direct Connect 

**Otras herramientas**
+ [GitHub Actions](https://docs.github.com/en/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.
+ [HashiCorp Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) que te ayuda a crear y administrar recursos locales y en la nube.
+ [JFrog Artifactory](https://jfrog.com/help/r/jfrog-artifactory-documentation/jfrog-artifactory) proporciona end-to-end automatización y administración de archivos binarios y artefactos a través del proceso de entrega de la aplicación.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general. Este patrón usa Python para que el código de la AWS función interactúe con AWS Supply Chain

  .

## Prácticas recomendadas
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-best-practices"></a>
+ Mantenga la mayor seguridad posible al implementar este patrón. Como se indica en [los requisitos previos](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), asegúrese de [tener una nube privada virtual (VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)) con [dos subredes privadas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) en Región de AWS la que Cuenta de AWS elija.
+ Utilice [claves administradas por el AWS KMS cliente](https://docs.aws.amazon.com/kms/latest/cryptographic-details/basic-concepts.html) siempre que sea posible y concédales permisos de acceso limitados.
+ Para configurar las funciones de IAM con el acceso mínimo necesario para ingerir datos según este patrón, consulte [Proteger la ingestión de datos desde los sistemas de origen a Amazon S3](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main?tab=readme-ov-file#secure-data-ingestion-from-source-systems-to-amazon-s3) en el repositorio de este patrón.

## Epics
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-epics"></a>

### (Ambas opciones) Configure una estación de trabajo local
<a name="both-options-set-up-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio de este patrón, ejecute el comando siguiente en la estación de trabajo local:<pre>git clone https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment.git<br />cd ASC-Deployment</pre> | AWS DevOps | 
| (Opción automatizada) Verifique los requisitos previos para la implementación. | Asegúrese de que los [requisitos previos](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs) estén completos para la implementación automática. | Propietario de la aplicación | 
| (Opción manual) Prepárese para la implementación de los AWS Supply Chain conjuntos de datos. | Para ir al `terraform-deployment` directorio de`ASC-Datasets`, ejecute el siguiente comando:<pre>cd ASC-Datasets/terraform-deployment</pre>Para asumir el rol ARN que se creó en los [requisitos previos](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), ejecute el siguiente comando:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Para configurar y exportar las variables de entorno, ejecute los siguientes comandos:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Datasets dir name><br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export AWS_USER_ROLE=<Enter user role ARN for AWS Console access and deployment><br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | AWS DevOps | 
| (Opción manual) Prepárese para gestionar los flujos de AWS Supply Chain integración durante la implementación. | Para ir al `terraform-deployment` directorio de`ASC-Integration-Flows`, ejecute el siguiente comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre>Para asumir el rol ARN que se creó anteriormente, ejecute el siguiente comando:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Para configurar y exportar las variables de entorno, ejecute los siguientes comandos:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Integration Flows dir name><br />export ASC_DATASET_VARS_REPO=<Enter Current ASC Datasets dir name>  #Must be the same directory name used for ASC Datasets deployment<br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | Propietario de la aplicación | 

### (Opción automatizada) Implemente AWS Supply Chain conjuntos de datos mediante los flujos de trabajo de GitHub Actions
<a name="automated-option-deploy-supplychain-datasets-using-github-actions-workflows"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copia el `ASC-Datasets` directorio. | Para copiar el `ASC-Datasets` directorio a una nueva ubicación, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configure el `ASC-Datasets` directorio. | Para configurarlo `ASC-Datasets` como un repositorio independiente en su organización, ejecute los siguientes comandos:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Datasets standalone repository"<br />git remote add origin <INSERT_ASC_DATASETS_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configure el nombre de la rama en el archivo de flujo de trabajo .github. | Configura el nombre de la rama en el archivo de flujo de trabajo de [implementación](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/asc-datasets.yml), como se muestra en el siguiente ejemplo:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Propietario de la aplicación | 
| Configure GitHub los entornos y configure los valores del entorno. | Para configurar GitHub los entornos de su GitHub organización, siga las instrucciones de [Configuración de GitHub los entornos](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-github-environments) del repositorio de este patrón.Para configurar [los valores del entorno en los](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) archivos de flujo de trabajo, siga las instrucciones de [Configurar los valores del entorno en los archivos de flujo](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) de trabajo del repositorio de este patrón. | Propietario de la aplicación | 
| Activa el flujo de trabajo. | Para introducir los cambios en su GitHub organización y activar el flujo de trabajo de implementación, ejecute el siguiente comando:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opción automatizada) Implemente flujos de AWS Supply Chain integración mediante flujos de trabajo de GitHub Actions
<a name="automated-option-deploy-supplychain-integration-flows-using-github-actions-workflows"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copia el `ASC-Integration-Flows` directorio. | Para copiar el `ASC-Integration-Flows` directorio a una nueva ubicación, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configure el `ASC-Integration-Flows` directorio. | Para configurar el `ASC-Integration-Flows` directorio como un repositorio independiente en su organización, ejecute los siguientes comandos:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Integration-Flows standalone repository"<br />git remote add origin <INSERT_ASC_Integration_Flows_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configure el nombre de la rama en el archivo de flujo de trabajo .github. | Configura el nombre de la rama en el archivo de flujo de trabajo de [implementación](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/asc-integration-flows.yml), como se muestra en el siguiente ejemplo:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Propietario de la aplicación | 
| Configure GitHub los entornos y configure los valores del entorno. | Para configurar GitHub los entornos de su GitHub organización, siga las instrucciones de [Configuración de GitHub los entornos](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) del repositorio de este patrón.Para configurar [los valores del entorno en los](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) archivos de flujo de trabajo, siga las instrucciones de [Configurar los valores del entorno en los archivos de flujo](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-environment-values-in-the-workflow-files) de trabajo del repositorio de este patrón. | Propietario de la aplicación | 
| Activa el flujo de trabajo. | Para introducir los cambios en su GitHub organización y activar el flujo de trabajo de implementación, ejecute el siguiente comando:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opción manual) Implemente AWS Supply Chain conjuntos de datos con Terraform
<a name="manual-option-deploy-supplychain-datasets-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Vaya al directorio `terraform-deployment `. | Para ir al `terraform-deployment` directorio de`ASC-Datasets`, ejecute el siguiente comando:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configure el bucket Amazon S3 del estado de Terraform. | Para configurar el bucket Amazon S3 del estado de Terraform, utilice el siguiente script:<pre># Setup terraform bucket<br />chmod +x ../scripts/setup-terraform.sh<br />../scripts/setup-terraform.sh</pre> | AWS DevOps | 
| Configure el bucket Amazon S3 de Terraform Artifacts. | Para configurar el bucket Amazon S3 de Terraform Artifacts, utilice el siguiente script:<pre># Setup terraform artifacts bucket<br />chmod +x ../scripts/setup-terraform-artifacts-bucket.sh<br />../scripts/setup-terraform-artifacts-bucket.sh</pre> | AWS DevOps | 
| Configure el backend y la configuración de los proveedores de Terraform. | Para configurar el backend y los proveedores de Terraform, utilice el siguiente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genere un plan de despliegue. | Para generar un plan de despliegue, ejecute los siguientes comandos:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Implemente las configuraciones. | Para implementar las configuraciones, ejecute el siguiente comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Actualice otras configuraciones y almacene los resultados. | Para actualizar las políticas AWS KMS clave y almacenar los resultados de las configuraciones aplicadas en el bucket Amazon S3 de Terraform Artifacts, ejecute los siguientes comandos:<pre># Update AWS Supply Chain KMS Key policy with the service's requirements<br />chmod +x ../scripts/update-asc-kms-policy.sh<br />../scripts/update-asc-kms-policy.sh<br /></pre><pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy.sh<br />../scripts/update-kms-policy.sh<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Opción manual) Implemente flujos AWS Supply Chain de integración de servicios mediante Terraform
<a name="manual-option-deploy-supplychain-service-integration-flows-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Vaya al directorio `terraform-deployment`. | Para ir al `terraform-deployment` directorio de`ASC-Integration-Flows`, ejecute el siguiente comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configure el backend y la configuración de los proveedores de Terraform. | Para configurar las configuraciones del backend y del proveedor de Terraform, utilice el siguiente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genere un plan de despliegue. | Para generar un plan de despliegue, ejecute los siguientes comandos. Estos comandos inicializan el entorno de Terraform, combinan las variables de configuración `ASC-Datasets` con las configuraciones de Terraform existentes y generan un plan de despliegue.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Implemente las configuraciones. | Para implementar las configuraciones, ejecute el siguiente comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Actualice otras configuraciones. | Para actualizar las políticas AWS KMS clave y almacenar los resultados de las configuraciones aplicadas en el bucket Amazon S3 de Terraform Artifacts, ejecute los siguientes comandos:<pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy-through-s3.sh<br />../scripts/update-kms-policy-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Ambas opciones) Ingiera datos
<a name="both-options-ingest-data"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cargue archivos CSV de muestra. | Para cargar archivos CSV de muestra para los conjuntos de datos, siga los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Ingeniero de datos | 

### (Ambas opciones) Configura el AWS Supply Chain acceso
<a name="both-options-set-up-supplychain-access"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configura el AWS Supply Chain acceso. | Para configurar el AWS Supply Chain acceso desde Consola de administración de AWS, siga los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Propietario de la aplicación | 

### (Opción automática) Limpie todos los recursos mediante los flujos de trabajo de GitHub Actions
<a name="automated-option-clean-up-all-resources-using-github-actions-workflows"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active el flujo de trabajo de destrucción de los recursos de los flujos de integración. | Active el [flujo de trabajo de destrucción](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/destroy-workflow.yml) `ASC-Integration-Flows` desde la rama de despliegue de su GitHub organización. | AWS DevOps | 
| Active el flujo de trabajo de destrucción de los recursos de conjuntos de datos. | Active el [flujo de trabajo de destrucción](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/destroy-workflow.yml) `ASC-Datasets` desde la rama de despliegue de su GitHub organización. | AWS DevOps | 

### (Opción manual) Limpie los recursos de los flujos de AWS Supply Chain integración con Terraform
<a name="manual-option-clean-up-resources-of-supplychain-integration-flows-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Vaya al directorio `terraform-deployment`. | Para ir al `terraform-deployment` directorio de`ASC-Integration-Flows`, ejecute el siguiente comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configure el backend y la configuración de los proveedores de Terraform. | Para configurar el backend y los proveedores de Terraform, utilice el siguiente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genere un plan de destrucción de infraestructura. | Para prepararse para la destrucción controlada de su AWS infraestructura mediante la generación de un plan de desmontaje detallado, ejecute los siguientes comandos. El proceso inicializa Terraform, incorpora configuraciones de AWS Supply Chain conjuntos de datos y crea un plan de destrucción que puede revisar antes de ejecutarlo.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Ejecute un plan de destrucción de la infraestructura. | Para ejecutar la destrucción planificada de su infraestructura, ejecute el siguiente comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Elimine las salidas de Terraform del bucket de Amazon S3. | Para eliminar el archivo de resultados que se cargó durante la implementación de`ASC-Integration-Flows`, ejecute el siguiente comando:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

### (Opción manual) Limpie los recursos de los conjuntos de datos de AWS Supply Chain servicios con Terraform
<a name="manual-option-clean-up-resources-of-supplychain-service-datasets-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Vaya al directorio `terraform-deployment`. | Para ir al `terraform-deployment` directorio de`ASC-Datasets`, ejecute el siguiente comando:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configure el backend y la configuración de los proveedores de Terraform. | Para configurar el backend y los proveedores de Terraform, utilice el siguiente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genere un plan de destrucción de infraestructura. | Para crear un plan para destruir los recursos del AWS Supply Chain conjunto de datos, ejecute los siguientes comandos:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Depósitos de Amazon S3 vacíos. | Para vaciar todos los depósitos de Amazon S3 (excepto el depósito de registro de acceso al servidor, para el que está configurado`force-destroy`), utilice el siguiente script:<pre># Delete S3 buckets excluding server access logging bucket<br />chmod +x ../scripts/empty-s3-buckets.sh<br />../scripts/empty-s3-buckets.sh tfplan.out</pre> | AWS DevOps | 
| Ejecute un plan de destrucción de la infraestructura. | Para ejecutar la destrucción planificada de la infraestructura de su AWS Supply Chain conjunto de datos mediante el plan generado, ejecute el siguiente comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Elimine las salidas de Terraform del depósito de artefactos de Terraform de Amazon S3. | Para completar el proceso de limpieza, elimine el archivo de resultados que se cargó durante la implementación de `ASC-Datasets` ejecutando el siguiente comando:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

## Resolución de problemas
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Un AWS Supply Chain conjunto de datos o un flujo de integración no se implementó correctamente debido a errores AWS Supply Chain internos o a la insuficiencia de permisos de IAM para la función de servicio. | En primer lugar, limpie todos los recursos. [A continuación, vuelva a implementar los recursos del AWS Supply Chain[conjunto de datos y, a continuación, vuelva a implementar los recursos](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/README.md) del AWS Supply Chain flujo de integración.](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/README.md) | 
| El flujo AWS Supply Chain de integración no busca los nuevos archivos de datos cargados para los conjuntos de datos. AWS Supply Chain  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | 

## Recursos relacionados
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-resources"></a>

**AWS documentación**
+ [AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)

**Otros recursos**
+ [Descripción de los flujos de trabajo de GitHub Actions](https://docs.github.com/en/actions/get-started/understand-github-actions) (GitHub documentación)

## Información adicional
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-additional"></a>

Esta solución se puede replicar para más conjuntos de datos y se puede consultar para su posterior análisis, a través de paneles prediseñados que se proporcionan con Amazon Quick Sight o mediante una integración AWS Supply Chain personalizada con Amazon Quick Sight. Además, puedes usar Amazon Q para hacer preguntas relacionadas con tu AWS Supply Chain instancia.

**Analice los datos con AWS Supply Chain Analytics**

Para obtener instrucciones sobre cómo configurar AWS Supply Chain Analytics, consulte [Configuración de AWS Supply Chain Analytics](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/setting_analytics.html) en la AWS Supply Chain documentación.

Este patrón demostró la creación de conjuntos de datos **Calendar** y **Outbound\$1Order\$1Line**. Para crear un análisis que utilice estos conjuntos de datos, siga los siguientes pasos:

1. Para analizar los conjuntos de datos, utilice el panel de análisis de **estacionalidad.** Para agregar el panel, siga los pasos que se indican en los [paneles prediseñados](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/prebuilt_dashboards.html) de la documentación. AWS Supply Chain 

1. Elija el panel para ver su análisis, que se basa en archivos CSV de muestra para los datos del calendario y los datos de las líneas de pedidos salientes.

El panel proporciona información sobre demanda a lo largo de los años en función de los datos ingeridos para los conjuntos de datos. Puede especificar además el ProductID, el CustomeriD, los años y otros parámetros para el análisis.

**Usa Amazon Q para hacer preguntas relacionadas con tu AWS Supply Chain instancia**

[Amazon Q in AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) es un asistente de IA generativa interactivo que le ayuda a gestionar su cadena de suministro de forma más eficiente. Amazon Q puede hacer lo siguiente:
+ Analice los datos de su lago AWS Supply Chain de datos.
+ Proporcione información operativa y financiera.
+ Responda a sus preguntas inmediatas sobre la cadena de suministro.

Para obtener más información sobre el uso de Amazon Q, consulte [Activación de Amazon Q AWS Supply Chain](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/enabling_QinASC.html) y [Uso de Amazon Q AWS Supply Chain in](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/using_QinASC.html) en la AWS Supply Chain documentación.

# Automatice la evaluación de recursos de AWS
<a name="automate-aws-resource-assessment"></a>

*Naveen Suthar, Arun Bagal, Manish Garg y Sandeep Gawande, Amazon Web Services*

## Resumen
<a name="automate-aws-resource-assessment-summary"></a>

Este patrón describe un enfoque automatizado para configurar las capacidades de evaluación de recursos mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html). Usando este patrón, los equipos de operaciones recopilan los detalles de auditoría de los recursos de forma automatizada y ven los detalles de todos los recursos implementados en una cuenta de AWS en un único panel. Esto resulta útil en los siguientes casos de uso:
+ Identificar las herramientas de infraestructura como código (IaC) y aislar los recursos creados por diferentes soluciones de IaC, como [HashiCorp Terraform](https://www.terraform.io/), [AWS CloudFormation, AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) CDK [y AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ Obtener información de auditoría de recursos

Esta solución también ayuda al equipo directivo a obtener información sobre los recursos y las actividades de una cuenta de AWS desde un único panel. 


| 
| 
| Nota: [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) es un servicio de pago. Antes de ejecutarlo para analizar los datos y crear un panel de control, consulta los [precios de Amazon Quick Sight](https://aws.amazon.com/quicksight/pricing/). | 
| --- |

## Requisitos previos y limitaciones
<a name="automate-aws-resource-assessment-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Roles y permisos de AWS Identity and Access Management (IAM) con acceso a recursos de aprovisionamiento
+ [Una [cuenta Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html) creada con acceso a [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) y Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ Se ha instalado la versión 2.55.1 o posterior de AWS CDK 
+ Se ha instalado la versión 3.9 o posterior de [Python](https://www.python.org/downloads/release/python-390/)

**Limitaciones**
+ Esta solución se implementa en una única cuenta de AWS.
+ La solución no rastreará los eventos que ocurrieron antes de su implementación, a menos que AWS ya CloudTrail estuviera configurado y almacenando datos en un bucket de S3.

**Versiones de producto**
+ CDK de AWS, versión 2.55.1 o posterior
+ Python, versión 3.9 o posterior

## Arquitectura
<a name="automate-aws-resource-assessment-architecture"></a>

**Pila de tecnología de destino**
+ Amazon Athena
+ AWS CloudTrail
+ AWS Glue
+ AWS Lambda
+ Amazon Quick Suite
+ Amazon S3

**Arquitectura de destino**

El código de AWS CDK implementará todos los recursos necesarios para configurar las capacidades de evaluación de recursos en una cuenta de AWS. El siguiente diagrama muestra el proceso de envío de CloudTrail registros a AWS Glue, Amazon Athena y Quick Sight.

![\[Evaluación de recursos de AWS con AWS Glue, Amazon Athena y Amazon QuickSight en un proceso de seis pasos.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a504774e-db7a-4c36-a22c-ce56d252fb58/images/8f2b549d-33a8-4cbf-86fd-33244716b668.png)


1. CloudTrail envía los registros a un depósito de S3 para su almacenamiento.

1. Una notificación de evento invoca una función de Lambda que procesa los registros y genera datos filtrados.

1. Los datos filtrados se almacenan en otro bucket de S3.

1. Se configura un rastreador de AWS Glue en los datos filtrados del bucket de S3 para crear un esquema en la tabla del catálogo de datos de AWS Glue.

1. Los datos filtrados están listos para que Amazon Athena los consulte.

1. Quick Sight accede a los datos consultados para su visualización.

**Automatización y escala**
+ Esta solución se puede escalar de una cuenta de AWS a varias cuentas de AWS si existe un registro que abarque a toda la organización en AWS CloudTrail Organizations. CloudTrail Al implementarla a nivel organizacional, también puede usar esta solución para obtener detalles de auditoría de recursos para todos los recursos necesarios.
+ Este patrón emplea recursos sin servidor de AWS para implementar la solución.

## Tools (Herramientas)
<a name="automate-aws-resource-assessment-tools"></a>

**Servicios de AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) es un servicio de consultas interactivo que facilita el análisis de datos en Amazon S3 con SQL estándar.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) le CloudTrail ayuda a auditar la gobernanza, el cumplimiento y el riesgo operativo de su cuenta de AWS.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) es un servicio de extracción, transformación y carga (ETL) completamente administrado. Ayuda a clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos. Este patrón emplea un rastreador de AWS Glue y una tabla del catálogo de datos de AWS Glue.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) es un servicio de inteligencia empresarial (BI) a escala de nube que le ayuda a visualizar, analizar y elaborar informes sobre sus datos en un único panel de control.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Repositorio de código**

El código de este patrón está disponible en el GitHub [infrastructure-assessment-iac-automation](https://github.com/aws-samples/infrastructure-assessment-iac-automation)repositorio.

El repositorio de código contiene los siguientes archivos y carpetas:
+ Carpeta `lib` – los archivos Python de constructo de AWS CDK usados para crear los recursos de AWS
+ `src/lambda_code` – El código Python que se ejecuta en la función de Lambda
+ `requirements.txt` – La lista de todas las dependencias de Python que se deben instalar
+ `cdk.json` – El archivo de entrada que proporciona los valores necesarios para activar los recursos

## Prácticas recomendadas
<a name="automate-aws-resource-assessment-best-practices"></a>

Configure la supervisión y las alertas para las funciones de Lambda de AWS. Para obtener más información, consulte [Supervisión y solución de problemas de funciones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Para obtener más información sobre las prácticas recomendadas generales en el uso de funciones de Lambda, consulte la [documentación de AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Epics
<a name="automate-aws-resource-assessment-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio en su máquina local. | Para clonar el repositorio, ejecute el comando `git clone https://github.com/aws-samples/infrastructure-assessment-iac-automation.git`. | AWS DevOps, DevOps ingeniero | 
| Configure el entorno virtual de Python e instale las dependencias necesarias. | Para configurar y activar el entorno virtual de Python, ejecute el siguiente comando.<pre>cd infrastructure-assessment-iac-automation<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Ejecute el comando `pip install -r requirements.txt` para configurar las dependencias necesarias. | AWS DevOps, DevOps ingeniero | 
| Configure el entorno de AWS CDK y sintetice el código de AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingeniero | 

### Configuración de las credenciales de AWS en su máquina local
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Exporte las variables de cuenta y región en las que se implementará la pila. | Para proporcionar las credenciales de AWS para AWS CDK mediante variables de entorno, ejecute los siguientes comandos.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | AWS DevOps, DevOps ingeniero | 
| Configure el perfil de AWS CLI. | Para configurar el perfil de AWS CLI para la cuenta, siga las instrucciones de la [documentación de AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | AWS DevOps, DevOps ingeniero | 

### Configure e implemente la herramienta de evaluación de recursos
<a name="configure-and-deploy-the-resource-assessment-tool"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar recursos en la cuenta. | Para implementar recursos en la cuenta de AWS mediante AWS CDK, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps | 
| Ejecute el rastreador de AWS Glue y cree la tabla del catálogo de datos. | El [rastreador de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) se usa para mantener el esquema de datos dinámico. La solución crea y actualiza las particiones en la [tabla del catálogo de datos de AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html), ejecutando el rastreador periódicamente según lo definido en el programador de rastreo de AWS Glue. Una vez que los datos estén disponibles en el bucket de S3 de salida, siga estos pasos para ejecutar el rastreador de AWS Glue y crear el esquema de la tabla del catálogo de datos para realizar las pruebas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)El código de AWS CDK configura el rastreador de AWS Glue para que se ejecute en un momento determinado, pero también puede ejecutarlo bajo demanda. | AWS DevOps, DevOps ingeniero | 
| Implemente la construcción Quick Sight. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingeniero | 
| Cree el panel de control de Quick Sight. | Para crear el panel y el análisis de Quick Sight de ejemplo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Para obtener más información, consulte [Inicio de un análisis en Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/creating-an-analysis.html) y [Tipos visuales en Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/working-with-visual-types.html). | AWS DevOps, DevOps ingeniero | 

### Limpie todos los recursos de AWS de la solución
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingeniero | 

### Configure funciones adicionales además de la automatización de la herramienta de evaluación de recursos de AWS
<a name="set-up-additional-features-on-top-of-the-aws-resource-assessment-tool-automation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Supervise y limpie los recursos creados manualmente. | (Opcional) Si su organización tiene requisitos de conformidad para crear recursos con las herramientas de IaC, puede satisfacerlos automatizando las herramientas de evaluación de recursos de AWS para obtener los recursos aprovisionados manualmente. También puede usar la herramienta para importar los recursos a una herramienta de IaC o volver a crearlos. Realice las siguientes tareas de alto nivel para supervisar los recursos aprovisionados de manera manual:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingeniero | 

## Resolución de problemas
<a name="automate-aws-resource-assessment-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| AWS CDK devuelve errores. | Para obtener ayuda con los errores de AWS CDK, consulte [Solución de problemas comunes de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 

## Recursos relacionados
<a name="automate-aws-resource-assessment-resources"></a>
+ [Creación de funciones de Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Introducción a AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Utilización de AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Creando un CloudTrail registro](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [Comience con Amazon Quick Sight](https://aws.amazon.com/quicksight/getting-started/)

## Información adicional
<a name="automate-aws-resource-assessment-additional"></a>

**Cuentas múltiples**

Para configurar la credencial de AWS CLI para múltiples cuentas, use los perfiles de AWS. Para obtener más información, consulte la sección *Configurar varios perfiles* en [Configurar AWS CLI](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/).

**Comandos de AWS CDK**

Cuando trabaje con AWS CDK, recuerde los siguientes comandos útiles:
+ Muestra todas las pilas de la aplicación

  ```
  cdk ls
  ```
+ Emite la plantilla de AWS CloudFormation sintetizada

  ```
  cdk synth
  ```
+ Implementa la pila en la cuenta y región de AWS predeterminadas

  ```
  cdk deploy
  ```
+ Compara la pila implementada con el estado actual

  ```
  cdk diff
  ```
+ Abre la documentación de AWS CDK

  ```
  cdk docs
  ```

# Instalar sistemas SAP automáticamente mediante herramientas de código abierto
<a name="install-sap-systems-automatically-by-using-open-source-tools"></a>

*Guilherme Sesterheim, Amazon Web Services*

## Resumen
<a name="install-sap-systems-automatically-by-using-open-source-tools-summary"></a>

Este patrón muestra cómo automatizar la instalación de sistemas SAP mediante el uso de herramientas de código abierto para crear los recursos siguientes:
+ Una base de datos SAP S/4HANA 1909
+ Una instancia de SAP ABAP Central Services (ASCS)
+ Una instancia de servidor principal de aplicaciones (PAS) de SAP

HashiCorp Terraform crea la infraestructura del sistema SAP y Ansible configura el sistema operativo (SO) e instala las aplicaciones SAP. Jenkins ejecuta la instalación.

Con esta configuración, la instalación de sistemas SAP se convierte en un proceso repetible, lo que puede ayudar a aumentar la eficiencia y la calidad de la implementación.

**nota**  
El código de ejemplo que se proporciona en este patrón funciona tanto para sistemas de alta disponibilidad (HA) como para sistemas que no lo son.

## Requisitos previos y limitaciones
<a name="install-sap-systems-automatically-by-using-open-source-tools-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un bucket de Amazon Simple Storage Service (Amazon S3) que contenga todos sus archivos multimedia de SAP
+ Una entidad principal de Identity and Access Management (IAM) de AWS con una [clave de acceso y una clave secreta](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) y con los siguientes permisos:
  + **Permisos de solo lectura:** Amazon Route 53, AWS Key Management Service (AWS KMS)
  + **Permisos de lectura y escritura:** Amazon S3, Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic File System (Amazon EFS), IAM, Amazon CloudWatch, Amazon DynamoDB
+ Una [zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) de Route 53
+ Una suscripción a [Red Hat Enterprise Linux para SAP con Imagen de máquina de Amazon (AMI) de alta disponibilidad y Update Services 8.2](https://aws.amazon.com/marketplace/pp/prodview-5grz5a5thx7c2) en Amazon Marketplace
+ Una [clave gestionada de cliente de AWS KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-keys)
+ Un [par de claves Secure Shell (SSH)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
+ **Un [grupo de EC2 seguridad de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html) que permite la conexión SSH en el puerto 22 desde el nombre de host donde instalas Jenkins (lo más probable es que el nombre de host sea localhost)**
+ [Vagrant by instalado y configurado](https://www.vagrantup.com/) HashiCorp 
+ [VirtualBox](https://www.virtualbox.org/)instalado y configurado por Oracle
+ Familiaridad con Git, Terraform, Ansible y Jenkins

**Limitaciones**
+ Solamente SAP S/4HANA 1909 se ha probado completamente para este escenario específico. El código de Ansible de ejemplo de este patrón requiere modificaciones si utiliza otra versión de SAP HANA.
+ El procedimiento de ejemplo de este patrón funciona para los sistemas operativos Mac y Linux. Algunos de los comandos solo se pueden ejecutar en terminales basados en Unix. Sin embargo, puede lograr un resultado similar utilizando diferentes comandos y un sistema operativo Windows.

**Versiones de producto**
+ SAP S/4HANA 1909
+ Red Hat Enterprise Linux (RHEL) versión 8.2 o posterior

## Arquitectura
<a name="install-sap-systems-automatically-by-using-open-source-tools-architecture"></a>

El diagrama siguiente muestra un ejemplo de flujo de trabajo que utiliza herramientas de código abierto para automatizar la instalación de sistemas SAP en una cuenta de AWS:

![\[En el ejemplo de flujo de trabajo se utilizan herramientas de código abierto para automatizar la instalación de sistemas SAP en una cuenta de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/aaf11dac-38cc-4e89-be86-51d4409cf238/images/d7902f9d-f1be-461f-b69b-cf3c663c8f2f.png)


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

1. Jenkins orquesta la instalación del sistema SAP mediante la ejecución del código de Terraform y Ansible.

1. El código de Terraform crea la infraestructura del sistema SAP.

1. El código de Ansible configura el sistema operativo e instala las aplicaciones SAP.

1. En una instancia de Amazon se instalan una base de datos SAP S/4HANA 1909, una instancia de ASCS y una instancia de PAS que incluyen todos los requisitos previos definidos. EC2 

**nota**  
El ejemplo de configuración de este patrón crea automáticamente un bucket de Amazon S3 en su cuenta de AWS para almacenar el archivo de estado de Terraform.

**Pila de tecnología**
+ Terraform
+ Ansible
+ Jenkins
+ Una base de datos SAP S/4HANA 1909
+ Una instancia de SAP ASCS
+ Una instancia de SAP PAS
+ Amazon EC2 

## Tools (Herramientas)
<a name="install-sap-systems-automatically-by-using-open-source-tools-tools"></a>

**Servicios de AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) proporciona capacidad informática escalable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) le ayuda a crear y controlar claves criptográficas para proteger sus datos.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le permite lanzar recursos de AWS en una red virtual que haya definido. Esta red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.

**Otras herramientas**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una aplicación de interfaz de línea de comandos que le ayuda a usar código para aprovisionar y administrar la infraestructura y los recursos de la nube.
+ [Ansible](https://www.ansible.com/) es una herramienta de código abierto de configuración como código (CaC) que ayuda a automatizar las aplicaciones, las configuraciones y la infraestructura de TI.
+ [Jenkins](https://www.jenkins.io/) es un servidor de código abierto de automatización que permite a los desarrolladores crear, probar e implementar su software.

**Código**

[El código de este patrón está disponible en el repositorio -jenkins-ansible. GitHub aws-install-sap-with](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible)

## Epics
<a name="install-sap-systems-automatically-by-using-open-source-tools-epics"></a>

### Configurar los requisitos previos
<a name="configure-the-prerequisites"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada sus archivos multimedia SAP a un bucket de Amazon S3. | [Cree un bucket de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) que contenga todos sus archivos multimedia SAP.Asegúrese de seguir la jerarquía de carpetas de AWS Launch Wizard para **S/4HANA** en la [documentación de Launch Wizard](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sap-software-install-details.html). | Administrador de la nube | 
| Instala. VirtualBox | Instalación y configuración [VirtualBox](https://www.virtualbox.org/)por parte de Oracle. | DevOps ingeniero | 
| Instalar Vagrant. | Instale y configure [Vagrant mediante.](https://www.vagrantup.com/) HashiCorp | DevOps ingeniero | 
| Configurar su cuenta de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | AWS general | 

### Crear y ejecutar su instalación de SAP
<a name="build-and-run-your-sap-installation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el repositorio de código desde. GitHub | Clona el repositorio [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible) en. GitHub | DevOps ingeniero | 
| Inicie el servicio de Jenkins. | Abra la terminal de Linux. A continuación, navegue hasta la carpeta local que contiene la carpeta del repositorio de código clonado y ejecute el comando siguiente:<pre>sudo vagrant up</pre>Jenkins tarda unos 20 minutos en iniciarse. El comando devuelve el mensaje **Service is up and running (El servicio está funcionando)** cuando el funcionamiento es correcto. | DevOps ingeniero | 
| Abra Jenkins en un navegador web e inicie sesión. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | DevOps ingeniero | 
| Configure los parámetros de instalación de su sistema SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Puede configurar los demás parámetros no obligatorios según sea necesario, en función de su caso de uso. Así, por ejemplo, puede cambiar el ID del sistema SAP (SID) de las instancias, la contraseña predeterminada, los nombres y las etiquetas del sistema SAP. Todas las variables obligatorias muestran **Required** (Obligatoria) al principio de sus nombres. | Administrador de sistemas de AWS, DevOps ingeniero | 
| Ejecute la instalación de su sistema SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Para obtener información sobre los pasos del proceso, consulte la sección **Understanding the pipeline steps** (Comprender los pasos del proceso)[ de Automating SAP installation with open-source tools](https://aws.amazon.com/blogs/awsforsap/automating-sap-installation-with-open-source-tools/) (Automatizar la instalación de SAP con herramientas de código abierto) en el blog de AWS.Si se produce un error, mueva el cursor sobre el cuadro de error rojo que aparece y seleccione **Registros**. Aparecen los registros del paso del proceso en el que se produjo el error. La mayoría de los errores se producen debido a una configuración de parámetros incorrecta. | DevOps ingeniero, administrador de sistemas de AWS | 

## Recursos relacionados
<a name="install-sap-systems-automatically-by-using-open-source-tools-resources"></a>
+ [DevOps para SAP: instalación de SAP: de 2 meses a 2 horas](https://videos.itrevolution.com/watch/707351918/) (videoteca de DevOps Enterprise Summit)

# Automatice la implementación de productos y la cartera de AWS Service Catalog mediante AWS CDK
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk"></a>

*Sandeep Gawande, Viyoma Sachdeva y RAJNEESH TYAGI, Amazon Web Services*

## Resumen
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-summary"></a>

AWS Service Catalog le ayuda a administrar de forma centralizada los catálogos de servicios de TI o *productos* aprobados para su uso en el entorno de AWS de su organización. La *cartera* es una colección de productos que, además, contiene información de configuración. Con AWS Service Catalog, puede crear una cartera de productos personalizada para cada tipo de usuario de su organización y conceder acceso a la cartera de productos apropiada. Después, esos usuarios pueden implementar rápidamente cualquier producto que necesiten de la cartera.

Si tiene una infraestructura de red compleja, como arquitecturas en múltiples regiones y cuentas, se recomienda crear y administrar las carteras de Service Catalog en una única cuenta centralizada. Este patrón describe cómo usar AWS Cloud Development Kit (AWS CDK) para automatizar la creación de carteras de Service Catalog en una cuenta central, conceder a los usuarios finales acceso a ellas y, opcionalmente, aprovisionar productos en una o más cuentas de AWS de destino. Esta ready-to-use solución crea las carteras de Service Catalog en la cuenta de origen. También, de forma opcional, aprovisiona los productos en las cuentas de destino mediante AWS CloudFormation stacks y le ayuda a TagOptions configurarlos:
+ **AWS CloudFormation StackSets**: puede utilizarlos StackSets para lanzar productos de Service Catalog en varias regiones y cuentas de AWS. La implementación de esta solución le permite aprovisionar productos automáticamente. Para obtener más información, consulte [Uso de AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html) (documentación de Service Catalog) y [StackSets conceptos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentación).
+ **TagOption biblioteca**: puede administrar las etiquetas de los productos aprovisionados mediante la TagOption biblioteca. A *TagOption*es un par clave-valor administrado en AWS Service Catalog. No es una etiqueta de AWS, pero sirve como plantilla para crear una etiqueta de AWS basada en TagOption. Para obtener más información, consulte la [TagOption biblioteca](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/tagoptions.html) (documentación de Service Catalog).

## Requisitos previos y limitaciones
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa que quiera usar como cuenta de supervisión para administrar carteras de Service Catalog.
+ Si usa esta solución para aprovisionar productos en una o más cuentas de destino, la cuenta de destino debe existir ya y estar activa.
+ Permisos de AWS Identity and Access Management (IAM) para acceder a AWS Service Catalog CloudFormation, AWS y AWS IAM.

**Versiones de producto**
+ AWS CDK versión 2.27.0

## Arquitectura
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-architecture"></a>

**Pila de tecnología de destino**
+ Carteras de Service Catalog en una cuenta de AWS centralizada
+ Productos de Service Catalog implementados en la cuenta de destino

**Arquitectura de destino**

![\[AWS CDK crea carteras de Service Catalog y aprovisiona productos en la cuenta de destino.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e8f217a7-aec4-4c85-8f6b-f91995506be0/images/1f027b82-14c3-485a-909b-1544e974b90a.png)


1. En la cuenta de cartera (u *origen*), debe actualizar el archivo **config.json** con la información de la cuenta de AWS, la región de AWS, el rol de IAM, la cartera y el producto para su caso de uso.

1. Implemente la aplicación AWS CDK.

1. La aplicación AWS CDK asume el rol de IAM de implementación y crea las carteras y los productos de Service Catalog definidos en el archivo **config.json**.

   Si ha configurado StackSets la implementación de productos en una cuenta de destino, el proceso continúa. Si no lo configuraste StackSets para aprovisionar ningún producto, el proceso está completo.

1. La aplicación AWS CDK asume la función de **StackSet administrador** e implementa el conjunto de CloudFormation pilas de AWS que definió en el archivo **config.json**.

1. En la cuenta de destino, StackSets asume la función de **StackSet ejecución y aprovisiona** los productos.

## Tools (Herramientas)
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la infraestructura de la nube de AWS en código.
+ El [Kit de herramientas de AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) es un kit de desarrollo en la nube de línea de comandos que le ayuda a interactuar con su aplicación AWS CDK.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) le ayuda a administrar de forma centralizada los catálogos de servicios de TI aprobados para AWS. 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.

**Repositorio de código**

El código de este patrón está disponible en GitHub, en el [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git)repositorio. El repositorio de código contiene los siguientes archivos y carpetas:
+ **cdk-sevicecatalog-app**— Esta carpeta contiene la aplicación AWS CDK para esta solución.
+ **config**: esta carpeta contiene el archivo **config.json** y la CloudFormation plantilla para implementar los productos de la cartera de Service Catalog.
+ **config/config.json**: este archivo contiene toda la información de configuración. Actualice este archivo para personalizar esta solución según su caso de uso.
+ **config/templates**: esta carpeta contiene las CloudFormation plantillas de los productos de Service Center.
+ **setup.sh**: este script implementa la solución.
+ **uninstall.sh**: este script elimina la pila y todos los recursos de AWS creados al implementar esta solución.

Para usar el código de muestra, siga las instrucciones en sección [Epics](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics).

## Prácticas recomendadas
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-best-practices"></a>
+ Los roles de IAM usados para implementar esta solución deben cumplir con el [principio de privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentación de IAM).
+ Respete las [Prácticas recomendadas para desarrollar aplicaciones en la nube con AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (publicación del blog de AWS).
+ Siga las [prácticas CloudFormation recomendadas de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) (CloudFormation documentación).

## Epics
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale el kit de herramientas de AWS CDK. | Asegúrese de tener instalado el kit de herramientas de AWS CDK. Ejecute el siguiente comando para confirmar si está instalado y verifique la versión. <pre>cdk --version</pre>Si el kit de herramientas de AWS CDK no está instalado, ejecute el siguiente comando para instalarlo.<pre>npm install -g aws-cdk@2.27.0</pre>Si la versión del kit de herramientas de AWS CDK es anterior a la 2.27.0, ejecute el siguiente comando para actualizarla a la versión 2.27.0.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingeniero | 
| Clonar el repositorio. | Escriba el siguiente comando. En *Clonar el repositorio*, en la sección [Información adicional](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional), puede copiar el comando completo que contiene la URL del repositorio. Esto clona el [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation)repositorio desde GitHub.<pre>git clone <repository-URL>.git</pre>Se creará la carpeta `cd aws-cdk-servicecatalog-automation` en el directorio de destino. Ejecute el siguiente comando para navegar a esta carpeta.<pre>cd aws-cdk-servicecatalog-automation</pre> | AWS DevOps, DevOps ingeniero | 
| Configure las credenciales de AWS. | Introduzca los comandos siguientes. Se exportan las siguientes variables, que definen la cuenta y la región de AWS en las que se va a implementar la pila.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Las credenciales de AWS para AWS CDK se proporcionan a través de variables de entorno. | AWS DevOps, DevOps ingeniero | 
| Configurar permisos de roles de IAM para usuarios finales. | Si va a usar roles de IAM para conceder acceso a la cartera y a los productos que contiene, estos roles deben tener permisos para que los asuma la entidad principal **servicecatalog.amazonaws.com**. Para obtener instrucciones sobre cómo conceder estos permisos, consulte [Habilitar acceso de confianza con Service Catalog](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-servicecatalog.html#integrate-enable-ta-servicecatalog) (documentación de AWS Organizations). | AWS DevOps, DevOps ingeniero | 
| Configure las funciones de IAM requeridas por StackSets. | Si va StackSets a aprovisionar automáticamente los productos en las cuentas de destino, debe configurar las funciones de IAM que administran y ejecutan el conjunto apilado.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS DevOps, DevOps ingeniero | 

### Personalice e implemente la solución
<a name="customize-and-deploy-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea las CloudFormation plantillas. | En la `config/templates` carpeta, crea CloudFormation plantillas para cualquier producto que desees incluir en tus carteras. Para obtener más información, consulte [Trabajar con CloudFormation plantillas de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) (CloudFormation documentación). | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 
| Personalice el archivo de configuración. | En la carpeta `config`, abra el archivo **config.json** y defina los parámetros según corresponda a su caso de uso. Los siguientes parámetros son obligatorios a menos que se indique lo contrario:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Para ver un ejemplo de un archivo de configuración completo, consulte el *Ejemplo de archivo de configuración* en la sección [Información adicional](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional). | Desarrollador de aplicaciones, DevOps ingeniero, AWS DevOps | 
| Implemente la solución. | Escriba el siguiente comando. Esto implementa la aplicación AWS CDK y aprovisiona las carteras y productos de Service Catalog, tal y como se especifica en el archivo **config.json**.<pre>sh +x setup.sh</pre> | Desarrollador de aplicaciones, DevOps ingeniero, AWS DevOps | 
| Comprobar la implementación. | Compruebe que la implementación se ha realizado correctamente de la siguiente manera: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS general | 
| (Opcional) Actualice las carteras y los productos. | Si desea usar esta solución para actualizar las carteras o los productos, o para aprovisionar nuevos productos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Por ejemplo, puede añadir carteras adicionales o aprovisionar más recursos. La aplicación AWS CDK implementará solo los cambios. Si no hay cambios en las carteras o los productos implementados anteriormente, la reimplementación no les afectará. | Desarrollador de aplicaciones, DevOps ingeniero, AWS general | 

### Elimine la solución
<a name="clean-up-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| (Opcional) Elimine los recursos de AWS implementados por esta solución. | Si desea eliminar un producto aprovisionado, siga las instrucciones de [Eliminar productos aprovisionados](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) (documentación de Service Catalog).Si desea eliminar todos los recursos creados por esta solución, ejecute el siguiente comando.<pre>sh uninstall.sh</pre> | AWS DevOps, DevOps ingeniero, desarrollador de aplicaciones | 

## Recursos relacionados
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-resources"></a>
+ [Biblioteca de constructos de AWS Service Catalog](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) (referencia de API de AWS)
+ [StackSets conceptos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentación)
+ [AWS Service Catalog](https://aws.amazon.com/servicecatalog) (marketing de AWS)
+ [Uso de Service Catalog con AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US/4-builders-devs/sc-cdk) (taller de AWS)

## Información adicional
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional"></a>

**Clone el repositorio**

Introduzca el siguiente comando desde el que desea clonar el repositorio GitHub.

```
git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git
```

**Ejemplo de archivo de configuración**

El siguiente es un archivo de muestra **config.json** con valores de ejemplo.

```
{
    "portfolios": [
        {
            "displayName": "EC2 Product Portfolio",
            "providerName": "User1",
            "description": "Test1",
            "roles": [
                "<Names of IAM roles that can access the products>"
            ],
            "users": [
                "<Names of IAM users who can access the products>"
            ],
            "groups": [
                "<Names of IAM user groups that can access the products>"
            ]
        },
        {
            "displayName": "Autoscaling Product Portfolio",
            "providerName": "User2",
            "description": "Test2",
            "roles": [
                "<Name of IAM role>"
            ]
        }
    ],
    "tagOption": [
        {
            "key": "Group",
            "value": [
                "finance",
                "engineering",
                "marketing",
                "research"
            ]
        },
        {
            "key": "CostCenter",
            "value": [
                "01",
                "02",
                "03",
                "04"
            ]
        },
        {
            "key": "Environment",
            "value": [
                "dev",
                "prod",
                "stage"
            ]
        }
    ],
    "products": [
        {
            "portfolioName": "EC2 Product Profile",
            "productName": "Ec2",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template1.json"
        },
        {
            "portfolioName": "Autoscaling Product Profile",
            "productName": "autoscaling",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template2.json",
            "deployWithStackSets": {
                "accounts": [
                    "012345678901",
                ],
                "regions": [
                    "us-west-2"
                ],
                "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole",
                "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole"
            }
        }
    ]
}
```

# Automatice la gestión dinámica de canalizaciones para implementar soluciones de hotfix en entornos de Gitflow mediante el uso y AWS Service Catalog AWS CodePipeline
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions"></a>

*Balaji Vedagiri, Faisal Shahdad, Shanmugam Shanker y Vivek Thangamuthu, Amazon Web Services*

## Resumen
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-summary"></a>

**nota**  
AWS CodeCommit ya no está disponible para nuevos clientes. Los clientes actuales de AWS CodeCommit pueden seguir utilizando el servicio con normalidad. [Más información](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider)

Este patrón aborda un escenario en el que se administra una canalización de revisiones dinámica que se dedica exclusivamente a implementar de forma segura soluciones de revisión en un entorno de producción. La solución se implementa y administra mediante una AWS Service Catalog cartera y un producto. Se utiliza una EventBridge regla de Amazon para la automatización de eventos. Las restricciones se imponen mediante el uso de las restricciones de la cartera de Service Catalog y los roles de AWS Identity and Access Management (IAM) para los desarrolladores. Solo una AWS Lambda función puede lanzar el producto Service Catalog, activada por la EventBridge regla. Este patrón está diseñado para entornos con una configuración específica de Gitflow, que se describe en [Información adicional](#automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional).

Por lo general, se implementa una revisión para abordar problemas críticos o de seguridad notificados en un entorno activo, como el de producción. Las revisiones se deben implementar directa y únicamente en los entornos de prueba y producción. Las canalizaciones de prueba y producción se utilizan ampliamente en las solicitudes de desarrollo habituales. Estas canalizaciones no se pueden usar para implementar revisiones, porque ya hay características de control de calidad activas que no se pueden pasar a la fase de producción. Para publicar revisiones, este patrón describe un proceso dinámico y de corta duración con las siguientes características de seguridad:
+ **Creación automática**: cada vez que se crea una rama de revisiones en un repositorio, se crea automáticamente una AWS CodeCommit canalización de revisiones. 
+ **Restricciones de acceso**: los desarrolladores no tienen acceso para crear esta canalización fuera del proceso de revisión. 
+ **Etapa controlada**: la canalización tiene una etapa controlada con un token de acceso especial, lo que garantiza que una solicitud de extracción (PR) solo se pueda crear una vez. 
+ **Etapas de aprobación**: las etapas de aprobación se incluyen en la canalización para obtener las aprobaciones necesarias de las partes interesadas pertinentes. 
+ **Eliminación automática**: la canalización de revisiones se elimina automáticamente cada vez que se elimina una `hotfix` rama del CodeCommit repositorio después de fusionarla con un PR. 

## Requisitos previos y limitaciones
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-prereqs"></a>

**Requisitos previos **
+ Se Cuentas de AWS requieren tres activos, de la siguiente manera:
  + Cuenta de herramientas: para la configuración de integración y entrega continuas (CI/CD).
  + Cuenta de etapa: para realizar pruebas de aceptación por parte de los usuarios.
  + Cuenta de producción: para un usuario final de empresa.
  + (Opcional) Agregue una Cuenta de AWS para que actúe como una cuenta de control de calidad. Esta cuenta es necesaria si desea disponer tanto de una configuración de canalización principal, incluido el control de calidad, como de una solución de canalización con revisiones para realizar pruebas.
+ Una AWS CloudFormation pila con la condición opcional de implementarla en la cuenta de control de calidad mediante la canalización principal, si es necesario. El patrón aún se puede probar sin la configuración de la canalización principal; para ello, solo debe crear y eliminar una rama de `hotfix`.
+ Un depósito de Amazon Simple Storage Service (Amazon S3) para almacenar CloudFormation las plantillas que se utilizan para crear los productos del Service Catalog.
+ Cree reglas de aprobación de relaciones públicas para el CodeCommit repositorio de acuerdo con los requisitos de conformidad (después de crear el repositorio).
+ Restrinja los permisos de IAM de los desarrolladores y líderes de equipo para denegar la ejecución de la función de Lambda [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55), ya que solo debe invocarse desde la canalización.

**Limitaciones**
+ El CloudFormation proveedor se utiliza en la fase de despliegue y la aplicación se despliega mediante un conjunto de CloudFormation cambios. Si desea utilizar una opción de implementación diferente, modifique la CodePipeline pila según sea necesario.
+ Este patrón utiliza AWS CodeBuild y otros archivos de configuración para implementar un microservicio de muestra. Si tiene un tipo de carga de trabajo diferente (por ejemplo, cargas de trabajo sin servidor), debe actualizar todas las configuraciones pertinentes.
+ Este patrón despliega la aplicación en un solo extremo Región de AWS (por ejemplo, US-east-1 de EE. UU. Este (Virginia del Norte)). Cuentas de AWS Para realizar la implementación en varias regiones, cambie la referencia a la región en los comandos y las pilas.
+ Algunas Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte [AWS services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-architecture"></a>

Los diagramas de esta sección proporcionan los flujos de trabajo para los eventos de creación y eliminación del ciclo de vida.

![\[Flujo de trabajo para crear un evento de ciclo de vida.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/3939f77c-4221-4c23-a3a1-3e8a294b2b32.png)


El diagrama anterior para crear un evento de ciclo de vida muestra lo siguiente:

1. El desarrollador crea una `hotfix-*` rama en el CodeCommit repositorio para desarrollar una solución relacionada con las revisiones.

1. El evento `hotfix-*` de creación de sucursales se captura mediante la EventBridge regla. Los detalles del evento incluyen los nombres del repositorio y de la sucursal.

1. La EventBridge regla invoca la AWS Lambda función. `hotfix-lambda-function` La EventBridge regla pasa la información del evento a la función Lambda como entrada.

1. La función de Lambda procesa la entrada para recuperar los nombres del repositorio y de la rama. Activa el producto de Service Catalog con los valores recuperados de la entrada procesada.

1. El producto de Service Catalog incluye una configuración de canalización que implementará la solución en los entornos de etapa y producción. El bloque de canalización incluye las etapas de origen, compilación e implementación. Además, hay una etapa de aprobación manual para favorecer la implementación en el entorno de producción.

1. La etapa de origen recupera el código del repositorio y la rama de `hotfix-*` que se crearon en el primer paso. El código se pasa a la fase de compilación a través de un bucket de Amazon S3 para artefactos. En la etapa de compilación, se crea una imagen de contenedor que incluye la revisión que se ha desarrollado en la rama de `hotfix-*` y se ha agregado a Amazon Elastic Container Registry (Amazon ECR).

1. La etapa de implementación en el entorno de la etapa actualiza Amazon Elastic Container Service (Amazon ECS) con la imagen del contenedor más reciente que incluye la revisión. El hotfix se implementa mediante la creación y ejecución de un conjunto de CloudFormation cambios.

1. La función de Lambda `prcreation-lambda` se invoca después de una implementación correcta en el entorno de etapa. Esta función de Lambda crea una PR desde la rama de `hotfix-*` hacia las ramas `develop` y `main` del repositorio. La función de Lambda garantiza que la solución desarrollada en la rama de `hotfix-*` se fusione e incluya en las implementaciones posteriores.

1. Una etapa de aprobación manual ayuda a garantizar que las partes interesadas necesarias revisen la solución y aprueben su implementación en la fase de producción.

1. La etapa de implementación en el entorno de producción actualiza Amazon ECS con la imagen del contenedor más reciente que incluye la revisión. El hotfix se implementa mediante la creación y ejecución de un conjunto de CloudFormation cambios.

![\[Flujo de trabajo para eliminar un evento de ciclo de vida.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/192aa897-bd9b-4a9f-804e-340371612b3b.png)


El diagrama anterior para eliminar un evento de ciclo de vida muestra lo siguiente:

1. El desarrollador elimina la rama de `hotfix-*` después de implementar correctamente la revisión en el entorno de producción.

1. El evento de eliminación de una `hotfix-*` rama se captura mediante una EventBridge regla. Los detalles del evento incluyen los nombres del repositorio y de la sucursal.

1. La EventBridge regla invoca la función Lambda. La EventBridge regla pasa la información del evento a la función Lambda como entrada.

1. La función de Lambda procesa la entrada para recuperar los nombres del repositorio y de la rama. La función de Lambda determina el producto de Service Catalog correspondiente a partir de la entrada pasada y, a continuación, finaliza el producto.

1. La finalización del producto aprovisionado de Service Catalog elimina la canalización y los recursos relevantes que se crearon anteriormente en ese producto.

**Automatización y escala**
+ El patrón incluye una EventBridge regla y una función Lambda, que puede gestionar varias solicitudes de creación de sucursales de hotfix en paralelo. La función de Lambda aprovisiona el producto de Service Catalog para la regla de eventos coincidentes.
+ La configuración de la canalización se gestiona mediante el producto de Service Catalog, que proporciona funciones de control de versiones. La solución también se escala automáticamente para gestionar en paralelo múltiples desarrollos de revisiones de la misma aplicación.
+ La función [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) garantiza que estos cambios de revisión también se vuelvan a combinar en `main` y las ramas de `develop` mediante la creación automática de solicitudes de extracción. Este enfoque es esencial para mantener `main` y las ramas de `develop` actualizadas con todas las correcciones y evitar posibles regresiones de código. Este proceso permite mantener la coherencia entre las ramas y evita las regresiones de código, ya que garantiza que las ramas más antiguas tengan las correcciones más recientes.

## Tools (Herramientas)
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-tools"></a>

**Servicios de AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le 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 territorio y. Cuentas de AWS Regiones de AWS
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que permite almacenar y administrar repositorios de Git de forma privada, sin necesidad de administrar su propio sistema de control de origen. AWS CodeCommit ya no está disponible para clientes nuevos. Los clientes actuales de AWS CodeCommit pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulta [Cómo migrar tu AWS CodeCommit repositorio a otro proveedor de Git](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) es un servicio de administración de contenedores escalable y rápido que ayuda a ejecutar, detener y administrar contenedores en un clúster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) te ayuda a crear y controlar claves criptográficas para proteger tus datos.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)le ayuda a gestionar de forma centralizada los catálogos de servicios de TI aprobados. AWS 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.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Otras herramientas**
+ [CloudFormation Linter (cfn-lint) es un linter](https://github.com/aws-cloudformation/cfn-lint) [que compara las plantillas CloudFormation YAML o JSON con la especificación del recurso. CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) También realiza otras comprobaciones, como verificar los valores válidos de las propiedades de los recursos y el cumplimiento de las prácticas recomendadas.
+ [cfn-nag](https://github.com/stelligent/cfn_nag) es una herramienta de código abierto que identifica posibles problemas de seguridad en las plantillas mediante la búsqueda de patrones. CloudFormation 
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización del sistema operativo para entregar software en contenedores. Este patrón utiliza Docker para crear y probar imágenes de contenedores de forma local.
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio dynamic\$1hotfix\$1codepipeline GitHub .](https://github.com/aws-samples/dynamic_hotfix_codepipeline)

## Prácticas recomendadas
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-best-practices"></a>

Revise y ajuste los roles de IAM y las políticas de control de servicios (SCP) de su entorno para asegurarse de que restringen el acceso de forma adecuada. Esto es crucial para evitar cualquier acción que pueda anular las medidas de seguridad incluidas en este patrón. Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-epics"></a>

### Configuración del entorno de trabajo
<a name="set-up-the-work-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el [repositorio](https://github.com/aws-samples/dynamic_hotfix_codepipeline) de muestras en un nuevo directorio de su ubicación de trabajo, ejecute el siguiente comando:<pre>git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git</pre> | AWS DevOps | 
| Exporte variables de entorno para el despliegue de CloudFormation pilas. | Defina las siguientes variables de entorno que se utilizarán como entrada en las CloudFormation pilas más adelante en este patrón.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export BucketStartName=<BucketName></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export ProdAccount=<prodaccountnumber><br />export StageAccount=<stage/preprodaccountnumber><br />export QAAccount=<qaccountnumber><br />export ToolsAccount=<toolsaccountnumber><br />export DepRegion=<region></pre> | AWS DevOps | 

### Configure los requisitos previos necesarios en Cuentas de AWS
<a name="set-up-prerequisites-required-in-aws-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los recursos necesarios para CI/CD la cuenta de herramientas. | Para implementar la CloudFormation pila en la cuenta de herramientas, usa los siguientes comandos. (Elimine el parámetro `QAAccount` si no utiliza la cuenta de control de calidad en la configuración).<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre>Anote los recursos que el CodeCommit repositorio y Amazon ECR crearon a partir de la pila anterior. Estos parámetros son necesarios para configurar la rama de `main` de la canalización en los próximos pasos. | AWS DevOps | 
| Cree los recursos necesarios para CI/CD las cuentas de carga de trabajo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Actualice la política de bucket de artefactos de S3 para permitir el acceso a las cuentas de carga de trabajo. | Para actualizar los requisitos previos de la CloudFormation pila en la cuenta de herramientas, utilice los siguientes comandos para añadir todos los permisos necesarios para las cuentas de carga de trabajo de Stage y Production. (Elimine el parámetro `QAAccount` si no lo utiliza en la configuración).<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} PutPolicy=true \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre> | AWS DevOps | 

### Configuración de la función de Lambda y los recursos de Service Catalog en la cuenta de herramientas
<a name="set-up-lam-function-and-sc-resources-in-tools-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la cartera y los productos de Service Catalog. | Para configurar la cartera y los productos de Service Catalog, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Configure as funciones de Lambda. | Esta solución utiliza las siguientes funciones de Lambda para administrar los flujos de trabajo de revisiones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)Para permitir que las funciones de Lambda aprovisionen y cancelen los productos de Service Catalog cuando se creen o eliminen `hotfix ` sucursales mediante la EventBridge regla asociada, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Creación de una canalización para la rama principal e implementación de la aplicación en las cuentas de carga de trabajo
<a name="create-pipeline-for-main-branch-and-deploy-application-in-workload-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la canalización para la rama de `main`. | Para configurar la canalización de la rama principal, ejecute el siguiente comando en la cuenta de herramientas. Sustituya los parámetros de `MainProductId` y `MainProductArtifactId` con los valores de los resultados de pila `servicecatalogsetup`.<pre>#InToolsAccount<br />aws servicecatalog provision-product \<br />    --product-id <MainProductId> \<br />    --provisioning-artifact-id <MainProductArtifactId> \<br />    --provisioned-product-name "${ApplicationName}-main-pipeline" \<br />    --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \<br />    --region=${DepRegion}</pre> | AWS DevOps | 
| Implemente la aplicación mediante la rama de `main`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Creación de la canalización para una rama de hotfix-\$1 e implementación de la revisión
<a name="create-the-pipeline-for-a-hotfix--branch-and-deploy-the-hotfix"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una rama de `hotfix-*` y confirme los cambios. | Para crear una canalización para la rama de `hotfix-*` e implementar la revisión en las cuentas de carga de trabajo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Elimine la rama de `hotfix-check1`. | Para eliminar la rama de `hotfix-check1` que creó anteriormente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie todos los recursos implementados. | Para limpiar los recursos que se implementaron anteriormente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>##In Tools Account##<br />aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}</pre><pre>##In Workload Accounts##<br />aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}</pre>Para más información, consulte [Eliminación de productos aprovisionados](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) en la documentación de Service Catalog. | AWS DevOps | 

## Resolución de problemas
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los cambios que ha realizado en el CodeCommit repositorio no se están implementando. | Comprueba los CodeBuild registros para ver si hay errores en la acción de compilación de Docker. Para obtener más información, consulte la [Documentación de CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html). | 
| El producto de Service Catalog no se está aprovisionando. | Revisa las CloudFormation pilas relacionadas para ver si hay eventos fallidos. Para obtener más información, consulte la [Documentación de CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html). | 

## Recursos relacionados
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-resources"></a>
+ [Comandos básicos de Git](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-basic-git.html)
+ [Configure una política de IAM para limitar las transferencias y fusiones a una sucursal](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html#how-to-conditional-branch-create-policy)
+ [Conectarse a un AWS CodeCommit repositorio](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)
+ [Concesión de acceso a los usuarios](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_users.html)
+ [Enviar una imagen de Docker a un repositorio privado de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Solución de problemas AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html)
+ [¿Qué es? AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)

## Información adicional
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional"></a>

Este patrón está diseñado para entornos con una configuración de Gitflow que se adopta en el CI/CD proceso para el flujo de trabajo de desarrollo. Las canalizaciones siguen el ciclo de implementación, que comienza con el desarrollo y pasa por los entornos de control de calidad (QA), etapas y producción. La CI/CD configuración incluye dos ramas de git con despliegues promocionales en los siguientes entornos:
+ La rama de `develop` se implementa en el entorno de desarrollo.
+ La rama de `main` realiza implementaciones en los entornos de control de calidad, de etapas y de producción.

En esta configuración, es todo un desafío aplicar una revisión o un parche de seguridad más rápido que el ciclo de implementación habitual mientras se continúa con el desarrollo activo de nuevas características. Es necesario establecer un proceso dedicado para abordar las solicitudes de revisión o seguridad, a fin de garantizar que los entornos activos sigan funcionando correctamente y sean seguros.

Sin embargo, puede utilizar otras opciones disponibles sin necesidad de un usar proceso de implementación específico si:
+ El CI/CD proceso está bien equipado con pruebas automatizadas, como las funcionales y end-to-end las pruebas, que eliminan la necesidad de realizar pruebas manuales y evitan demoras en las implementaciones en la producción. Sin embargo, si las pruebas automatizadas no están bien integradas en el CI/CD proceso, introducir una pequeña modificación en el entorno de producción puede resultar complejo y engorroso para los desarrolladores. Esto se debe a que es posible que haya nuevas características pendientes de aprobación y cierre en el entorno de control de calidad. No se puede poner en fase de producción una revisión o una corrección de seguridad de forma sencilla y simultánea.
+ Los equipos de desarrollo implementan continuamente nuevas características en el entorno de producción e integran revisiones o parches de seguridad en la implementación programada de cada nueva característica. En otras palabras, la próxima actualización de características del entorno de producción consta de dos componentes: la incorporación de una nueva característica y la inclusión de la revisión o el parche de seguridad. Sin embargo, si el ciclo de implementación no es continuo, es posible que ya haya varias características nuevas pendientes de aprobación en el entorno de control de calidad. Administrar diferentes versiones y garantizar que se vuelvan a aplicar los cambios correctos puede convertirse en algo complejo y propenso a errores.

**nota**  
Si utilizas la [versión 2](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types.html#:~:text=V2%20type%20pipelines%20have%20the%20same%20structure) de AWS CodePipeline con los activadores adecuados configurados en la `hotfix` sucursal, necesitarás un proceso específico para atender las solicitudes no programadas. En la versión 2, puede configurar desencadenadores para las solicitudes entrada o salida. La ejecución se pondrá en cola o se ejecutará inmediatamente, en función del estado anterior de la canalización. Sin embargo, con una canalización específica, las correcciones se aplican inmediatamente al entorno de producción, lo que garantiza que los problemas urgentes se resuelvan sin demora.

# Automatice la eliminación de AWS CloudFormation pilas y recursos asociados
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*SANDEEP SINGH y James Jacob, Amazon Web Services*

## Resumen
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) es un servicio muy utilizado para gestionar la infraestructura como código (IaC) en la nube. Cuando los usa CloudFormation, administra los recursos relacionados como una sola unidad denominada *pila*. Puede crear, actualizar y eliminar una colección de recursos mediante la creación, actualización y eliminación de pilas.

A veces, ya no necesitas los recursos de una CloudFormation pila. Según los recursos y sus configuraciones, puede resultar complicado eliminar una pila y sus recursos asociados. En los sistemas de producción reales, las eliminaciones a veces fallan o tardan mucho tiempo debido a condiciones conflictivas o restricciones que CloudFormation no se pueden anular. Es posible que necesite realizar una planificación y ejecución cuidadosas para garantizar que todos los recursos se eliminen correctamente de manera eficiente y coherente. Este patrón describe cómo configurar un marco que le ayude a gestionar la eliminación de CloudFormation pilas que presentan las siguientes complejidades:
+ **Recursos con protección contra eliminaciones**: es posible que algunos recursos tengan habilitada la protección contra eliminaciones. Algunos ejemplos comunes son las tablas de [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) y los buckets de [Amazon Simple Storage Service (Amazon S3).](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) La protección contra la eliminación impide la eliminación automática, como la eliminación automática. CloudFormation Si desea eliminar estos recursos, debe anular o deshabilitar temporalmente la protección contra eliminaciones de forma manual o programática. Debe evaluar detenidamente las implicaciones de eliminar estos recursos antes de continuar.
+ **Recursos con políticas de retención**: algunos recursos, como las claves AWS Key Management Service (AWS KMS) y los buckets de Amazon S3, pueden tener políticas de retención que especifiquen cuánto tiempo deben conservarse después de solicitar su eliminación. Debes tener en cuenta estas políticas en la estrategia de limpieza para garantizar el cumplimiento de las políticas de la organización y los requisitos normativos.
+ **Eliminación retrasada de las funciones de Lambda asociadas a una VPC**: la eliminación de una función de [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) adjunta a una nube privada virtual (VPC) puede tardar entre 5 y 40 minutos, en función de las múltiples dependencias interconectadas que intervienen en el proceso. Si desconecta la función de la VPC antes de eliminar la pila, puede reducir este retraso a menos de 1 minuto.
+ **Recursos no creados directamente por CloudFormation**: en algunos diseños de aplicaciones, los recursos pueden crearse fuera de la CloudFormation pila original, ya sea por la propia aplicación o por recursos aprovisionados a través de la pila. A continuación se muestran dos ejemplos:
  + CloudFormation podría aprovisionar una instancia de [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) que ejecute un script de datos de usuario. A continuación, este script podría crear un parámetro de [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) para almacenar los datos relacionados con la aplicación. Este parámetro no se administra de forma completa CloudFormation.
  + CloudFormation podría aprovisionar una función Lambda que genere automáticamente un grupo de [Amazon CloudWatch Logs para almacenar registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). Este grupo de registros no se administra mediante CloudFormation.

  Aunque estos recursos no los administra directamente CloudFormation, a menudo es necesario limpiarlos cuando se elimina la pila. Si no se administran, pueden quedar huérfanos y provocar un consumo innecesario de recursos.

Si bien estas barreras de protección pueden ser complejas, recuerde que son intencionales e imprescindibles. CloudFormation Permitir anular todas las restricciones y eliminar los recursos de forma indiscriminada podría tener consecuencias perjudiciales e imprevistas en muchos escenarios. Sin embargo, como ingeniero de nube responsable de administrar el entorno, hay ocasiones en las que puede ser necesario anular estas restricciones, especialmente en los entornos de desarrollo, pruebas DevOps o puesta en escena.

**Resultados empresariales específicos**

La implementación de este marco de trabajo proporciona los siguientes beneficios:
+ **Gestión de costes**: la limpieza regular y eficiente de los entornos temporales, como end-to-end los entornos de pruebas de aceptación por parte de los usuarios, ayuda a evitar que los recursos se agoten durante más tiempo del necesario. Esto puede reducir considerablemente los costos.
+ **Seguridad: la** limpieza automática de los recursos obsoletos o no utilizados reduce la superficie de ataque y ayuda a mantener un entorno seguro. AWS 
+ **Eficiencia operativa**: la limpieza periódica y automatizada puede proporcionar los siguientes beneficios operativos:
  + Los scripts automatizados que eliminan grupos de registros antiguos o depósitos vacíos de Amazon S3 pueden mejorar la eficiencia operativa al mantener el entorno limpio y manejable.
  + Eliminar y volver a crear pilas con rapidez permite una iteración rápida para el diseño y la implementación, lo que puede conducir a una arquitectura más sólida y resiliente.
  + Eliminar y reconstruir entornos con regularidad puede ayudarle a identificar y solucionar posibles problemas. Gracias a esto, puede garantizar que la infraestructura pueda soportar situaciones del mundo real.

## Requisitos previos y limitaciones
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ La versión 3.6 o posterior de Python [instalada](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limitaciones**
+ Se utiliza una convención de nomenclatura para identificar los recursos que se deben eliminar. El código de ejemplo de este patrón usa un prefijo para el nombre del recurso, pero puede definir su propia convención de nomenclatura. Los recursos que no utilicen esta convención de nomenclatura no se identificarán ni se eliminarán posteriormente.

## Arquitectura
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

El siguiente diagrama muestra cómo este marco identifica la CloudFormation pila de destino y los recursos adicionales asociados a ella.

![\[Las fases que descubren, procesan y eliminan las CloudFormation pilas y sus recursos asociados.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


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

1. **Reúna recursos**: el marco de automatización utiliza una convención de nomenclatura para devolver todas las CloudFormation pilas relevantes, los repositorios de Amazon Elastic Container Registry (Amazon ECR), las tablas de DynamoDB y los buckets de Amazon S3.
**nota**  
Las funciones de esta etapa utilizan [paginadores](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), una característica de Boto3 que resume el proceso de iteración sobre un conjunto de resultados de API truncado. Esto garantiza que se procesen todos los recursos. [Para optimizar aún más el rendimiento, considere la posibilidad de aplicar un filtrado del lado [del servidor o de utilizarlo para realizar un filtrado del lado del](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) cliente. JMESPath ](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

1. **Procesamiento previo**: el marco de automatización identifica y aborda las restricciones del servicio que deben anularse para poder eliminar los recursos. CloudFormation Por ejemplo, cambia la configuración `DeletionProtectionEnabled` de las tablas de DynamoDB a `False`. En la interfaz de línea de comandos de cada recurso, recibirá una petición en la que se le preguntará si desea anular la restricción.

1. **Eliminar pila**: el marco de automatización elimina la pila. CloudFormation En la interfaz de línea de comandos, recibirá una petición en la que se le preguntará si desea anular la pila.

1. **Posprocesamiento**: el marco de automatización elimina todos los recursos relacionados que no se hayan aprovisionado directamente CloudFormation como parte de la pila. Algunos ejemplos de estos tipos de recursos son los parámetros y los grupos de CloudWatch registros de Systems Manager. Las funciones independientes recopilan estos recursos, los procesan previamente y, a continuación, los eliminan. En la interfaz de línea de comandos de cada recurso, recibirá una petición en la que se le preguntará si desea eliminar el recurso.
**nota**  
Las funciones de esta etapa utilizan [paginadores](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), una característica de Boto3 que resume el proceso de iteración sobre un conjunto de resultados de API truncado. Esto garantiza que se procesen todos los recursos. Para optimizar aún más el rendimiento, considere la posibilidad de aplicar un filtrado del [lado del servidor](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) o de utilizarlo JMESPath para realizar un filtrado del lado del [cliente](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath).

**Automatización y escala**

Si tu CloudFormation pila incluye otros recursos que no están incluidos en el código de ejemplo o si la pila tiene una restricción que no se ha abordado en este patrón, puedes adaptar el marco de automatización a tu caso de uso. Siga la misma metodología de recopilación de recursos, procesamiento previo, eliminación de la pila y procesamiento posterior.

## Tools (Herramientas)
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Servicios de AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida a lo largo de todo Cuentas de AWS el ciclo de vida. Regiones de AWS
+ [CloudFormation La interfaz de línea de comandos (CFN-CLI)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) es una herramienta de código abierto que le ayuda a desarrollar AWS y probar extensiones de terceros y luego registrarlas para su uso. CloudFormation
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

**Otras herramientas**
+ [Click](https://click.palletsprojects.com/en/stable/) es una herramienta de Python que lo ayuda a crear interfaces de línea de comandos.
+ [Poetry](https://python-poetry.org/docs/) es una herramienta de empaquetado y administración de dependencias de Python.
+ [Pyenv](https://github.com/pyenv/pyenv) es una herramienta que lo ayuda a administrar y cambiar entre versiones de Python.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

El código de este patrón está disponible en el GitHub [cloudformation-stack-cleanup](https://github.com/aws-samples/cloudformation-stack-cleanup/)repositorio.

## Prácticas recomendadas
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Etiquetado de recursos para una fácil identificación**: implemente una [estrategia de etiquetado](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) para identificar los recursos que se crean para diferentes entornos y propósitos. Las etiquetas pueden simplificar el proceso de limpieza al ayudarte a filtrar los recursos en función de sus etiquetas.
+ **Configuración de los ciclos de vida de los recursos**: defina los ciclos de vida de los recursos para eliminarlos automáticamente después de un período determinado. Esta práctica lo ayuda a garantizar que los entornos temporales no se conviertan en pasivos de costos permanentes.

## Epics
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

### Instalar herramientas
<a name="install-tools"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingeniero | 
| Instale Poetry. | Siga las [instrucciones](https://python-poetry.org/docs/) (documentación de Poetry) para instalar Poetry en el entorno virtual de destino. | DevOps ingeniero | 
| Instale las dependencias. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingeniero | 
| (Opcional) Instale Pyenv. | Siga las [instrucciones](https://github.com/pyenv/pyenv#installation) (GitHub) para instalar Pyenv. | DevOps ingeniero | 

### (Opcional) Personalice el marco.
<a name="optional-customize-the-framework"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree funciones que recopilen, procesen previamente y eliminen los recursos de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingeniero, Python | 

### Creación de recursos de muestra
<a name="create-sample-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea una CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Cree un parámetro de Systems Manager. | Introduzca el siguiente comando para crear un parámetro de Systems Manager que no se aprovisione mediante CloudFormation:<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | AWS DevOps | 
| Crear un bucket de Amazon S3. | Introduce el siguiente comando para crear un bucket de Amazon S3 que no esté aprovisionado: CloudFormation<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Eliminacion de los recursos de muestra
<a name="delete-the-sample-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine la CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Valide la eliminación de recursos. | En el resultado, confirme que se hayan eliminado todos los recursos de muestra. Para ver un resultado de ejemplo, consulte la sección [Información adicional](#automate-deletion-cloudformation-stacks-associated-resources-additional) de este patrón. | AWS DevOps | 

## Recursos relacionados
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Eliminar una pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation documentación)
+ [Solución de problemas CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) (CloudFormation documentación)
+ [Concesión a las funciones de Lambda de acceso a los recursos de una VPC de Amazon](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (documentación de Lambda)
+ [¿Cómo elimino una AWS CloudFormation pila que está atascada en el estado DELETE\$1FAILED?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Centro de conocimiento)AWS 

## Información adicional
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

A continuación, se muestra un resultado de ejemplo del comando `cfncli`:

```
cfncli --region aus-east-1  dev cleanup-env --prefix-list sampleforcleanup                                                                                                                              
https://sts.us-east-1.amazonaws.com
Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1
Do you want to proceed? [Y/n]: Y
No S3 buckets
No ECR repositories
No Lambda functions in VPC
The following DynamoDB tables will have their deletion protection removed:
sampleforcleanup-MyDynamoDBTable
Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y
Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'.
The following CloudFormation stacks will be deleted:
sampleforcleanup-Stack
Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y
Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack`
Waiting for stack `sampleforcleanup-Stack` to be deleted...
CloudFormation stack `sampleforcleanup-Stack` deleted successfully.
The following ssm_params will be deleted:
/sampleforcleanup/database/password
Do you want to proceed with deleting these ssm_params? [Y/n]: Y
Deleted SSM Parameter: /sampleforcleanup/database/password
Cleaned up: ['sampleforcleanup']
```

# Automatización de la ingesta y visualización de métricas personalizadas de Amazon MWAA en Amazon Managed Grafana mediante Terraform
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics"></a>

*Faisal Abdullah y Satya Vajrapu, Amazon Web Services*

## Resumen
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-summary"></a>

En este patrón se explica cómo usar Amazon Managed Grafana para crear y supervisar métricas personalizadas que Amazon Managed Workflows para Apache Airflow (Amazon MWAA) incorpora. Amazon MWAA actúa como orquestador de los flujos de trabajo y emplea gráficos acíclicos dirigidos (DAGs) que se escriben en Python. Este patrón se centra en la supervisión de métricas personalizadas, como el número total de ejecuciones en la última hora, el recuento de aprobaciones y errores en DAGs cada hora y la DAGs duración media de estos procesos. Este análisis muestra cómo Amazon Managed Grafana se integra con Amazon MWAA para permitir una supervisión exhaustiva y obtener información sobre la orquestación de los flujos de trabajo en este entorno.

## Requisitos previos y limitaciones
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS con los permisos de usuario necesarios para crear y gestionar lo siguiente Servicios de AWS:
  + AWS Identity and Access Management Funciones y políticas (IAM)
  + AWS Lambda
  + Amazon Managed Grafana
  + Flujos de trabajo administrados de Amazon para Apache Airflow (Amazon MWAA)
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Timestream
+ Acceso a un entorno del intérprete de comandos que puede ser un terminal en su máquina local o [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html).
+ Un entorno de shell con Git instalado y la última versión de AWS Command Line Interface (AWS CLI) instalada y configurada. Para obtener más información, consulta [Instalar o actualizar a la última versión de AWS CLI en la](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) AWS CLI documentación.
+ La siguiente versión de Terraform instalada: `required_version = ">= 1.6.1, < 2.0.0"`. Puede usar [tfswitch](https://tfswitch.warrensbox.com/) para cambiar entre diferentes versiones de Terraform.
+ La fuente de identidad configurada es AWS IAM Identity Center para su Cuenta de AWS. Para más información, consulte [Confirmación de los orígenes de identidad en IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-identity-sources.html) en la documentación de IAM Identity Center. Puede elegir entre el Active Directory predeterminado Directorio de IAM Identity Center o un proveedor de identidad (IdP) externo, como Okta. Para más información, consulte [Recursos relacionados](#automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources).

**Limitaciones**
+ Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Terraform `required_version = ">= 1.6.1, < 2.0.0"`
+ Amazon Managed Grafana, versión 9.4 o posterior. Este patrón se probó en la versión 9.4.

## Arquitectura
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-architecture"></a>

El siguiente diagrama de arquitectura destaca lo que se Servicios de AWS utiliza en la solución.

![\[Flujo de trabajo para la automatización de la ingesta de métricas personalizadas de Amazon MWAA\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/3458d0a9-aee1-428a-bf2f-c357bb531c64/images/b43ed8d2-94ac-4438-913b-81c7eba8f3e0.png)


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

1. Las métricas personalizadas de Amazon MWAA se originan en las DAGs que se ejecutan en el entorno. Las métricas se cargan en el bucket de Amazon S3 en un formato de archivo CSV. A continuación, se DAGs utilizan las funciones de consulta de bases de datos de Amazon MWAA:
   + `run-example-dag`: este DAG contiene un ejemplo de código de Python que define una o más tareas. Se ejecuta cada 7 minutos e imprime la fecha. Tras imprimir la fecha, el DAG incluye una tarea para suspender o pausar la ejecución durante un período específico.
   + `other-sample-dag`: este DAG se ejecuta cada 10 minutos e imprime la fecha. Tras imprimir la fecha, el DAG incluye una tarea para suspender o pausar la ejecución durante un período específico.
   + `data-extract`: este DAG se ejecuta cada hora y consulta la base de datos de Amazon MWAA y recopila métricas. Una vez recopiladas las métricas, este DAG las escribe en un bucket de Amazon S3 para poder realizar un procesamiento y análisis posterior.

1. Para agilizar el procesamiento de datos, las funciones de Lambda se ejecutan cuando las activan eventos de Amazon S3, lo que facilita la carga de métricas en Timestream.

1. Timestream se integra como origen de datos en Amazon Managed Grafana, donde se almacenan todas las métricas personalizadas de Amazon MWAA.

1. Los usuarios pueden consultar los datos y crear paneles personalizados para visualizar los indicadores clave de rendimiento y obtener información sobre la orquestación de los flujos de trabajo de Amazon MWAA.

## Tools (Herramientas)
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-tools"></a>

**Servicios de AWS**
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)le ayuda a gestionar de forma centralizada el acceso mediante el inicio de sesión único (SSO) a todas sus aplicaciones y a las de la nube. Cuentas de AWS 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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. En este patrón, AWS Lambda ejecuta el código de Python en respuesta a los eventos de Amazon S3 y administra los recursos informáticos automáticamente.
+ [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) es un servicio de visualización de datos seguro y completamente administrado que puede utilizar para consultar, correlacionar, visualizar y recibir al instante alertas sobre métricas operativas, registros y seguimientos de varios orígenes. Este patrón utiliza Amazon Managed Grafana para crear un panel que le permita ver las métricas y alertas.
+ [Amazon Managed Workflows para Apache Airflow (Amazon MWAA)](https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html) es un servicio de orquestación administrada de Apache Airflow que puede usar para configurar y usar canalizaciones de datos en la nube a escala. [Apache Airflow](https://airflow.apache.org/) es una herramienta de código abierto que se utiliza para crear, programar y supervisar secuencias de procesos y tareas denominadas flujos de trabajo mediante programación. En este patrón, se implementan una muestra DAGs y un extractor de métricas DAG en Amazon MWAA.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos. En este patrón, Amazon S3 se utiliza para almacenar DAGs scripts y métricas personalizadas en formato CSV.
+ [Amazon Timestream LiveAnalytics](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) for is es una base de datos de series temporales rápida, escalable, totalmente administrada y diseñada específicamente que facilita el almacenamiento y el análisis de billones de puntos de datos de series temporales por día. Timestream for LiveAnalytics también se integra con los servicios más utilizados para la recopilación de datos, la visualización y el aprendizaje automático. En este patrón, se utiliza para ingerir las métricas personalizadas de Amazon MWAA que se hayan generado.

**Otras herramientas**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube. Este patrón utiliza un módulo de Terraform para automatizar el aprovisionamiento de la infraestructura en AWS.

**Repositorio de código**

El código de este patrón está disponible GitHub en el repositorio [visualize-amazon-mwaa-custom-metrics-grafana](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana). La carpeta `stacks/Infra` contiene los siguientes elementos:
+ Archivos de configuración de Terraform para todos los recursos AWS 
+ Archivo .json del panel de control de Grafana en la carpeta `grafana`
+ Amazon Managed Workflows para Apache Airflow DAGs en la carpeta `mwaa/dags`
+ Código de Lambda para analizar el archivo.csv y almacenar las métricas en la base de datos de Timestream de la carpeta `src`
+ Los archivos .json de la política de IAM están en la carpeta `templates`

## Prácticas recomendadas
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-best-practices"></a>

Terraform debe almacenar el estado de su infraestructura y configuración administradas para poder asignar recursos del mundo real a su configuración. De forma predeterminada, Terraform almacena el estado de forma local en un archivo denominado `terraform.tfstate`. Es imprescindible garantizar la seguridad e integridad de su archivo de estado de Terraform, ya que mantiene el estado actual de su infraestructura. Para más información, consulte [Estado remoto](https://developer.hashicorp.com/terraform/language/state/remote) en la documentación de Terraform. 

## Epics
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-epics"></a>

### Implementación de la infraestructura mediante Terraform
<a name="deploy-the-infrastructure-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la infraestructura. | Para implementar la infraestructura de la solución, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

### Validación de los recursos de infraestructura implementados
<a name="validate-the-deployed-infrastructure-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide el entorno de Amazon MWAA | Para validar el entorno de Amazon MWAA, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, ingeniero de datos | 
| Compruebe los programas de DAG. | Para ver cada programa del DAG, vaya a la pestaña **Programación** de la **interfaz de usuario de Airflow**.Cada una de las siguientes DAGs opciones tiene una programación preconfigurada, que se ejecuta en el entorno Amazon MWAA y genera métricas personalizadas: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)También puede ver las ejecuciones correctas de cada DAG en la columna **Ejecuciones**.  | Ingeniero de datos, AWS DevOps | 

### Configuración del entorno de Amazon Managed Grafana
<a name="configure-the-gra-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el acceso al espacio de trabajo de Amazon Managed Grafana. | Los scripts de Terraform crearon el espacio de trabajo, los paneles y la página de métricas de Amazon Managed Grafana necesarios. Para configurar el acceso de forma que pueda verlos, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Instalación del complemento de Amazon Timestream.  | Las métricas personalizadas de Amazon MWAA se cargan en la base de datos de Timestream. Use el complemento de Timestream para visualizar las métricas con los paneles de Amazon Managed Grafana.Para instalar el complemento de Timestream, siga este procedimiento:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Para más información, consulte [Ampliación del espacio de trabajo con complementos](https://docs.aws.amazon.com/grafana/latest/userguide/grafana-plugins.html#manage-plugins) en la documentación de Amazon Managed Grafana. | AWS DevOps, DevOps ingeniero | 

### Visualización de las métricas personalizadas en el panel de Amazon Managed Grafana
<a name="visualize-the-custom-metrics-in-the-gra-dashboard"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Consulte el panel de Amazon Managed Grafana. | Para ver las métricas que se incorporaron al espacio de trabajo de Amazon Managed Grafana, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Las métricas del panel muestran la siguiente información:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Personalice el panel de Amazon Managed Grafana. | Para personalizar los paneles para futuras mejoras, siga este procedimiento:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Como alternativa, el código fuente de este panel está disponible en el `dashboard.json` archivo de la `stacks/infra/grafana` carpeta del [GitHub repositorio](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana/blob/main/stacks/infra/grafana/dashboard.json). | AWS DevOps | 

### Limpie AWS los recursos
<a name="clean-up-aws-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pause las ejecuciones de DAG en Amazon MWAA. | Para pausar las ejecuciones de DAG, siga este procedimiento:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, ingeniero de datos | 
| Elimine todos los objetos de los buckets de Amazon S3. | Para eliminar los buckets de Amazon S3 **mwaa-events-bucket-\$1 y **mwaa-metrics-bucket-\$1****, siga las instrucciones de uso de la consola de Amazon S3 que se encuentran en [Eliminar un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) en la documentación de Amazon S3. | AWS DevOps | 
| Elimine los recursos creados por Terraform. | Para eliminar los recursos creados por Terraform y el archivo de estado local de Terraform asociado, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

## Resolución de problemas
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:` | Actualice la AWS CLI suya a la [versión más reciente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | 
| Error al cargar los orígenes de datos - `Fetch error: 404 Not Found Instantiating…` | El error es intermitente. Espere unos minutos y, a continuación, actualice los orígenes de datos para ver el origen de datos de Timestream de la lista.  | 

## Recursos relacionados
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources"></a>

**AWS documentación**
+ [Amazon Managed Grafana para la creación de paneles y la visualización](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/amg-dashboarding-visualization.html)
+ [Configurar Grafana gestionada por Amazon para usar Okta](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-SAML-providers-okta.html)
+ [Úsalo AWS IAM Identity Center con tu espacio de trabajo de Grafana gestionado por Amazon](https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG-SSO.html)
+ [Trabajando con DAGs Amazon MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)

**AWS vídeos**
+ Configure el Centro de identidades de IAM con Amazon Managed Grafana para realizar la autenticación, tal como se muestra en el siguiente [video](https://www.youtube.com/watch?v=XX2Xcz-Ps9U).




[https://www.youtube-nocookie.com/embed/XX2¿Xcz-Ps9U? controles = 0](https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U?controls=0)
+ [Si el Centro de identidades de IAM no está disponible, también puede integrar la autenticación de Amazon Managed Grafana mediante un proveedor de identidades (IdP) externo, como Okta, tal como se muestra en el siguiente video](https://www.youtube.com/watch?v=Z4JHxl2xpOg).




[https://www.youtube-nocookie.com/embed/A4 Og? JHxl2xp controles = 0](https://www.youtube-nocookie.com/embed/Z4JHxl2xpOg?controls=0)

## Información adicional
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-additional"></a>

Puede crear una solución integral de supervisión y alertas para su entorno de Amazon MWAA, que permita realizar una administración proactiva y obtener una respuesta rápida a posibles problemas o anomalías. Amazon Managed Grafana incluye las siguientes funciones:

**Alertas**: puede configurar alertas en Amazon Managed Grafana en función de los umbrales o condiciones predefinidos. Configure notificaciones por correo electrónico para alertar a las partes interesadas pertinentes cuando determinadas métricas superen o estén por debajo de los umbrales especificados. Para más información, consulte [Alertas de Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/alerts-overview.html) en la documentación de Amazon Managed Grafana.

**Integración**: puedes integrar Grafana gestionada por Amazon con varias herramientas de terceros OpsGenie, como o Slack PagerDuty, para mejorar las capacidades de notificación. Por ejemplo, puedes configurar webhooks o integrarlos APIs para activar incidentes y notificaciones en estas plataformas en función de las alertas generadas en Grafana gestionado por Amazon. Además, este patrón proporciona un [GitHub repositorio](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana) para crear AWS recursos. Puede integrar aún más este código con los flujos de trabajo de implementación de su infraestructura.

# Automatice la implementación de conjuntos de pilas mediante AWS CodePipeline y AWS CodeBuild
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild"></a>

*Thiyagarajan Mani, Mihir Borkar y Raghu Gowda, Amazon Web Services*

## Resumen
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-summary"></a>

En su solución de integración continua y entrega continua (CI/CD) processes, you might want to deploy applications automatically into all your existing AWS accounts and into new accounts that you add to your organization in AWS Organizations. When you architect a CI/CDsolución) para este requisito, la capacidad de [administrador delegado de conjuntos apilados](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) de AWS CloudFormation es útil porque habilita una capa de seguridad al restringir el acceso a la cuenta de administración. Sin embargo, AWS CodePipeline utiliza el modelo de permisos gestionados por el servicio para implementar aplicaciones en varias cuentas y regiones. Debe usar la cuenta de administración de AWS Organizations para realizar la implementación con conjuntos de pilas, ya CodePipeline que AWS no admite la función de administrador delegado de conjuntos de pilas.

Este patrón describe cómo puede evitar esta limitación. El patrón utiliza AWS CodeBuild y un script personalizado para automatizar la implementación de conjuntos de pilas con AWS CodePipeline. Automatiza las siguientes actividades de implementación de aplicaciones:
+ Implemente una aplicación como conjuntos de pilas en las unidades organizativas existentes (OUs)
+ Amplíe la implementación de una aplicación a más OUs regiones 
+ Elimine una aplicación implementada de todas las regiones, OUs o de algunas de ellas

## Requisitos previos y limitaciones
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-prereqs"></a>

**Requisitos previos **

Antes de seguir los pasos de este patrón:
+ Cree organizaciones en su cuenta de administración de AWS Organizations. Para obtener instrucciones, consulte la [documentación de AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Habilite el acceso confiable entre AWS Organizations y utilice CloudFormation los permisos administrados por el servicio. Para obtener instrucciones, consulte [Habilitar el acceso de confianza con AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) en la CloudFormation documentación.

**Limitaciones**

El código que se suministra con este patrón tiene las siguientes limitaciones: 
+ Puede implementar solo una CloudFormation plantilla para una aplicación; actualmente, no se admite el despliegue de varias plantillas.
+ La personalización de la implementación actual requiere DevOps experiencia.
+ Este patrón no utiliza claves AWS Key Management System (AWS KMS). Sin embargo, puede habilitar esta funcionalidad reconfigurando la CloudFormation plantilla incluida en este patrón.

## Arquitectura
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-architecture"></a>

![\[Arquitectura de automatización de canalización CI/CD\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/2dbca422-7f32-4f9c-a4aa-1f95b484b772.png)


Esta arquitectura de la canalización CI/CD de despliegue gestiona lo siguiente:
+ Restringe el acceso directo a la cuenta de administración al delegar la responsabilidad del despliegue del conjunto de pilas a una CI/CD cuenta dedicada como administradora del conjunto de pilas para las implementaciones de aplicaciones.
+ Utiliza el modelo de permisos administrados por servicios para implementar la aplicación automáticamente cada vez que se crea una nueva cuenta y se asigna a una UO.
+ Garantiza la coherencia de las versiones de las aplicaciones en todas las cuentas del entorno.
+ Utiliza varias etapas de aprobación en el repositorio y la canalización para proporcionar capas adicionales de seguridad y control a la aplicación implementada.
+ Supera la limitación actual de utilizar un script CodePipeline de despliegue personalizado CodeBuild para implementar o eliminar automáticamente conjuntos de pilas e instancias de pila. Para ver un ejemplo del control de flujo y la jerarquía de las llamadas a las API implementadas por el script personalizado, consulte la sección de [Información adicional](#automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional).
+ Crea conjuntos de pilas individuales para los entornos de desarrollo, prueba y producción. Además, puede crear conjuntos de pilas que combinen múltiples regiones en OUs cada etapa. Por ejemplo, puede combinar sandbox y desarrollo OUs en una etapa de desarrollo e implementación.
+ Soporta el despliegue de aplicaciones en, o la exclusión de, un subconjunto de cuentas o una lista de. OUs

**Automatización y escala**

Puede usar el código que se proporciona con este patrón para crear un CodeCommit repositorio de AWS y una canalización de código para su aplicación. A continuación, puede implementarlos como conjuntos de pilas en varias cuentas en la unidad organizativa. El código también automatiza componentes como los temas de Amazon Simple Notification Service (Amazon SNS) para notificar a los aprobadores, los roles de AWS Identity and Access Management (IAM) requeridos y la política de control de servicio (SCP) que se aplicará en la cuenta de administración.

## Tools (Herramientas)
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-tools"></a>

**Servicios de AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatiza las implementaciones en Amazon Elastic Compute Cloud EC2 (Amazon) o en instancias locales, funciones de AWS Lambda o servicios de Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) es un servicio de administración de cuentas que le permite agrupar varias cuentas de AWS en una organización que usted crea y administra de manera centralizada.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [automated-code-pipeline-stackset-deployment](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment). Para ver la estructura de carpetas y otros detalles, consulte [el archivo readme](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment/blob/main/README.md) del repositorio.

## Prácticas recomendadas
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-best-practices"></a>

Este patrón restringe el acceso directo a la cuenta de administración al implementar la aplicación en la UO. Agregar varias etapas de aprobación al proceso de canalización y repositorio ayuda a proporcionar seguridad y gobierno adicionales a las aplicaciones y los componentes que se implementan mediante este enfoque.

## Epics
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-epics"></a>

### Configurar cuentas en AWS Organizations
<a name="configure-accounts-in-aws-organizations"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Habilitar todas las características en la cuenta de administración. | Habilitar todas las características de la cuenta de administración de su organización siguiendo las instrucciones de la [documentación de AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html). | Administrador de AWS, administrador de plataformas | 
| Crea una CI/CD cuenta. | En AWS Organizations, en su organización, cree una CI/CD cuenta dedicada y asigne un equipo para que sea propietario de la cuenta y controle el acceso a ella. | Administrador de AWS | 
| Agregar un administrador delegado. | En la cuenta de administración, registre la CI/CD cuenta que creó en el paso anterior como administrador delegado de conjuntos apilados. Para obtener instrucciones, consulte la [ CloudFormation documentación de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html). | Administrador de AWS, administrador de plataformas | 

### Cree un repositorio y una CI/CD canalización de aplicaciones
<a name="create-an-application-repository-and-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Cree temas de SNS. | Puede usar la `sns-template.yaml` plantilla que se proporciona en el GitHub repositorio para crear temas de SNS y configurar las suscripciones para las solicitudes de aprobación.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Cree funciones de IAM para los CI/CD componentes. | Puede utilizar la `cicd-role-template.yaml` plantilla que se proporciona en el GitHub repositorio para crear las funciones y políticas de IAM que requieran los CI/CD componentes.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Cree un CodeCommit repositorio y una canalización de código para su aplicación. | Puedes usar la `cicd-pipeline-template.yaml` plantilla que se proporciona en el GitHub repositorio para crear un CodeCommit repositorio y una canalización de código para tu aplicación.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 

### Implementación de un conjunto de pilas
<a name="deploy-a-stack-set"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio de la aplicación. | La plantilla de CI/CD canalización que utilizó anteriormente crea un repositorio de aplicaciones y una canalización de código de muestra. Para clonar y verificar el repositorio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Desarrollador de aplicaciones, ingeniero de datos | 
| Agregar artefactos de aplicaciones. | Actualice el repositorio de aplicaciones mediante una CloudFormation plantilla.Esta solución admite el despliegue de una sola CloudFormation plantilla.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Desarrollador de aplicaciones, ingeniero de datos | 
| Actualizar el archivo de configuración de implementación. | Actualice el archivo `deployment_config.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html)Este patrón crea conjuntos de pilas individuales para cada entorno añadiendo el nombre del entorno al nombre del conjunto de pilas que se proporciona en el archivo de configuración de implementación. | Desarrollador de aplicaciones, ingeniero de datos | 
| Confirme los cambios e implemente el conjunto de pilas. | Confirme los cambios que especificó en la plantilla de la aplicación y fusione e implemente el conjunto de pilas en varios entornos paso a paso:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Desarrollador de aplicaciones, ingeniero de datos | 

## Resolución de problemas
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La implementación falla y muestra la excepción:*Cambie el nombre del archivo de parámetros de la plantilla a <application name>-parameter-<evn>.json; no se permiten los nombres predeterminados* | Los archivos CloudFormation de parámetros de la plantilla deben seguir la convención de nomenclatura especificada. Actualice los nombres de archivo de parámetros e inténtelo de nuevo. | 
| La implementación falla y muestra la excepción:*Cambie el nombre de la CloudFormation plantilla a .yml; las plantillas predeterminadas.yml o template.yaml no están permitidas* <application name> | El nombre de la plantilla debe seguir la convención de nomenclatura especificada. CloudFormation Actualice el nombre del archivo e inténtelo de nuevo. | 
| La implementación falla y muestra la excepción:*No se ha encontrado CloudFormation una plantilla válida ni su archivo de parámetros para el entorno \$1environment name\$1* | Compruebe las convenciones de nomenclatura de archivos de la CloudFormation plantilla y su archivo de parámetros para el entorno especificado. | 
| La implementación falla y muestra la excepción:*Acción de implementación no válida proporcionada en el archivo de configuración de implementación. Las opciones válidas son «implementar» y «eliminar».* | Usted especificó un valor no válido para el parámetro `deployment_action` en el archivo de configuración de implementación. El parámetro tiene dos valores válidos: `deploy` y`delete`. Utilice `deploy` para crear y actualizar los conjuntos de pilas y sus instancias de pila asociadas. Utilice `delete` solo cuando desee eliminar el conjunto de pilas completo y las instancias de pila asociadas. | 

## Recursos relacionados
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-resources"></a>
+ GitHub [automated-code-pipeline-stackset-repositorio de despliegue](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment)
+ [Habilitar todas las características en su organización](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) (documentación de AWS Organizations)
+ [Registrar un administrador delegado](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) ( CloudFormation documentación de AWS)
+ [Objetivos a nivel de cuenta para conjuntos de pilas administrados por servicios](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/account-level-targets.html) (documentación de AWS CloudFormation )

## Información adicional
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional"></a>

**Diagrama de flujo**

El siguiente diagrama de flujo muestra el control de flujo y la jerarquía de las llamadas a la API implementadas por el script personalizado para automatizar la implementación de conjuntos de pilas.

![\[Control de flujo y llamadas a la API implementados por un script de Python\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/1898883a-62b7-40c2-8f08-9f2a9dda8404.png)


**Archivos de configuración de implementación de muestra**

**Crear un nuevo conjunto de pila**

El siguiente archivo de configuración de implementación crea un nuevo conjunto de pilas denominado `sample-stack-set` en la región de AWS `us-east-1` en tres OUs.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implementación de un conjunto de pilas existente en otra UO**

Si implementa la configuración que se muestra en el ejemplo anterior y desea implementar el conjunto de pilas en una UO adicional llamada `dev-org-unit-2` en el entorno de desarrollo, el archivo de configuración de implementación podría tener el siguiente aspecto.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implementación de un conjunto de pilas existente en otra región de AWS**

Si implementa la configuración que se muestra en el ejemplo anterior y desea implementar el conjunto de pilas en una región de AWS adicional (`us-east-2`) del entorno de desarrollo para dos OUs (`dev-org-unit-1`y`dev-org-unit-2`), el archivo de configuración de implementación podría tener el siguiente aspecto. 

**nota**  
Los recursos de la CloudFormation plantilla deben ser válidos y específicos de la región.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Eliminar una instancia de pila de una UO o una región de AWS**

Supongamos que se ha implementado la configuración de implementación que se muestra en el ejemplo anterior. El siguiente archivo de configuración elimina las instancias de pila de ambas regiones de la UO`dev-org-unit-2`.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"],
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

El siguiente archivo de configuración elimina la instancia de pila de la región de AWS `us-east-1` para ambas OUs en el entorno de desarrollo.    

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Eliminar todo el conjunto de pilas**

El siguiente archivo de configuración de implementación elimina el conjunto de pilas completo y todas sus instancias de pila asociadas.

```
{
     "deployment_action": "delete",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

* ***Excluir una cuenta de la implementación**

 El siguiente archivo de configuración de implementación excluye de la implementación la cuenta `111122223333`, que forma parte de la UO `dev-org-unit-1`.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333"],
                                        "filter_type": "DIFFERENCE"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implementación de la aplicación en un subconjunto de cuentas de una UO**

El siguiente archivo de configuración de implementación implementa la aplicación solo en tres cuentas (`111122223333`, `444455556666` y `777788889999`) de la UO `dev-org-unit-1`.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333", "444455556666", "777788889999"],
                                        "filter_type": "INTERSECTION"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

# Adjunte automáticamente una política gestionada por AWS para Systems Manager a los perfiles de EC2 instancia mediante Cloud Custodian y AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour y Aaron Lennon, Amazon Web Services*

## Resumen
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Puede integrar las instancias de Amazon Elastic Compute Cloud (Amazon EC2) con AWS Systems Manager para automatizar las tareas operativas y ofrecer más visibilidad y control. Para integrarse con Systems Manager, EC2 las instancias deben tener un [agente de AWS Systems Manager (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) instalado y una política de `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) adjunta a sus perfiles de instancia. 

Sin embargo, si quiere asegurarse de que todos los perfiles de EC2 instancia tengan la `AmazonSSMManagedInstanceCore` política adjunta, puede tener dificultades para actualizar nuevas EC2 instancias que no tienen perfiles de instancia o EC2 instancias que tienen un perfil de instancia pero no tienen la `AmazonSSMManagedInstanceCore` política. También puede resultar difícil añadir esta política en varias cuentas de Amazon Web Services (AWS) y regiones de AWS.

Este patrón ayuda a resolver estos desafíos mediante la implementación de tres políticas de [Cloud Custodian](https://cloudcustodian.io/) en sus cuentas de AWS:
+ La primera política de Cloud Custodian comprueba si hay EC2 instancias existentes que tienen un perfil de instancia pero que no cuentan con la `AmazonSSMManagedInstanceCore` política. A continuación, se adjunta la política `AmazonSSMManagedInstanceCore`. 
+ La segunda política de Cloud Custodian comprueba las EC2 instancias existentes sin un perfil de instancia y agrega un perfil de instancia predeterminado que incluye la `AmazonSSMManagedInstanceCore` política adjunta.
+ La tercera política de Cloud Custodian crea funciones de [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) en sus cuentas para supervisar la creación EC2 de instancias y perfiles de instancias. Esto garantiza que la `AmazonSSMManagedInstanceCore` política se adjunte automáticamente al crear una EC2 instancia.

Este patrón utiliza DevOps las herramientas de [AWS](https://aws.amazon.com/devops/) para lograr una implementación continua y a escala de las políticas de Cloud Custodian en un entorno de varias cuentas, sin aprovisionar un entorno informático independiente. 

## Requisitos previos y limitaciones
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Requisitos previos **
+ Dos o más cuentas de AWS activas. Una cuenta es la *cuenta de seguridad* y las demás son *cuentas de miembros*.
+ Permisos para aprovisionar recursos de AWS en la cuenta de seguridad. Este patrón utiliza [permisos de administrador](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), pero usted debe conceder los permisos de acuerdo con los requisitos y las políticas de su organización.
+ Capacidad para asumir un rol de IAM desde la cuenta de seguridad hasta las cuentas de los miembros y crear los roles de IAM necesarios. Para obtener más información al respecto, consulte [Delegar el acceso entre cuentas de AWS utilizando roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) en la documentación de IAM.
+ 
**importante**  
Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada. Para realizar pruebas, puede configurar la AWS CLI mediante el comando `aws configure` o configurando variables de entorno. : esto no se recomienda para entornos de producción y recomendamos que a esta cuenta solo se le conceda el acceso con privilegios mínimos. Para obtener más información al respecto, consulte [Conceder privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) en la documentación de IAM.
+ El archivo `devops-cdk-cloudcustodian.zip` (adjunto), descargado en su equipo local.
+ Familiaridad con Python.
+ Las herramientas necesarias (Node.js, AWS Cloud Development Kit (AWS CDK) y Git), instaladas y configuradas. Puede usar el archivo `install-prerequisites.sh` incluido en el archivo `devops-cdk-cloudcustodian.zip` para** **instalar estas herramientas.** **Asegúrese de ejecutar este archivo con privilegios de administrador. 

**Limitaciones**
+ Si bien este patrón se puede utilizar en un entorno de producción, asegúrese de que todos los roles y las políticas de IAM cumplan con los requisitos y las políticas de su organización. 

**Versiones de paquetes**
+ Cloud Custodian, versión 0.9 o posterior
+ TypeScript versión 3.9.7 o posterior
+ Node.js versión 14.15.4 o posterior
+ `npm` versión 7.6.1 o posterior
+ CDK de AWS, versión 1.96.0 o posterior

## Arquitectura
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

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

1. Las políticas de Cloud Custodian se envían a un CodeCommit repositorio de AWS en la cuenta de seguridad. Una regla de Amazon CloudWatch Events inicia automáticamente la CodePipeline canalización de AWS.

1. La canalización obtiene el código más reciente CodeCommit y lo envía a la parte de integración continua de la canalización de integración continua y entrega continua (CI/CD) gestionada por AWS. CodeBuild

1. CodeBuild realiza todas las DevSecOps acciones, incluida la validación de la sintaxis de las políticas de Cloud Custodian, y ejecuta estas políticas en `--dryrun` modo automático para comprobar qué recursos están identificados.

1. Si no hay errores, la siguiente tarea avisa al administrador para que revise los cambios y apruebe la implementación en las cuentas de los miembros.

**Pila de tecnología**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automatizar y escalar**

El módulo AWS CDK Pipelines proporciona una CI/CD canalización que se utiliza CodePipeline para organizar la creación y las pruebas del código fuente CodeBuild, además de la implementación de los recursos de AWS con las pilas de AWS. CloudFormation Puede usar este patrón para todas las cuentas de miembros y regiones de su organización. También puede ampliar la pila `Roles creation` para implementar otros roles de IAM en sus cuentas de miembros. 

## Tools (Herramientas)
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ El [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software para definir la infraestructura de nube en el código y aprovisionarla a través de AWS. CloudFormation
+ La [interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación en la nube totalmente gestionado.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que puede utilizar para almacenar y gestionar activos de forma privada.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar el software.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) es un servicio web que le ayuda a controlar de forma segura el acceso a los recursos de AWS.
+ [Cloud Custodian](https://cloudcustodian.io/) es una herramienta que unifica las decenas de herramientas y scripts que la mayoría de las organizaciones utilizan para administrar sus cuentas de nube pública en una sola herramienta de código abierto.
+ [Node.js](https://nodejs.org/en/) es un JavaScript motor de ejecución basado en el JavaScript motor V8 de Google Chrome.

**Código**

Para obtener una lista detallada de los módulos, las funciones de la cuenta, los archivos y los comandos de implementación que se utilizan en este patrón, consulte el archivo `README` en el archivo `devops-cdk-cloudcustodian.zip` (adjunto).

## Epics
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configure la canalización con AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configura el CodeCommit repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Para obtener más información al respecto, consulte [Creación de un CodeCommit repositorio](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) en la CodeCommit documentación de AWS. | Desarrollador | 
| Instalar las herramientas necesarias. | Utilice el archivo `install-prerequisites.sh` para instalar todas las herramientas necesarias en Amazon Linux. Esto no incluye la AWS CLI porque viene preinstalada.Para obtener más información al respecto, consulte la sección [Requisitos previos](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) de [Introducción a AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) en la documentación de AWS CDK. | Desarrollador | 
| Instalar los paquetes de AWS CDK obligatorios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)AWD CDK requiere los siguientes paquetes y se incluyen en el archivo `requirements.txt`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desarrollador | 

### Configuración de su entorno.
<a name="configure-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice las variables requeridas. | Abra el `vars.py` archivo en la carpeta raíz del CodeCommit repositorio y actualice las siguientes variables:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desarrollador | 
| Actualice el archivo account.yml con la información de la cuenta del miembro. | Para ejecutar la herramienta [Cloud Custodian de c7n-org](https://cloudcustodian.io/docs/tools/c7n-org.html) en varias cuentas, debe colocar el archivo de configuración `accounts.yml` en la raíz del repositorio. A continuación, se muestra un ejemplo de archivo de configuración de Cloud Custodian para AWS.<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Desarrollador | 

### Arrancar las cuentas de AWS
<a name="bootstrap-the-aws-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Arranque la cuenta de seguridad. | Arranque `deploy_account` con la aplicación `cloudcustodian_stack` ejecutando el siguiente comando:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Desarrollador | 
| Opción 1: arrancar automáticamente las cuentas de los miembros. | Si la variable `cdk_bootstrap_member_accounts` está establecida en `True` en el archivo `vars.py`, la canalización arranca automáticamente las cuentas especificadas en la variable `member_accounts`.Si es necesario, puede actualizar `*cdk_bootstrap_role*` con un rol de IAM que pueda asumir desde la cuenta de seguridad y que tenga los permisos necesarios para arrancar la AWS CDK.La canalización arranca automáticamente las cuentas nuevas que se agreguen a la variable `member_accounts ` para poder implementar los roles necesarios. | Desarrollador | 
| Opción 2: Inicie manualmente el proceso de arranque de las cuentas de los miembros.  | Aunque no se recomienda utilizar este enfoque, puede establecer el valor de `cdk_bootstrap_member_accounts` y `False`, y realizar este paso manualmente ejecutando el siguiente comando:<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Asegúrese de actualizar los valores `{security_account_id}` y `{role_name}` con el nombre de un rol de IAM que pueda asumir desde la cuenta de seguridad y que tenga los permisos necesarios para iniciar el proceso de arranque de AWS CDK.También puede utilizar otros enfoques para impulsar las cuentas de los miembros, por ejemplo, con AWS CloudFormation. Para obtener más información al respecto, consulte [Proceso de arranque](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) en la documentación de AWS CDK. | Desarrollador | 

### Implemente la pila de AWD CDK.
<a name="deploy-the-aws-cdk-stacks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los roles de IAM en las cuentas de los miembros. | Ejecute el siguiente comando para implementar la pila `member_account_roles_stack` y crear los roles de IAM en las cuentas de miembros:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Desarrollador | 
| Implemente la pila de canalizaciones de Cloud Custodian. | Ejecute el siguiente comando para crear la canalización `cloudcustodian_stack.py` de Cloud Custodian que se implementa en la cuenta de seguridad:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Desarrollador | 

## Recursos relacionados
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Introducción a los AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Conexiones
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)

# Cree CI/CD canalizaciones y clústeres de Amazon ECS de forma automática para microservicios mediante AWS CDK
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk"></a>

*Varsha Raju, Amazon Web Services*

## Resumen
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-summary"></a>

Este patrón describe cómo crear automáticamente la integración continua y la entrega continua (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipelines), que luego puede personalizar o cambiar de acuerdo con los requisitos de su organización. 

El enfoque del patrón crea un entorno de producción y un entorno de no producción, cada uno con una nube privada virtual (VPC) y un clúster de Amazon ECS configurado para ejecutarse en dos zonas de disponibilidad. Todos los microservicios comparten estos entornos y, a continuación, se crea una CI/CD canalización para cada microservicio. Estas CI/CD canalizaciones extraen los cambios de un repositorio de origen en AWS CodeCommit, los crean automáticamente y, a continuación, los implementan en sus entornos de producción y no producción. Cuando una canalización completa correctamente todas sus etapas, puede utilizarla URLs para acceder al microservicio en los entornos de producción y no producción.

## Requisitos previos y limitaciones
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa.
+ Un bucket de Amazon Simple Storage Service (Amazon S3) existente que contiene el archivo `starter-code.zip` (adjunto).
+ AWS Cloud Development Kit (AWS CDK), instalado y configurado en su cuenta. Para obtener más información al respecto, consulte [Introducción a AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) en la documentación de AWS CDK.
+ Python 3 y `pip`, instalado y configurado. Para obtener más información, consulte la [documentación de Python](https://www.python.org/).
+ Familiaridad con AWS CDK CodeBuild, CodePipeline AWS, CodeCommit Amazon Elastic Container Registry (Amazon ECR), Amazon ECS y AWS Fargate.
+ Conocimientos de Docker.
+ Una comprensión de y. CI/CD DevOps

**Limitaciones**
+ Se aplican límites generales a las cuentas de AWS. Para obtener más información al respecto, consulte [AWS Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) en la documentación de referencia general de AWS.

**Versiones de producto**
+ El código se probó usando Node.js versión 16.13.0 y AWS CDK versión 1.132.0.

## Arquitectura
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-architecture"></a>

![\[Nube de AWS architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/05ac2cad-408e-433f-8150-0a2b71f63cfd/images/6fa3dbef-88de-4b3f-ae41-dfa90256a058.png)


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

1. Un desarrollador de aplicaciones envía el código a un CodeCommit repositorio.

1. Se inicia una canalización.

1. CodeBuild compila y envía la imagen de Docker a un repositorio de Amazon ECR

1. CodePipeline implementa una nueva imagen en un servicio Fargate existente en un clúster de Amazon ECS que no es de producción.

1. Amazon ECS extrae la imagen del repositorio de Amazon ECR y la coloca en un servicio Fargate de no producción.

1. Las pruebas se realizan mediante una URL de no producción.

1. El administrador de versiones aprueba la implementación de producción.

1. CodePipeline implementa la nueva imagen en un servicio Fargate existente en un clúster de Amazon ECS de producción

1. Amazon ECS extrae la imagen del repositorio de Amazon ECR y la coloca en el servicio Fargate de producción.

1. Los usuarios de producción acceden a su característica mediante una URL de producción.

**Pila de tecnología**
+ AWS CDK
+ CodeBuild
+ CodeCommit 
+ CodePipeline
+ Amazon ECR 
+ Amazon ECS 
+ Amazon VPC

**Automatización y escala**

Puede utilizar el enfoque de este patrón para crear canalizaciones para los microservicios implementados en una pila de AWS CloudFormation compartida. La automatización puede crear más de un clúster de Amazon ECS en cada VPC y también crear canalizaciones para los microservicios implementados en un clúster de Amazon ECS compartido. Sin embargo, esto requiere que proporcione nueva información sobre los recursos como entradas a la pila de canalizaciones.

## Tools (Herramientas)
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-tools"></a>
+ [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html): el AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software para definir la infraestructura de nube en el código y aprovisionarla a través de AWS. CloudFormation
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html): AWS CodeBuild es un servicio de compilación en la nube totalmente gestionado. CodeBuild compila su código fuente, ejecuta pruebas unitarias y produce artefactos que están listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html): AWS CodeCommit es un servicio de control de versiones que le permite almacenar y gestionar de forma privada los repositorios de Git en la nube de AWS. CodeCommit elimina la necesidad de administrar su propio sistema de control de código fuente o de preocuparse por escalar su infraestructura.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html): AWS CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar su software. Puede modelar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software. CodePipeline automatiza los pasos necesarios para publicar los cambios de software de forma continua.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html): Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores altamente escalable y rápido que se utiliza para ejecutar, detener y administrar contenedores en un clúster. Las tareas y los servicios se pueden ejecutar en una infraestructura sin servidor administrada por AWS Fargate. Alternativamente, para obtener más control sobre su infraestructura, puede ejecutar sus tareas y servicios en un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que administre.
+ [Docker](https://www.docker.com/): Docker ayuda a los desarrolladores a empaquetar, enviar y ejecutar cualquier aplicación como un contenedor ligero, portátil y autosuficiente.

**Código**

El código de este patrón está disponible en los archivos `cicdstarter.zip` y `starter-code.zip` (adjuntos).

## Epics
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el directorio de trabajo de AWS CDK.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestructura en la nube | 

### Crear la infraestructura compartida
<a name="create-the-shared-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la infraestructura compartida. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestructura en la nube | 
| Supervise la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestructura en la nube | 
| Pruebe la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Asegúrese de registrar el grupo de seguridad IDs para los dos VPCs y el grupo de seguridad IDs para los grupos de seguridad predeterminados en ambos VPCs. | AWS DevOps, infraestructura en la nube | 

### Cree una CI/CD canalización para un microservicio
<a name="create-a-ci-cd-pipeline-for-a-microservice"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la infraestructura para el microservicio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)También puede proporcionar los valores de ambos comandos mediante el archivo `cdk.json` del directorio. | AWS DevOps, infraestructura en la nube | 
| Supervise la CloudFormation pila de AWS. | Abra la CloudFormation consola de AWS y supervise el progreso de la `myservice1-cicd-stack` pila. Finalmente, el estado cambia a `CREATE_COMPLETE`*.* | AWS DevOps, infraestructura en la nube | 
| Pruebe la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) |  | 
| Use la canalización. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestructura en la nube | 
| Repita esta épica para cada microservicio. | Repita las tareas de esta epopeya para crear una CI/CD canalización para cada uno de sus microservicios. | AWS DevOps, infraestructura en la nube | 

## Recursos relacionados
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-resources"></a>
+ [Uso de Python con AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-python.html) 
+ [Referencia sobre Python de AWS CDK](https://docs.aws.amazon.com/cdk/api/latest/python/index.html)
+ [Creación de un servicio de AWS Fargate con AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/ecs_example.html)

## Información adicional
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-additional"></a>

**Comando de la `cdk synth`**

```
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
```

**`cdk deploy `command**

```
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice> 
```

## Conexiones
<a name="attachments-05ac2cad-408e-433f-8150-0a2b71f63cfd"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/05ac2cad-408e-433f-8150-0a2b71f63cfd/attachments/attachment.zip)

# Cree e inserte imágenes de Docker en Amazon ECR mediante GitHub Actions y Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Resumen
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Este patrón explica cómo puede crear GitHub flujos de trabajo reutilizables para crear su Dockerfile y enviar la imagen resultante a Amazon Elastic Container Registry (Amazon ECR). El patrón automatiza el proceso de creación de sus Dockerfiles mediante Terraform y Actions. GitHub Esto minimiza la posibilidad de que se cometan errores humanos y reduce sustancialmente el tiempo de implementación.

Una GitHub acción de envío a la rama principal de tu GitHub repositorio inicia el despliegue de los recursos. El flujo de trabajo crea un repositorio Amazon ECR único en función de la combinación de la GitHub organización y el nombre del repositorio. A continuación, inserta la imagen de Dockerfile en un repositorio de Amazon ECR.

## Requisitos previos y limitaciones
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Una GitHub cuenta activa.
+ Un [GitHub repositorio](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ La versión 1 o posterior de Terraform [instalada y configurada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Un bucket de Amazon Simple Storage Service (Amazon S3) para el [backend de Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3).
+ Una tabla de [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) para el bloqueo y la coherencia del estado de Terraform. La tabla debe tener una clave de partición denominada `LockID` con un tipo de `String`. Si no está configurado, se deshabilitará el bloqueo por estado.
+ Un rol de AWS Identity and Access Management (IAM) con permisos para configurar el backend de Amazon S3 para Terraform. Para obtener instrucciones sobre la configuración, consulte la [documentación de Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Limitaciones**

Este código reutilizable solo se ha probado con GitHub Actions.

## Arquitectura
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Pila de tecnología de destino**
+ Repositorio de Amazon ECR
+ GitHub Acciones
+ Terraform

**Arquitectura de destino**

![\[Flujo de trabajo para crear GitHub flujos de trabajo reutilizables para crear Dockerfile y enviar imágenes a Amazon ECR.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


En el siguiente diagrama se ilustra lo siguiente:

1. Un usuario añade plantillas de Dockerfile y Terraform al repositorio. GitHub 

2. Estas adiciones inician un GitHub flujo de trabajo de acciones.

3. El flujo de trabajo comprueba si existe un repositorio de Amazon ECR. De lo contrario, crea el repositorio en función de la GitHub organización y el nombre del repositorio.

4. El flujo de trabajo crea el Dockerfile e inserta la imagen en el repositorio de Amazon ECR.

## Tools (Herramientas)
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Servicios de Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de contenedor administrado que es seguro, escalable y fiable.

**Otras herramientas**
+ [GitHub Actions](https://docs.github.com/en/actions) está integrado en la GitHub plataforma para ayudarte a crear, compartir y ejecutar flujos de trabajo en tus GitHub repositorios. Puedes usar GitHub Actions para automatizar tareas como crear, probar e implementar tu código.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar infraestructuras locales y en la nube.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de flujos de trabajo de GitHub [Docker ECR](https://github.com/aws-samples/docker-ecr-actions-workflow) Actions.
+ Al crear GitHub acciones, los archivos de flujo de trabajo de Docker se guardan en la `/.github/workflows/` carpeta de este repositorio. El flujo de trabajo de esta solución se encuentra en el archivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ La carpeta `e2e-test` proporciona un ejemplo de Dockerfile para consultarlo y probarlo.

## Prácticas recomendadas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Para conocer las prácticas recomendadas para escribir Dockerfiles, consulte la [documentación de Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Use un [punto de conexión de VPC para Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Los puntos de enlace de VPC funcionan con AWS PrivateLink, una tecnología que le permite acceder de forma privada a Amazon ECR a APIs través de direcciones IP privadas. Para las tareas de Amazon ECS que utilizan el tipo de lanzamiento Fargate, el punto de conexión de VPC permite a la tarea extraer imágenes privadas de Amazon ECR sin necesidad de asignar una dirección IP pública a la tarea.

## Epics
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Configure el proveedor y el repositorio del OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure OpenID Connect. | Cómo crear un proveedor de OpenID Connect (OIDC) Usará el proveedor de la política de confianza para el rol de IAM que se use en esta acción. Para obtener instrucciones, consulte [Configuración de OpenID Connect en Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) en la GitHub documentación. | Administrador de AWS DevOps, AWS general | 
| Clona el GitHub repositorio. | Clona el repositorio de GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow) en tu carpeta local:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps ingeniero | 

### Personalice el flujo de trabajo GitHub reutilizable e implemente la imagen de Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Personalice del evento que inicia el flujo de trabajo de Docker. | El flujo de trabajo de esta solución se encuentra en [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). Actualmente, este script está configurado para implementar recursos cuando recibe el evento `workflow_dispatch`. Para personalizar esta configuración, cambe el evento a `workflow_call` y llame al flujo de trabajo desde otro flujo de trabajo principal. | DevOps ingeniero | 
| Personalice el flujo de trabajo. | El archivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) está configurado para crear un flujo de trabajo dinámico y reutilizable. GitHub Puedes editar este archivo para personalizar la configuración predeterminada o puedes pasar los valores de entrada desde la consola de GitHub Actions si utilizas el `workflow_dispatch` evento para iniciar la implementación manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps ingeniero | 
| Implemente las plantillas de Terraform. | El flujo de trabajo implementa automáticamente las plantillas de Terraform que crean el repositorio de Amazon ECR, en función del GitHub evento que haya configurado. Estas plantillas están disponibles como archivos `.tf` en la [raíz del repositorio de Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps ingeniero | 

## Resolución de problemas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Problemas o errores al configurar Amazon S3 y DynamoDB como el backend remoto de Terraform. | Siga las instrucciones de la [documentación de Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) para configurar los permisos necesarios en los recursos de Amazon S3 y DynamoDB para la configuración del backend remoto. | 
| No se pudo ejecutar ni iniciar el flujo de trabajo con el evento `workflow_dispatch`. | El flujo de trabajo que está configurado para implementarse desde el evento `workflow_dispatch` solo funcionará si también está configurado en la rama principal. | 

## Recursos relacionados
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Reutilización de flujos de trabajo](https://docs.github.com/en/actions/using-workflows/reusing-workflows) (GitHub documentación)
+ [Activación de un flujo de trabajo (documentación](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 

# Cree y pruebe aplicaciones iOS con AWS CodeCommit CodePipeline, AWS y AWS Device Farm
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Resumen
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-summary"></a>

Este patrón describe los pasos para crear una canalización de integración y entrega continuas (CI/CD) que utilice AWS CodePipeline para crear y probar aplicaciones iOS en dispositivos reales de AWS. El patrón utiliza AWS CodeCommit para almacenar el código de la aplicación, la herramienta de código abierto de Jenkins para crear la aplicación iOS y AWS Device Farm para probar la aplicación creada en dispositivos reales. Estas tres fases se organizan juntas en una canalización mediante AWS CodePipeline.

Este patrón se basa en la publicación [Creación y prueba de aplicaciones iOS y iPadOS con AWS DevOps y servicios móviles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) en el DevOps blog de AWS. Para obtener instrucciones más detalladas, consulte la entrada del blog.

## Requisitos previos y limitaciones
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Una cuenta de desarrollador de Apple
+ Servidor de compilación (macOS)
+ [Xcode](https://developer.apple.com/xcode/) versión 11.3 (instalada y configurada en el servidor de compilación)
+ Interfaz de la línea de comandos de AWS (AWS CLI) [instalada](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) y [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) en la estación de trabajo
+ Conocimientos básicos de [Git](https://git-scm.com/docs)

**Limitaciones**
+ El servidor de compilación de aplicaciones debe ejecutar macOS. 
+ El servidor de compilación debe tener una dirección IP pública, por lo que CodePipeline puede conectarse a ella de forma remota para iniciar las compilaciones.

## Arquitectura
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-architecture"></a>

**Pila de tecnología de origen**
+ Un proceso de creación de aplicaciones iOS en las instalaciones que implica el uso de un simulador o una prueba manual en dispositivos físicos

**Pila de tecnología de destino**
+ Un CodeCommit repositorio de AWS para almacenar el código fuente de las aplicaciones
+ Un servidor Jenkins para compilar aplicaciones con Xcode
+ Un conjunto de dispositivos de AWS Device Farm para probar aplicaciones en dispositivos reales

**Arquitectura de destino**

Cuando un usuario confirma cambios en el repositorio fuente, la canalización (AWS CodePipeline) recupera el código del repositorio fuente, inicia una compilación de Jenkins y pasa el código de la aplicación a Jenkins. Tras la compilación, la canalización recupera el artefacto de compilación e inicia un trabajo de AWS Device Farm para probar la aplicación en un grupo de dispositivos.

 

![\[CI/CD Pipeline utiliza AWS CodePipeline para crear y probar aplicaciones iOS en dispositivos reales.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/06fbd82f-4aed-441c-818c-5f89f56af78e/images/0ae3d7b6-b40c-44ef-9580-8c8266c3d841.png)


## Tools (Herramientas)
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-tools"></a>
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) es un servicio de entrega continua totalmente gestionado que le ayuda a automatizar sus procesos de lanzamiento para obtener actualizaciones rápidas y fiables de las aplicaciones y la infraestructura. CodePipeline automatiza las fases de creación, prueba e implementación del proceso de lanzamiento cada vez que se produce un cambio de código, en función del modelo de lanzamiento que defina.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de código fuente totalmente gestionado que aloja repositorios seguros basados en Git. Facilita a los equipos la colaboración en el código en un ecosistema seguro y altamente escalable. CodeCommit elimina la necesidad de operar su propio sistema de control de código fuente o preocuparse por escalar su infraestructura.
+ [AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) es un servicio de pruebas de aplicaciones que le permite mejorar la calidad de sus aplicaciones web y móviles probándolas en una amplia gama de navegadores de escritorio y dispositivos móviles reales, sin tener que aprovisionar ni administrar ninguna infraestructura de pruebas.
+ [Jenkins](https://www.jenkins.io/) es un servidor de código abierto de automatización que permite a los desarrolladores crear, probar e implementar su software.

## Epics
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-epics"></a>

### Configure el entorno de compilación
<a name="set-up-the-build-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar Jenkins en el servidor de compilación que ejecuta macOS. | Jenkins se utilizará para crear la aplicación, por lo que debe instalarla antes de nada en el servidor de compilación. Para obtener instrucciones detalladas para esta y otras tareas posteriores, consulte la entrada del blog de AWS sobre cómo [crear y probar aplicaciones iOS y iPadOS con AWS DevOps y servicios móviles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) y otros recursos en la sección [Recursos relacionados](#build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources) al final de este patrón. | DevOps | 
| Configure Jenkins. | Siga las instrucciones en pantalla para configurar Jenkins. | DevOps | 
| Instale el CodePipeline complemento de AWS para Jenkins. | Este complemento debe estar instalado en el servidor de Jenkins para que Jenkins interactúe con el servicio de AWS CodePipeline . | DevOps | 
| Cree un proyecto de estilo libre de Jenkins. | En Jenkins, cree un proyecto de estilo libre. Configure el proyecto para especificar los activadores y otras opciones de configuración de compilación. | DevOps | 

### Configure AWS Device Farm
<a name="configure-aws-device-farm"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un proyecto de Device Farm. | Abra la consola de AWS Device Farm. Cree un proyecto y un grupo de dispositivos para realizar pruebas. Consulte esta entrada de blog para obtener instrucciones. | Desarrollador | 

### Configure el repositorio de origen
<a name="configure-the-source-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un CodeCommit repositorio. | Cree un repositorio donde se almacenará el código fuente. | DevOps | 
| Confirme el código de la aplicación en el repositorio. | Conéctese al CodeCommit repositorio que creó. Inserte el código desde el equipo local en el repositorio. | DevOps | 

### Configure la canalización
<a name="configure-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una canalización en AWS CodePipeline. | Abra la CodePipeline consola de AWS y cree una canalización. La canalización organiza todas las fases del CI/CD proceso. Para obtener instrucciones, consulte la entrada del blog de AWS sobre cómo [crear y probar aplicaciones iOS y iPadOS con AWS DevOps y servicios móviles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/). | DevOps | 
| Añada una etapa de prueba a la canalización. | Edite la canalización para añadir una etapa de prueba e integrarla con AWS Device Farm. | DevOps | 
| Inicie la canalización. | Para iniciar la canalización y el CI/CD proceso, selecciona **Release change**. | DevOps | 

### Vea los resultados de las pruebas de la aplicación
<a name="view-application-test-results"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Revisar los resultados de la prueba. | En la consola de AWS Device Farm, seleccione el proyecto que creó y revise los resultados de las pruebas. La consola mostrará los detalles de cada prueba. | Desarrollador | 

## Recursos relacionados
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources"></a>

**Step-by-step instrucciones para este patrón**
+ [Creación y prueba de aplicaciones para iOS y iPadOS con AWS DevOps y servicios móviles](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) (entrada del DevOps blog de AWS)

**Configure AWS Device Farm**
+ [Consola AWS Device Farm](https://console.aws.amazon.com/devicefarm)

**Configure el repositorio de origen**
+ [Crear un CodeCommit repositorio de AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html)
+ [Conéctese a un CodeCommit repositorio de AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)

**Configure la canalización**
+ [ CodePipeline Consola AWS](https://console.aws.amazon.com/codesuite/codepipeline/home)

**Recursos adicionales**
+ [ CodePipeline Documentación de AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [ CodeCommit Documentación de AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)
+ [Documentación de AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html)
+ [Documentación de Jenkins](https://www.jenkins.io/doc/)
+ [Instalación de Jenkins en macOS](https://www.jenkins.io/download/weekly/macos/)
+ [ CodePipeline Complemento de AWS para Jenkins](https://plugins.jenkins.io/aws-codepipeline/)
+ [Instalación de Xcode](https://developer.apple.com/xcode/)
+ [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) y [configuración](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) de AWS CLI
+ [Documentación de Git](https://git-scm.com/docs)

# Configure autenticación TLS mutua para aplicaciones ejecutadas en Amazon EKS
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumen
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-summary"></a>

La seguridad mutua de la capa de transporte (TLS) basada en certificado es un componente de TLS opcional que proporciona autenticación entre pares bidireccional para servidores y clientes. Con la TLS mutua, los clientes deben proporcionar un certificado X.509 durante el proceso de negociación de la sesión. El servidor utiliza este certificado para identificar y autenticar al cliente.

El TLS mutuo es un requisito común para las aplicaciones de Internet de las cosas (IoT) y se puede usar para business-to-business aplicaciones o estándares como la [banca abierta](https://docs.aws.amazon.com/wellarchitected/latest/financial-services-industry-lens/open-banking.html).

Este patrón describe cómo configurar TLS mutua para aplicaciones ejecutadas en un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) mediante un controlador de entrada de NGINX. Puede habilitar las funciones de TLS mutua integradas para el controlador de entrada de NGINX anotando el recurso de entrada. Para obtener más información sobre las anotaciones de TLS mutua en los controladores NGINX, consulte [Autenticación con certificados de cliente](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication) en la documentación de Kubernetes.

**importante**  
Este patrón emplea certificados autofirmados. Se recomienda utilizar este patrón solo con clústeres de prueba y no en entornos de producción. Si desea usar este patrón en un entorno de producción, puede usar [AWS Private Certificate Authority (AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) o su estándar de infraestructura de clave pública (PKI) existente para emitir certificados privados.

## Requisitos previos y limitaciones
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa.
+ Un clúster existente de Amazon EKS.
+ Interfaz de la línea de comandos de AWS (AWS CLI) versión 1.7, instalada y configurada en macOS, Linux o Windows.
+ Utilidad de línea de comandos kubectl, instalada y configurada para acceder al clúster de Amazon EKS. Para obtener más información sobre esto, consulte [Instalar kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la documentación de Amazon EKS.
+ Un nombre existente de sistema de nombres de dominio (DNS) para probar la aplicación.

**Limitaciones**
+ Este patrón emplea certificados autofirmados. Se recomienda utilizar este patrón solo con clústeres de prueba y no en entornos de producción.

## Arquitectura
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-architecture"></a>

![\[Configure autenticación TLS mutua para aplicaciones ejecutadas en Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/ae2761e3-7ed2-4c2a-ba54-a4ddce8a1e7e/images/cefc60f9-2f29-4052-b7ae-df4eb6395e1c.png)


**Pila de tecnología **
+ Amazon EKS
+ Amazon Route 53
+ Kubectl

## Tools (Herramientas)
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-tools"></a>
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) le ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.
+ [Kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) es una utilidad de línea de comandos que se usa para interactuar con un clúster de Amazon EKS.

## Epics
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-epics"></a>

### Genere los certificados autofirmados
<a name="generate-the-self-signed-certificates"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Genere el certificado y la clave del servidor. | Genere la clave y el certificado de la entidad de certificación (CA) mediante el siguiente comando.<pre>openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'</pre> | DevOps ingeniero | 
| Genere la clave y el certificado del servidor y firme con el certificado de CA. | Genere la clave y el certificado del servidor y firme con el certificado de CA, utilizando el siguiente comando.<pre>openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>Asegúrese de sustituir `<your_domain_name>` por su nombre de dominio actual. | DevOps ingeniero | 
|  Genere la clave y el certificado del cliente y firme con el certificado de CA. | Genere la clave y el certificado del cliente, y firme la entidad de certificación (CA) mediante el siguiente comando.<pre>openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt</pre> | DevOps ingeniero | 

### Implemente el controlador de entrada NGINX
<a name="deploy-the-nginx-ingress-controller"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente el controlador de entrada de NGINX en el clúster de Amazon EKS. | Implemente el controlador de entrada de NGINX con el comando siguiente.<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml</pre> | DevOps ingeniero | 
|  Compruebe que el servicio de controlador de entrada de NGINX está en ejecución. | Compruebe que el servicio de controlador de entrada de NGINX está en ejecución utilizando el siguiente comando.<pre>kubectl get svc -n ingress-nginx</pre>Asegúrese de que el campo de dirección del servicio contenga el nombre de dominio del equilibrador de carga de red. | DevOps ingeniero | 

### Cree un espacio de nombres en el clúster de Amazon EKS para probar la TLS mutua
<a name="create-a-namespace-in-the-amazon-eks-cluster-to-test-mutual-tls"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un espacio de nombres en el clúster de Amazon EKS.  | Ejecute el siguiente comando para crear un espacio de nombres llamado `mtls` en el clúster de Amazon EKS. <pre>kubectl create ns mtls</pre>Se implementará la aplicación de ejemplo para probar la TLS mutua. | DevOps ingeniero | 

### Cree la implementación y el servicio de la aplicación de ejemplo
<a name="create-the-deployment-and-service-for-the-sample-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la implementación y el servicio de Kubernetes en el espacio de nombres mtls. | Cree un archivo denominado `mtls.yaml`. Pegue el código siguiente en el archivo. <pre>kind: Deployment<br />apiVersion: apps/v1<br />metadata:<br />  name: mtls-app<br />  labels:<br />    app: mtls<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: mtls<br />  template:<br />    metadata:<br />      labels:<br />        app: mtls<br />    spec:<br />      containers:<br />      - name: mtls-app<br />        image: hashicorp/http-echo<br />        args:<br />          - "-text=mTLS is working"<br /><br /><br />---<br /><br />kind: Service<br />apiVersion: v1<br />metadata:<br />  name: mtls-service<br />spec:<br />  selector:<br />    app: mtls<br />  ports:<br />    - port: 5678 # Default port for image</pre> Crea la implementación y el servicio de Kubernetes en el espacio de nombres `mtls` ejecutando el siguiente comando.<pre>kubectl create -f mtls.yaml -n mtls</pre> | DevOps ingeniero | 
| Compruebe que se ha creado la implementación de Kubernetes. | Ejecute el siguiente comando para comprobar que la implementación se ha creado y que hay un pod en estado disponible.<pre>kubectl get deploy -n mtls</pre> | DevOps ingeniero | 
| Compruebe que el servicio Kubernetes se ha creado. | Compruebe que el servicio de Kubernetes se haya creado ejecutando el siguiente comando.<pre>kubectl get service -n mtls</pre> | DevOps ingeniero | 

### Cree un secreto en el espacio de nombres mtls
<a name="create-a-secret-in-the-mtls-namespace"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un recurso para el recurso de entrada. | Ejecute el siguiente comando para crear un secreto en el controlador de entrada NGINX con los certificados que creó anteriormente.<pre>kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls </pre>Su secreto tiene un certificado de servidor para que el cliente identifique el servidor, y un certificado de CA para que el servidor verifique los certificados del cliente. | DevOps ingeniero | 

### Cree el recurso de entrada en el espacio de nombres mtls
<a name="create-the-ingress-resource-in-the-mtls-namespace"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el recurso de entrada en el espacio de nombres mtls. | Cree un archivo denominado `ingress.yaml`. Pegue el siguiente código en el archivo (sustituya `<your_domain_name>` por su nombre de dominio actual).<pre>apiVersion: networking.k8s.io/v1<br />kind: Ingress<br />metadata:<br />  annotations:<br />    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"<br />    nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs<br />  name: mtls-ingress<br />spec:<br />  ingressClassName: nginx<br />  rules:<br />  - host: "*.<your_domain_name>"<br />    http:<br />      paths:<br />      - path: /<br />        pathType: Prefix<br />        backend:<br />          service:<br />            name: mtls-service<br />            port:<br />              number: 5678<br />  tls:<br />  - hosts:<br />    - "*.<your_domain_name>"<br />    secretName: mtls-certs</pre>Cree el recurso de entrada en el espacio de nombres `mtls` ejecutando el siguiente comando.<pre>kubectl create -f ingress.yaml -n mtls</pre>Así, el controlador de entrada de NGINX podrá enrutar el tráfico a su aplicación de muestra. | DevOps ingeniero | 
| Compruebe que se ha creado el recurso de entrada. | Compruebe que el servicio de entrada se haya creado ejecutando el siguiente comando.<pre>kubectl get ing -n mtls</pre>Asegúrese de que la dirección del recurso de entrada muestre el equilibrador de carga creado para el controlador de entrada de NGINX. | DevOps ingeniero | 

### Configure el DNS para que dirija el nombre de host al equilibrador de carga
<a name="configure-dns-to-point-the-hostname-to-the-load-balancer"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un registro CNAME que apunte al equilibrador de carga del controlador de entrada de NGINX. | Inicie sesión en la consola de administración de AWS, abra la consola de Amazon Route 53 y cree un registro de nombre canónico (CNAME) que apunte `mtls.<your_domain_name>` al equilibrador de carga del controlador de entrada de NGINX.Para obtener más información, consulte [Creación de registros con la consola de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) en la documentación de Route 53. | DevOps ingeniero | 

### Pruebe la aplicación
<a name="test-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la configuración de TLS mutua sin certificados. | Ejecute el comando siguiente.<pre>curl -k https://mtls.<your_domain_name> </pre>Debería recibir la respuesta de error “400 No required SSL certificate was sent”. | DevOps ingeniero | 
| Pruebe la configuración de TLS mutua con certificados. | Ejecute el comando siguiente.<pre>curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key</pre>Debería recibir la respuesta “mTLS is working”. | DevOps ingeniero | 

## Recursos relacionados
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-resources"></a>
+ [Creación de registros con la consola de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
+ [Uso de un equilibrador de carga de red con el controlador de entrada de NGINX en Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/)
+ [Autenticación con certificado de cliente](https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/)

# Automatice la creación de recursos de Amazon WorkSpaces Applications mediante AWS CloudFormation
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-summary"></a>

Este patrón proporciona ejemplos de código y pasos para automatizar la creación de recursos de [Amazon WorkSpaces Applications](https://aws.amazon.com/workspaces/applications/) en el Nube de AWS mediante una [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)plantilla. El patrón le muestra cómo utilizar una CloudFormation pila para automatizar la creación de los recursos de WorkSpaces las aplicaciones, incluidos un generador de imágenes, una imagen, una instancia de flota y una pila. Puede transmitir su aplicación de WorkSpaces aplicaciones a los usuarios finales a través HTML5 de un navegador compatible mediante el modo de entrega de aplicaciones o de escritorio.

## Requisitos previos y limitaciones
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Una aceptación de los términos y condiciones de la WorkSpaces solicitud
+ [Conocimientos básicos de los recursos de WorkSpaces las aplicaciones, como [las flotas y las pilas y los](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html) creadores de imágenes](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-image-builders.html)

**Limitaciones**
+ No puede modificar el rol [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)(IAM) asociado a una instancia de WorkSpaces Applications una vez creada esa instancia.
+ No puede modificar las propiedades (como la [subred](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics) o el [grupo de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)) de la instancia del generador de imágenes de WorkSpaces Applications una vez creado el generador de imágenes.

## Arquitectura
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-architecture"></a>

En el siguiente diagrama, se muestra cómo automatizar la creación de recursos de WorkSpaces aplicaciones mediante una CloudFormation plantilla.

![\[Flujo de trabajo para crear automáticamente recursos de WorkSpaces aplicaciones.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/4f0205f5-5b91-4832-9f0f-2135ae866226/images/cb578939-d9af-4f60-93c9-286881df4c3a.png)


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

1. Puedes crear una CloudFormation plantilla basada en el código YAML en la sección de [información adicional](#automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional) de este patrón.

1. La CloudFormation plantilla crea una pila CloudFormation de pruebas.

   1. (Opcional) Puede crear una instancia de creación de imágenes mediante WorkSpaces Aplicaciones.

   1. (Opcional) Puede crear una imagen de Windows con su software personalizado.

1. La CloudFormation pila crea una flota de WorkSpaces aplicaciones, una instancia y una pila.

1. Usted despliega los recursos de sus WorkSpaces aplicaciones para los usuarios finales en un navegador HTML5 compatible.

## Tools (Herramientas)
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-tools"></a>
+ [Amazon WorkSpaces Applications](https://docs.aws.amazon.com/appstream2/latest/developerguide/what-is-appstream.html) es un servicio de streaming de aplicaciones totalmente gestionado que le proporciona acceso instantáneo a sus aplicaciones de escritorio desde cualquier lugar. WorkSpaces Applications administra los AWS recursos necesarios para alojar y ejecutar sus aplicaciones, se amplía automáticamente y proporciona acceso a sus usuarios cuando lo soliciten.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a modelar y configurar sus AWS recursos, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida. Facilita poder usar una plantilla para describir los recursos y sus dependencias, y lanzarlos y configurarlos juntos como una pila, en lugar de administrarlos de forma individual. Puede gestionar y aprovisionar pilas en varios Cuentas de AWS y. Regiones de AWS

## Prácticas recomendadas
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-best-practices"></a>
+ **Configure correctamente el acceso a la red para los creadores** de imágenes: inicie los creadores de imágenes en subredes de nube privada virtual (VPC) con el acceso adecuado a Internet mediante una puerta de enlace NAT para el acceso a Internet solo saliente.

  Pruebe la conectividad de la red con los recursos necesarios (como servidores de aplicaciones, bases de datos y servidores de licencias) antes de crear imágenes. Compruebe que las tablas de enrutamiento de la VPC permiten las conexiones a todos los recursos de red necesarios. Para obtener más información, consulte el [acceso a Internet](https://docs.aws.amazon.com/appstream2/latest/developerguide/internet-access.html) en la documentación de las WorkSpaces aplicaciones.
+ **Supervise la capacidad de la flota comparándola con las cuotas de servicio de forma proactiva**: WorkSpaces las cuotas de tipo y tamaño de las instancias de las aplicaciones se calculan por Cuenta de AWS unidad Región de AWS. Si tiene varias flotas en la misma región que utilicen el mismo tipo y tamaño de instancia, el número total de instancias de todas las flotas de esa región debe ser inferior o igual a la cuota aplicable. Para obtener más información, consulte [Solución de problemas de flotas](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-fleets.html) en la documentación de las WorkSpaces aplicaciones.
+ **Pruebe las aplicaciones en el modo de prueba de Image Builder antes del despliegue de la flota**: valide siempre las aplicaciones en el modo de prueba de Image Builder antes de crear imágenes e implementarlas en las flotas. El modo de prueba simula los permisos limitados que tienen los usuarios finales en las instancias de la flota. Para obtener más información, consulte [Solución de problemas con los generadores de imágenes](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-image-builder.html#troubleshooting-07) en la documentación de WorkSpaces las aplicaciones.

## Epics
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-epics"></a>

### (Opcional) Cree una imagen de la WorkSpaces aplicación
<a name="optional-create-a-aas2-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale un software personalizado y cree una imagen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html)Considere la posibilidad de utilizar la AppLocker función de Windows para bloquear aún más la imagen. | AWS DevOps, arquitecto de nube | 

### Implemente la CloudFormation plantilla
<a name="deploy-the-cfn-template"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice la CloudFormation plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Administrador de sistemas de AWS, administrador de la nube, arquitecto de la nube, AWS general, administrador de AWS | 
| Crea una CloudFormation pila con la plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Propietario de la aplicación, administrador de sistemas de AWS, ingeniero de Windows | 

## Resolución de problemas
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Varios problemas | Para obtener más información, consulte [Solución de problemas](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting.html) en la documentación de WorkSpaces las aplicaciones. | 

## Recursos relacionados
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-resources"></a>

**Referencias**
+ [Introducción a Amazon WorkSpaces Applications: configuración con aplicaciones de muestra](https://docs.aws.amazon.com/appstream2/latest/developerguide/getting-started.html)
+ [Cree una flota y una pila de WorkSpaces aplicaciones de Amazon](https://docs.aws.amazon.com/appstream2/latest/developerguide/set-up-stacks-fleets.html)

**Tutoriales y videos**
+ [Flujo de trabajo WorkSpaces de usuario de Amazon Applications](https://www.youtube.com/watch?v=hVGQ87-Uhrc)
+ [Cómo migrar una aplicación antigua de Windows Forms a Amazon WorkSpaces Applications](https://www.youtube.com/watch?v=CIImtS2iVbg)
+ [AWS re:Invent 2018: Entregue aplicaciones de escritorio de forma segura con Amazon WorkSpaces Applications (01) BAP2](https://www.youtube.com/watch?v=xNIyc_inOhM)

## Información adicional
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional"></a>

El siguiente código es un ejemplo de una CloudFormation plantilla que puede utilizar para crear automáticamente recursos de WorkSpaces aplicaciones.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  SubnetIds:
    Type: 'List<AWS::EC2::Subnet::Id>'
  testSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup::Id'
  ImageName:
    Type: String
Resources:
  
  AppStreamFleet:
    Type: 'AWS::AppStream::Fleet'
    Properties:
      ComputeCapacity:
        DesiredInstances: 5
      InstanceType: stream.standard.medium
      Name: appstream-test-fleet
      DisconnectTimeoutInSeconds: 1200
      FleetType: ON_DEMAND
      IdleDisconnectTimeoutInSeconds: 1200
      ImageName: !Ref ImageName
      MaxUserDurationInSeconds: 345600
      VpcConfig:
        SecurityGroupIds:
          - !Ref testSecurityGroup
        SubnetIds: !Ref SubnetIds
  AppStreamStack:
    Type: 'AWS::AppStream::Stack'
    Properties:
      Description: AppStream stack for test
      DisplayName: AppStream test Stack
      Name: appstream-test-stack
      StorageConnectors:
        - ConnectorType: HOMEFOLDERS
      UserSettings:
        - Action: CLIPBOARD_COPY_FROM_LOCAL_DEVICE
          Permission: ENABLED
        - Action: CLIPBOARD_COPY_TO_LOCAL_DEVICE
          Permission: ENABLED
        - Action: FILE_DOWNLOAD
          Permission: ENABLED
        - Action: PRINTING_TO_LOCAL_DEVICE
          Permission: ENABLED
  AppStreamFleetAssociation:
    Type: 'AWS::AppStream::StackFleetAssociation'
    Properties:
      FleetName: appstream-test-fleet
      StackName: appstream-test-stack
    DependsOn:
      - AppStreamFleet
      - AppStreamStack
```

# Crear un analizador de registros personalizado para Amazon ECS mediante un enrutador de registros Firelens
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router"></a>

*Varun Sharma, Amazon Web Services*

## Resumen
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-summary"></a>

Firelens es un router de registros para Amazon Elastic Container Service (Amazon ECS) y AWS Fargate. Puede usar Firelens para enrutar los registros de contenedores desde Amazon ECS a Amazon CloudWatch y otros destinos (por ejemplo, [Splunk](https://www.splunk.com/) o [Sumo](https://www.sumologic.com/) Logic). Firelens funciona con [Fluentd](https://www.fluentd.org/) o [Fluent Bit](https://fluentbit.io/) como agente de registro, lo que significa que puede utilizar los [parámetros de definición de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) para enrutar los registros.

Al elegir analizar los registros en el nivel de origen, puede analizar los datos de registro y realizar consultas para responder de manera más eficiente y eficaz a los problemas operativos. Como las distintas aplicaciones tienen patrones de registro diferentes, es necesario utilizar un analizador personalizado que estructure los registros y facilite la búsqueda en el destino final.

Este patrón utiliza un router de registro Firelens con un analizador personalizado para enviar los registros CloudWatch desde una aplicación Spring Boot de muestra que se ejecuta en Amazon ECS. A continuación, puede utilizar Amazon CloudWatch Logs Insights para filtrar los registros en función de los campos personalizados generados por el analizador personalizado. 

## Requisitos previos y limitaciones
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa.
+ Interfaz de la línea de comandos de AWS (AWS CLI), instalada y configurada en su equipo local.
+ Docker, instalado y configurado en su equipo local.
+ Una aplicación en contenedores existente basada en Spring Boot en Amazon Elastic Container Registry (Amazon ECR). 

## Arquitectura
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-architecture"></a>

![\[Uso de un router de registros Firelens para enviar registros CloudWatch desde una aplicación que se ejecuta en Amazon ECS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/images/ef60e087-965a-40e9-9f80-35edbda2befe.png)


**Pila de tecnología**
+ CloudWatch
+ Amazon ECR
+ Amazon ECS
+ Fargate
+ Docker
+ Fluent Bit

## Tools (Herramientas)
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-tools"></a>
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html): Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado por AWS que es seguro, escalable y fiable.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html): Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores altamente escalable y rápido que facilita la tarea de ejecutar, detener y administrar contenedores en un clúster.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): IAM es un servicio web que le ayuda a controlar el acceso seguro a los servicios de AWS.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): la interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de línea de comandos.
+ [Docker](https://www.docker.com/) – Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones.

**Código**

Los siguientes archivos se adjuntan a este patrón:
+ `customFluentBit.zip` – Contiene los archivos para añadir el análisis y las configuraciones personalizados.
+ `firelens_policy.json` – Contiene el documento de política para crear una política de IAM.
+ `Task.json` – Contiene una muestra de definición de tarea para Amazon ECS.

## Epics
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-epics"></a>

### Crear una imagen de Fluent Bit personalizada
<a name="create-a-custom-fluent-bit-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio de Amazon ECR. | Inicie sesión en la consola de administración de AWS, abra la consola de Amazon ECR y cree un repositorio llamado `fluentbit_custom`.Para obtener más información al respecto, consulte [Creación de un repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la documentación de Amazon ECR. | Administrador de sistemas, desarrollador | 
| Descomprima el paquete .zip. customFluentBit |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) |  | 
| Cree la imagen de Docker personalizada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Para más informaciónf sobre esto, consulte [Insertar una imagen de Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) en la documentación de Amazon ECR.  | Administrador de sistemas, desarrollador | 

### Configure el clúster de Amazon ECS
<a name="set-up-the-amazon-ecs-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un clúster de Amazon ECS. | Cree un clúster de Amazon ECS siguiendo las instrucciones de la sección sobre *Plantillas exclusivas para redes* de la sección [Creación de un clúster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) de la documentación de Amazon ECS.Asegúrese de seleccionar **Crear VPC** para crear una nueva nube privada virtual (VPC) para su clúster de Amazon ECS. | Administrador de sistemas, desarrollador | 

### Configurar la tarea de Amazon ECS
<a name="set-up-the-amazon-ecs-task"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Configurar el rol de IAM de ejecución de tareas de Amazon ECS | Cree un rol de IAM de ejecución de tareas de Amazon ECS con la política `AmazonECSTaskExecutionRolePolicy` administrada. Para obtener más información al respecto, consulte [Rol de IAM de ejecución de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) en la documentación de Amazon ECS.Asegúrese de registrar el Nombre de recurso de Amazon (ARN) del rol de IAM. | Administrador de sistemas, desarrollador | 
|  Adjunte la política de IAM al rol de IAM de ejecución de tareas de Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrador de sistemas, desarrollador | 
| Configure la definición de tarea de Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Para obtener más información al respecto, consulte [Crear una definición de tarea](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) en la documentación de Amazon ECS. | Administrador de sistemas, desarrollador | 

### Ejecutar la tarea de Amazon ECS
<a name="run-the-amazon-ecs-task"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la tarea de Amazon ECS.  | En la consola de Amazon ECS, seleccione **Clústeres**, seleccione el clúster que creó anteriormente y, a continuación, ejecute la tarea independiente.Para obtener más información al respecto, consulte [Ejecutar una tarea independiente](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html) en la documentación de Amazon ECS. | Administrador de sistemas, desarrollador | 

### Verifica los registros CloudWatch
<a name="verify-the-cloudwatch-logs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique los registros.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrador de sistemas, desarrollador | 

## Recursos relacionados
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-resources"></a>
+ [Conceptos básicos de Docker para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) 
+ [Amazon ECS en AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 
+ [Configuración de parámetros de servicio básicos](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) 

## Conexiones
<a name="attachments-e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/attachments/attachment.zip)

# Cree un marco de orquestación de recursos basado en API con GitHub Actions y Terragrunt
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande y Akash Kumar, Amazon Web Services*

## Resumen
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

Este patrón aprovecha los flujos de trabajo de GitHub Actions para automatizar el aprovisionamiento de recursos mediante cargas JSON estandarizadas, lo que elimina la necesidad de realizar una configuración manual. Esta canalización automatizada gestiona todo el ciclo de vida de la implementación y puede integrarse sin problemas con varios sistemas frontend, desde componentes de interfaz de usuario personalizados hasta componentes de interfaz de usuario personalizados. ServiceNow La flexibilidad de la solución permite a los usuarios interactuar con el sistema a través de sus interfaces preferidas y, al mismo tiempo, mantener los procesos estandarizados.

La arquitectura de canalización configurable se puede adaptar para cumplir con diferentes requisitos organizativos. La implementación de ejemplo se centra en el aprovisionamiento de Amazon Virtual Private Cloud (Amazon VPC) y de Amazon Simple Storage Service (Amazon S3). El patrón aborda de manera efectiva los desafíos comunes de administración de los recursos de la nube al estandarizar las solicitudes en toda la organización y proporcionar puntos de integración consistentes. Este enfoque facilita a los equipos la solicitud y la administración de los recursos y, al mismo tiempo, garantiza la estandarización.

## Requisitos previos y limitaciones
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Una GitHub cuenta activa con acceso al repositorio configurado

**Limitaciones**
+ Los nuevos recursos requieren la adición manual de archivos `terragrunt.hcl` a la configuración del repositorio.
+ Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

En el siguiente diagrama se muestran los componentes y el flujo de trabajo de este patrón.

![\[Flujo de trabajo para automatizar el aprovisionamiento de recursos con GitHub Actions y Terraform.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


En el siguiente diagrama de arquitectura se muestran las siguientes acciones:

1. El usuario envía una carga útil de JSON a GitHub Actions, lo que desencadena el proceso de automatización.

1. La canalización de GitHub Actions recupera el código de recursos necesario de los repositorios de Terragrunt y Terraform, en función de las especificaciones de la carga útil.

1. La canalización asume la función AWS Identity and Access Management (IAM) adecuada con el ID especificado. Cuenta de AWS A continuación, la canalización despliega los recursos en el destino Cuenta de AWS y administra el estado de Terraform mediante el bucket de Amazon S3 específico de la cuenta y la tabla de Amazon DynamoDB.

Cada uno Cuenta de AWS contiene funciones de IAM para un acceso seguro, un depósito de Amazon S3 para el almacenamiento de estados de Terraform y una tabla de DynamoDB para el bloqueo de estados. Este diseño permite la implementación controlada y automatizada de los recursos en todas las Cuentas de AWS. El proceso de implementación mantiene una administración del estado y un control de acceso adecuados a través de buckets de Amazon S3 dedicados y roles de IAM en cada cuenta.

## Tools (Herramientas)
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Servicios de AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.

**Otras herramientas**
+ [GitHub Actions](https://docs.github.com/en/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.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que te ayuda a crear y administrar recursos locales y en la nube.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) es una herramienta de orquestación que amplía las capacidades de Terraform y las de Terraform. OpenTofu Administra la forma en que se aplican los patrones de infraestructura genéricos, lo que facilita la escalación y el mantenimiento de grandes conjuntos de infraestructuras.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio -terraform. GitHub sample-aws-orchestration-pipeline](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform)

## Prácticas recomendadas
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Almacene AWS las credenciales y los datos confidenciales utilizando los secretos GitHub del repositorio para un acceso seguro.
+ Configure el proveedor OpenID Connect (OIDC) para que GitHub Actions asuma la función de IAM y evite las credenciales estáticas.
+ Cumpla con el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Creación y configuración del repositorio
<a name="create-and-configure-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicialice el repositorio. GitHub  | Para inicializar el GitHub repositorio, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 
| Configure los permisos y roles de IAM | Para configurar los permisos y roles de IAM, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 
| Configura GitHub secretos y variables. | Para obtener instrucciones sobre cómo configurar los secretos y las variables del repositorio en el GitHub repositorio, consulte [Crear variables de configuración para un repositorio](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository) en la GitHub documentación. Configure las siguientes variables:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 
| Cree la estructura del repositorio. | Para crear la estructura del repositorio, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 

### Desencadenamiento de la canalización y validación de los resultados
<a name="trigger-the-pipeline-and-validate-results"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la canalización con curl.  | Para ejecutar la canalización mediante [curl](https://curl.se/), siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Para obtener más información sobre el proceso de ejecución de la canalización, consulte [Información adicional](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps ingeniero | 
| Validación de los resultados de la ejecución de la canalización | Para validar los resultados, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)También puede realizar una verificación cruzada de los recursos creados mediante el archivo `output.json` creado en el repositorio que se encuentra dentro del mismo recurso que el archivo `terragrunt.hcl`. | DevOps ingeniero | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envíe una solicitud de limpieza. | Para eliminar recursos que ya no son necesarios, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 

## Recursos relacionados
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blogs**
+ [Utilice las funciones de IAM para conectar GitHub las acciones con las acciones de AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Servicio de AWS documentación**
+ [creación de roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Supervisión de archivos de CloudTrail registro con Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Prácticas recomendadas de seguridad para Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub resources**
+ [Creación de un evento de envío de repositorios](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Creación de webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Implemente controles de acceso sólidos en el repositorio GitHub ](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Auditoría periódica del acceso al repositorio](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Controles de seguridad en CI/CD proceso](https://github.com/marketplace/actions/checkov-github-action)
+ [Utilice la autenticación multifactorial para las cuentas GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Información adicional
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Proceso de ejecución en canalización**

Los siguientes son los pasos de la ejecución de la canalización:

1. **Valida el formato de carga útil JSON**: garantiza que la configuración JSON entrante esté estructurada correctamente y contenga todos los parámetros necesarios

1. **Asume la función de IAM especificada**: autentica y asume la función de IAM requerida para las operaciones AWS 

1. **Descarga el código de Terraform y Terragrunt necesario**: recupera la versión especificada del código de recursos y las dependencias

1. **Ejecuta el despliegue de recursos**: aplica la configuración para implementar o actualizar los AWS recursos en el entorno de destino

**Ejemplo de carga útil utilizada para la creación de VPC**

A continuación, se muestra un ejemplo de código para la creación de un bucket de estado del backend de Terraform:

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

A continuación se muestra un ejemplo de carga útil para crear una VPC con Amazon VPC, donde `vpc_cidr` define las especificaciones del [bloque de CIDR](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) para la VPC. El bucket de estado de Terraform se asigna a una variable definida en los archivos `terraform`. El parámetro `ref` contiene el nombre de la ramificación del código que se va a ejecutar.

```
{
    "ref": "main",
    "inputs": {
        "RequestParameters": {
            "RequestId": "1111111",
            "RequestType": "create",
            "ResourceType": "vpc",
            "AccountId": "1234567890",
            "AccountAlias": "account-alias",
            "RegionId": "us-west-2",
            "ApplicationName": "myapp",
            "DivisionName": "division-name",
            "EnvironmentId": "dev",
            "Suffix": "poc"
        },
        "ResourceParameters": [
            {
                "VPC": {
                    "vpc_cidr": "10.0.0.0/16"
                }
            }
        ]
    }
}
```

Los `RequestParameters` se utilizan para rastrear el estado de la solicitud en la sección de canalización y `tfstate` se crea en función de esta información. Los parámetros siguientes contienen información de control y metadatos:
+ `RequestId`: identificador único para la solicitud
+ `RequestType`: tipo de operación (crear, actualizar o eliminar)
+ `ResourceType`: tipo de recurso que se va a aprovisionar
+ `AccountId`— Objetivo de Cuenta de AWS despliegue
+ `AccountAlias`— Nombre descriptivo para el Cuenta de AWS
+ `RegionId`— Región de AWS para el despliegue de recursos
+ `ApplicationName`: nombre de la aplicación.
+ `DivisionName`: división de la organización
+ `EnvironmentId`: entorno (por ejemplo, desarrollo y producción)
+ `Suffix`: identificador adicional para los recursos

Los `ResourceParameters` contienen una configuración específica del recurso que se asigna a las variables definidas en los archivos de Terraform. Se debe incluir en `ResourceParameters` cualquier variable personalizada que deba pasarse a los módulos de Terraform. El parámetro `vpc_cidr` es obligatorio para Amazon VPC.

# Cree solicitudes de cambios automatizadas para la AWS infraestructura gestionada por Terraform mediante Actions GitHub
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure"></a>

*Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay y Prafful Gupta, Amazon Web Services*

## Resumen
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-summary"></a>

Este patrón presenta una utilidad de automatización diseñada para eliminar el trabajo manual y repetitivo que implica la gestión de los cambios en varios repositorios de Terraform. Muchas organizaciones utilizan los repositorios de Terraform para administrar su infraestructura como código (IaC), a menudo con cientos de repositorios independientes que representan diferentes entornos, servicios o equipos. Administrar estos repositorios a escala presenta un desafío operativo importante. Las tareas rutinarias, como la actualización de un parámetro, la actualización de las versiones de los módulos o la aplicación de cambios de configuración, suelen requerir la creación y la gestión de solicitudes de extracción (PRs) en muchos repositorios varias veces al día.

Incluso en el caso de cambios sencillos, este proceso manual y repetitivo lleva mucho tiempo y es propenso a errores. Los ingenieros deben aplicar el mismo cambio de forma coherente en todos los repositorios de destino y elaborar títulos y descripciones de PR significativos. Además, a menudo tienen que interactuar con herramientas externas, como Jira, para obtener o incluir referencias sobre el seguimiento de problemas. Estas tareas, si bien son necesarias, son tareas pesadas indiferenciadas que consumen un valioso tiempo de ingeniería y reducen la eficiencia general. La falta de automatización en este flujo de trabajo crea fricciones, ralentiza la entrega y aumenta la carga cognitiva de los equipos encargados de mantener las infraestructuras de Terraform a gran escala.

**Descripción general de la solución**

Para hacer frente a este desafío, este patrón ofrece una utilidad totalmente basada en la configuración, que permite a los usuarios definir los cambios que desean en un archivo de configuración estructurado. Este archivo especifica los repositorios, módulos, parámetros y valores de destino mediante un esquema claramente definido.

Una vez configurada, la utilidad realiza los siguientes pasos automatizados:

1. **Lee la configuración definida por el usuario** para determinar el alcance y la naturaleza de los cambios.

1. **Crea una nueva ramificación** en cada repositorio de destino a la que se aplican las actualizaciones necesarias.

1. **Genera una PR** para cada cambio, lo que garantiza la coherencia en todos los repositorios.

1. **Envía notificaciones de Slack** (opcional) para alertar a las partes interesadas con enlaces directos a la creada PRs

Al automatizar estas tareas repetitivas, la empresa de servicios reduce considerablemente el tiempo, el esfuerzo y el riesgo asociados a la gestión de actualizaciones de infraestructura a gran escala. Permite a los equipos centrarse en tareas de ingeniería de mayor valor y, al mismo tiempo, ayuda a garantizar que los cambios se apliquen de forma coherente y se puedan rastrear en todos los repositorios.

## Requisitos previos y limitaciones
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Python versión 3.8 o posterior.
+ Un token de acceso GitHub personal (PAT). Para obtener más información, consulte [Creación de un token de acceso personal (clásico)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) en la GitHub documentación.
+ El GitHub PAT puede acceder a los repositorios de destino para que la utilidad pueda realizar operaciones como la creación de sucursales y solicitudes de extracción de información. Para obtener más información, consulta el [repositorio de GitHub códigos](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file#repository-access-verification) de este patrón.

**Limitaciones**
+ La **complejidad de la configuración** presenta el principal desafío. La eficacia de la automatización está limitada por las capacidades de su archivo de configuración. Si bien el sistema gestiona los cambios estándar de manera eficiente, las modificaciones complejas de la infraestructura pueden requerir una intervención manual y algunos casos de la periferia quedan fuera del alcance de la gestión automatizada.
+ La **seguridad y el acceso** presentan consideraciones importantes, especialmente a la hora de gestionar los tokens de GitHub acceso y los límites de velocidad de las API. Las organizaciones deben equilibrar cuidadosamente la necesidad de automatización con el almacenamiento y la administración seguros de credenciales, garantizando los controles de acceso adecuados y manteniendo la eficiencia operativa.
+ Las **restricciones de validación** representan otra limitación notable porque el sistema automatizado tiene una capacidad limitada para validar la lógica empresarial y los requisitos específicos del entorno. Las dependencias complejas y las interacciones entre servicios suelen requerir la supervisión humana, ya que la validación automatizada no puede captar plenamente todos los matices contextuales y las reglas empresariales.
+ Los problemas de **escalabilidad y rendimiento** surgen cuando se trata de cambios de infraestructura a gran escala. El sistema debe funcionar dentro de los límites de la GitHub API y, al mismo tiempo, gestionar numerosos repositorios simultáneamente. Las operaciones que consumen muchos recursos en una infraestructura extensa pueden crear cuellos de botella en el rendimiento que requieren una administración cuidadosa.
+ **Los límites de integración** restringen la flexibilidad del sistema porque está diseñado principalmente para funcionar con herramientas específicas, como GitHub Slack. Es posible que las organizaciones que utilizan diferentes herramientas necesiten soluciones personalizadas y las opciones de personalización del flujo de trabajo de este patrón se limitan a los puntos de integración compatibles.

## Arquitectura
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-architecture"></a>

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

![\[Flujo de trabajo para crear solicitudes de cambios automatizadas mediante GitHub Actions.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e211359a-03b1-4e69-b152-eb7c09bdb01a/images/6cee0660-5b44-4abe-970c-c0a3c830a9aa.png)


El flujo de trabajo consta de los pasos siguientes:

1. El desarrollador activa GitHub las acciones especificando el repositorio de Terraform.

1. La utilidad de automatización lee las configuraciones definidas.

1. La utilidad de automatización también extrae el repositorio de Terraform proporcionado.

1. La utilidad de automatización crea una nueva ramificación y actualiza las plantillas de Terraform de forma local.

1. La utilidad de automatización envía la nueva ramificación al repositorio y crea una nueva PR. 

1. La utilidad de automatización utiliza notificaciones de Slack que incluyen enlaces de relaciones públicas para notificar a los desarrolladores y permite el despliegue de plantillas de Terraform. Nube de AWS 

## Tools (Herramientas)
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-tools"></a>
+ [GitHub](https://docs.github.com/)es una plataforma para desarrolladores que los desarrolladores pueden usar para crear, almacenar, administrar y compartir su código.
+ [GitHub Actions](https://docs.github.com/en/actions) es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con GitHub los repositorios. Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación.
+ [HashiCorp Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) que te ayuda a crear y administrar recursos locales y en la nube.
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), una oferta de Salesforce, es una plataforma conversacional basada en inteligencia artificial que permite la colaboración por chat y video, automatiza los procesos sin código y permite compartir información.

**Repositorio de código**

El código de este patrón está disponible en el [flujo de trabajo GitHub automatizado de actualización de la infraestructura de Terraform mediante](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file) el repositorio Actions. GitHub 

## Prácticas recomendadas
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-best-practices"></a>
+ La **gestión eficaz de los cambios** es crucial para una implementación correcta. Las organizaciones deben adoptar una estrategia de despliegue gradual para los cambios a gran escala. Mantenga las convenciones de nomenclatura de las ramificaciones y las descripciones de PR coherentes y garantice una documentación exhaustiva de todos los cambios.
+ Los **controles de seguridad** deben implementarse rigurosamente, centrándose en los principios de acceso con privilegios mínimos y en la gestión segura de las credenciales. Habilite las reglas de protección de las ramificaciones para evitar cambios no autorizados. Realice auditorías de seguridad periódicas para mantener la integridad del sistema.
+ Un **protocolo de prueba** sólido debe incluir la ejecución de `terraform plan` automatizada en canalizaciones de integración e implementación continuas (CI/CD). El protocolo también debe incluir comprobaciones de validación previas a la confirmación y entornos de revisión específicos para los cambios críticos. Este enfoque de pruebas de varios niveles ayuda a detectar los problemas de forma temprana y garantiza la estabilidad de la infraestructura.
+ **La estrategia de monitoreo** debe incluir mecanismos de alerta integrales, un seguimiento detallado de success/failure las métricas y mecanismos de reintento automatizados en caso de operaciones fallidas. Esta estrategia ayuda a garantizar la visibilidad operativa y permite responder rápidamente a cualquier problema que surja.
+ Los **estándares de configuración** deben hacer hincapié en el control de versiones de todas las configuraciones, manteniendo la modularidad para facilitar la reutilización y la escalabilidad. La documentación clara del esquema y los ejemplos ayudan a los equipos a comprender y utilizar el sistema de automatización de forma eficaz.

## Epics
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-epics"></a>

### Instalación y configuración
<a name="installation-and-setup"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el repositorio. | Para clonar el repositorio, ejecute los siguientes comandos:<pre># Clone the automation tool repository<br />git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility<br />cd sample-terraform-pr-automation-utility<br /><br /># Copy example configuration<br />cp config.example.yaml config.yaml<br /></pre> | AWS DevOps | 
| Instale las dependencias. | Para instalar y verificar las dependencias de Python, ejecute los siguientes comandos:<pre># Install Python dependencies<br />pip3 install -r requirements.txt<br /><br /># Verify installation<br />python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"<br /></pre> | AWS DevOps | 
| Configure el GitHub token. | Para configurar el GitHub token y, a continuación, comprobar que funciona, ejecute los siguientes comandos:<pre># Set GitHub token environment variable<br />export GITHUB_TOKEN="your_github_token_here"<br /><br /># Verify token works<br />curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user<br /></pre> | AWS DevOps | 

### Configuración del archivo de configuración para los cambios de Terraform
<a name="set-up-configuration-file-for-terraform-changes"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el archivo `config.yaml`. | Para definir los repositorios de destino y los cambios deseados, edite el archivo `config.yam`l de la siguiente manera:<pre>repositories:<br />  - owner: "your-org"<br />    repo: "your-terraform-repo"<br />    files:<br />      - path: "variables.tf"<br />        changes:<br />          variables:<br />            - app_version:<br />                default:<br />                  update:<br />                    - from: ["1.0.0"]<br />                      to: "1.1.0"<br /><br />settings:<br />  pr_title_template: "Infrastructure Update - {{timestamp}}"<br />  slack:<br />    username: "Terraform Bot"<br />    icon_emoji: ":terraform:"<br />    notify_on_success: true<br />    notify_on_error: true<br />    notify_batch_summary: true<br /></pre> | AWS DevOps | 

### Prueba y validación
<a name="test-and-validate"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Realice las pruebas previas al vuelo. | Pruebe siempre la configuración antes de ejecutarla en los repositorios de producción. Utilice los siguientes comandos:<pre># 1. Test configuration syntax<br />python3 -c "from main import get_config_content; get_config_content()"<br /><br /># 2. Run in dry-run mode first<br />DRY_RUN=true python3 main.py<br /><br /># 3. Test with minimal configuration<br /># Use a simple config.yaml with just one repository and one change</pre> | AWS DevOps | 
| Verifique el acceso al repositorio. | Para comprobar que el GitHub token puede acceder al repositorio, ejecute el siguiente comando:<pre># Test GitHub token access<br />curl -H "Authorization: token $GITHUB_TOKEN" \<br />  https://api.github.com/repos/owner/repo-name<br /><br /># Should return repository information, not 404</pre> | AWS DevOps | 

### Ejecución de la utilidad de automatización
<a name="run-the-automation-utility"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la utilidad de automatización mediante la interfaz de usuario de GitHub Actions. | Para ejecutar la utilidad de automatización mediante la interfaz de usuario de GitHub Actions, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 
| (Alternativa) Ejecute la utilidad de automatización desde la línea de comandos. | Si lo prefiere, puede ejecutar la utilidad de automatización desde la línea de comandos en lugar de utilizar la interfaz de usuario de GitHub Actions. Utilice el siguiente comando :<pre># Run actual automation<br />python3 main.py</pre> | AWS DevOps | 

### Validación PRs y cambios
<a name="validate-prs-and-changes"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Revise lo creado PRs y los cambios. | Para supervisar los resultados de la ejecución del GitHub flujo de trabajo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| (Opcional) Limpiar PRs. | Cerrar abandonada o innecesaria PRs. | AWS DevOps | 

## Recursos relacionados
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-resources"></a>

**AWS Guía prescriptiva**
+ [Uso de Terraform como una herramienta de IaC para Nube de AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/choose-iac-tool/terraform.html)

**GitHub documentación**
+ [Acerca de las solicitudes de extracción](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+ [Administración de los tokens de acceso personal](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
+ [Comprensión de GitHub las acciones](https://docs.github.com/en/actions/get-started/understand-github-actions)
+ [Guía de inicio rápido para las acciones GitHub ](https://docs.github.com/en/actions/get-started/quickstart)

# Crear automáticamente canalizaciones de CI dinámicas para proyectos de Java y Python
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically"></a>

*Aromal Raj Jayarajan, Vijesh Vijayakumaran Nair, MAHESH RAGHUNANDANAN y Amarnath Reddy, Amazon Web Services*

## Resumen
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-summary"></a>

Este patrón muestra cómo crear automáticamente canalizaciones de integración continua (CI) dinámicas para proyectos de Java y Python mediante las herramientas para desarrolladores de AWS.

A medida que las pilas de tecnología se diversifican y las actividades de desarrollo aumentan, puede resultar difícil crear y mantener canalizaciones de CI que sean coherentes en toda la organización. Al automatizar el proceso en AWS Step Functions, puede asegurarse de que sus canalizaciones de CI sean coherentes en su uso y enfoque.

Para automatizar la creación de canalizaciones de CI dinámicas, este patrón utiliza las siguientes entradas variables:
+ Lenguaje de programación (solo Java o Python)
+ Nombre de canalización
+ Etapas de canalización requeridas

**nota**  
Step Functions orquestra la creación de canalizaciones mediante varios servicios de AWS. Para obtener más información sobre los servicios de AWS que se utilizan en esta solución, consulte la sección **Herramientas** de este patrón.

## Requisitos previos y limitaciones
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un bucket de Amazon S3 en la misma región de AWS en la que se está implementando esta solución
+ Un [director](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) de AWS Identity and Access Management (IAM) que cuente con los CloudFormation permisos de AWS necesarios para crear los recursos necesarios para esta solución

**Limitaciones**
+ Este patrón solo admite proyectos de Java y Python.
+ Los roles de IAM aprovisionadas en este patrón siguen el principio del privilegio mínimo. Los permisos de los roles de IAM deben actualizarse en función de los recursos específicos que necesite crear su canalización de CI.

## Arquitectura
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-architecture"></a>

**Pila de tecnología de destino**
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Systems Manager
+ AWS Step Functions
+ AWS Lambda
+ Amazon DynamoDB

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de flujo de trabajo para crear automáticamente canalizaciones de CI dinámicas para proyectos de Java y Python mediante las herramientas para desarrolladores de AWS.

![\[Flujo de trabajo para crear automáticamente canalizaciones de CI dinámicas para proyectos de Java y Python mediante las herramientas de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bef2ccb8-68b3-4c0f-9ee7-4b93e9422d9c/images/b5ed003f-cf16-4130-8bfb-2bc2cb9a0d33.png)


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

1. Un usuario de AWS proporciona los parámetros de entrada para la creación de canalizaciones de CI en formato JSON. Esta entrada inicia un flujo de trabajo de Step Functions (*máquina de estados*) que crea una canalización de CI mediante las herramientas para desarrolladores de AWS.

1. Una función de Lambda lee una carpeta denominada **input-reference**, que está almacenada en un bucket de Amazon S3 y, a continuación, genera un archivo **buildspec.yml**. Este archivo generado define las etapas de la canalización de CI y se vuelve a almacenar en el mismo bucket de Amazon S3 que almacena las referencias de los parámetros.

1. Step Functions comprueba las dependencias del flujo de trabajo de creación de canalizaciones de CI para detectar cualquier cambio y actualiza la pila de dependencias según sea necesario.

1. Step Functions crea los recursos de la canalización de CI en una CloudFormation pila, que incluye un CodeCommit repositorio, un CodeBuild proyecto y una CodePipeline canalización.

1. La CloudFormation pila copia el código fuente de muestra de la pila de tecnología seleccionada (Java o Python) y el archivo **buildspec.yml** en el repositorio. CodeCommit 

1. Los detalles del tiempo de ejecución de la canalización de CI se almacenan en una tabla de DynamoDB.

**Automatizar y escalar**
+ Este patrón se utiliza únicamente en un entorno de desarrollo único. Se requieren cambios de configuración para su uso en varios entornos de desarrollo.
+ Para añadir compatibilidad con más de una CloudFormation pila, puedes crear plantillas adicionales. CloudFormation Para obtener más información, consulte [Introducción a AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html) en la CloudFormation documentación.

## Tools (Herramientas)
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-tools"></a>

**Herramientas**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) es un servicio de orquestación sin servidor que le permite combinar funciones de Lambda AWS y otros servicios de AWS para crear aplicaciones esenciales desde el punto de vista empresarial.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) facilita poder crear y controlar claves criptográficas para proteger los datos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ El [Almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) proporciona un almacenamiento seguro y jerárquico para administrar los datos de configuración y los secretos.

**Código**

El código de este patrón está disponible en el GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repositorio. El repositorio contiene las CloudFormation plantillas necesarias para crear la arquitectura de destino descrita en este patrón.

## Prácticas recomendadas
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-best-practices"></a>
+ No introduzcas credenciales (*secretos*), como identificadores o contraseñas, directamente en las CloudFormation plantillas o en las configuraciones de acciones de Step Functions. Si lo hace, la información se mostrará en los registros de DynamoDB. En su lugar, utilice AWS Secrets Manager para configurar y almacenar secretos. A continuación, consulte los secretos almacenados en Secrets Manager dentro de las CloudFormation plantillas y las configuraciones de acciones de Step Functions, según sea necesario. Para obtener más información, consulte [¿Qué es AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) en la documentación de AWS Secrets Manager.
+ Configure el cifrado del lado del servidor para los CodePipeline artefactos almacenados en Amazon S3. Para obtener más información, consulte [Configurar el cifrado del lado del servidor para los artefactos almacenados en Amazon S3 CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) en la CodePipeline documentación.
+ Aplique permisos de privilegios mínimos al configurar roles de IAM. Para obtener más información, consulte [Aplicar permisos de privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) en la documentación de IAM.
+ Asegúrese de que su bucket de Amazon S3 no sea de acceso público. Para obtener más información, consulte [Configurar la configuración de bloqueo de acceso público para sus buckets de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-block-public-access-bucket.html) en la documentación de Amazon S3.
+ Asegúrese de activar el control de versiones de su bucket de Amazon S3. Para más información, consulte [Uso de control de versiones en buckets de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la documentación de Amazon S3.
+ Utilice IAM Access Analyzer al configurar las políticas de IAM. La herramienta proporciona recomendaciones prácticas para ayudarle a crear políticas de IAM seguras y funcionales. Para más información, consulte [Utilizar el analizador de acceso de AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) en la documentación de IAM.
+ Cuando sea posible, defina condiciones de acceso específicas al configurar las políticas de IAM.
+ Activa el CloudWatch registro de Amazon con fines de supervisión y auditoría. Para obtener más información, consulta [¿Qué es Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) en la CloudWatch documentación.

## Epics
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-epics"></a>

### Configurar los requisitos previos
<a name="configure-the-prerequisites"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un bucket de Amazon S3. | Cree un depósito de Amazon S3 (o utilice uno existente) para almacenar las CloudFormation plantillas, el código fuente y los archivos de entrada necesarios para la solución.Para obtener más información, consulte [Paso 1: Crear su primer bucket de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) en la documentación de Amazon S3.El bucket de Amazon S3 debe estar en la misma región de AWS en la que está implementando la solución. | AWS DevOps | 
| Clona el GitHub repositorio. | Clone el GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repositorio ejecutando el siguiente comando en una ventana de terminal:<pre>git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git</pre>Para obtener más información, consulte [Clonación de un repositorio](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) en la GitHub documentación. | AWS DevOps | 
| Cargue la carpeta Solution Templates del GitHub repositorio clonado a su bucket de Amazon S3.  | Copie el contenido de la carpeta **Solution-Templates** clonada y cárguelo en el bucket de Amazon S3 que creó.Para obtener más información, consulte [Carga de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) en la documentación de Amazon S3.Asegúrese de cargar únicamente el contenido de la carpeta **Solution-Templates**. Puede cargar los archivos únicamente en el nivel raíz del bucket de Amazon S3. | AWS DevOps | 

### Implementar la solución
<a name="deploy-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una CloudFormation pila para implementar la solución mediante el archivo template.yml del repositorio clonado. GitHub  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Mientras se está creando la pila, aparecerá en la página **Pilas** con un estado **CREATE\$1IN\$1PROGRESS**. Asegúrese de esperar a que el estado de la pila cambie a **CREATE\$1COMPLETE** antes de completar los pasos restantes de este patrón. | Administrador de AWS, AWS DevOps | 

### Prueba de la configuración
<a name="test-the-setup"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la función que ha creado.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)**Formato JSON**<pre>{<br />  "details": {<br />    "tech_stack": "Name of the Tech Stack (python/java)",<br />    "project_name": "Name of the Project that you want to create with",<br />    "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />  }<br />}</pre>**Ejemplo de entrada JSON en Java**<pre>{<br />  "details": {<br />    "tech_stack": "java",<br />    "project_name": "pipeline-java-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre>**Ejemplo de entrada JSON en Python**<pre>{<br />  "details": {<br />    "tech_stack": "python",<br />    "project_name": "pipeline-python-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre> | Administrador de AWS, AWS DevOps | 
| Confirme que se creó el CodeCommit repositorio para la canalización de CI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Consulte los recursos CodeBuild del proyecto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Valide las CodePipeline etapas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Confirme que la canalización de CI se haya ejecutado correctamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 

### Eliminación de sus recursos
<a name="clean-up-your-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine la pila de recursos CloudFormation. | Elimine la pila de recursos de la canalización de CI CloudFormation.Para obtener más información, consulte [Eliminar una pila en la CloudFormation consola de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) en la CloudFormation documentación.Asegúrese de eliminar la pila denominada **<project\$1name>-stack**. | AWS DevOps | 
| Elimine las dependencias de la canalización de CI en Amazon S3 y CloudFormation. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Asegúrese de eliminar la pila nombrada **pipeline-creation-dependencies-stack**. | AWS DevOps | 
| Elimine el bucket de plantilla de Amazon S3. | Elimine el bucket de Amazon s3 que creó en la sección **Configurar los requisitos previos** de este patrón, que almacena las plantillas de esta solución.Para obtener más información, consulte [Eliminación de un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) en la documentación de Amazon S3. | AWS DevOps | 

## Recursos relacionados
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-resources"></a>
+ [Creación de una máquina de estados de Step Functions que utilice Lambda](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) (documentación de AWS Step Functions)
+ [AWS Step Functions WorkFlow Studio](https://docs.aws.amazon.com/step-functions/latest/dg/workflow-studio.html) (documentación de AWS Step Functions)
+ [DevOps y AWS](https://aws.amazon.com/devops/)
+ [¿Cómo CloudFormation funciona AWS?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html) ( CloudFormation documentación de AWS)
+ [Completo CI/CD con AWS CodeCommit, AWS CodeBuild CodeDeploy, AWS y AWS CodePipeline](https://aws.amazon.com/blogs/devops/complete-ci-cd-with-aws-codecommit-aws-codebuild-aws-codedeploy-and-aws-codepipeline/) (entrada del blog de AWS)
+ [Cuotas, requisitos de nombre y límites de caracteres de IAM y AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) (documentación de IAM)

# Despliega canarios de CloudWatch Synthetics con Terraform
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

*Dhrubajyoti Mukherjee y Jean-Francois Landreau, Amazon Web Services*

## Resumen
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-summary"></a>

Es importante validar el estado de un sistema desde la perspectiva del cliente y confirmar que los clientes pueden conectarse. Esto resulta más difícil cuando los clientes no llaman constantemente al punto de conexión. [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) admite la creación de canarios, que pueden probar puntos de conexión públicos y privados. Al usar valores controlados, puede conocer el estado de un sistema incluso si no está en uso. Estos valores controlados son scripts de Node.js Puppeteer o scripts de Python Selenium.

Este patrón describe cómo usar HashiCorp Terraform para implementar canarios que prueben puntos de enlace privados. Incorpora un script de Puppeteer que comprueba si una URL devuelve `200-OK`. A continuación, el script de Terraform se puede integrar con el script que implementa el punto de conexión privado. También puede modificar la solución para monitorear puntos de conexión públicos.

## Requisitos previos y limitaciones
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**Requisitos previos**
+ Una cuenta de Amazon Web Services (AWS) activa con una nube privada virtual (VPC) y subredes privadas
+ La URL del punto de conexión al que se puede acceder desde las subredes privadas
+ Terraform instalado en el entorno de implementación

**Limitaciones**

La solución actual funciona para las siguientes versiones de tiempo de ejecución de CloudWatch Synthetics:
+ syn-nodejs-puppeteer-3.4
+ syn-nodejs-puppeteer-3,5
+ syn-nodejs-puppeteer-3,6
+ syn-nodejs-puppeteer-3,7

Cuando se publiquen nuevas versiones de tiempo de ejecución, podría tener que actualizar la solución actual. También tendrá que modificar la solución para mantenerse al día con las actualizaciones de seguridad.

**Versiones de producto**
+ Terraform 1.3.0

## Arquitectura
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-architecture"></a>

Amazon CloudWatch Synthetics se basa en CloudWatch Lambda y Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch ofrece un asistente para crear los canarios y un panel de control que muestra el estado de los canarios. La función de Lambda ejecuta el script. Amazon S3 almacena los registros y las capturas de pantalla de las ejecuciones de valores controlados.

Este patrón simula un punto final privado a través de una instancia de Amazon Elastic Compute Cloud (Amazon EC2) implementada en las subredes de destino. La función de Lambda requiere interfaces de red elásticas en la VPC en la que se implementa el punto de conexión privado.

![\[La descripción sigue el diagrama.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


En el diagrama se muestra lo siguiente:

1. El valor controlado de Synthetics inicia la función de Lambda del valor controlado.

1. La función de Lambda del valor controlado se conecta a la interfaz de red elástica.

1. La función de Lambda del valor controlado monitorea el estado del punto de conexión.

1. Synthetics Canary envía los datos de ejecución al bucket y las métricas del S3. CloudWatch 

1. Se inicia una CloudWatch alarma en función de las métricas.

1. La CloudWatch alarma inicia el tema Amazon Simple Notification Service (Amazon SNS).

## Tools (Herramientas)
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Servicios de AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) le CloudWatch ayuda a monitorizar las métricas de sus recursos de AWS y las aplicaciones que ejecuta en AWS en tiempo real.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le permite lanzar recursos de AWS en una red virtual que haya definido. Esta red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS. Este patrón utiliza puntos de conexión de VPC e interfaces de red elásticas.

**Otros servicios**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de código abierto de infraestructura como código (IaC) que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube. Este patrón utiliza Terraform para implementar la infraestructura.
+ [Puppeteer](https://pptr.dev/) es una biblioteca de Node.js. El motor de ejecución CloudWatch Synthetics utiliza el marco Puppeteer.

**Código**

[La solución está disponible en el repositorio en la nube. GitHub watch-synthetics-canary-terraform](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform) Para obtener más información, consulte la sección *Información adicional*.

## Epics
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-epics"></a>

### Implementar la solución para monitorear una URL privada
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Reunir los requisitos para monitorear la URL privada. | Reúna la definición completa de la URL: dominio, parámetros y encabezados. Para comunicarse de forma privada con Amazon S3 y Amazon CloudWatch, utilice puntos de enlace de VPC. Observe cómo se puede acceder a la VPC y a las subredes desde el punto de conexión. Tenga en cuenta la frecuencia de las ejecuciones de valores controlados. | Arquitecto de la nube, administrador de redes | 
| Modifique la solución existente para monitorear la URL privada. | Modifique el archivo `terraform.tfvars`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquitecto de la nube | 
| Implementar y utilizar la solución. | Para implementar la solución, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquitecto de nube, ingeniero DevOps  | 

## Resolución de problemas
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La eliminación de los recursos aprovisionados se bloquea. | Elimine manualmente la función de Lambda del valor controlado, la interfaz de red elástica correspondiente y el grupo de seguridad, en ese orden. | 

## Recursos relacionados
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Uso del monitoreo sintético](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Supervise los puntos de enlace de API Gateway con Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (entrada del blog)

## Información adicional
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**Artefactos del repositorio**

Los artefactos del repositorio tienen la siguiente estructura.

```
.
├── README.md
├── main.tf
├── modules
│   ├── canary
│   └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
```

El archivo `main.tf` contiene el módulo principal e implementa dos módulos secundarios:
+ `canary-infra` implementa la infraestructura necesaria para los valores controlados.
+ `canary` implementa los valores controlados.

Los parámetros de entrada de la solución se encuentran en el archivo `terraform.tfvars`. Puede utilizar el siguiente código de ejemplo para crear un valor controlado.

```
module "canary" {
    source = "./modules/canary"
    name   = var.name
    runtime_version = var.runtime_version
    take_screenshot = var.take_screenshot
    api_hostname = var.api_hostname
    api_path = var.api_path
    reports-bucket = module.canary_infra.reports-bucket
    role = module.canary_infra.role
    security_group_id = module.canary_infra.security_group_id
    subnet_ids = var.subnet_ids
    frequency = var.frequency
    alert_sns_topic = var.alert_sns_topic
}
```

A continuación, se muestra el archivo .var correspondiente.

```
name   = "my-canary"
runtime_version = "syn-nodejs-puppeteer-3.7"
take_screenshot = false
api_hostname = "mydomain.internal"
api_path = "/path?param=value"
vpc_id = "vpc_id"
subnet_ids = ["subnet_id1"]
frequency = 5
alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
```

**Limpieza de la solución**

Si está haciendo las pruebas en un entorno de desarrollo, puede limpiar la solución para evitar acumular costos.

1. En la consola de administración de AWS, vaya a la consola de Amazon S3. Vacíe el bucket de Amazon S3 creado por la solución. Asegúrese de realizar una copia de seguridad de los datos en caso necesario.

1. En su entorno de desarrollo, ejecute el comando `destroy` desde el directorio `cloudwatch-synthetics-canary-terraform`.

   ```
   terraform destroy
   ```

# Implemente una ChatOps solución para gestionar los resultados de los escaneos SAST mediante Amazon Q Developer en aplicaciones de chat, acciones personalizadas y CloudFormation
<a name="deploy-chatops-solution-to-manage-sast-scan-results"></a>

*Anand Bukkapatnam Tirumala, Amazon Web Services*

## Resumen
<a name="deploy-chatops-solution-to-manage-sast-scan-results-summary"></a>

Este patrón presenta una solución integral que utiliza Amazon Q Developer en las aplicaciones de chat para agilizar la gestión de los errores de análisis de las pruebas de seguridad de aplicaciones estáticas (SAST) notificados mediante SonarQube las pruebas de seguridad de aplicaciones (SAST). Este enfoque innovador integra acciones y notificaciones personalizadas en una interfaz conversacional, lo que permite una colaboración eficiente y procesos de toma de decisiones dentro de los equipos de desarrollo.

En el vertiginoso entorno de desarrollo de software actual, la gestión eficiente de los resultados del análisis de SAST es crucial para mantener la calidad y la seguridad del código. Sin embargo, muchas organizaciones se enfrentan a los siguientes desafíos importantes:
+ Retraso en el conocimiento de las vulnerabilidades críticas debido a la ineficiencia de los sistemas de notificación
+ Procesos de toma de decisiones lentos debido a flujos de trabajo de aprobación desconectados
+ Falta de respuestas inmediatas y procesables a los fallos del análisis de SAST
+ Comunicación y colaboración fragmentadas en torno a los resultados de seguridad
+ La configuración manual de la infraestructura para las herramientas de seguridad lleva mucho tiempo y es propensa a errores

Estos problemas suelen provocar un aumento de los riesgos de seguridad, retrasos en las versiones y una reducción de la productividad del equipo. Para abordar estos desafíos de manera eficaz, se requiere una solución que pueda agilizar la gestión de los resultados de SAST, mejorar la colaboración en equipo y automatizar el aprovisionamiento de la infraestructura.

Entre las características principales de la solución se incluyen:
+ **Notificaciones personalizadas**: las alertas y notificaciones en tiempo real se envían directamente a los canales de chat del equipo, lo que garantiza reconocimiento de las peticiones y acción en caso de vulnerabilidades o fallas en el análisis de SAST.
+ **Aprobaciones conversacionale**: las partes interesadas pueden iniciar y completar los flujos de trabajo de aprobación de los resultados del análisis de SAST sin problemas desde la interfaz de chat, lo que acelera los procesos de toma de decisiones.
+ **Acciones personalizadas**: los equipos pueden definir y ejecutar acciones personalizadas en función de los resultados del análisis de SAST, como desencadenar automáticamente los mensajes de correo electrónico en caso de errores en los controles de calidad y mejorar la capacidad de respuesta ante los problemas de seguridad.
+ **Colaboración centralizada**: todas las discusiones, decisiones y acciones relacionadas con el análisis de SAST se guardan en un entorno de chat unificado, lo que fomenta una mejor colaboración y el intercambio de conocimientos entre los miembros del equipo.
+ **Infraestructura como código (IaC)**: toda la solución incluye AWS CloudFormation plantillas, lo que permite un aprovisionamiento de infraestructura más rápido y fiable y, al mismo tiempo, reduce los errores de configuración manual.

## Requisitos previos y limitaciones
<a name="deploy-chatops-solution-to-manage-sast-scan-results-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ Un rol AWS Identity and Access Management (de IAM) con permisos para crear y administrar los recursos asociados a los que Servicios de AWS se enumeran en [Herramientas](#deploy-chatops-solution-to-manage-sast-scan-results-tools).
+ Un espacio de trabajo de Slack.
+ Amazon Q Developer en aplicaciones de chat agregadas al espacio de trabajo de Slack requerido como complemento. Para obtener más información, consulte [Cómo añadir aplicaciones a tu espacio de trabajo de Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) en la documentación de Slack. Toma nota del ID del espacio de trabajo de Slack tal y como aparece en el formulario Consola de administración de AWS después de registrarte correctamente.
+ Un cliente configurado de Amazon Q Developer en aplicaciones de chat, con el ID del espacio de trabajo disponible para introducirlo en la CloudFormation consola. Para obtener instrucciones, consulte [Configure a Slack client](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup) (Cómo configurar un cliente de Slack) en la *Guía del administrador de aplicaciones de chat para Amazon Q Developer*.
+ Una cuenta de correo electrónico de origen que se crea y verifica en Amazon Simple Email Service (Amazon SES) para enviar mensajes de correo electrónico de aprobación. Para obtener instrucciones de configuración, consulte [Creación y verificación de identidades de correo electrónico](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) en la *Guía para desarrolladores de Amazon Simple Email Service*.
+ Una dirección de correo electrónico de destino para recibir notificaciones de aprobación. Esta dirección puede ser una bandeja de entrada compartida o una lista de distribución específica del equipo.
+ Una SonarQube instancia operativa a la que se puede acceder desde su Cuenta de AWS. Para obtener más información, consulte las [instrucciones SonarQube de instalación](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/).
+ Un [token SonarQube de usuario](https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/) con permisos para activar y crear proyectos a través de la canalización.

**Limitaciones**
+ La creación de botones de acción personalizados es un proceso manual en esta solución. 
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="deploy-chatops-solution-to-manage-sast-scan-results-architecture"></a>

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

![\[Flujo de trabajo para implementar un control de calidad del código automatizado para la administración de versiones mediante Amazon Q Developer.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/a977924c-957e-4f91-99d6-ed790e343ea6.png)


En el diagrama, se muestra el flujo de trabajo automatizado de control de calidad del código:

1. Preparación y carga del código:
   + El desarrollador comprime el código base en un archivo .zip.
   + El desarrollador carga manualmente el archivo .zip en un bucket designado de Amazon Simple Storage Service (Amazon S3).

1.  AWS Step Functions Activación y organización de eventos de Amazon S3:
   + El evento de carga de Amazon S3 desencadena un flujo de trabajo de Step Functions.
   + Step Functions organiza un escaneo SAST utilizando. SonarQube
   + El flujo de trabajo supervisa el estado del AWS CodeBuild trabajo para determinar las siguientes acciones. Si CodeBuild tiene éxito (control de calidad), el flujo de trabajo finaliza. Si CodeBuild se produce un error, se invoca una AWS Lambda función para el diagnóstico. Para obtener más información, consulte **Lógica de AWS Step Functions ** más adelante en esta sección.

1. AWS CodeBuild ejecución:
   + El CodeBuild trabajo ejecuta un SonarQube escaneo en la base de código cargada.
   + Los artefactos analizados se almacenan en un bucket de Amazon S3 independiente para su auditoría y análisis.

1. Análisis de errores (función de Lambda):
   + En CodeBuild caso de fallo, se `CheckBuildStatus` activa la función Lambda.
   + En CodeBuild caso de éxito, el proceso finaliza y no es necesario realizar ninguna otra acción.

1. La función de Lambda analiza la causa del error (error en el control de calidad u otros problemas)
   + La función `CheckBuildStatus` crea una carga útil personalizada con información detallada sobre el error.
   + La función `CheckBuildStatus` publica la carga útil personalizada en un tema de Amazon Simple Notification Service (Amazon SNS).

1. Sistema de notificaciones:
   + Amazon SNS reenvía la carga útil a Amazon Q Developer en aplicaciones de chat para la integración con Slack.

1. Integración de Slack:
   + Amazon Q Developer en aplicaciones de chat publica una notificación en el canal de Slack designado.

1. Proceso de aprobación:
   + Los aprobadores revisan los detalles del error en la notificación de Slack.
   + Los aprobadores pueden iniciar la aprobación mediante el botón **Aprobar** de Slack.

1. Controlador de aprobación:
   + Una función de Lambda de aprobación procesa la acción de aprobación desde Slack.
   + La función de aprobación publica el mensaje personalizado en Amazon SES.

1. Mensaje generado:
   + La función de aprobación genera un mensaje personalizado para la notificación al desarrollador.

1. Notificación para desarrolladores:
   + Amazon SES envía un mensaje de correo electrónico al desarrollador con los siguientes pasos o acciones necesarias.

Este flujo de trabajo combina la carga manual de códigos con controles de calidad automatizados, proporciona comentarios inmediatos a través de Slack y permite la intervención humana cuando es necesaria, lo que garantiza un proceso de revisión de código sólido y flexible.

Lógica de **AWS Step Functions  **

Como se muestra en el diagrama de arquitectura anterior, si la transmisión de la puerta de calidad SonarQube falla, el flujo de trabajo pasa a la `CheckBuildStatus` función Lambda. La función `CheckBuildStatus` activa una notificación en el canal de Slack. Cada notificación incluye información con sugerencias sobre los próximos pasos. A continuación se muestran los tipos de notificaciones:
+ **La aplicación ha fallado en el escaneo de seguridad del código**: el usuario recibe esta notificación cuando el código cargado no ha pasado el escaneo SonarQube de seguridad. El usuario puede elegir **APROBAR** para aceptar la compilación. Sin embargo, la notificación aconseja al usuario que tenga cuidado con los posibles riesgos de seguridad y de mala calidad del código. La notificación incluye la siguiente información:
  + Próximos pasos: Error: Quality gate status: FAILED: consulte los detalles en la URL proporcionada.
  + Clasifique las vulnerabilidades tal y como se menciona en el documento en la URL proporcionada.
  + CodeBuild los detalles están disponibles en la ubicación de la URL proporcionada.
+ La **canalización de análisis de aplicaciones ha fallado por alguna otra razón**: el usuario recibe esta notificación cuando la canalización ha fallado por alguna razón distinta del error en el análisis de seguridad del código. La notificación incluye la siguiente información:
  + Para ver los siguientes pasos, visite el enlace proporcionado para obtener más información sobre la solución de problemas.

Para ver las capturas de pantalla de las notificaciones tal y como aparecen en un canal de Slack, ve a la [carpeta assets](https://github.com/aws-samples/chatops-slack/tree/main/assets) del repositorio de GitHub chatops-slack.

En el siguiente diagrama se muestra un ejemplo del estado del paso de Step Functions después de que se produzca un error en el pase del control de calidad.

![\[Flujo de trabajo del estado de los pasos de AWS Step Functions tras un error en el pase del control de calidad.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/40b7ebf0-2518-4413-9717-0bfb7559adde.png)


## Tools (Herramientas)
<a name="deploy-chatops-solution-to-manage-sast-scan-results-tools"></a>

**Servicios de AWS**
+ [Amazon Q Developer en aplicaciones de chat](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) le permite usar los canales de chat de Amazon Chime, Microsoft Teams y Slack para monitorear y responder a los eventos operativos en sus aplicaciones. AWS *Aviso de fin de soporte:* el 20 de febrero de 2026, AWS finalizará el soporte para el servicio Amazon Chime. Después del 20 de febrero de 2026, ya no podrá acceder a la consola ni a los recursos de la aplicación de Amazon Chime. Para obtener más información, visite esta [entrada en el blog](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/). Esto no afecta a la disponibilidad del [servicio Amazon Chime SDK](https://aws.amazon.com/chime/chime-sdk/).
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en todo el país Cuentas de AWS . Regiones de AWS
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) le ayuda a crear y controlar claves criptográficas para proteger sus datos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) lo ayuda a reemplazar las credenciales codificadas en su código, incluidas contraseñas, con una llamada a la API de Secrets Manager para recuperar el secreto mediante programación.
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) facilita poder enviar y recibir mensajes de correo electrónico a través de los dominios y direcciones de correo electrónico propios.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), una oferta de Salesforce, es una plataforma conversacional basada en inteligencia artificial que permite la colaboración por chat y video, automatiza los procesos sin código y permite compartir información.
+ [SonarQube](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/)es una herramienta de análisis local diseñada para detectar problemas de codificación en más de 30 lenguajes, marcos y plataformas IaC.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [chatops-slack](https://github.com/aws-samples/chatops-slack).

## Prácticas recomendadas
<a name="deploy-chatops-solution-to-manage-sast-scan-results-best-practices"></a>
+ **CloudFormation administración de la pila**: si encuentra algún error durante la ejecución de la CloudFormation pila, le recomendamos que elimine la pila fallida. A continuación, vuelva a crearla con los valores de parámetros correctos. Este enfoque permite una implementación limpia y ayuda a evitar posibles conflictos o implementaciones parciales.
+ **Configuración de correo electrónico con bandeja de entrada compartida**: al configurar el parámetro `SharedInboxEmail`, utilice una lista de distribución común a la que puedan acceder todos los desarrolladores pertinentes. Este enfoque promueve la transparencia y ayuda a que las notificaciones importantes lleguen a los miembros pertinentes del equipo.
+ **Flujo de trabajo de aprobación de la producción**: en el caso de los entornos de producción, restrinja el acceso al canal de Slack que se utiliza para la aprobación de las compilaciones. Solo los aprobadores designados deben ser miembros de este canal. Esta práctica mantiene una cadena de responsabilidad clara y mejora la seguridad al limitar quién puede aprobar los cambios críticos.
+ **Permisos de IAM**: siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) en la documentación de IAM.

## Epics
<a name="deploy-chatops-solution-to-manage-sast-scan-results-epics"></a>

### Realización de la configuración inicial
<a name="perform-initial-setup"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio de [chatops-slack](https://github.com/aws-samples/chatops-slack) para este patrón, use el siguiente comando.`git clone "git@github.com:aws-samples/chatops-slack.git"` | AWS DevOps, jefe de construcción, DevOps ingeniero, administrador de la nube | 
| Cree un archivo .zip que incluya el código de Lambda. | Cree los archivos.zip para el código de la AWS Lambda `ApprovalEmail` función `CheckBuildStatus` y. Para crear `notification.zip` y `approval.zip`, utilice los comandos siguientes.<pre>cd chatops-slack/src</pre><pre>chmod -R 775 *</pre><pre>zip -r approval.zip approval</pre><pre>zip -r notification.zip notification</pre> | AWS DevOps, jefe de construcción, DevOps ingeniero, administrador de la nube | 

### Implementación del archivo de pila pre-requisite.yml
<a name="deploy-the-pre-requisite-yml-stack-file"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute el archivo de pila `pre-requisite.yml`. | El archivo de `pre-requisite.yml` CloudFormation pila despliega los recursos iniciales necesarios antes de ejecutar el archivo de `app-security.yml` pila. Para ejecutar el archivo `pre-requisite.yml`, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrador de AWS DevOps, jefe de construcción, DevOps ingeniero | 
| Cargue los archivos .zip en el bucket de Amazon S3. | Cargue los archivos `notification.zip` y `approval.zip` que creó anteriormente en el bucket de Amazon S3 denominado `S3LambdaBucket`. El archivo de `app-security.yml` CloudFormation pila se utiliza `S3LambdaBucket` para aprovisionar la función Lambda. | AWS DevOps, jefe de construcción, DevOps ingeniero, administrador de sistemas de AWS | 

### Ejecute el archivo de pila app-security.yml
<a name="execute-the-app-security-yml-stack-file"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute el archivo de pila `app-security.yml`. | Los archivos de pila `app-security.yml` implementan la infraestructura restante para el sistema de notificación y aprobación. Para ejecutar el archivo `app-security.yml`, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | AWS DevOps, administrador de sistemas de AWS, DevOps ingeniero, jefe de construcción | 
| Pruebe la configuración de la notificación. | Para probar la configuración de la notificación, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html)Cuando el mensaje de prueba se entregue correctamente, debería ver una notificación en el canal de Slack. Para obtener más información, consulta [Probar las notificaciones desde Slack en la Guía del administrador de aplicaciones de chat Servicios de AWS para](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#test-notifications-slack) *desarrolladores de Amazon Q*. | AWS DevOps, administrador de sistemas de AWS, DevOps ingeniero, jefe de construcción | 

### Configuración del flujo de aprobación
<a name="set-up-approval-flow"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure una acción de Lambda personalizada. | Para configurar la AWS Lambda acción personalizada, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrador de AWS DevOps, jefe de construcción, DevOps ingeniero, administrador de Slack | 
| Valide el flujo de aprobación. | Para validar que el flujo de aprobación funciona según lo esperado, seleccione el botón **Aprobar** en Slack.Slackbot debería enviar una notificación en el hilo de mensajes con la cadena de confirmación **El correo electrónico de aprobación se envió correctamente**. | Administrador de AWS, DevOps ingeniero de AWS DevOps, administrador de Slack | 

## Resolución de problemas
<a name="deploy-chatops-solution-to-manage-sast-scan-results-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Configuraciones incorrectas de Slack | Para obtener información sobre cómo solucionar problemas relacionados con errores de configuración de Slack, consulte Solución de problemas de Amazon Q Developer en la *Guía del administrador de aplicaciones de chat de Amazon Q Developer*. | 
| El análisis falló por algún otro motivo | Este error significa que se ha producido un error en la tarea de compilación de código. Para solucionar el problema, vaya al enlace que aparece en el mensaje. El error de la tarea de compilación de código puede deberse a las siguientes causas posibles:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | 

## Recursos relacionados
<a name="deploy-chatops-solution-to-manage-sast-scan-results-resources"></a>

**AWS documentación**
+ [Configuración de un cliente de Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup)
+ [Crear una acción personalizada](https://docs.aws.amazon.com/chatbot/latest/adminguide/custom-actions.html#creating-custom-actions)
+ [Procedimiento](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) de [creación de una identidad de dirección de correo electrónico](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure)
+ [Tutorial: Cómo empezar a usar Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html)

**Otros recursos**
+ [Adición de aplicaciones al espacio de trabajo de Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) (documentación de Slack)
+ [Generación y uso de fichas](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/) (SonarQube documentación)
+ [Introducción a la instalación del servidor](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/) (SonarQube documentación)

## Información adicional
<a name="deploy-chatops-solution-to-manage-sast-scan-results-additional"></a>

Esta solución hace hincapié en Amazon Q Developer en las acciones personalizadas de las aplicaciones de chat con fines de administración de versiones. Sin embargo, para reutilizar la solución, modifique el código de Lambda para su caso de uso específico y desarrolle a partir de él.

**Parámetros de los archivos CloudFormation apilados**

La siguiente tabla muestra los parámetros y sus descripciones para el archivo de CloudFormation pila`pre-requisite.yml`.


| 
| 
| **Clave** | **Descripción** | 
| --- |--- |
| `StackName` | El nombre de la CloudFormation pila. | 
| `S3LambdaBucket` | El nombre del bucket de Amazon S3 en el que cargó el código de Lambda. El nombre debe ser único de forma global. | 
| `SonarToken` | El token SonarQube de usuario, tal y como se describe en [los requisitos previos](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). | 

En la siguiente tabla se muestran los parámetros y sus descripciones para el archivo `app-security.yml` de CloudFormation pila.


| 
| 
| **Clave** | **Descripción** | 
| --- |--- |
| `CKMSKeyArn` | El nombre de recurso de AWS KMS key Amazon (ARN) que se utiliza en las funciones de IAM y Lambda creadas en esta pila. | 
| `CKMSKeyId` | El AWS KMS key ID que se utiliza en el tema de Amazon SNS creado en esta pila. | 
| `EnvironmentType` | El nombre del entorno del cliente para la implementación de la canalización de análisis de aplicaciones. Seleccione el nombre del entorno en la lista desplegable de valores permitidos. | 
| `S3LambdaBucket` | Nombre del bucket de Amazon S3 que contiene los archivos `approval.zip` y `notification.zip`. | 
| `SESEmail` | El nombre de la identidad de correo electrónico registrada en Amazon SES, tal y como se describe en [Requisitos previos](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). Esta identidad es la dirección de correo electrónico de origen. | 
| `SharedInboxMail` | La dirección de correo electrónico de destino a la que se envían las notificaciones de análisis. | 
| `SlackChannelId` | El ID del canal de Slack al que quiere que se envíen las notificaciones. Para encontrar el ID del canal, haga clic con el botón derecho en el nombre del canal en la sección **Detalles del canal** en la aplicación de Slack. El ID del canal está en la parte inferior. | 
| `SlackWorkspaceId` | El ID del espacio de trabajo de Slack, tal y como se describe en los [requisitos previos](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). **Para encontrar el ID del espacio de trabajo de Slack, inicia sesión en la Consola de administración de AWS consola de aplicaciones de chat para desarrolladores de Amazon Q y selecciona **Clientes configurados**, **Slack**, WorkspaceID.** | 
| `StackName` | El nombre de la pila. CloudFormation  | 
| `SonarFileDirectory` | El nombre del directorio que contiene el archivo `sonar.project.<env>.properties`. | 
| `SonarFileName` | El nombre del archivo `sonar.project.<env>properties`. | 
| `SourceCodeZip` | El nombre del archivo .zip que contiene el archivo `sonar.project.<env>properties` y el código fuente. | 

# Implementación de sistemas de agentes en Amazon Bedrock con el marco CrewAI mediante Terraform
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework"></a>

*Vanitha Dontireddy, Amazon Web Services*

## Resumen
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-summary"></a>

Este patrón demuestra cómo implementar sistemas de IA multiagente escalables mediante el marco [CrewAI](https://www.crewai.com/) integrado con [Amazon Bedrock](https://aws.amazon.com/bedrock/?nc1=h_ls) y [Terraform](https://registry.terraform.io/). La solución permite a las organizaciones crear, implementar y administrar flujos de trabajo sofisticados de agentes de IA mediante la infraestructura como código (IaC). En este patrón, las capacidades de orquestación multiagente de CrewAI se combinan con los modelos fundacionales de Amazon Bedrock y la automatización de la infraestructura de Terraform. Como resultado, los equipos pueden crear sistemas de IA listos para la producción que aborden tareas complejas con una supervisión humana mínima. El patrón implementa las prácticas recomendadas operativas de escalabilidad y de seguridad de nivel empresarial. 

## Requisitos previos y limitaciones
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS con los permisos adecuados para [acceder a los modelos de Amazon Bedrock Foundation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ La versión 1.5 o posterior de Terraform [instalada](https://developer.hashicorp.com/terraform/install)
+ Python versión 3.9 o posterior [instalada](https://www.python.org/downloads/)
+ Marco CrewAI [instalado](https://docs.crewai.com/installation)

**Limitaciones**
+ Las interacciones entre los agentes están limitadas por las ventanas de contexto del modelo.
+ Las consideraciones de administración del estado de Terraform para las implementaciones a gran escala se aplican a este patrón.
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture"></a>

En este patrón, se producen las siguientes interacciones:
+ Amazon Bedrock proporciona la base para la inteligencia de los agentes a través de su conjunto de modelos básicos (FMs). Ofrece a los agentes de IA capacidades de procesamiento de lenguaje natural (NLP), razonamiento y toma de decisiones, a la vez que mantiene una alta disponibilidad y escalabilidad.
+ El marco CrewAI sirve como capa central de orquestación para crear y administrar agentes de IA. Gestiona los protocolos de comunicación de los agentes, la delegación de tareas y la administración del flujo de trabajo a la vez que se integra con Amazon Bedrock.
+ Terraform administra toda la infraestructura mediante código, incluidos los recursos de cómputo, las redes, los grupos de seguridad y las funciones AWS Identity and Access Management (IAM). Garantiza implementaciones consistentes y con control de versiones en todos los entornos. La implementación de Terraform crea lo siguiente:
  + AWS Lambda función para ejecutar la aplicación CrewAI
  + Buckets de Amazon Simple Storage Service (Amazon S3) para código e informes
  + Roles de IAM con los permisos adecuados
  +  CloudWatch Registro de Amazon
  + Ejecución programada por parte de Amazon EventBridge

En el siguiente diagrama, se ilustra la arquitectura para la implementación de sistemas de agentes múltiples de CrewAI mediante el uso de Amazon Bedrock y Terraform.

![\[Flujo de trabajo para implementar sistemas de agentes múltiples de CrewAI mediante Terraform y Amazon Bedrock.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46069e9-4c38-405f-b0f0-310eabb06b06/images/b3296b17-e388-46ba-8d71-2ec7ce3ed3e0.png)


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

1. El usuario clona el repositorio.

1. El usuario ejecuta el comando `terraform apply` para implementar los AWS recursos.

1. La configuración del modelo de Amazon Bedrock incluye la especificación del modelo fundacional (FM) que se utilizará para configurar los agentes de CrewAI.

1. Se establece una EventBridge regla para activar la función Lambda de acuerdo con el programa definido.

1. Cuando se activa (de forma programada o manual), la función Lambda se inicializa y asume la función de IAM con permisos de acceso y Servicios de AWS Amazon Bedrock.

1. El marco CrewAI carga las configuraciones de los agentes desde archivos YAML y crea agentes de IA especializados (el equipo de *auditoría de seguridad de la infraestructura de AWS *). La función Lambda ejecuta estos agentes de forma secuencial para analizar los AWS recursos, analizar las vulnerabilidades de seguridad y generar informes de auditoría completos.

1. CloudWatch Los registros recopilan información de ejecución detallada de la función Lambda con un período de retención de 365 días y AWS Key Management Service (AWS KMS) cifrado para cumplir con los requisitos de conformidad. Los registros proporcionan visibilidad de las actividades de los agentes, el seguimiento de los errores y las métricas de rendimiento, lo que permite una supervisión eficaz del proceso de auditoría de seguridad y la solución de problemas.

1. El informe de auditoría de seguridad se genera y almacena automáticamente en el bucket de Amazon S3 designado. La configuración automatizada ayuda a mantener una supervisión de seguridad coherente con una sobrecarga operativa mínima.

Tras la implementación inicial, el flujo de trabajo proporciona auditorías e informes de seguridad continuos para su AWS infraestructura sin intervención manual.

**Información general de los agentes de IA**

Este patrón crea varios agentes de IA, cada uno con roles, objetivos y herramientas únicos:
+ El **agente analista de seguridad** recopila y analiza la información sobre AWS los recursos.
+ El **agente probador de penetración** identifica las vulnerabilidades en AWS los recursos.
+ El **agente experto en conformidad **comprueba las configuraciones con respecto a las normas de conformidad.
+ El **agente redactor de informes** recopila los resultados en informes exhaustivos.

Estos agentes colaboran en una serie de tareas y aprovechan sus habilidades colectivas para realizar auditorías de seguridad y generar informes exhaustivos. (El archivo `config/agents.yaml` describe las capacidades y configuraciones de cada agente de este equipo).

El procesamiento del análisis de seguridad consiste en las siguientes acciones:

1. El agente analista de seguridad examina los datos recopilados sobre AWS los recursos, como los siguientes:
   + Instancias y grupos de seguridad de Amazon Elastic Compute Cloud (Amazon EC2)
   + Configuraciones y buckets de Amazon S3
   + Roles, políticas y permisos de IAM
   + Configuraciones de nube privada virtual (VPC) y configuración de red
   + Bases de datos y configuración de seguridad de Amazon RDS
   + Configuraciones y funciones de Lambda
   + Otros Servicios de AWS dentro del ámbito de la auditoría

1. El agente que realiza pruebas de penetración identifica las posibles vulnerabilidades.

1. Los agentes colaboran a través del marco CrewAI para compartir sus resultados.

La generación de informes consiste en las siguientes acciones:

1. El agente redactor del informe recopila los resultados de todos los demás agentes.

1. Los problemas de seguridad se organizan por servicio, gravedad e impacto en la conformidad.

1. Se generan recomendaciones de corrección para cada problema identificado.

1. Se crea un informe completo de auditoría de seguridad en formato markdown y se carga en el bucket de Amazon S3 designado. Los informes históricos se conservan para hacer un seguimiento de la conformidad y mejorar la postura de seguridad.

Las actividades de registro y supervisión incluyen:
+ CloudWatch los registros capturan los detalles de la ejecución y cualquier error.
+ Las métricas de ejecución de Lambda se registran para su supervisión.

**nota**  
El código proviene `aws-security-auditor-crew` del repositorio GitHub [3P-Agentic\$1Frameworks](https://github.com/aws-samples/3P-Agentic-Frameworks/blob/main/crewai/aws-security-auditor-crew/README.md), disponible en la colección Samples. AWS 

**Disponibilidad y escala**

Puede ampliar los agentes disponibles a más de los cuatro agentes principales. Para escalar con más agentes especializados, considere los siguientes tipos de agentes nuevos:
+ Un agente *especialista en inteligencia de amenazas* puede hacer lo siguiente:
  + Supervisa las fuentes de amenazas externas y las correlaciona con los resultados internos
  + Proporciona un contexto sobre las amenazas emergentes relevantes para su infraestructura
  + Prioriza las vulnerabilidades en función de su explotación activa en el entorno natural
+ Los agentes del *marco de conformidad* pueden centrarse en áreas reguladoras específicas, como las siguientes:
  + Agente de conformidad con el estándar de seguridad de datos del sector de tarjetas de pago (PCI DSS)
  + Agente de conformidad con la Ley de Portabilidad y Responsabilidad de Seguros Médicos de EE. UU de 1996 (Health Insurance Portability and Accountability Act of 1996, HIPAA).
  + Agente de conformidad con los Controles del Sistema y Organizaciones 2 (SOC 2)
  + Agente de conformidad con el Reglamento General de Protección de Datos (RGPD)

Al ampliar cuidadosamente los agentes disponibles, esta solución puede proporcionar información de seguridad más profunda y especializada, al tiempo que mantiene la escalabilidad en entornos de gran tamaño. AWS Para obtener más información sobre el enfoque de implementación, el desarrollo de herramientas y las consideraciones de escalado, consulte [Información adicional](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional).

## Tools (Herramientas)
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-tools"></a>

**Servicios de AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) es un servicio de IA totalmente gestionado que permite que los modelos básicos de alto rendimiento (FMs) estén disponibles para su uso a través de una API unificada.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) le ayuda a centralizar los registros de todos sus sistemas y aplicaciones Servicios de AWS para que pueda supervisarlos y archivarlos de forma segura.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos finales de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS En este patrón, se utiliza para programar y organizar los flujos de trabajo de los agentes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos. En este patrón, proporciona almacenamiento de objetos para los artefactos de los agentes y la administración del estado.

**Otras herramientas**
+ [CrewAI](https://www.crewai.com/open-source) es un marco de código abierto basado en Python para crear sistemas de IA multiagéntica
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

El código de este patrón está disponible en el repositorio. GitHub [deploy-crewai-agents-terraform](https://github.com/aws-samples/deploy-crewai-agents-terraform.git)

## Prácticas recomendadas
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-best-practices"></a>
+ Implemente una administración de estado adecuada para Terraform mediante un backend de Amazon S3 con bloqueo de Amazon DynamoDB. Para obtener más información, consulta [las mejores prácticas de backend en Prácticas](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/backend.html) *recomendadas para usar el proveedor de Terraform AWS *.
+ Utilice los espacios de trabajo para separar los entornos de desarrollo, almacenamiento provisional y producción.
+ Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.
+ Habilite el registro y la supervisión detallados a través CloudWatch de los registros.
+ Implemente mecanismos de reintento y gestión de errores en las operaciones de los agentes.

## Epics
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-epics"></a>

### Implementación de marcos CrewAI
<a name="deploy-crewai-framework"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar un repositorio de este patrón en su máquina local, ejecute el siguiente comando:<pre>git clone "git@github.com:aws-samples/deploy-crewai-agents-terraform.git"<br />cd deploy-crewai-agents-terraform</pre> | DevOps ingeniero | 
| Edite las variables de entorno. | Para editar las variables de entorno, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingeniero | 
| Cree la infraestructura. | Para crear la infraestructura, ejecute los comandos siguientes:<pre>cd terraform</pre><pre>terraform init</pre><pre>terraform plan</pre>Revise el plan de ejecución detenidamente. Si los cambios planificados son aceptables, ejecute el comando siguiente:<pre>terraform apply --auto-approve</pre> | DevOps ingeniero | 

### Acceso a los agentes de CrewAI
<a name="access-crewai-agents"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Acceda a los agentes. | Los agentes del equipo de auditoría e informes de seguridad de la AWS infraestructura se despliegan como una función Lambda. Para acceder a los agentes, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingeniero | 
| (Opcional) Configure la ejecución manual de los agentes. | Los agentes están configurados para ejecutarse automáticamente según una programación diaria (medianoche UTC). Sin embargo, puede desencadenarlos manualmente mediante los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Para obtener más información, consulte [Prueba de funciones de Lambda en la consola](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) en la documentación de Lambda. | DevOps ingeniero | 
| Acceda a los registro del agente para la depuración. | Los agentes de CrewAI se ejecutan en un entorno de Lambda con los permisos necesarios para realizar auditorías de seguridad y almacenar informes en Amazon S3. El resultado es un informe de rebajas que proporciona un análisis exhaustivo de la seguridad de su AWS infraestructura.Para facilitar la depuración detallada del comportamiento del agente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingeniero | 
| Vea los resultados de la ejecución de los agentes. | Para ver los resultados de la ejecución de un agente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Los informes se almacenan con nombres de archivo basados en marcas de tiempo de la siguiente manera: `security-audit-report-YYYY-MM-DD-HH-MM-SS.md)` | DevOps ingeniero | 
| Supervise la ejecución de los agentes. | Para supervisar la ejecución de los agentes a través de los CloudWatch registros, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingeniero | 
|  Personalice el comportamiento del agente. | Para modificar los agentes o sus tareas, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)<pre>cd terraform </pre><pre>terraform apply</pre> | DevOps ingeniero | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos creados. | Para eliminar toda la infraestructura creada por este patrón, ejecute el comando siguiente:<pre>terraform plan -destroy </pre>El comando siguiente eliminará de forma permanente todos los recursos creados por este patrón. El comando solicitará una confirmación antes de eliminar cualquier recurso.Revise el plan de eliminación detenidamente. Si las eliminaciones planificadas son aceptables, ejecute el comando siguiente:<pre>terraform destroy</pre> | DevOps ingeniero | 

## Resolución de problemas
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Comportamiento del agente | Para obtener información sobre este problema, consulte [Prueba y solución de problemas del comportamiento de los agentes](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) en la documentación de Amazon Bedrock. | 
| Problemas de la red de Lambda | Para obtener información sobre estos problemas, consulte [Solución de problemas de red en Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) en la documentación de Lambda. | 
| Permisos de IAM | Para obtener información sobre estos problemas, consulte [Solución de problemas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) en la documentación de IAM. | 

## Recursos relacionados
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-resources"></a>

**AWS Blogs**
+ [Compilación de sistemas de agentes con CrewAI y Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/build-agentic-systems-with-crewai-and-amazon-bedrock/)

**AWS documentación**
+ [Documentación de Amazon Bedrock](https://docs.aws.amazon.com/bedrock/)
+ [Cómo funciona Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [AWS Marco de buena arquitectura](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)

**Otros recursos**
+ [Documentación de CrewAI](https://docs.crewai.com/introduction)
+ [Documentación para proveedores de Terraform AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Información adicional
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional"></a>

Esta sección contiene información sobre el enfoque de implementación, el desarrollo de herramientas y las consideraciones de escalado relacionadas con el análisis anterior sobre [Automatización y escalabilidad](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture).

**Enfoque de implementación**

Considere el siguiente enfoque para añadir agentes:

1. Configuración del agente:
   + Añada nuevas definiciones de agentes al archivo `config/agents.yaml`.
   + Defina historias de fondo, objetivos y herramientas especializados para cada agente.
   + Configure las capacidades de memoria y análisis en función de la especialidad del agente.

1. Orquestación de la tarea:
   + Actualice el archivo `config/tasks.yaml` para incluir nuevas tareas específicas del agente.
   + Cree dependencias entre las tareas para garantizar un flujo de información adecuado.
   + Implemente la ejecución paralela de tareas cuando sea apropiado.

**Implementación técnica**

A continuación se incluye una adición al archivo `agents.yaml` de un agente especialista en inteligencia de amenazas propuesto:

```
Example new agent configuration in agents.yaml
threat_intelligence_agent:
 name: "Threat Intelligence Specialist"
 role: "Cybersecurity Threat Intelligence Analyst"
 goal: "Correlate AWS security findings with external threat intelligence"
 backstory: "Expert in threat intelligence with experience in identifying emerging threats and attack patterns relevant to cloud infrastructure." 
verbose: true 
allow_delegation: true 
tools: 
- "ThreatIntelligenceTool" 
- "AWSResourceAnalyzer"
```

**Desarrollo de herramientas**

Con el marco CrewAI, puede tomar las siguientes medidas para mejorar la eficacia del equipo de auditoría de seguridad:
+ Cree herramientas personalizadas para los nuevos agentes.
+ Intégrelo con dispositivos externos APIs para obtener información sobre amenazas.
+ Desarrolle analizadores especializados para diferentes tipos. Servicios de AWS

**Consideraciones de escalado**

Al ampliar su sistema de informes y auditorías de seguridad de la AWS infraestructura para gestionar entornos más grandes o auditorías más exhaustivas, aborde los siguientes factores de escalamiento:
+ **Recursos computacionales**
  + Aumente la asignación de memoria de Lambda para gestionar agentes adicionales.
  + Considere la posibilidad de dividir las cargas de trabajo de los agentes en varias funciones de Lambda.
+ **Administración de costos**
  + Supervise el uso de la API de Amazon Bedrock a medida que aumenta el número de agentes.
  + Implemente la activación selectiva de los agentes en función del alcance de la auditoría.
+ **Eficiencia de colaboración**
  + Optimice el intercambio de información entre los agentes.
  + Implemente estructuras jerárquicas de agentes para entornos complejos.
+ **Mejora de la base de conocimientos**
  + Proporcione a los agentes bases de conocimiento especializadas para sus dominios.
  + Actualice periódicamente los conocimientos sobre los agentes con las nuevas prácticas recomendadas de seguridad.

# Implemente un trabajo de AWS Glue con una canalización de CodePipeline CI/CD de AWS
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein y Luis Henrique Massao Yamada, Amazon Web Services*

## Resumen
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

Este patrón demuestra cómo puede integrar AWS CodeCommit y AWS CodePipeline con AWS Glue y utilizar AWS Lambda para lanzar trabajos tan pronto como un desarrollador envíe sus cambios a un repositorio remoto de AWS. CodeCommit  

Cuando un desarrollador envía un cambio a un repositorio de extracción, transformación y carga (ETL) y envía los cambios a AWS CodeCommit, se invoca una nueva canalización. La canalización inicia una función de Lambda que lanza un trabajo de AWS Glue con estos cambios. El trabajo de AWS Glue lleva a cabo la tarea de ETL.

Esta solución resulta útil en situaciones en las que las empresas, los desarrolladores y los ingenieros de datos desean lanzar sus trabajos tan pronto como se implementan los cambios y se envíen a los repositorios de destino. Facilita poder lograr un mayor nivel de automatización y reproducibilidad y, por lo tanto, evita errores durante el lanzamiento y el ciclo de vida del trabajo.

## Requisitos previos y limitaciones
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Git](https://git-scm.com/) instalado en el equipo local
+ [Kit de desarrollo en la nube de Amazon (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) instalado en el equipo local
+ [Python](https://www.python.org/) instalado en el equipo local
+ El código de la sección *Attachments*

**Limitaciones**
+ La canalización finaliza en cuanto el trabajo de AWS Glue se inicia correctamente. No espera a que finalice el trabajo.
+ El código que se proporciona en el archivo adjunto está destinado únicamente a fines de demostración.

## Arquitectura
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**Pila de tecnología de destino**
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**Arquitectura de destino**

![\[Uso de Lambda para lanzar un trabajo de Glue en cuanto un desarrollador introduce cambios en un repositorio. CodeCommit\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

El proceso consta de estos pasos:

1. El desarrollador o el ingeniero de datos realiza una modificación en el código ETL, confirma y envía el cambio a AWS CodeCommit.

1. El envío inicia la canalización.

1. La canalización inicia una función de Lambda, que llama a `codecommit:GetFile` en el repositorio y carga el archivo en Amazon Simple Storage Service (Amazon S3).

1. La función de Lambda lanza un nuevo trabajo de AWS Glue con el código ETL.

1. La función de Lambda finaliza la canalización.

**Automatizar y escalar**

En el ejemplo adjunto se muestra cómo puede integrar AWS Glue con AWS CodePipeline. Proporciona un ejemplo básico que se puede personalizar o ampliar para el propio uso. Para más información, consulte la sección *Epics*.

## Tools (Herramientas)
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/): AWS CodePipeline es un servicio de [entrega continua](https://aws.amazon.com/devops/continuous-delivery/) totalmente gestionado que le ayuda a automatizar sus procesos de lanzamiento para obtener actualizaciones rápidas y fiables de las aplicaciones y la infraestructura.
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/): AWS CodeCommit es un servicio de [control de código fuente](https://aws.amazon.com/devops/source-control/) totalmente gestionado que aloja repositorios seguros basados en Git.
+ [AWS Lambda](https://aws.amazon.com/lambda/): AWS Lambda es un servicio informático sin servidor que permite ejecutar código sin aprovisionar ni administrar servidores.
+ [AWS Glue](https://aws.amazon.com/glue): AWS Glue es un servicio de integración de datos sin servidor que facilita la detección, preparación y combinación de datos para análisis, machine learning y desarrollo de aplicaciones.
+ [Cliente Git](https://git-scm.com/downloads): Git proporciona herramientas de GUI, o puedes usar la línea de comandos o una herramienta de escritorio para comprobar los artefactos necesarios GitHub. 
+ [AWS CDK](https://aws.amazon.com/cdk/): AWS CDK es un marco de desarrollo de software de código abierto que ayuda a definir los recursos de las aplicaciones en la nube mediante lenguajes de programación conocidos.

## Epics
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### Implementar el código de muestra
<a name="deploy-the-sample-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la AWS CLI. | Configure la interfaz de la línea de comandos de AWS (AWS CLI) para señalar y autenticarse con su cuenta de AWS actual. Para obtener instrucciones, consulte la [documentación de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). | Desarrollador, DevOps ingeniero | 
| Extraiga los archivos de muestra del proyecto. | Extraiga los archivos del adjunto para crear una carpeta que contenga los archivos del proyecto de muestra. | Desarrollador, DevOps ingeniero | 
| Implemente el código de muestra. | Después de extraer los archivos, ejecute los comandos siguientes desde la ubicación de extracción para crear un ejemplo de referencia:<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre>Una vez emitido el último comando, puede supervisar el estado de la canalización y el trabajo de AWS Glue. | Desarrollador, DevOps ingeniero | 
| Personalice el código. | Personalice el código del archivo etl.py de acuerdo con los requisitos de su empresa. Puede revisar el código ETL, modificar las etapas del proceso o ampliar la solución. | Ingeniero de datos | 

## Recursos relacionados
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) (Introducción a los AWS CDK)
+ [Adding jobs in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html) (Cómo agregar trabajos a AWS Glue)
+ [Integraciones de acciones fuente en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [Invoque una función de AWS Lambda en una canalización en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [AWS Glue programming](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html) (Programación con AWS Glue)
+ [ CodeCommit GetFile API DE AWS](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## Conexiones
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)

# Implemente código en varias regiones de AWS mediante AWS CodePipeline CodeCommit, AWS y AWS CodeBuild
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Resumen
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-summary"></a>

Este patrón demuestra cómo crear una infraestructura o arquitectura en varias regiones de Amazon Web Services (AWS) mediante AWS CloudFormation. Incluye integración continua (CI) e implementación continua (CD) en varias regiones de AWS para lograr implementaciones más rápidas.** **Por ejemplo, se probaron los pasos de este patrón para crear un CodePipeline trabajo de AWS para implementarlo en tres regiones de AWS. Puede cambiar el número de regiones en función del caso de uso.

## Requisitos previos y limitaciones
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ 
  + Un CodeBuild puesto en *Amazon S3 FullAccess* y en *CloudWatchFullAccess*las políticas. Estas políticas permiten CodeBuild ver eventos de AWS a CodeCommit través de Amazon CloudWatch y utilizar Amazon Simple Storage Service (Amazon S3) como almacén de artefactos.
  + Un CloudFormation rol de AWS con las siguientes políticas, que permiten a AWS CloudFormation, en la fase final de creación, crear o actualizar las funciones de AWS Lambda, enviar o ver CloudWatch los registros de Amazon y crear y actualizar conjuntos de cambios. 
    + *AWSLambdaFullAccess*
    + *AWSCodeDeployFullAccess*
    + *CloudWatchFullAccess*
    + *AWSCloudFormationFullAccess*
    + *AWSCodePipelineFullAccess*
**nota**  
Dos funciones de AWS Identity and Access Management (IAM) para AWS CodeBuild y AWS CloudFormation con las políticas adecuadas CodeBuild para realizar las tareas de CI consistentes en probar, agrupar, empaquetar los artefactos e implementarlos en varias regiones de AWS en paralelo.  Compruebe las políticas creadas por CodePipeline para comprobar que CodeBuild AWS cuenta con los CloudFormation permisos adecuados en las fases de CI y CD.

## Arquitectura
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-architecture"></a>

![\[Un CodePipeline trabajo de AWS que se implementa en tres regiones de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/d44c393c-7243-4d4e-8b84-88a8503af98f/images/5c27fc35-5e62-4292-8b18-a7bc7faf2631.png)


La arquitectura y el flujo de trabajo de varias regiones de este patrón comprenden los siguientes pasos.

1. Envía el código a un CodeCommit repositorio.

1. Al recibir cualquier actualización o confirmación de código, CodeCommit invoca un CloudWatch evento que, a su vez, inicia un CodePipeline trabajo.

1. CodePipeline activa el CI gestionado por. CodeBuild Se realizan las siguientes tareas.
   + Prueba de las CloudFormation plantillas de AWS (opcional)
   + Empaquetado de las CloudFormation plantillas de AWS para cada región incluidas en la implementación. Por ejemplo, este patrón se implementa en paralelo en tres regiones de AWS, por lo que CodeBuild empaqueta las CloudFormation plantillas de AWS en tres grupos de S3, uno en cada región especificada. Los depósitos de S3 se utilizan únicamente CodeBuild como repositorios de artefactos.

1. CodeBuild empaqueta los artefactos como entrada para la siguiente fase de implementación, que se ejecuta en paralelo en las tres regiones de AWS. Si especifica un número diferente de regiones, CodePipeline se desplegará en esas regiones.

## Tools (Herramientas)
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-tools"></a>

**Herramientas**
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html): CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para publicar los cambios de software de forma continua.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html): CodeBuild es un servicio de compilación totalmente gestionado que compila el código fuente, ejecuta pruebas unitarias y produce artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html): CodeCommit es un servicio de control de versiones hospedado por Amazon Web Services que puede utilizar para almacenar y gestionar activos (como código fuente y archivos binarios) en la nube de forma privada.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS CloudFormation es un servicio que le ayuda a modelar y configurar sus recursos de Amazon Web Services para que pueda dedicar menos tiempo a gestionar esos recursos y más a centrarse en las aplicaciones que se ejecutan en AWS.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): AWS Identity and Access Management (IAM) es un servicio web que le ayuda a controlar de forma segura el acceso a los recursos de AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento para Internet. Está diseñado para facilitar a los desarrolladores recursos de computación escalables basados en Web.

**Código**

El siguiente código de ejemplo es para el archivo `BuildSpec.yaml` (fase de compilación).

```
---
artifacts:
discard-paths: true
files:
- packaged-first-region.yaml
- packaged-second-region.yaml
- packaged-third-region.yaml
phases:
build:
commands:
- echo "********BUILD PHASE - CF PACKAGING**********"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION"
- "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION"
install:
commands:
- echo "********BUILD PHASE - PYTHON SETUP**********"
runtime-versions:
python: 3.8
post_build:
commands:
- echo "********BUILD PHASE - PACKAGING COMPLETION**********"
pre_build:
commands:
- echo "********BUILD PHASE - DEPENDENCY SETUP**********"
- "npm install --silent --no-progress"
- echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********"
version: 0.2
```

## Epics
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-epics"></a>

### Prepare el código y el CodeCommit repositorio
<a name="prepare-the-code-and-the-codecommit-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Seleccione la región de AWS principal para la implementación. | Inicie sesión en su cuenta de AWS y elija la región principal para la implementación. El CodeCommit repositorio estará en la región principal. | DevOps | 
| Cree el CodeCommit repositorio. | Cree el CodeCommit repositorio e introduzca el código necesario en él. Por lo general, el código incluye las plantillas de AWS CloudFormation o AWS SAM, el código Lambda, si lo hubiera, y los CodeBuild `buildspec.yaml` archivos como entrada a AWS. CodePipeline | DevOps | 
| Inserte el código en el CodeCommit repositorio. | En la sección de *adjuntos*, descargue el código de este ejemplo y, a continuación, inserte el código necesario en él. Por lo general, el código puede incluir plantillas de AWS CloudFormation o AWS SAM, código Lambda y los CodeBuild `buildspec.yaml` archivos como entrada a la canalización. | DevOps | 

### Fase de origen: Crear la canalización
<a name="source-phase-create-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el CodePipeline trabajo. | En la CodePipeline consola, selecciona **Crear canalización**. | DevOps | 
| Asigne un nombre al CodePipeline trabajo y elija la configuración del rol de servicio. | Introduzca un nombre para el trabajo y mantenga la configuración de rol de servicio predeterminada para CodePipeline crear el rol con las políticas necesarias adjuntas. | DevOps | 
| Especifique la ubicación del almacén de artefactos. | En **Configuración avanzada**, mantenga la opción predeterminada para CodePipeline crear un bucket de S3 que se utilizará como almacenamiento de artefactos de código. Si en su lugar utiliza un bucket de S3 existente, el bucket debe estar en la región principal que especificó en la primera épica. | DevOps | 
| Especifique la clave de cifrado. | Elimine la opción predeterminada, **clave administrada de AWS predeterminada** o utilice la clave administrada por el cliente de AWS Key Management Service (AWS KMS). | DevOps | 
| Especifique el proveedor de origen. | En **Proveedor de código fuente**, elija **AWS CodeCommit**. | DevOps | 
| Especifique el repositorio. | Elige el CodeCommit repositorio que creaste en la primera epopeya. Si ha colocado el código en una ramificación, elija la rama. | DevOps | 
| Especifique cómo se detectan los cambios en el código. | Mantenga el valor predeterminado, **Amazon CloudWatch Events**, como activador del cambio CodeCommit para iniciar el CodePipeline trabajo. | DevOps | 

### Fase de creación: configure la canalización
<a name="build-phase-configure-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Especifique el proveedor de compilación. | Para el proveedor de compilación, elija **AWS CodeBuild**. | DevOps | 
| Especifique la Región de AWS. | Elija la región principal que especificó en la primera épica. | DevOps | 

### Fase de compilación: cree y configure el proyecto
<a name="build-phase-create-and-configure-the-project"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación del proyecto | Elija **Crear proyecto** e especifique un nombre para el proyecto. | DevOps | 
| Especifique la imagen del entorno. | Para esta demostración del patrón, utilice la imagen CodeBuild gestionada por defecto. También tiene la opción de utilizar una imagen de Docker personalizada si tiene una. | DevOps | 
| Especifique el sistema operativo. | Elija Amazon Linux 2 o Ubuntu.Se acerca el fin de la compatibilidad de Amazon Linux 2. Para obtener más información, consulte [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/). | DevOps | 
| Especifique el rol de servicio. | Elija el rol para el que creó CodeBuild antes de empezar a crear el CodePipeline trabajo. (Consulte la sección *Requisitos previos*.) | DevOps | 
| Establezca opciones adicionales. | Para **Tiempo de espera** y el **Tiempo de espera en cola**, mantenga los valores predeterminados. En el caso del certificado, mantenga la configuración predeterminada a menos que desee utilizar un certificado personalizado. | DevOps | 
| Crear las variables de entorno. | Para cada región de AWS en la que desee realizar la implementación, cree variables de entorno proporcionando el nombre del bucket de S3 y el nombre de la región (por ejemplo, us-east-1). | DevOps | 
| Proporcione el nombre del archivo buildspec, si no es buildspec.yml. | Mantenga este campo en blanco si el nombre del archivo es el predeterminado, `buildspec.yaml`. Si ha cambiado el nombre del archivo buildspec, introdúzcalo aquí. Asegúrese de que coincide con el nombre del archivo que está en el CodeCommit repositorio. | DevOps | 
| Especifique el registro. | Para ver los registros de Amazon CloudWatch Events, mantenga la configuración predeterminada. O bien, puede definir cualquier nombre de grupo o registrador específico. | DevOps | 

### Omitir la fase de implementación
<a name="skip-the-deploy-phase"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Omita la fase de implementación y complete la creación de la canalización. | Al configurar la canalización, CodePipeline permite crear solo una etapa en la fase de implementación. Para realizar la implementación en varias regiones de AWS, omita esta fase. Una vez creada la canalización, puede añadir varias etapas de la fase de implementación. | DevOps | 

### Fase de implementación: configure la canalización para la implementación en la primera región
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-first-region"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue una etapa a la fase de implementación. | Edite la canalización y elija **Agregar etapa** en la fase de implementación. Esta primera etapa es para la región principal. | DevOps | 
| Proporcione un nombre de acción para la etapa. | Introduzca un nombre único que refleje la primera etapa (principal) y la región. Por ejemplo, introduzca **primary\$1<region>\$1deploy**. | DevOps | 
| Especifique el proveedor de acciones. | En **Action provider**, elija AWS CloudFormation. | DevOps | 
| Configure la región para la primera etapa. | Elija la primera región (principal), la misma región en CodePipeline la CodeBuild que están configuradas. Esta es la región principal en la que desea implementar la pila. | DevOps | 
| Especifique el artefacto de entrada. | Elija **BuildArtifact**. Este es el resultado de la fase de construcción. | DevOps | 
| Especifique la acción que se va a realizar. | Para **Modo acción**, elija **Crear o actualizar una pila**. | DevOps | 
| Introduzca un nombre para la CloudFormation pila. |  | DevOps | 
| Especifique la plantilla para la primera región. | Seleccione el nombre del paquete específico de la región que empaquetó CodeBuild y descargó en el depósito de S3 de la primera región (principal). | DevOps | 
| Especifique las capacidades. | Las capacidades son necesarias si la plantilla de pila incluye recursos de IAM o si se crea una pila directamente a partir de una plantilla que contiene macros. Para este patrón, utilice CAPABILITY\$1IAM, CAPABILITY\$1NAMED\$1IAM y CAPABILITY\$1AUTO\$1EXPAND. | DevOps | 

### Fase de despliegue: configure la canalización para la implementación en la segunda región
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-second-region"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada la segunda etapa a la fase de despliegue. | Para añadir una etapa para la segunda región, edite la canalización y elija **Añadir etapa** en la fase de despliegue. Importante: el proceso de creación de la segunda región es el mismo que el de la primera región, excepto por los siguientes valores. | DevOps | 
| Proporcione un nombre de acción para la segunda etapa. | Introduzca un nombre único que refleje la segunda etapa y la segunda región. | DevOps | 
| Configure la región para la segunda etapa. | Elija la segunda región en la que desea implementar la pila. | DevOps | 
| Especifique la plantilla para la segunda región. | Seleccione el nombre del paquete específico de la región que empaquetó CodeBuild y descargó en el depósito de S3 de la segunda región. | DevOps | 

### Fase de implementación: configure la canalización para la implementación en la tercera región
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-third-region"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada la tercera etapa a la fase de implementación. | Para añadir una etapa para la tercera región, edite la canalización y elija **Añadir etapa** en la fase de implementación. Importante: el proceso de creación de la segunda región es el mismo que el de las dos regiones anteriores, excepto por los siguientes valores. | DevOps | 
| Proporcione un nombre de acción para la tercera etapa. | Introduzca un nombre único que refleje la tercera etapa y la tercera región. | DevOps | 
| Configure la región para la tercera etapa. | Elija la tercera región en la que desea implementar la pila. | DevOps | 
| Especifique la plantilla para la tercera región. | Seleccione el nombre del paquete específico de la región que empaquetó CodeBuild y descargó en el depósito de S3 de la tercera región. | DevOps | 

### Eliminar la implementación
<a name="clean-up-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de los recursos de AWS. | Para limpiar la implementación, elimine las CloudFormation pilas de cada región. A continuación CodeCommit, elimine los CodePipeline recursos CodeBuild, y de la región principal. | DevOps | 

## Recursos relacionados
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-resources"></a>
+ [¿Qué es AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Modelo de aplicación sin servidor de AWS](https://aws.amazon.com/serverless/sam/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
+ [Referencia de estructura de CloudFormation arquitectura de AWS para AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)

## Conexiones
<a name="attachments-d44c393c-7243-4d4e-8b84-88a8503af98f"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/d44c393c-7243-4d4e-8b84-88a8503af98f/attachments/attachment.zip)

# Implemente cargas de trabajo desde DevOps canalizaciones de Azure a clústeres privados de Amazon EKS
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumen
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

Este patrón demuestra cómo implementar la integración continua y la entrega continua (CI/CD) desde DevOps canalizaciones de Azure a clústeres privados de Amazon Elastic Kubernetes Service (Amazon EKS). Aborda un desafío fundamental al que se enfrentan las organizaciones que están mejorando su postura de seguridad mediante la transición a puntos de conexión de servidores de API privados para sus clústeres de Amazon EKS.

Un punto de conexión público expone el servidor de API de Kubernetes directamente a Internet, lo que crea una mayor superficie expuesta a ataques a la que podrían dirigirse actores maliciosos. Al cambiar a un punto de conexión privado, el acceso al plano de control del clúster está restringido a la nube privada virtual (VPC) del cliente.

Si bien la transición de un clúster de Amazon EKS a un punto final de API privado mejora considerablemente la seguridad, presenta desafíos de conectividad para CI/CD plataformas externas como Azure DevOps. Solo se puede acceder al punto de conexión privado desde la VPC o las redes interconectadas del clúster. Por lo tanto, los DevOps agentes de Azure estándar alojados en Microsoft, que operan fuera de la red AWS privada, no pueden acceder directamente al servidor API de Kubernetes. Esto interrumpe los flujos de trabajo de implementación típicos que dependen de herramientas como kubectl o Helm que se ejecutan en estos agentes porque no logran establecer una conexión con el clúster.

Para superar este problema, este patrón muestra un enfoque eficiente mediante el uso de DevOps agentes de Azure autohospedados dentro de clústeres privados de Amazon EKS. Esta solución ofrece una optimización de costos, una eficiencia operativa y una escalabilidad superiores, a la vez que preserva los requisitos de seguridad. Este enfoque beneficia especialmente a las empresas que buscan optimizar sus DevOps procesos multicloud sin comprometer el rendimiento ni la seguridad.

## Requisitos previos y limitaciones
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ AWS Command Line Interface [(AWS CLI) versión 2.13.17 o posterior, instalada.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ La versión 1.25.1 o posterior de kubectl [instalada](https://kubernetes.io/docs/tasks/tools/).
+ Un clúster privado de Amazon EKS versión 1.24 o posterior [creado](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html), con permisos para crear espacios de nombres, secretos e implementaciones[.](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Nodos de trabajo en un clúster de Amazon EKS con conectividad saliente a Internet para que el DevOps agente de Azure que se ejecute en ellos pueda conectarse al grupo de DevOps agentes de Azure.
+ GitHub cuenta [creada](https://github.com/signup).
+ [Se creó un DevOps proyecto de Azure con acceso para configurar las conexiones de servicio, que son conexiones autenticadas entre Azure Pipelines y servicios externos o remotos.](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account)
+ La Kit de herramientas de AWS para Azure DevOps versión 1.15 o posterior instalada para el DevOps proyecto de Azure descrito en el punto anterior. Para obtener instrucciones de instalación, consulte [Kit de herramientas de AWS para Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools) en Visual Studio Marketplace.

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

Este patrón crea lo siguiente:
+ Repositorio **Amazon ECR: el repositorio** Amazon Elastic Container Registry (Amazon ECR) almacena la imagen de Docker con el DevOps agente de Azure y la aplicación de muestra que se implementa.
+ Grupo de ** DevOps agentes de Azure: un grupo** de agentes DevOps autohospedados de Azure registra el agente que se ejecuta en el clúster privado de Amazon EKS.
+ Función de **IAM: una función** AWS Identity and Access Management (IAM) para la conexión del servicio de Azure que proporciona el acceso necesario al agente que se ejecuta en un clúster privado de Amazon EKS.
+ **Conexión DevOps de servicio de Azure**: una conexión de servicio en una DevOps cuenta de Azure para utilizar la función de IAM que proporciona el acceso necesario para que accedan los trabajos en proceso. Servicios de AWS

El siguiente diagrama muestra la arquitectura de implementación de un DevOps agente de Azure autohospedado en un clúster privado de Amazon EKS y de implementación de una aplicación de muestra en el mismo clúster.

![\[Implementación de un DevOps agente de Azure autohospedado y una aplicación de muestra en un clúster privado de Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


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

1. Implemente un DevOps agente de Azure autohospedado como una implementación dentro de un clúster de Amazon EKS.

1. Un DevOps agente de Azure se conecta al grupo de agentes de una DevOps cuenta de Azure mediante un token de acceso personal (PAT) para la autenticación.

1. Azure Pipelines configura una canalización para implementarla mediante código de un GitHub repositorio.

1. La canalización se ejecuta en el agente desde el grupo de agentes que se configuró en la configuración de canalización. El DevOps agente de Azure obtiene la información de trabajo de la canalización consultando constantemente la cuenta de Azure DevOps .

1. El DevOps agente de Azure crea una imagen de Docker como parte del trabajo en proceso y envía la imagen al repositorio de Amazon ECR.

1. El DevOps agente de Azure implementa la aplicación de muestra en un clúster privado de Amazon EKS en un espacio de nombres denominado. `webapp` 

## Tools (Herramientas)
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**Herramientas**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

**Otras herramientas**
+ [Docker](https://www.docker.com/) 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.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/): una interfaz de la línea de comandos que le ayuda en la ejecución de comandos en clústeres de Kubernetes.

**Repositorio de código**
+ El código de este patrón está disponible en el repositorio GitHub [deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops).

## Prácticas recomendadas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ Para Amazon EKS, consulte la [Guía de prácticas recomendadas de Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html).
+ Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### Creación de una conexión de servicio
<a name="create-a-service-connection"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Busque el GUID de la DevOps organización de Azure. | Inicie sesión en su DevOps cuenta de Azure y, a continuación, utilice la siguiente URL para buscar el GUID de la organización: `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` En la URL, `{DevOps_org_ID}` sustitúyalo por el ID de su DevOps organización de Azure. | AWS DevOps | 
| Configure un IdP en la Cuenta de AWS. | Para configurar un proveedor de identidad (IdP) en una conexión Cuenta de AWS de servicio de Azure, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obtener más información, consulte [Cómo federarse AWS desde Azure DevOps mediante OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/). | AWS DevOps | 
| Cree una política de IAM en la Cuenta de AWS. | Para crear una política de IAM que proporcione los permisos necesarios para la función de IAM utilizada por la DevOps canalización de Azure, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Cree un rol de IAM role en la Cuenta de AWS. | Para configurar un rol de IAM en Cuenta de AWS la conexión del servicio de Azure, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre>En la política, proporcione su información para los siguientes marcadores de posición:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Cree una conexión de servicio en la DevOps cuenta de Azure. | Para configurar una conexión de servicio de Azure, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obtener más información, consulte [Crear una conexión de servicio](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) en la documentación de Microsoft. | AWS DevOps | 
| Añada el rol de IAM al archivo de configuración de Amazon EKS. | El rol de IAM debe tener permisos para realizar las operaciones requeridas en el clúster de Amazon EKS. Como se trata de un rol de canalización, el rol de IAM debe poder administrar casi todos los tipos de recursos del clúster. Por lo tanto, el permiso de grupo `system:masters` es adecuado para este rol.Para añadir la configuración necesaria al `aws-auth ConfigMap` en Kubernetes, use el siguiente código:<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre>`{account_id}`Sustitúyalo por su Cuenta de AWS ID.Para obtener más información, consulte la sección sobre [cómo funciona Amazon EKS con IAM](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles) en la documentación de Amazon EKS. | AWS DevOps | 

### Creación de un grupo de agentes
<a name="create-an-agent-pool"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un grupo de agentes autoalojado. | Para configurar un grupo de agentes autohospedados en la DevOps cuenta de Azure, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obtener más información, consulte [Crear y administrar grupos de agentes](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser) en la documentación de Microsoft. |  | 

### Cree una imagen de DevOps agente de Azure y envíela a Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio de Amazon ECR. | Las imágenes de Docker que se utilizan para implementar el DevOps agente de Azure y la aplicación de muestra (`webapp`) en el clúster privado de Amazon EKS deben almacenarse en un repositorio de Amazon ECR. Para crear un repositorio de Amazon ECR, complete los pasos siguientes.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obtener más información, consulte [Creación de un repositorio privado de Amazon ECR para almacenar imágenes](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la documentación de Amazon ECR. | AWS DevOps | 
| Cree un Dockerfile para crear el agente de Azure DevOps . | Cree un Dockerfile para crear la imagen de Docker que tiene instalado el agente de Azure. DevOps Almacene el siguiente contenido en un archivo denominado `Dockerfile`:<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| Cree un script para el DevOps agente de Azure. | Para crear el script `start.sh`, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Cree una imagen de Docker con el DevOps agente de Azure.  | Para crear una imagen de Docker para instalar el DevOps agente de Azure, utilice el Dockerfile que creó anteriormente para crear la imagen. En el mismo directorio en el que almacenó el Dockerfile, ejecute el comando siguiente.<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre>Sustituya `aws_account_id` y por su `region` Cuenta de AWS ID y. Región de AWS | AWS DevOps | 

### Implemente el DevOps agente de Azure en un clúster privado de Amazon EKS
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Genere un token de acceso personal de Azure. | El agente que se ejecuta en el clúster privado de Amazon EKS necesita un token de acceso personal (PAT) para poder autenticarse con la DevOps cuenta de Azure. Para generar un PAT, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>kubectl create -f ado-secret.yaml</pre>Para obtener más información, consulte [Registrar un agente mediante un token de acceso personal (PAT)](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops) en la documentación de Microsoft. | AWS DevOps | 
| Use el archivo de manifiesto de Kubernetes para la implementación del agente. | Para implementar el DevOps agente de Azure en el clúster privado de Amazon EKS, copie el siguiente archivo de manifiesto y guárdelo como`agent-deployment.yaml`: <pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre>Sustituya `aws_account_id` y `<Azure account URL>` por su Cuenta de AWS ID y la URL de su DevOps cuenta de Azure. | AWS DevOps | 
| Implemente el agente en el clúster privado de Amazon EKS. | Para implementar el agente de Azure DevOps en el clúster privado de Amazon EKS, use el siguiente comando:<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| Compruebe que el agente se está ejecutando. | Para comprobar que el DevOps agente de Azure se está ejecutando, utilice el siguiente comando:<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre>La salida debería tener un aspecto similar al siguiente:<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre>Asegúrese de que la columna `READY ` muestre `1/1`. | AWS DevOps | 
| Compruebe que el agente esté registrado en el grupo de DevOps agentes de Azure. | Para comprobar que el agente está implementado en el clúster privado de Amazon EKS y registrado en el grupo de agentes `eks-agent`, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Debería ver un agente en la lista con **el estado** **en línea** y el nombre del agente debería empezar por **azure-pipelines-agent-eks-\$1**. | AWS DevOps | 

### Implementación de la aplicación de ejemplo
<a name="deploy-sample-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Transfiera el repositorio de aplicaciones de muestra a su GitHub cuenta.  | Transfiera el siguiente repositorio de AWS muestras a su GitHub cuenta:[https://github.com/aws-samples/deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| Crear una canalización. | Para crear una canalización en su DevOps cuenta de Azure, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Verifique que la aplicación de muestra se ha implementado. | Una vez finalizada la canalización, compruebe que la implementación de la aplicación de muestra se ha realizado correctamente; para ello, consulte tanto el repositorio de Amazon ECR como el clúster de Amazon EKS.Para verificar los artefactos en el repositorio de Amazon ECR, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Por ejemplo, `20250501.1-image` y `20250501.1-helm`.Para verificar la implementación en el clúster privado de Amazon EKS del espacio de nombres `webapp`, use el siguiente comando:<pre>kubectl get deploy -n webapp </pre>El resultado esperado es el siguiente:<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre>Nota: Si esta es la primera vez que ejecuta una canalización, es posible que deba autorizar la conexión del servicio y el grupo de agentes. Busque las solicitudes de permiso en la interfaz de DevOps canalización de Azure y apruebelas para continuar. | AWS DevOps | 

## Resolución de problemas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La canalización falla cuando el nombre del repositorio de Amazon ECR no coincide con `webapp` | La aplicación de ejemplo espera que el nombre del repositorio de Amazon ECR coincida con el parámetro `projectName: webapp` en `azure_pipeline.yml`.Para resolver este problema, cambie el nombre de su repositorio de Amazon ECR a `webapp` o actualice lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 
| Error: Kubernetes cluster unreachable: the server has asked for the client to provide credentials | Si encuentra este error en el paso “Extraer e implementar gráfico de Helm” de su canalización de Azure, la causa principal suele deberse a una configuración incorrecta de los roles de IAM en el `aws-auth ConfigMap` del clúster de Amazon EKS.Para resolver este problema, compruebe lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 

## Recursos relacionados
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS Blogs**
+ [Cómo federarse AWS desde Azure DevOps mediante OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**Servicios de AWS documentación**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Documentación de Microsoft**
+ [¿Qué es Azure DevOps?](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [¿Qué es Azure Pipelines?](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)

# Ejecución de consultas SQL en Amazon Redshift mediante Terraform
<a name="execute-redshift-sql-queries-using-terraform"></a>

*Sylvia Qi y Aditya Ambati, Amazon Web Services*

## Resumen
<a name="execute-redshift-sql-queries-using-terraform-summary"></a>

El uso de la infraestructura como código (IaC) para la implementación y la administración de Amazon Redshift es una práctica habitual en el país. DevOps La IaC facilita la implementación y la configuración de varios recursos de Amazon Redshift, como clústeres, instantáneas y grupos de parámetros. Sin embargo, la IaC no se extiende a la administración de los recursos de las bases de datos, como tablas, esquemas, vistas y procedimientos almacenados. Estos elementos de la base de datos se administran mediante consultas SQL y las herramientas de IaC no los admiten directamente. Si bien existen soluciones y herramientas para administrar estos recursos, es posible que prefiera no introducir herramientas adicionales en su conjunto de tecnologías.

Este patrón describe una metodología que utiliza Terraform para implementar los recursos de bases de datos de Amazon Redshift, incluidas tablas, esquemas, vistas y procedimientos almacenados. El patrón distingue entre dos tipos de consultas SQL:
+ **Consultas no repetibles**: estas consultas se ejecutan una vez durante la implementación inicial de Amazon Redshift para establecer los componentes esenciales de la base de datos. 
+ **Consultas repetibles**: estas consultas son inmutables y se pueden volver a ejecutar sin que ello afecte a la base de datos. La solución usa Terraform para supervisar los cambios en las consultas repetibles y aplicarlos en consecuencia.

Para obtener más información, consulte el *tutorial de la solución* en [Información adicional](#execute-redshift-sql-queries-using-terraform-additional).

## Requisitos previos y limitaciones
<a name="execute-redshift-sql-queries-using-terraform-prereqs"></a>

**Requisitos previos **

Debe tener una máquina de implementación activa Cuenta de AWS e instalar lo siguiente:
+ [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (AWS CLI)
+ Un [AWS CLI perfil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) configurado con permisos de Amazon Redshift read/write 
+ La versión 1.6.2 o posterior de [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Python 3](https://www.python.org/downloads/)
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)

**Limitaciones**
+ Esta solución admite una única base de datos de Amazon Redshift porque Terraform solo permite la creación de una base de datos durante la creación del clúster.
+ Este patrón no incluye pruebas para validar los cambios en las consultas repetibles antes de aplicarlos. Le recomendamos que incorpore dichas pruebas para mejorar la fiabilidad.
+ Para ilustrar la solución, este patrón proporciona un archivo `redshift.tf` de muestra que utiliza un archivo de estado local de Terraform. Sin embargo, para los entornos de producción, le recomendamos encarecidamente que utilice un archivo de estado remoto con un mecanismo de bloqueo para mejorar la estabilidad y la colaboración.
+ Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**

Esta solución se ha desarrollado y probado en el [parche 179 de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-179).

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [amazon-redshift-sql-deploy-terraform](https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform).

## Arquitectura
<a name="execute-redshift-sql-queries-using-terraform-architecture"></a>

El siguiente diagrama ilustra cómo Terraform administra los recursos de la base de datos de Amazon Redshift gestionando consultas SQL repetibles y no repetibles.

![\[Proceso para que Terraform administre los recursos de la base de datos de Amazon Redshift mediante consultas SQL.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/0f4467ac-761b-4b6b-a32f-e18a2ca2245d/images/3b6ff9e8-e3d1-48ed-9fa1-4b14f7d3d65b.png)


En el diagrama se muestran los siguientes pasos:

1. Terraform aplica consultas SQL no repetibles durante la implementación inicial del clúster de Amazon Redshift.

1. El desarrollador confirma los cambios en las consultas SQL repetibles.

1. Terraform supervisa los cambios en las consultas SQL repetibles.

1. Terraform aplica consultas SQL repetibles a la base de datos de Amazon Redshift.

La solución que proporciona este patrón se basa en el [módulo de Terraform para Amazon Redshift](https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/latest). El módulo de Terraform aprovisiona un clúster y una base de datos de Amazon Redshift. Para mejorar el módulo, utilizamos `terraform_data` resources, que invoca un script de Python personalizado para ejecutar consultas SQL mediante la operación de la API Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift. En consecuencia, el módulo puede hacer lo siguiente:
+ Implemente cualquier cantidad de recursos de base de datos mediante consultas SQL después de aprovisionar la base de datos.
+ Supervise continuamente los cambios en las consultas SQL repetibles y aplique esos cambios con Terraform.

Para obtener más información, consulte el *tutorial de la solución* en [Información adicional](#execute-redshift-sql-queries-using-terraform-additional).

## Tools (Herramientas)
<a name="execute-redshift-sql-queries-using-terraform-tools"></a>

**Servicios de AWS**
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) es un servicio de almacén de datos completamente administrado que opera a escala de petabytes en la Nube de AWS.

**Otras herramientas**
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.
+ [Python](https://www.python.org/) es un lenguaje de programación de uso general que se utiliza en este patrón para ejecutar consultas SQL. 

## Prácticas recomendadas
<a name="execute-redshift-sql-queries-using-terraform-best-practices"></a>
+ [Prácticas recomendadas de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)
+ [Uso de la API de datos de Amazon Redshift para interactuar con los clústeres de Amazon Redshift](https://aws.amazon.com/blogs/big-data/using-the-amazon-redshift-data-api-to-interact-with-amazon-redshift-clusters/)

## Epics
<a name="execute-redshift-sql-queries-using-terraform-epics"></a>

### Implementaci´n de la solución mediante Terraform
<a name="deploy-the-solution-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| **Clone el repositorio.** | Para clonar el repositorio de Git que contiene el código de Terraform para aprovisionar un clúster de Amazon Redshift, utilice el siguiente comando.<pre>git clone https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform.git</pre> | DevOps ingeniero | 
| **Actualice las variables de Terraform.** | Para personalizar la implementación del clúster de Amazon Redshift de acuerdo con sus requisitos específicos, actualice los siguientes parámetros del archivo `terraform.tfvars`.<pre>region                    = "<AWS_REGION>"<br />cluster_identifier        = "<REDSHIFT_CLUSTER_IDENTIFIER>"<br />node_type                 = "<REDSHIFT_NODE_TYPE>"<br />number_of_nodes           = "<REDSHIFT_NODE_COUNT>"<br />database_name             = "<REDSHIFT_DB_NAME>"<br />subnet_ids                = "<REDSHIFT_SUBNET_IDS>"<br />vpc_security_group_ids    = "<REDSHIFT_SECURITY_GROUP_IDS>"<br />run_nonrepeatable_queries = true<br />run_repeatable_queries    = true<br />sql_path_bootstrap        = "<BOOTSTRAP_SQLS_PATH>"<br />sql_path_nonrepeatable    = "<NON-REPEATABLE_SQLS_PATH>"<br />sql_path_repeatable       = "<REPEATABLE_SQLS_PATH>"<br />sql_path_finalize         = "<FINALIZE_SQLS_PATH>"<br />create_random_password    = false<br />master_username           = "<REDSHIFT_MASTER_USERNAME>"</pre> | DevOps ingeniero | 
| Implemente los recursos con Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DevOps ingeniero | 
| (Opcional) Ejecute consultas SQL adicionales. | El repositorio de ejemplos proporciona varias consultas SQL con fines de demostración. Para ejecutar sus propias consultas SQL, agréguelas a las siguientes carpetas:`/bootstrap` `/nonrepeatable` `/repeatable` `/finalize` |  | 

### Supervisión de la ejecución de instrucciones SQL
<a name="monitor-the-execution-of-sql-statements"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Supervise la implementación de las instrucciones SQL. | Puede supervisar los resultados de las ejecuciones de SQL en un clúster de Amazon Redshift. Para ver ejemplos de resultados que muestran una ejecución de SQL fallida y correcta, consulte *Ejemplos de instrucciones SQL* en [Información adicional](#execute-redshift-sql-queries-using-terraform-additional).  | DBA, ingeniero DevOps  | 
| Eliminación de recursos. | Para eliminar todos los recursos implementados por Terraform, ejecute el siguiente comando.<pre>terraform destroy</pre> | DevOps ingeniero | 

### Validación de los resultados
<a name="validate-the-results"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide los datos en el clúster de Amazon Redshift. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | ADMINISTRADOR DE BASES DE DATOS, AWS DevOps | 

## Recursos relacionados
<a name="execute-redshift-sql-queries-using-terraform-resources"></a>

**AWS documentación**
+ [Clústeres aprovisionados por Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)
+ [Solución de problemas de la API de datos de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-troubleshooting.html)

**Otros recursos**
+ [Comando: apply](https://developer.hashicorp.com/terraform/cli/commands/apply)(documentación de Terraform)

## Información adicional
<a name="execute-redshift-sql-queries-using-terraform-additional"></a>

**Tutorial de la solución**

Para usar la solución, debe organizar las consultas SQL de Amazon Redshift de una manera específica. Todas las consultas SQL deben almacenarse en archivos con una extensión `.sql`.

En el ejemplo de código que se proporciona con este patrón, las consultas SQL se organizan en la siguiente estructura de carpetas. Puede modificar el código (`sql-queries.tf` y `sql-queries.py`) para que funcione con cualquier estructura que se adapte a su caso de uso exclusivo.

```
/bootstrap
     |- Any # of files
     |- Any # of sub-folders
/nonrepeatable
     |- Any # of files
     |- Any # of sub-folders
/repeatable
     /udf
          |- Any # of files
          |- Any # of sub-folders
     /table
          |- Any # of files
          |- Any # of sub-folders
     /view
          |- Any # of files
          |- Any # of sub-folders
     /stored-procedure
          |- Any # of files
          |- Any # of sub-folders
/finalize
     |- Any # of files
     |- Any # of sub-folders
```

Dada la estructura de carpetas anterior, durante la implementación del clúster de Amazon Redshift, Terraform ejecuta las consultas en el siguiente orden:

1. `/bootstrap`

1. `/nonrepeatable`

1. `/repeatable`

1. `/finalize`

La carpeta `/repeatable` contiene las subcarpetas `/udf`, `/table`, `/view` y `/stored-procedure`. Estas subcarpetas indican el orden en el que Terraform ejecuta las consultas SQL.

El script de Python que ejecuta las consultas SQL es `sql-queries.py`. En primer lugar, el script lee todos los archivos y subcarpetas de un directorio fuente específico, por ejemplo, el parámetro `sql_path_bootstrap`. A continuación, el script ejecuta las consultas mediante una llamada a la operación de la API Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift. Es posible que tenga una o más consultas SQL en un archivo. El siguiente fragmento de código muestra la función de Python que ejecuta instrucciones SQL almacenadas en un archivo en un clúster de Amazon Redshift.

```
def execute_sql_statement(filename, cluster_id, db_name, secret_arn, aws_region):
    """Execute SQL statements in a file"""
    redshift_client = boto3.client(
        'redshift-data', region_name=aws_region)
    contents = get_contents_from_file(filename),
    response = redshift_client.execute_statement(
        Sql=contents[0],
        ClusterIdentifier=cluster_id,
        Database=db_name,
        WithEvent=True,
        StatementName=filename,
        SecretArn=secret_arn
    )
    ...
```

El script `sql-queries.tf` de Terraform crea los recursos [terraform\$1data](https://developer.hashicorp.com/terraform/language/resources/terraform-data) que invocan el script `sql-queries.py`. Hay un recurso `terraform_data` para cada una de las cuatro carpetas: `/bootstrap`, `/nonrepeatable`, `/repeatable` y `/finalize`. El siguiente fragmento de código muestra el recurso `terraform_data` que ejecuta las consultas SQL de la carpeta `/bootstrap`.

```
locals {
  program               = "${path.module}/sql-queries.py"
  redshift_cluster_name = try(aws_redshift_cluster.this[0].id, null)
}

resource "terraform_data" "run_bootstrap_queries" {
  count      = var.create && var.run_nonrepeatable_queries && (var.sql_path_bootstrap != "") && (var.snapshot_identifier == null) ? 1 : 0
  depends_on = [aws_redshift_cluster.this[0]]

  provisioner "local-exec" {
    command = "python3 ${local.program} ${var.sql_path_bootstrap} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn} ${local.aws_region}"
  }
}
```

Puede controlar si desea ejecutar estas consultas mediante las siguientes variables. Si no desea ejecutar consultas en`sql_path_bootstrap`, `sql_path_nonrepeatable`, `sql_path_repeatable` o `sql_path_finalize`, establezca sus valores en `""`.

```
  run_nonrepeatable_queries = true
  run_repeatable_queries    = true
  sql_path_bootstrap        = "src/redshift/bootstrap"
  sql_path_nonrepeatable    = "src/redshift/nonrepeatable"
  sql_path_repeatable       = "src/redshift/repeatable"
  sql_path_finalize         = "src/redshift/finalize"
```

Cuando se ejecuta `terraform apply`, Terraform tiene en cuenta el recurso `terraform_data` agregado una vez que se ha completado el script, independientemente de los resultados del script. Si algunas consultas de SQL fallaron y desea volver a ejecutarlas, puede eliminar manualmente el recurso del estado de Terraform y volver a ejecuta `terraform apply`. Por ejemplo, el siguiente comando elimina el recurso `run_bootstrap_queries` del estado de Terraform.

`terraform state rm module.redshift.terraform_data.run_bootstrap_queries[0]`

El siguiente ejemplo de código muestra cómo el recurso `run_repeatable_queries` supervisa los cambios en la carpeta `repeatable` mediante el [hash sha256](https://developer.hashicorp.com/terraform/language/functions/sha256). Si se actualiza algún archivo de la carpeta, Terraform marca todo el directorio para actualizarlo. Luego, Terraform vuelve a ejecutar las consultas en el directorio durante la siguiente `terraform apply`.

```
resource "terraform_data" "run_repeatable_queries" {
  count      = var.create_redshift && var.run_repeatable_queries && (var.sql_path_repeatable != "") ? 1 : 0
  depends_on = [terraform_data.run_nonrepeatable_queries]

  # Continuously monitor and apply changes in the repeatable folder
  triggers_replace = {
    dir_sha256 = sha256(join("", [for f in fileset("${var.sql_path_repeatable}", "**") : filesha256("${var.sql_path_repeatable}/${f}")]))
  }

  provisioner "local-exec" {
    command = "python3 ${local.sql_queries} ${var.sql_path_repeatable} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn}"
  }
}
```

Para refinar el código, puede implementar un mecanismo que detecte y aplique los cambios solo a los archivos que se hayan actualizado dentro de la carpeta `repeatable`, en lugar de aplicarlos a todos los archivos de forma indiscriminada.

**Ejemplos de instrucciones SQL**

El siguiente resultado muestra una ejecución fallida de SQL, junto con un mensaje de error.

```
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/nonrepeatable testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): src/redshift/nonrepeatable/table/admin/admin.application_family.sql
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Status: FAILED
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): SQL execution failed.
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Error message: ERROR: syntax error at or near ")"
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec):   Position: 244
module.redshift.terraform_data.run_nonrepeatable_queries[0]: Creation complete after 3s [id=ee50ba6c-11ae-5b64-7e2f-86fd8caa8b76]
```

El siguiente resultado muestra una ejecución correcta de SQL.

```
module.redshift.terraform_data.run_bootstrap_queries[0]: Provisioning with 'local-exec'...
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/bootstrap testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): src/redshift/bootstrap/db.sql
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Status: FINISHED
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): SQL execution successful.
module.redshift.terraform_data.run_bootstrap_queries[0]: Creation complete after 2s [id=d565ef6d-be86-8afd-8e90-111e5ea4a1be]
```

# Exportar los informes de AWS Backup de toda la organización en AWS Organizations como un archivo CSV
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file"></a>

*Aromal Raj Jayarajan y Purushotham G K, Amazon Web Services*

## Resumen
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-summary"></a>

Este patrón muestra cómo exportar los informes de trabajos de AWS Backup de toda una organización en AWS Organizations como un archivo CSV. La solución utiliza AWS Lambda y Amazon EventBridge para clasificar los informes de trabajos de AWS Backup en función de su estado, lo que puede ayudar a configurar las automatizaciones basadas en el estado.

AWS Backup ayuda a las organizaciones a administrar y automatizar de forma centralizada la protección de datos en todos los servicios de AWS, en la nube y en las instalaciones. Sin embargo, para los trabajos de AWS Backup configurados en AWS Organizations, los informes consolidados solo están disponibles en la consola de administración de AWS de la cuenta de administración de cada organización. Sacar estos informes de la cuenta de administración puede reducir el esfuerzo necesario para la auditoría y aumentar el alcance de las automatizaciones, las notificaciones y las alertas.

## Requisitos previos y limitaciones
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa
+ Una [organización](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html) activa en AWS Organizations que incluye al menos una cuenta de administración y una cuenta de miembro
+ AWS Backup configurado a nivel organizativo en AWS Organizations (para obtener más información, consulte [Automate centralized backup at scale across AWS services using AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) en el blog de AWS)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), instalado y configurado en su equipo local

**Limitaciones **

La solución proporcionada en este patrón identifica los recursos de AWS que están configurados únicamente para trabajos de AWS Backup. El informe no puede identificar los recursos de AWS que no estén configurados para realizar copias de seguridad mediante AWS Backup.

## Arquitectura
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-architecture"></a>

**Pila de tecnología de destino**
+ AWS Backup
+ AWS CloudFormation
+ Amazon EventBridge
+ AWS Lambda
+ AWS Security Token Service (AWS STS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Identity y Access Management (IAM)

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de flujo de trabajo para exportar informes de trabajos de AWS Backup de toda una organización en AWS Organizations como un archivo CSV.

![\[Uso EventBridge de Lambda, AWS STS e IAM para exportar informes de trabajos de AWS Backup de toda la organización en formato CSV.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/74955aad-cc6d-488b-aa34-ae43f50fec60/images/5c39c79f-e731-4ad0-b404-51ebe0976420.png)


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

1. Una regla de EventBridge eventos programados invoca una función Lambda en la cuenta de AWS del miembro (informante).

1. A continuación, la función de Lambda utiliza AWS STS para asumir un rol de IAM que tiene los permisos necesarios para conectarse a la cuenta de administración.

1. La función de Lambda lleva a cabo lo siguiente:
   + Solicita el informe consolidado de trabajos de AWS Backup al servicio AWS Backup
   + Clasifica los resultados según el estado del trabajo de AWS Backup
   + Convertir la respuesta en un archivo CSV
   + Carga los resultados en un bucket de Amazon S3 de la cuenta de informes, dentro de carpetas etiquetadas según su fecha de creación.

## Tools (Herramientas)
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-tools"></a>

**Herramientas**
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) es un servicio totalmente administrado que le ayuda a centralizar y automatizar la protección de datos en todos los servicios de AWS, en la nube y en las instalaciones.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, las funciones de AWS Lambda, los puntos de conexión de invocación HTTP que utilizan destinos de API o los buses de eventos de otras cuentas de AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Código**

El código de este patrón está disponible en el GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repositorio.

## Prácticas recomendadas
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-best-practices"></a>
+ [Prácticas recomendadas de seguridad para Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) (*Guía del usuario de Amazon S3*)
+ [Prácticas recomendadas para trabajar con las funciones de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) (*Guía para desarrolladores de AWS Lambda*)
+ [Prácticas recomendadas para la cuenta de administración](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html) (*Guía del usuario de AWS Organizations*)

## Epics
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-epics"></a>

### Implementar los componentes de la solución
<a name="deploy-the-solution-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el GitHub repositorio. | Clone el GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repositorio ejecutando el siguiente comando en una ventana de terminal:<pre>git clone https://github.com/aws-samples/aws-backup-report-generator.git</pre>Para obtener más información, consulta [Cómo clonar un repositorio](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) en los GitHub documentos. | AWS DevOps, DevOps ingeniero | 
| Implemente los componentes de la solución en la cuenta de AWS del miembro (informante). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | DevOps ingeniero, AWS DevOps | 

### Pruebe la solución
<a name="test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Asegúrese de que la EventBridge regla se ejecute antes de la prueba. | Asegúrese de que la EventBridge regla se ejecute esperando al menos 24 horas o aumentando la frecuencia de los informes en el archivo CloudFormation **template-reporting.yml** de la plantilla.**Para aumentar la frecuencia de los informes**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingeniero | 
| Consulte el bucket de Amazon S3 para ver el informe generado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingeniero | 

### Eliminación de sus recursos
<a name="clean-up-your-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los componentes de la solución de la cuenta del miembro (informante). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingeniero | 
| Elimine los componentes de la solución de la cuenta de administración. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingeniero | 

## Recursos relacionados
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-resources"></a>
+ [Tutorial: Uso de AWS Lambda con eventos programados](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-tutorial.html) (documentación de AWS Lambda)
+ [Creación de eventos programados para ejecutar funciones de AWS Lambda](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/scheduled-events-invoking-lambda-example.html) (AWS SDK para obtener JavaScript documentación)
+ [Tutorial de IAM: delegue el acceso entre cuentas de AWS mediante roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (documentación de IAM)
+ [Terminología y conceptos de AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) (Guía del usuario de AWS Organizations)
+ [Creación de planes de informes mediante la consola de AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-report-plan-console.html) (Guía para desarrolladores de AWS Backup)
+ [Creación de un informe de auditoría](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-audit-report.html) (documentación de AWS Backup)
+ [Creación de informes bajo demanda](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-on-demand-reports.html) (documentación de AWS Backup)
+ [¿Qué es AWS Backup?](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) (Documentación de AWS Backup)
+ [Automatización de las copias de seguridad centralizadas a escala en todos los servicios de AWS mediante AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) (entrada en el blog de AWS)

# Exportar etiquetas de una lista de EC2 instancias de Amazon a un archivo CSV
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file"></a>

*Sida Ju y Pac Joonhyun, Amazon Web Services*

## Resumen
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-summary"></a>

Este patrón muestra cómo exportar mediante programación las etiquetas de una lista de instancias de Amazon Elastic Compute Cloud EC2 (Amazon) a un archivo CSV.

Con el ejemplo de script de Python que se proporciona, puedes reducir el tiempo que se tarda en revisar y clasificar tus EC2 instancias de Amazon por etiquetas específicas. Por ejemplo, puede usar el script para identificar y categorizar rápidamente una lista de instancias que su equipo de seguridad ha marcado como actualizaciones de software.

## Requisitos previos y limitaciones
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-prereqs"></a>

**Requisitos previos **
+ Python 3 instalado y configurado
+ Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada

**Limitaciones**

El script de Python de ejemplo que se proporciona en este patrón puede buscar EC2 instancias de Amazon únicamente en función de los siguientes atributos:
+ Instancia IDs
+  IPv4 Direcciones privadas
+  IPv4 Direcciones públicas

## Tools (Herramientas)
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-tools"></a>
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.
+ [virtualenv](https://virtualenv.pypa.io/en/latest/) le ayuda a crear entornos Python aislados.
+ La [interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.

**Repositorio de código**

El script Python de ejemplo para este patrón está disponible en el repositorio GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags

## Epics
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-epics"></a>

### Instalar y configurar los requisitos previos
<a name="install-and-configure-the-prerequisites"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el repositorio. GitHub  | Si recibe errores al ejecutar los comandos de la AWS CLI, [asegúrese de utilizar la versión más reciente de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-troubleshooting.html).Clona el instances-export-tags repositorio GitHub [search-ec2-](https://github.com/aws-samples/search-ec2-instances-export-tags) ejecutando el siguiente comando de Git en una ventana de terminal:<pre>git clone https://github.com/aws-samples/search-ec2-instances-export-tags.git</pre> | DevOps ingeniero | 
| Instale y active virtualenv. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html)Para más información, consulte la [Guía del usuario de virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html). | DevOps ingeniero | 
| Instale las dependencias. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html) | DevOps ingeniero | 
| Configure un perfil con nombre de AWS.  | Si aún no lo ha hecho, configure un perfil con nombre de AWS que incluya las credenciales necesarias para ejecutar el script. Para crear un perfil con nombre, ejecute el comando [aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods).Para obtener más información, consulte [Uso de perfiles con nombre](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) en la documentación de la CLI de AWS. | DevOps ingeniero | 

### Configurar y ejecutar el script de Python
<a name="configure-and-run-the-python-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el archivo de entrada. | Crea un archivo de entrada que contenga una lista de las EC2 instancias de Amazon para las que quieres que el script busque y exporte etiquetas. Puedes enumerar IPv4 direcciones de instancia IDs, privadas o públicas IPv4 .Asegúrese de que cada EC2 instancia de Amazon aparezca en su propia línea en el archivo de entrada.**Ejemplo de archivo de entrada**<pre>1    i-0547c351bdfe85b9f<br />2    54.157.194.156<br />3    172.31.85.33<br />4    54.165.198.144<br />5    i-0b6223b5914111a4b<br />6    172.31.85.44<br />7    54.165.198.145<br />8    172.31.80.219<br />9    172.31.94.199</pre> | DevOps ingeniero | 
| Ejecutar el script de Python . | Ejecute el siguiente comando en el terminal para ejecutar el siguiente comando:<pre>python search_instances.py -i INPUTFILE -o OUTPUTFILE -r REGION [-p PROFILE]</pre>Sustituya `INPUTFILE` por el nombre del archivo de entrada. Cambie `OUTPUTFILE` por el nombre que desea otorgar al archivo CSV resultante. `REGION`Sustitúyala por la región de AWS en la que se encuentran tus EC2 recursos de Amazon. Si utiliza un perfil con nombre de AWS, sustituya `PROFILE` por el perfil con nombre que está utilizando.Para obtener una lista de parámetros compatibles y su descripción, ejecute el siguiente comando:<pre>python search_instances.py -h</pre>Para obtener más información y ver un ejemplo de archivo de salida, consulte el `README.md` archivo en el repositorio GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags | DevOps ingeniero | 

## Recursos relacionados
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-resources"></a>
+ [Configuración de la CLI de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) *(Guía del usuario de la CLI de AWS*)

# Genere una CloudFormation plantilla de AWS que contenga las reglas administradas por AWS Config mediante Troposphere
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere"></a>

*Lucas Nation y Freddie Wilson, Amazon Web Services*

## Resumen
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-summary"></a>

Muchas organizaciones utilizan las reglas [administradas de AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html) para evaluar la conformidad de sus recursos de Amazon Web Services (AWS) con respecto a las prácticas recomendadas habituales. Sin embargo, el mantenimiento de estas reglas puede llevar mucho tiempo y este patrón le ayuda a aprovechar [Troposphere](https://troposphere.readthedocs.io/en/latest/quick_start.html), una biblioteca de Python, para generar y administrar reglas administradas por AWS Config.

El patrón le ayuda a administrar las reglas administradas por AWS Config mediante un script de Python para convertir una hoja de cálculo de Microsoft Excel que contiene reglas administradas por AWS en una CloudFormation plantilla de AWS. Troposphere actúa como infraestructura como código (IaC), lo que significa que puede actualizar la hoja de cálculo de Excel con reglas administradas en lugar de utilizar un archivo con formato JSON o YAML. A continuación, utilice la plantilla para lanzar una CloudFormation pila de AWS que cree y actualice las reglas administradas en su cuenta de AWS.

La CloudFormation plantilla de AWS define cada regla gestionada por AWS Config mediante la hoja de cálculo de Excel y le ayuda a evitar la creación manual de reglas individuales en la consola de administración de AWS. *El script establece de forma predeterminada los parámetros de cada regla administrada en un diccionario vacío y los `ComplianceResourceTypes` valores predeterminados del ámbito son. `THE_RULE_IDENTIFIER.template file`* Para obtener más información sobre el identificador de la regla, consulte [Creación de reglas administradas de AWS Config con CloudFormation plantillas de AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) en la documentación de AWS Config.

## Requisitos previos y limitaciones
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Familiaridad con el uso de CloudFormation plantillas de AWS para crear reglas administradas de AWS Config. Para obtener más información al respecto, consulte [Creación de reglas administradas de AWS Config con CloudFormation plantillas de AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) en la documentación de AWS Config.  
+ Python 3, instalado y configurado. Para obtener más información, consulte la [Documentación de Python](https://www.python.org/).
+ Un entorno de desarrollo integrado (IDE) existente.  
+ Identifique sus unidades organizativas (OUs) en una columna de la hoja de cálculo de `excel_config_rules.xlsx` Excel de muestra (adjunta).

## Epics
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-epics"></a>

### Personalice y configure las reglas administradas de AWS Config
<a name="customize-and-configure-the-aws-config-managed-rules"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice la hoja de cálculo de Excel de muestra. | Descargue la hoja de cálculo de Excel de muestra `excel_config_rules.xlsx` (adjunta) y etiquétela como `Implemented` con las reglas administradas de AWS Config que desee usar. Las reglas marcadas como se `Implemented` añadirán a la CloudFormation plantilla de AWS. | Desarrollador | 
| (Opcional) Actualice el archivo config\$1rules\$1params.json con los parámetros de las reglas de AWS Config. | Algunas reglas administradas por AWS Config requieren parámetros y deben pasarse al script de Python como un archivo JSON mediante la opción `--param-file`. Por ejemplo, la regla administrada `access-keys-rotated` usa el siguiente parámetro `maxAccessKeyAge`:<pre>{<br />         "access-keys-rotated": {<br />             "InputParameters": {<br />                 "maxAccessKeyAge": 90<br />             }<br />         }<br />     }</pre>En este parámetro de ejemplo, `maxAccessKeyAge` se establece en 90 días. El script lee el archivo de parámetros y añade cualquier `InputParameters` que encuentra. | Desarrollador | 
| (Opcional) Actualice el archivo config\$1rules\$1params.json con AWS Config. ComplianceResourceTypes | De forma predeterminada, el script de Python recupera `ComplianceResourceTypes` de las plantillas definidas por AWS. Si desea anular el ámbito de una regla gestionada por AWS Config específica, debe pasarla al script de Python como un archivo JSON mediante la opción `--param-file`.Por ejemplo, el siguiente código de ejemplo muestra cómo el `ComplianceResourceTypes` para `ec2-volume-inuse-check` se establece en la lista `["AWS::EC2::Volume"]`:<pre>{<br />         "ec2-volume-inuse-check": {<br />             "Scope": {<br />                 "ComplianceResourceTypes": [<br />                     "AWS::EC2::Volume"<br />                 ]<br />             }<br />         }<br />     }</pre> | Desarrollador | 

### Ejecute el script de Python
<a name="run-the-python-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar los paquetes pip desde el archivo requirements.txt.  | Descargue el archivo `requirements.txt` (adjunto) y ejecute el siguiente comando en su IDE para instalar los paquetes de Python:`pip3 install -r requirements.txt` | Desarrollador | 
| Ejecutar el script de Python .  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html)También puede incluir los siguientes parámetros opcionales:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Desarrollador | 

### Implemente las reglas administradas en AWS Config
<a name="deploy-the-aws-config-managed-rules"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Lance la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Desarrollador | 

## Conexiones
<a name="attachments-07c1cfff-fc9e-4a1f-bd36-48f025808bd8"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/07c1cfff-fc9e-4a1f-bd36-48f025808bd8/attachments/attachment.zip)

# Otorgue a las instancias de SageMaker notebook acceso temporal a un CodeCommit repositorio de otra cuenta de AWS
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Helge Aufderheide, Amazon Web Services*

## Resumen
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

Este patrón muestra cómo conceder a las instancias de Amazon SageMaker Notebook y a los usuarios acceso temporal a un CodeCommit repositorio de AWS que se encuentra en otra cuenta de AWS. También indica cómo conceder permisos detallados para acciones específicas que cada entidad puede realizar en un repositorio.

Las organizaciones suelen almacenar CodeCommit los repositorios en una cuenta de AWS diferente a la cuenta que aloja su entorno de desarrollo. Esta configuración de múltiples cuentas ayuda a controlar el acceso a los repositorios y reduce el riesgo de que se eliminen accidentalmente. Para conceder estos permisos entre cuentas, se recomienda usar roles de AWS Identity and Access Management (IAM). Las identidades de IAM predefinidas en cada cuenta de AWS podrán asumir temporalmente los roles para crear una cadena de confianza controlada en todas las cuentas.

**nota**  
Puede aplicar un procedimiento similar para conceder a otras identidades de IAM el acceso multicuenta a un repositorio. CodeCommit Para obtener más información, consulte [Configurar el acceso multicuenta a un CodeCommit repositorio de AWS mediante roles](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) en la *Guía del CodeCommit usuario de AWS*.

## Requisitos previos y limitaciones
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa con un CodeCommit repositorio (*cuenta A*)
+ Una segunda cuenta de AWS activa con una instancia de SageMaker notebook (*cuenta B*)
+ Un usuario de AWS con permisos suficientes para crear y modificar roles de IAM en la cuenta A
+ Un segundo usuario de AWS con permisos suficientes para crear y modificar roles de IAM en la cuenta B

## Arquitectura
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

En el siguiente diagrama se muestra un ejemplo de flujo de trabajo para conceder a una instancia de SageMaker Notebook y a los usuarios de una cuenta de AWS acceso multicuenta a un CodeCommit repositorio:

![\[Flujo de trabajo para el acceso multicuenta a CodeCommit\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


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

1. El rol de usuario de AWS y el rol de instancia de SageMaker notebook en la cuenta B asumen un [perfil con nombre](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles).

1. La política de permisos del perfil mencionado especifica un rol de CodeCommit acceso en la cuenta A que luego asume el perfil.

1. La política de confianza del rol de CodeCommit acceso en la cuenta A permite que el perfil designado en la cuenta B asuma el rol de CodeCommit acceso.

1. La política de permisos de IAM del CodeCommit repositorio en la cuenta A permite que el CodeCommit rol de acceso acceda al CodeCommit repositorio.

**Pila de tecnología**
+ CodeCommit
+ Git
+ IAM
+ pip
+ SageMaker

## Tools (Herramientas)
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [Git](https://git-scm.com/) es un sistema de control de versiones distribuido que rastrea los cambios en el código fuente durante el desarrollo del software.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)es una utilidad que te ayuda a insertar y extraer código de CodeCommit los repositorios mediante la extensión de Git.
+ [pip](https://pypi.org/project/pip/) es el instalador de paquetes para Python. Puede usar pip para instalar paquetes desde Python Package Index y otros índices.

## Prácticas recomendadas
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

Cuando establezca permisos con políticas de IAM, conceda solo los permisos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Aplicar permisos de privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) en la documentación de IAM.

Al implementar este patrón, asegúrese de hacer lo siguiente:
+ Confirme que los principios de IAM solo tienen los permisos necesarios para realizar acciones específicas y necesarias en cada repositorio. Por ejemplo, se recomienda permitir que los principios de IAM aprobados envíen y combinen los cambios en ramificaciones específicas del repositorio, pero que solo puedan solicitar combinaciones en las ramificaciones protegidas. 
+ Confirme que a los principios de IAM se les asignen diferentes roles de de IAM en función de los roles y responsabilidades respectivos de cada proyecto. Por ejemplo, un desarrollador tendrá permisos de acceso diferentes a los de un administrador de versiones o un administrador de AWS. 

## Epics
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### Configuración roles de IAM
<a name="configure-the-iam-roles"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configura el rol de CodeCommit acceso y la política de permisos. | Para automatizar el proceso de configuración manual documentado en esta epopeya,**** puede utilizar una [ CloudFormation plantilla de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html).En la cuenta que contiene el CodeCommit repositorio (*cuenta A*), haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Antes de trasladar esta configuración a su entorno de producción, se recomienda redactar su propia política de IAM que aplique [permisos de privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege). Para obtener más información, consulte la sección **Información adicional** de este patrón. | AWS general, AWS DevOps | 
| Conceda permisos al rol de la instancia de SageMaker bloc de notas en la cuenta B para que asuma el rol de CodeCommit acceso en la cuenta A. | En la cuenta que contiene la función de IAM de la instancia de SageMaker bloc de notas (*cuenta B),* haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Para ver el nombre de recurso de Amazon (ARN) de su repositorio, consulte [Ver detalles del CodeCommit repositorio](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html) en la Guía * CodeCommit del usuario de AWS*. | AWS general, AWS DevOps | 

### Configure su instancia de SageMaker notebook en la cuenta B
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure un perfil de usuario en la instancia de AWS SageMaker Notebook para que asuma el rol en la cuenta A.  | [Asegúrese de tener instalada la última versión de la interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).En la cuenta que contiene la instancia de SageMaker bloc de notas (*cuenta B),* haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | AWS general, AWS DevOps | 
| Instale la utilidad git-remote-codecommit. | Siga las instrucciones del [paso 2: Instalación](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install) de git-remote-codecommit la *Guía del CodeCommit usuario de AWS*. | Científico de datos | 

### Acceda al repositorio
<a name="access-the-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Acceda al CodeCommit repositorio mediante los comandos de Git o SageMaker. | **Uso en Git**Los directores de IAM que asumen la función de la instancia de SageMaker bloc de notas en la cuenta B ahora pueden ejecutar comandos de Git para acceder al CodeCommit repositorio de la cuenta A. Por ejemplo, los usuarios pueden ejecutar comandos como `git clone``git pull`, y. `git push`Para obtener instrucciones, consulte [Conectarse a un CodeCommit repositorio de AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) en la *Guía del CodeCommit usuario de AWS*.Para obtener información sobre cómo usar Git con CodeCommit, consulte [Introducción a AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html) en la *Guía del CodeCommit usuario de AWS*.**Para usar SageMaker**Para usar Git desde la SageMaker consola, debes permitir que Git recupere las credenciales de tu CodeCommit repositorio. Para obtener instrucciones, consulte [Asociar un CodeCommit repositorio de una cuenta de AWS diferente a una instancia de notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html) en la SageMaker documentación. | Git, consola bash | 

## Recursos relacionados
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [Configurar el acceso multicuenta a un CodeCommit repositorio de AWS mediante roles](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) ( CodeCommit documentación de AWS)
+ [Tutorial de IAM: delegue el acceso entre cuentas de AWS mediante roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (documentación de IAM)

## Información adicional
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**Restringir CodeCommit los permisos a acciones específicas**

Para restringir las acciones que un responsable de IAM puede realizar en el CodeCommit repositorio, modifique las acciones que están permitidas en la política de CodeCommit acceso.

Para obtener más información sobre las operaciones de la CodeCommit API, consulte la [referencia de CodeCommit permisos](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html) en la *Guía del CodeCommit usuario de AWS*.

**nota**  
También puede editar la política gestionada por [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser)AWS para adaptarla a su caso de uso.

**Restringir CodeCommit los permisos a repositorios específicos**

Para crear un entorno multiusuario en el que solo usuarios específicos puedan acceder a más de un repositorio de código, haga lo siguiente:

1. Cree varios roles de CodeCommit acceso en la cuenta A. A continuación, configure la política de confianza de cada rol de acceso para permitir que usuarios específicos de la cuenta B asuman el rol.

1. Restrinja los repositorios de código que puede asumir cada función añadiendo una condición de **«recurso»** a la política de cada función de CodeCommit acceso.

**Ejemplo de condición de «recurso» que restringe el acceso de un director de IAM a un repositorio específico CodeCommit **

```
"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]
```

**nota**  
Para ayudar a identificar y diferenciar varios repositorios de código en la misma cuenta de AWS, puede asignar distintos prefijos a los nombres de los repositorios. Por ejemplo, puede asignar nombres a los repositorios de código con prefijos que correspondan a distintos grupos de desarrolladores, como **myproject-subproject1-repo1** y **myproject-subproject2-repo1**. A continuación, puede crear un rol de IAM para cada grupo de desarrolladores en función de sus prefijos asignados. Por ejemplo, puede crear un rol denominado **myproject-subproject1-repoaccess** y concederle acceso a todos los repositorios de código que incluyen el prefijo **myproject-subproject1**.

**Ejemplo de condición “Recurso” que hace referencia a un ARN de repositorio de código que incluye un prefijo específico**

```
"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*
```

# Implemente una estrategia GitHub de ramificación de Flow para entornos de cuentas múltiples DevOps
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens y Abhilash Vinod, Amazon Web Services*

## Resumen
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Al administrar un repositorio de código fuente, las diferentes estrategias de ramificación afectan a los procesos de desarrollo y lanzamiento de software que utilizan los equipos de desarrollo. Algunos ejemplos de estrategias de ramificación comunes son Trunk, GitHub Flow y Gitflow. Estas estrategias utilizan diferentes ramificaciones y las actividades que se llevan a cabo en cada entorno son diferentes. Organismos que están implementando DevOps procesos se beneficiarían de una guía visual que les ayude a entender las diferencias entre estas estrategias de ramificación. El uso de este elemento visual en su organización ayuda a los equipos de desarrollo a alinear su trabajo y seguir los estándares de la organización. Este patrón proporciona esta imagen y describe el proceso de implementación de una estrategia de ramificación de GitHub Flow en su organización.

Este patrón forma parte de una serie de documentos sobre la elección e implementación de estrategias de DevOps ramificación para organizaciones con múltiples sucursales. Cuentas de AWS Esta serie está diseñada para ayudarlo a aplicar la estrategia correcta y las mejores prácticas desde el principio, a fin de optimizar su experiencia en la nube. GitHub El flujo es solo una posible estrategia de ramificación que su organización puede utilizar. En esta serie de documentación también se cubren los modelos de ramificación de [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) y [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Si aún no lo has hecho, te recomendamos que revises [Cómo elegir una estrategia de ramificación de Git para DevOps entornos de múltiples cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) antes de implementar la guía de este patrón. Utilice la diligencia debida para elegir la estrategia de ramificación adecuada para su organización.

Esta guía proporciona un diagrama que muestra cómo una organización podría implementar la estrategia GitHub Flow. Se recomienda revisar la Guía de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) para revisar las mejores prácticas. Este patrón incluye las tareas, los pasos y las restricciones recomendados para cada paso del DevOps proceso.

## Requisitos previos y limitaciones
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Requisitos previos **
+ Git [instalado](https://git-scm.com/downloads). Se utiliza como herramienta de repositorio de código fuente.
+ Draw.io [instalado](https://github.com/jgraph/drawio-desktop/releases). Esta aplicación se utiliza para ver y editar el diagrama.

## Arquitectura
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arquitectura de destino**

El siguiente diagrama se puede usar como un [cuadro de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Alinee las ramas en el eje vertical con los AWS entornos en el eje horizontal para determinar qué acciones realizar en cada escenario. Los números indican la secuencia de las acciones del flujo de trabajo. En este ejemplo, se pasa de una ramificación `feature` a la implementación en producción.

![\[Cuadro de Punnett de las actividades de GitHub Flow en cada sucursal y entorno.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/780a5bce-3cd2-4092-8537-b7a77c3d6b8d/images/8a2a774a-cd85-466e-838e-a9a1f3b58a63.png)


Para obtener más información sobre los Cuentas de AWS entornos y las ramas en un enfoque de GitHub flujo, consulta [Cómo elegir una estrategia de ramificación de Git para entornos de múltiples cuentas DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Automatización y escala**

La integración y la entrega continuas (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDcanalizaciones) también proporcionan control y protección a los equipos de desarrollo, ya que refuerzan la coherencia, los estándares, las mejores prácticas y unos niveles mínimos de aceptación para la aceptación y el despliegue de las funciones. Para obtener más información, consulte [Practicar la integración continua y la entrega continua](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) en. AWS

AWS ofrece un conjunto de servicios para desarrolladores diseñados para ayudarle a crear CI/CD canalizaciones. Por ejemplo, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)es un servicio de entrega continua totalmente gestionado que le ayuda a automatizar sus procesos de lanzamiento para obtener actualizaciones rápidas y fiables de las aplicaciones y la infraestructura. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila el código fuente, ejecuta pruebas y produce paquetes de ready-to-deploy software. Para obtener más información, consulte [Herramientas para desarrolladores en AWS](https://aws.amazon.com/products/developer-tools/).

## Tools (Herramientas)
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS servicios y herramientas**

AWS proporciona un conjunto de servicios para desarrolladores que puede utilizar para implementar este patrón:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html) es un servicio de repositorio de artefactos administrado y altamente escalable que lo ayuda a almacenar y compartir paquetes de software para el desarrollo de aplicaciones.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatiza las implementaciones en Amazon Elastic Compute Cloud EC2 (Amazon) o en instancias, AWS Lambda funciones locales o servicios de Amazon Elastic Container Service (Amazon ECS).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.

**Otras herramientas**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) es una aplicación para hacer diagramas y diagramas de flujo. El repositorio de código contiene plantillas en formato .drawio para Draw.io.
+ [Figma](https://www.figma.com/design-overview/) es una herramienta de diseño en línea diseñada para la colaboración. El repositorio de código contiene plantillas en formato .fig para Figma.

**Repositorio de código**

El archivo fuente del diagrama de este patrón está disponible en el repositorio GitHub [Git Branching Strategy for GitHub Flow](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/github-flow). Incluye archivos en los formatos PNG, draw.io y Figma. Puede modificar estos diagramas para respaldar los procesos de su organización.

## Prácticas recomendadas
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Siga las mejores prácticas y recomendaciones de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance y [Eligiendo una estrategia de ramificación de Git](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) para entornos de múltiples cuentas. DevOps Te ayudan a implementar de forma eficaz el desarrollo GitHub basado en Flow, a fomentar la colaboración, a mejorar la calidad del código y a agilizar el proceso de desarrollo.

## Epics
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Revisión de los GitHub flujos de trabajo de Flow
<a name="reviewing-the-github-flow-workflows"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Revise el proceso GitHub de flujo estándar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingeniero | 
| Revise el proceso de corrección de errores GitHub Flow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingeniero | 
| Revise el proceso de hotfix GitHub Flow. | GitHub Flow está diseñado para permitir una entrega continua, donde los cambios de código se implementan de manera frecuente y confiable en entornos superiores. La clave es que todas las ramificaciones `feature` se puedan implementar en cualquier momento.Las ramificaciones `Hotfix`, que son similares a las ramificaciones `feature` o `bugfix`, pueden seguir el mismo proceso que cualquiera de estas otras ramificaciones. Sin embargo, dada su urgencia, las revisiones suelen tener una prioridad más alta. En función de las políticas del equipo y de la inmediatez de la situación, algunos pasos del proceso podrían acelerarse. Por ejemplo, es posible acelerar las revisiones del código de las revisiones. Por lo tanto, si bien el proceso de revisión es paralelo al proceso de corrección o características, la urgencia que rodea a las revisiones puede justificar modificaciones en el cumplimiento del procedimiento. Es fundamental establecer directrices sobre la administración de las revisiones para garantizar que se gestionen de forma eficiente y segura. | DevOps ingeniero | 

## Resolución de problemas
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Conflictos de ramificaciones | Un problema común que puede producirse con el modelo GitHub Flow es cuando es necesario realizar una revisión en la producción`feature`, `bugfix` pero el cambio correspondiente debe producirse en una `hotfix` rama o sucursal en la que se modifican los mismos recursos. Le recomendamos que combine con frecuencia los cambios de `main` en las ramificaciones inferiores para evitar conflictos importantes al llevar a cabo la combinación con `main`. | 
| Consolidación del equipo | GitHub Flow fomenta las implementaciones diarias en entornos más altos y adopta una verdadera integración y entrega continuas (CI/CD). Es imprescindible que el equipo cuente con la consolidación en materia de ingeniería que se necesita para desarrollar características y crear pruebas de automatización para ellas. El equipo debe llevar a cabo una revisión exhaustiva de las solicitudes de combinación antes de aprobar los cambios. Esto fomenta una cultura de ingeniería sólida que promueve la calidad, la responsabilidad y la eficiencia en el proceso de desarrollo. | 

## Recursos relacionados
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-resources"></a>

En esta guía no se incluye capacitación sobre Git; sin embargo, hay muchos recursos de alta calidad disponibles en Internet si necesita esta capacitación. Le recomendamos que comience con el sitio de [documentación de Git](https://git-scm.com/doc).

Los siguientes recursos pueden ayudarlo en su proceso de expansión de GitHub Flow en el. Nube de AWS

**AWS DevOps orientación**
+ [AWS DevOps Indicaciones](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Arquitectura de referencia para la canalización de despliegue](https://pipelines.devops.aws.dev/)
+ [¿Qué es DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**GitHub Guía de flujo**
+ [GitHub Tutorial de inicio rápido de Flow](https://docs.github.com/en/get-started/using-github/github-flow) () GitHub
+ [¿Por qué GitHub Flow?](https://githubflow.github.io/)

**Otros recursos**
+ [Twelve-factor app methodology](https://12factor.net/) (12factor.net)

# Implementa una estrategia de ramificación de Gitflow para entornos de múltiples cuentas DevOps
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens, Stephen DiCato, Abhilash Vinod y Tim Wondergem, Amazon Web Services*

## Resumen
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Al administrar un repositorio de código fuente, las diferentes estrategias de ramificación afectan a los procesos de desarrollo y lanzamiento de software que utilizan los equipos de desarrollo. Algunos ejemplos de estrategias de ramificación habituales son Trunk, Gitflow y Flow. GitHub Estas estrategias utilizan diferentes ramificaciones y las actividades que se llevan a cabo en cada entorno son diferentes. Organismos que están implementando DevOps procesos se beneficiarían de una guía visual que les ayude a entender las diferencias entre estas estrategias de ramificación. El uso de este elemento visual en su organización ayuda a los equipos de desarrollo a alinear su trabajo y seguir los estándares de la organización. Este patrón proporciona este elemento visual y describe el proceso de implementación de una estrategia de ramificación de Gitflow en su organización.

Este patrón forma parte de una serie de documentos sobre la elección e implementación de estrategias de DevOps ramificación para organizaciones con múltiples sucursales. Cuentas de AWS Esta serie está diseñada para ayudarlo a aplicar la estrategia correcta y las prácticas recomendadas desde el principio, a fin de optimizar su experiencia en la nube. Gitflow es solo una posible estrategia de ramificación que su organización puede utilizar. Esta serie de documentación también cubre los modelos de ramificación de [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) y [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html). Si aún no lo has hecho, te recomendamos que revises [Cómo elegir una estrategia de ramificación de Git para DevOps entornos de múltiples cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) antes de implementar la guía de este patrón. Utilice la diligencia debida para elegir la estrategia de ramificación adecuada para su organización.

En esta guía se proporciona un diagrama en el que se muestra cómo una organización podría implementar la estrategia de Gitflow. Se recomienda revisar la Guía de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) para revisar las mejores prácticas. Este patrón incluye las tareas, los pasos y las restricciones recomendados para cada paso del DevOps proceso.

## Requisitos previos y limitaciones
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Requisitos previos **
+ Git [instalado](https://git-scm.com/downloads). Se utiliza como herramienta de repositorio de código fuente.
+ Draw.io [instalado](https://github.com/jgraph/drawio-desktop/releases). Esta aplicación se utiliza para ver y editar el diagrama.
+ (Opcional) Plugin de Gitflow [instalado](https://github.com/nvie/gitflow).

## Arquitectura
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arquitectura de destino**

El siguiente diagrama se puede usar como un [cuadro de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Alinee las ramas en el eje vertical con los AWS entornos en el eje horizontal para determinar qué acciones realizar en cada escenario. Los números indican la secuencia de las acciones del flujo de trabajo. En este ejemplo, se pasa de una ramificación de características a la implementación en producción.

![\[Cuadro de Punnett de las actividades de Gitflow en cada ramificación y entorno.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/1dee2a06-cc54-4797-b9a9-78b6685edd33/images/d8be49bf-dca1-4892-ac4c-11996a7258c2.png)


Para obtener más información sobre los Cuentas de AWS entornos y las ramas en un enfoque de Gitflow, consulta [Cómo elegir una estrategia de ramificación de Git para entornos de múltiples DevOps cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/).

**Automatización y escala**

La integración y la entrega continuas (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDcanalizaciones) también proporcionan control y protección a los equipos de desarrollo, ya que refuerzan la coherencia, los estándares, las mejores prácticas y unos niveles mínimos de aceptación para la aceptación y el despliegue de las funciones. Para obtener más información, consulte [Practicar la integración continua y la entrega continua](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) en. AWS

AWS ofrece un conjunto de servicios para desarrolladores diseñados para ayudarle a crear CI/CD canalizaciones. Por ejemplo, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)es un servicio de entrega continua totalmente gestionado que le ayuda a automatizar sus procesos de lanzamiento para obtener actualizaciones rápidas y fiables de las aplicaciones y la infraestructura. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila el código fuente, ejecuta pruebas y produce paquetes de ready-to-deploy software. Para obtener más información, consulte [Herramientas para desarrolladores en AWS](https://aws.amazon.com/products/developer-tools/).

## Tools (Herramientas)
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS servicios y herramientas**

AWS proporciona un conjunto de servicios para desarrolladores que puede utilizar para implementar este patrón:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html) es un servicio de repositorio de artefactos administrado y altamente escalable que lo ayuda a almacenar y compartir paquetes de software para el desarrollo de aplicaciones.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatiza las implementaciones en Amazon Elastic Compute Cloud EC2 (Amazon) o en instancias, AWS Lambda funciones locales o servicios de Amazon Elastic Container Service (Amazon ECS).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.

**Otras herramientas**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) es una aplicación para hacer diagramas y diagramas de flujo. El repositorio de código contiene plantillas en formato .drawio para Draw.io.
+ [Figma](https://www.figma.com/design-overview/) es una herramienta de diseño en línea diseñada para la colaboración. El repositorio de código contiene plantillas en formato .fig para Figma.
+ (Opcional) El [complemento de Gitflow](https://github.com/nvie/gitflow) es una colección de extensiones de Git que proporcionan operaciones de repositorio de alto nivel para el modelo de ramificación de Gitflow.

**Repositorio de código**

El archivo fuente del diagrama de este patrón está disponible en el GitFlow repositorio GitHub [Git Branching Strategy for](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/gitflow). Incluye archivos en los formatos PNG, draw.io y Figma. Puede modificar estos diagramas para respaldar los procesos de su organización.

## Prácticas recomendadas
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Siga las mejores prácticas y recomendaciones de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance y Choosing a [Git Branching Strategy](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) for Multiaccount Environments. DevOps Estos recursos lo ayudan a implementar de manera efectiva el desarrollo basado en Gitflow, fomentar la colaboración, mejorar la calidad del código y agilizar el proceso de desarrollo.

## Epics
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Revisión de los flujos de trabajo de Gitflow
<a name="reviewing-the-gitflow-workflows"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Revisar el proceso estándar de Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingeniero | 
| Revisar el proceso de Gitflow de revisión. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingeniero | 
| Revisar el proceso de Gitflow de corrección. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Conflictos de ramificaciones | Un problema común que puede producirse con el modelo de Gitflow es cuando es necesario llevar a cabo una revisión en producción, pero el cambio correspondiente debe producirse en un entorno inferior, en el que otra ramificación modifica los mismos recursos. Le recomendamos que solo tenga una ramificación de lanzamiento activa a la vez. Si tiene más de una ramificación activa a la vez, es posible que los cambios en los entornos colisionen y que no pueda pasar una ramificación a la fase de producción. | 
| Fusión | Las versiones deben volver a combinarse con las principales y desarrollarse lo antes posible para volver a consolidar el trabajo en las ramificaciones principales. | 
| Combinación de squash | Use una combinación de squash solo cuando vaya a combinar de una ramificación `feature` a una ramificación `develop`. El uso de combinaciones de squash en ramificaciones superiores causa dificultades al volver a combinar cambios en las ramificaciones inferiores. | 

## Recursos relacionados
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-resources"></a>

En esta guía no se incluye capacitación sobre Git; sin embargo, hay muchos recursos de alta calidad disponibles en Internet si necesita esta capacitación. Le recomendamos que comience con el sitio de [documentación de Git](https://git-scm.com/doc).

Los siguientes recursos pueden ayudarlo con su proceso de ramificaciones de Gitflow en la Nube de AWS.

**AWS DevOps orientación**
+ [AWS DevOps Indicaciones](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Arquitectura de referencia para la canalización de despliegue](https://pipelines.devops.aws.dev/)
+ [¿Qué es DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**Gitflow guidance**
+ [The original Gitflow blog](https://nvie.com/posts/a-successful-git-branching-model/) (entrada en el blog de Vincent Driessen)
+ [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) (Atlassian)
+ [Gitflow en GitHub: Cómo usar los flujos de trabajo de Git Flow con repositorios GitHub basados (vídeo](https://youtu.be/WQuxeEvaCxs)) YouTube 
+ [Ejemplo de Git Flow Init](https://www.youtube.com/watch?v=d4cDLBFbekw) (YouTube vídeo)
+ [La rama de lanzamiento de Gitflow de principio a fin (vídeo](https://www.youtube.com/watch?v=rX80eKPdA28)) YouTube 

**Otros recursos**

[Twelve-factor app methodology](https://12factor.net/) (12factor.net)

# Implemente una estrategia de ramificación troncal para entornos de cuentas múltiples DevOps
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens y Rayjan Wilson, Amazon Web Services*

## Resumen
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-summary"></a>

Al administrar un repositorio de código fuente, las diferentes estrategias de ramificación afectan a los procesos de desarrollo y lanzamiento de software que utilizan los equipos de desarrollo. Algunos ejemplos de estrategias de ramificación comunes son Trunk, GitHub Flow y Gitflow. Estas estrategias utilizan diferentes ramificaciones y las actividades que se llevan a cabo en cada entorno son diferentes. Organismos que están implementando DevOps procesos se beneficiarían de una guía visual que les ayude a entender las diferencias entre estas estrategias de ramificación. El uso de este elemento visual en su organización ayuda a los equipos de desarrollo a alinear su trabajo y seguir los estándares de la organización. Este patrón proporciona este elemento visual y describe el proceso de implementación de una estrategia de ramificación de Trunk en su organización.

Este patrón forma parte de una serie de documentos sobre la elección e implementación de estrategias de DevOps ramificación para organizaciones con múltiples sucursales. Cuentas de AWS Esta serie está diseñada para ayudarlo a aplicar la estrategia correcta y las prácticas recomendadas desde el principio, a fin de optimizar su experiencia en la nube. Trunk es solo una posible estrategia de ramificación que su organización puede utilizar. Esta serie de documentación también cubre los modelos de ramificación de [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) y [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Si aún no lo has hecho, te recomendamos que revises [Cómo elegir una estrategia de ramificación de Git para DevOps entornos de múltiples cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) antes de implementar la guía de este patrón. Utilice la diligencia debida para elegir la estrategia de ramificación adecuada para su organización.

En esta guía se proporciona un diagrama en el que se muestra cómo una organización podría implementar la estrategia de Trunk. Se recomienda que consulte la Guía oficial de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) para revisar las mejores prácticas. Este patrón incluye las tareas, los pasos y las restricciones recomendados para cada paso del DevOps proceso.

## Requisitos previos y limitaciones
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Requisitos previos **
+ Git [instalado](https://git-scm.com/downloads). Se utiliza como herramienta de repositorio de código fuente.
+ Draw.io [instalado](https://github.com/jgraph/drawio-desktop/releases). Esta aplicación se utiliza para ver y editar el diagrama.

## Arquitectura
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arquitectura de destino**

El siguiente diagrama se puede usar como un [cuadro de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Alinee las ramas en el eje vertical con los AWS entornos en el eje horizontal para determinar qué acciones realizar en cada escenario. Los números indican la secuencia de las acciones del flujo de trabajo. En este ejemplo, se pasa de una ramificación `feature` a la implementación en producción.

![\[Cuadro de Punnett de las actividades de Trunk en cada ramificación y entorno\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/5df23e4d-84fe-4ab3-a54f-96b6406abc57/images/ad549ef4-90ad-47c1-bd01-f21d6ce5511a.png)


Para obtener más información sobre los Cuentas de AWS entornos y las ramas en un enfoque troncal, consulta [Cómo elegir una estrategia de ramificación de Git para entornos con varias cuentas DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Automatización y escala**

La integración y la entrega continuas (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDcanalizaciones) también proporcionan control y protección a los equipos de desarrollo, ya que refuerzan la coherencia, los estándares, las mejores prácticas y niveles mínimos de aceptación para la aceptación y el despliegue de las funciones. Para obtener más información, consulte [Practicar la integración continua y la entrega continua](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) en. AWS

AWS ofrece un conjunto de servicios para desarrolladores diseñados para ayudarle a crear CI/CD canalizaciones. Por ejemplo, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)es un servicio de entrega continua totalmente gestionado que le ayuda a automatizar sus procesos de lanzamiento para obtener actualizaciones rápidas y fiables de las aplicaciones y la infraestructura. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila el código fuente, ejecuta pruebas y produce paquetes de ready-to-deploy software. Para obtener más información, consulte [Herramientas para desarrolladores en AWS](https://aws.amazon.com/products/developer-tools/).

## Tools (Herramientas)
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS servicios y herramientas**

AWS proporciona un conjunto de servicios para desarrolladores que puede utilizar para implementar este patrón:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html) es un servicio de repositorio de artefactos administrado y altamente escalable que lo ayuda a almacenar y compartir paquetes de software para el desarrollo de aplicaciones.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatiza las implementaciones en Amazon Elastic Compute Cloud EC2 (Amazon) o en instancias, AWS Lambda funciones locales o servicios de Amazon Elastic Container Service (Amazon ECS).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.

**Otras herramientas**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases): una aplicación para hacer diagramas y diagramas de flujo.
+ [Figma](https://www.figma.com/design-overview/) es una herramienta de diseño en línea diseñada para la colaboración. El repositorio de código contiene plantillas en formato .fig para Figma.

**Repositorio de código**

El archivo fuente del diagrama de este patrón está disponible en el repositorio GitHub [Git Branching Strategy for Trunk](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/trunk). Incluye archivos en los formatos PNG, draw.io y Figma. Puede modificar estos diagramas para respaldar los procesos de su organización.

## Prácticas recomendadas
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Siga las mejores prácticas y recomendaciones de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance y Choosing a [Git Branching Strategy](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) for Multiaccount Environments. DevOps Estos recursos lo ayudan a implementar de manera efectiva el desarrollo basado en Trunk, fomentar la colaboración, mejorar la calidad del código y agilizar el proceso de desarrollo.

## Epics
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Revisión del flujo de trabajo de Trunk
<a name="reviewing-the-trunk-workflow"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Revisar el proceso estándar de Trunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Conflictos de ramificaciones | Un problema común que puede producirse con el modelo de Trunk es cuando es necesario llevar a cabo una revisión en producción, pero el cambio correspondiente debe producirse en una ramificación `feature` en la que se modifican los mismos recursos. Le recomendamos que combine con frecuencia los cambios de `main` en las ramificaciones inferiores para evitar conflictos importantes al llevar a cabo la combinación con `main`. | 

## Recursos relacionados
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-resources"></a>

En esta guía no se incluye capacitación sobre Git; sin embargo, hay muchos recursos de alta calidad disponibles en Internet si necesita esta capacitación. Le recomendamos que comience con el sitio de [documentación de Git](https://git-scm.com/doc).

Los siguientes recursos pueden ayudarlo con su proceso de ramificaciones de Trunk en la Nube de AWS.

**AWS DevOps orientación**
+ [AWS DevOps Indicaciones](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Deployment Pipeline Reference Architecture](https://pipelines.devops.aws.dev/)
+ [¿Qué es DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**Guía de Trunk**
+ [Trunk Based Development](https://trunkbaseddevelopment.com/)

**Otros recursos**
+ [Twelve-factor app methodology](https://12factor.net/) (12factor.net)

# Implemente un escaneo Checkov personalizado y centralizado para aplicar la política antes de implementar AWS la infraestructura
<a name="centralized-custom-checkov-scanning"></a>

*Benjamin Morris, Amazon Web Services*

## Resumen
<a name="centralized-custom-checkov-scanning-summary"></a>

Este patrón proporciona un marco de GitHub acciones para escribir políticas de Checkov personalizadas en un repositorio que se pueden reutilizar en toda la organización. GitHub Al seguir este patrón, un equipo de seguridad de la información puede escribir, agregar y mantener políticas personalizadas según los requisitos de la empresa. Las políticas personalizadas se pueden incorporar automáticamente a todos los procesos de la GitHub organización. Este enfoque se puede utilizar para hacer cumplir los estándares de la empresa en relación con los recursos antes de que estos se implementen.

## Requisitos previos y limitaciones
<a name="centralized-custom-checkov-scanning-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS
+ Una GitHub organización que usa GitHub Actions
+ AWS infraestructura implementada con HashiCorp Terraform o AWS CloudFormation

**Limitaciones**
+ Este patrón está escrito para GitHub Actions. Sin embargo, se puede adaptar a marcos similares de integración continua y entrega continua (CI/CD), como. GitLab No se requiere una versión de pago específica de GitHub .
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para conocer la disponibilidad regional, consulta [los puntos finales y las cuotas del servicio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) en la AWS documentación y elige el enlace correspondiente al servicio.

## Arquitectura
<a name="centralized-custom-checkov-scanning-architecture"></a>

Este patrón está diseñado para implementarse como un GitHub repositorio que contiene un flujo de trabajo GitHub reutilizable y políticas de Checkov personalizadas. El flujo de trabajo reutilizable puede escanear repositorios de Terraform y de CloudFormation infraestructura como código (IaC).

El siguiente diagrama muestra el repositorio de ** GitHub flujos de trabajo reutilizables y el repositorio** de **políticas de Custom Checkov como iconos separados**. Sin embargo, puede implementar estos repositorios como repositorios separados o como un repositorio único. El código de ejemplo usa un único repositorio, con archivos para flujos de trabajo (`.github/workflows`) y archivos para políticas personalizadas (la carpeta `custom_policies` y el archivo de configuración `.checkov.yml`) en el mismo repositorio.

![\[GitHub Actions utiliza un GitHub flujo de trabajo reutilizable y políticas de Checkov personalizadas para evaluar la IaC.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/6c0c941f-14f9-4569-92da-9f81ab3e525c/images/a1539ce5-0ee6-4af1-bd01-cafad0f71708.png)


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

1. Un usuario crea una solicitud de extracción en un GitHub repositorio.

1. Los flujos de trabajo de Pipeline comienzan en GitHub Actions, e incluyen una referencia a un flujo de trabajo reutilizable de Checkov.

1. El flujo de trabajo de canalización descarga el flujo de trabajo reutilizable de Checkov al que se hace referencia desde un repositorio externo y ejecuta ese flujo de trabajo de Checkov mediante Actions. GitHub 

1. El flujo de trabajo reutilizable de Checkov descarga las políticas personalizadas de un repositorio externo.

1. El flujo de trabajo reutilizable de Checkov evalúa el IaC del GitHub repositorio en función de las políticas de Checkov integradas y personalizadas. El flujo de trabajo reutilizable de Checkov se aprueba o no en función de si se detectan problemas de seguridad.

**Automatización y escala**

Este patrón permite la administración centralizada de la configuración de Checkov, de modo que las actualizaciones de políticas se puedan aplicar en un solo lugar. Sin embargo, este patrón requiere que cada repositorio utilice un flujo de trabajo que contenga una referencia al flujo de trabajo central reutilizable. Puede añadir esta referencia manualmente o utilizar scripts para insertar el archivo en la carpeta `.github/workflows` de cada repositorio.

## Tools (Herramientas)
<a name="centralized-custom-checkov-scanning-tools"></a>

**Servicios de AWS**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todas las regiones. Cuentas de AWS Checkov puede escanear CloudFormation.

**Otras herramientas**
+ [Checkov](https://www.checkov.io/) es una herramienta de análisis de código estático que comprueba si la IaC se ha configurado mal configurado en función de la seguridad y el cumplimiento.
+ [GitHub Actions](https://github.com/features/actions) está integrado en la GitHub plataforma para ayudarte a crear, compartir y ejecutar flujos de trabajo en tus GitHub repositorios. Puedes usar GitHub Actions para automatizar tareas como crear, probar e implementar tu código.
+ [Terraform](https://www.terraform.io/) es una herramienta de iAC HashiCorp que le ayuda a crear y administrar recursos locales y en la nube. Checkov puede analizar Terraform.

**Repositorio de código**

El código de este patrón está disponible en el repositorio. GitHub [centralized-custom-checkov-sast](https://github.com/aws-samples/centralized-custom-checkov-sast)

## Prácticas recomendadas
<a name="centralized-custom-checkov-scanning-best-practices"></a>
+ Para mantener una postura de seguridad coherente, asegúrese de que las políticas de seguridad de su empresa coinciden con las políticas de Checkov.
+ En las primeras fases de la implementación de las políticas personalizadas de Checkov, puede utilizar la opción Error leve en el análisis de Checkov para poder combinar la IaC que tenga problemas de seguridad. A medida que el proceso vaya madurando, cambie de la opción Error leve a la opción Error grave.

## Epics
<a name="centralized-custom-checkov-scanning-epics"></a>

### Creación de un repositorio central de Checkov para políticas personalizadas
<a name="create-a-central-checkov-repository-for-custom-policies"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio central de Checkov. | Cree un repositorio para almacenar las políticas de Checkov personalizadas que se utilizarán en la organización.Para empezar rápidamente, puedes copiar el contenido del repositorio de este patrón en tu GitHub [centralized-custom-checkov-sast ](https://github.com/aws-samples/centralized-custom-checkov-sast)repositorio central de Checkov. | DevOps ingeniero | 
| Cree un repositorio para flujos de trabajo reutilizables. | Si ya existe un repositorio para flujos de trabajo reutilizables, o si planea incluir archivos de flujo de trabajo reutilizables en el mismo repositorio que las políticas personalizadas de Checkov, puede omitir este paso.Cree un GitHub repositorio para almacenar flujos de trabajo reutilizables. Las canalizaciones de otros repositorios harán referencia a este repositorio. | DevOps ingeniero | 

### Creación de flujos de trabajo de Checkov reutilizables y de ejemplo
<a name="create-reusable-and-example-checkov-workflows"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada un flujo de trabajo reutilizable de Checkov. | Cree un flujo de trabajo reutilizable de Checkov GitHub Actions (archivo YAML) en el repositorio de flujos de trabajo reutilizables. Puede adaptar este flujo de trabajo reutilizable a partir del archivo de flujo de trabajo que se proporciona en este patrón.Como ejemplo de un cambio, es posible que quiera cambiar el flujo de trabajo reutilizable para utilizar la opción Error leve. Si establece `soft-fail` en `true`, el trabajo se puede completar correctamente incluso si se produce un error en el análisis de Checkov. Para obtener instrucciones, consulte [Hard and soft fail](https://www.checkov.io/2.Basics/Hard%20and%20soft%20fail.html) en la documentación de Checkov. | DevOps ingeniero | 
| Añada un ejemplo de flujo de trabajo. | Añada un ejemplo de flujo de trabajo de Checkov que haga referencia al flujo de trabajo de `reusable`. Esto proporcionará una plantilla sobre cómo reutilizar el flujo de trabajo de `reusable`. En el repositorio de ejemplo, `checkov-source.yaml` es el flujo de trabajo reutilizable y `checkov-scan.yaml` es el ejemplo que consume `checkov-source`.Para obtener más información sobre cómo escribir un ejemplo de flujo de trabajo de Checkov, consulte [Información adicional](#centralized-custom-checkov-scanning-additional). | DevOps ingeniero | 

### Asociación de las políticas de la empresa a las políticas personalizadas de Checkov
<a name="associate-company-policies-to-checkov-custom-policies"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Determine las políticas que se pueden aplicar con Checkov. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralized-custom-checkov-scanning.html)Para obtener más información sobre la creación de políticas personalizadas de Checkov, consulte la [Custom Policies Overview](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html) en la documentación de Checkov. | Seguridad y conformidad | 
| Agregue políticas personalizadas de Checkov. | Convierta las políticas de la empresa identificadas en políticas de Checkov personalizadas en el repositorio central. Puede escribir políticas de Checkov sencillas en Python o YAML. | Seguridad | 

### Implemente políticas personalizadas de Checkov centralizadas
<a name="implement-centralized-checkov-custom-policies"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada el flujo de trabajo reutilizable de Checkov a todos los repositorios. | En este punto, debería tener un ejemplo de flujo de trabajo de Checkov que haga referencia al flujo de trabajo reutilizable. Copie el ejemplo del flujo de trabajo de Checkov que hace referencia al flujo de trabajo reutilizable en cada repositorio que lo requiera. | DevOps ingeniero | 
| Cree un mecanismo para garantizar que Checkov se ejecute antes de las combinaciones. | Para asegurarte de que el flujo de trabajo de Checkov se ejecute para cada solicitud de extracción, crea una [verificación de estado](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) que requiera un flujo de trabajo de Checkov correcto antes de poder fusionar las solicitudes de extracción. GitHub te permite exigir que se ejecuten flujos de trabajo específicos antes de poder fusionar las solicitudes de extracción. | DevOps ingeniero | 
| Cree un PAT para toda la organización y compártalo como un secreto. | Si su GitHub organización es visible públicamente, puede omitir este paso.Este patrón requiere que el flujo de trabajo de Checkov pueda descargar políticas personalizadas del repositorio de políticas personalizadas de su GitHub organización. Debe proporcionar permisos para que el flujo de trabajo de Checkov pueda acceder a esos repositorios.Para ello, [cree un token de acceso personal](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) (PAT) con permisos para leer los repositorios de la organización. Comparta el PAT con los repositorios, ya sea como un secreto para toda la organización (si tiene un plan de pago) o como un secreto en cada repositorio (versión gratuita). En el código de ejemplo, el nombre predeterminado del secreto es `ORG_PAT`. | DevOps ingeniero | 
| (Opcional) Proteja los archivos de flujo de trabajo de Checkov para que no se modifiquen. | Para proteger los archivos de flujo de trabajo de Checkov de cambios no deseados, puede utilizar un archivo `CODEOWNERS`. Normalmente, el archivo `CODEOWNERS` se implementa en la raíz del directorio.Por ejemplo, para solicitar la aprobación del `secEng` grupo de su GitHub organización cuando se modifique el `checkov-scan.yaml` archivo, añada lo siguiente al archivo de `CODEOWNERS` un repositorio:<pre>[Checkov]<br />.github/workflows/checkov-scan.yaml @myOrg/secEng</pre>Un archivo `CODEOWNERS` es específico del repositorio en el que reside. Para proteger el flujo de trabajo de Checkov que usa el repositorio, debe añadir (o actualizar) un archivo `CODEOWNERS` en cada repositorio.Para obtener más información acerca de la protección de los archivos de flujo de trabajo de Checkov, consulte [Información adicional](#centralized-custom-checkov-scanning-additional). Para obtener más información sobre `CODEOWNERS` los archivos, consulta la documentación oficial de tu CI/CD proveedor (por ejemplo,). [GitHub](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) | DevOps ingeniero | 

## Recursos relacionados
<a name="centralized-custom-checkov-scanning-resources"></a>
+ [Información general de las políticas personalizadas de Checkov](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html)
+ [CloudFormation Escaneo de configuraciones](https://www.checkov.io/7.Scan%20Examples/Cloudformation.html)
+ [GitHub Acciones: flujos de trabajo reutiliz](https://docs.github.com/en/actions/using-workflows/reusing-workflows)

## Información adicional
<a name="centralized-custom-checkov-scanning-additional"></a>

**Escritura de archivos de flujo de trabajo de Checkov**

Al escribir `checkov-scan.yaml`, tenga en cuenta cuándo quiere que se ejecute. La clave `on`de nivel superior determina cuándo se ejecuta el flujo de trabajo. En el repositorio de ejemplo, el flujo de trabajo se ejecutará cuando haya una solicitud de extracción dirigida a la rama `main` (y siempre que se modifique la rama de origen de esa solicitud de extracción). El flujo de trabajo también se puede ejecutar según sea necesario debido a la clave `workflow_dispatch`.

Puede cambiar las condiciones de activación del flujo de trabajo en función de la frecuencia con la que desee que este se ejecute. Por ejemplo, puede cambiar el flujo de trabajo para que se ejecute cada vez que se introduzca código en una rama; para ello, sustituya `pull_request` por `push` y quite la clave `branches`.

Puede modificar el archivo de flujo de trabajo de ejemplo que creó en un repositorio individual. Por ejemplo, puede ajustar el nombre de la rama de destino de `main` a `production` si el repositorio está estructurado en torno a una rama de `production`.

**Protección de archivos de flujo de trabajo de Checkov**

El análisis de Checkov proporciona información útil sobre posibles errores de configuración de seguridad. Sin embargo, es posible que algunos desarrolladores perciban esto como una barrera para su productividad e intenten eliminar o deshabilitar el flujo de trabajo de análisis.

Hay varias formas de abordar este problema, como enviar información más detallada sobre el valor a largo plazo del análisis de seguridad y documentar de manera más clara cómo implementar una infraestructura segura. Estos son importantes enfoques «flexibles» de DevSecOps la colaboración que pueden considerarse la solución a la causa raíz de este problema. Sin embargo, también puede utilizar controles técnicos, como un archivo `CODEOWNERS` que actúe como barrera de protección, para ayudar a los desarrolladores a seguir el camino correcto.

**Prueba de un patrón en un entorno de pruebas**

Para probar este patrón en un entorno de pruebas, siga estos pasos:

1. Cree una nueva GitHub organización. Cree un token con acceso de solo lectura a todos los repositorios de la organización. Como este token se usará en un entorno de pruebas y no en un entorno de pago, no podrá almacenarlo como secreto para toda la organización.

1. Cree un repositorio de `checkov` para almacenar la configuración de Checkov y un repositorio de `github-workflows` para almacenar la configuración del flujo de trabajo reutilizable. Rellene los repositorios con el contenido del repositorio de ejemplo.

1. Cree un repositorio de aplicaciones y copie y pegue el flujo de trabajo `checkov-scan.yaml` en su carpeta `.github/workflows`. Agregue un secreto al repositorio que contenga el PAT que creó para el acceso de solo lectura de la organización. El valor predeterminado del secreto es `ORG_PAT`.

1. Crea una solicitud de extracción que añada algo de Terraform o CloudFormation código al repositorio de aplicaciones. Checkov debería analizar esto y devolver un resultado.

# Implementación de diagnósticos y solución de problemas de Kubernetes con tecnología de IA con la integración de K8sGPT y Amazon Bedrock
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration"></a>

*Ishwar Chauthaiwale, Muskan y Prafful Gupta, Amazon Web Services*

## Resumen
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-summary"></a>

Este patrón demuestra cómo implementar diagnósticos y solución de problemas de Kubernetes con tecnología de IA mediante la integración de K8sGPT con el modelo Anthropic Claude v2 disponible en Amazon Bedrock. La solución proporciona un análisis en lenguaje natural y pasos para solucionar los problemas de los clústeres de Kubernetes mediante una arquitectura de host bastión segura. Al combinar la experiencia de K8sGPT en Kubernetes con las capacidades lingüísticas avanzadas de Amazon Bedrock DevOps , los equipos pueden identificar y resolver rápidamente los problemas de los clústeres. Con estas funcionalidades, es posible reducir el tiempo medio de resolución (MTTR) hasta en un 50 %. 

Este patrón nativo en la nube utiliza Amazon Elastic Kubernetes Service (Amazon EKS) para la administración de Kubernetes. El patrón implementa las mejores prácticas de seguridad mediante las funciones adecuadas AWS Identity and Access Management (de IAM) y el aislamiento de la red. Esta solución es especialmente valiosa para las organizaciones que desean optimizar sus operaciones de Kubernetes y mejorar sus capacidades de solución de problemas con la ayuda de la IA.

## Requisitos previos y limitaciones
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS con los permisos adecuados
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Un clúster de Amazon EKS
+ Acceso al modelo Anthropic Claude 2 en [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ Un host bastión con la configuración de grupo de seguridad requerida
+ K8sGPT [instalado](https://docs.k8sgpt.ai/getting-started/installation/)

**Limitaciones**
+ El análisis de K8sGPT está limitado por el tamaño de la ventana de contexto del modelo Claude v2.
+ Los límites de frecuencia de la API de Amazon Bedrock se aplican en función de las cuotas de su cuenta.
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Amazon EKS [versión 1.31 o posteriores](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Modelo Claude 2](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) en Amazon Bedrock
+ K8sGPT [v0.4.2 o posteriores](https://github.com/k8sgpt-ai/k8sgpt/releases)

## Arquitectura
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-architecture"></a>

En el siguiente diagrama se muestra la arquitectura para el diagnóstico de Kubernetes con tecnología de IA mediante K8sGPT integrado con Amazon Bedrock en la Nube de AWS.

![\[Flujo de trabajo para el diagnóstico de Kubernetes mediante K8sGPT integrado con Amazon Bedrock.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/09bc08f6-e191-4cef-b26b-dcb6225b15cc/images/8789891d-4a90-44b0-a108-387f6d96496b.png)


En la arquitectura se muestra el flujo de trabajo siguiente:

1. Los desarrolladores acceden al entorno a través de una conexión segura al host bastión. Esta EC2 instancia de Amazon sirve como punto de entrada seguro y contiene la instalación de la interfaz de línea de comandos (CLI) K8sgpt y las configuraciones necesarias.

1. El host bastión, configurado con roles de IAM específicos, establece conexiones seguras tanto con el clúster de Amazon EKS como con los puntos de conexión de Amazon Bedrock. K8sGPT se instala y configura en el host bastión para analizar los clústeres de Kubernetes.

1. Amazon EKS administra el plano de control de Kubernetes y los nodos de trabajo, lo que proporciona el entorno de destino para el análisis de K8sGPT. El servicio se ejecuta en varias zonas de disponibilidad dentro de una nube privada virtual (VPC), lo que ayuda a proporcionar una alta disponibilidad y resiliencia. Amazon EKS suministra datos operativos a través de la API de Kubernetes, lo que permite un análisis integral de clústeres.

1. K8sGPT envía los datos de análisis a Amazon Bedrock, que proporciona el modelo fundacional (FM) Claude v2 para el procesamiento de lenguaje natural. El servicio procesa el análisis del K8sGPT para generar explicaciones legibles para los humanos y ofrece sugerencias de corrección detalladas basadas en los problemas identificados. Amazon Bedrock funciona como un servicio de IA sin servidor con alta disponibilidad y escalabilidad.

**nota**  
A lo largo de este flujo de trabajo, IAM controla el acceso entre los componentes mediante roles y políticas, y administra la autenticación de las interacciones entre el host bastión, Amazon EKS y Amazon Bedrock. IAM implementa el principio de privilegio mínimo y permite una comunicación segura entre servicios en toda la arquitectura.

**Automatización y escala**

Las operaciones de K8sgpt pueden automatizarse y escalarse en varios clústeres de Amazon EKS a través de diversas herramientas. Servicios de AWS [Esta solución admite la integración continua y la integración del despliegue continuo (CI/CD) mediante [Jenkins](https://www.jenkins.io/), GitHub Actions o para análisis programados. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)](https://docs.github.com/en/actions/get-started/understand-github-actions) El operador K8sGPT permite la supervisión continua en el clúster con funcionalidades automatizadas de detección de problemas y generación de informes. Para despliegues a escala empresarial, puedes usar [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) para programar escaneos y activar respuestas automatizadas con scripts personalizados. AWS La integración del SDK permite el control programático en una gran flota de clústeres.

## Tools (Herramientas)
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-tools"></a>

**Servicios de AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante los comandos de su consola de línea de comandos.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

**Otras herramientas**
+ [K8sGPT](https://k8sgpt.ai/) es una herramienta de código abierto con tecnología de IA que transforma la administración de Kubernetes. Actúa como experto virtual en ingeniería de confiabilidad del sitio (SRE) y analiza, diagnostica y soluciona automáticamente los problemas del clúster de Kubernetes. Los administradores pueden interactuar con K8sGPT mediante un lenguaje natural y obtener información clara y práctica sobre el estado del clúster, los fallos de los pods y los fallos del servicio. Los analizadores integrados en la herramienta detectan una amplia gama de problemas, desde componentes mal configurados hasta limitaciones de recursos, y ofrecen easy-to-understand explicaciones y soluciones.

## Prácticas recomendadas
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-best-practices"></a>
+ Implemente controles de acceso seguros mediante el acceso al AWS Systems Manager Session Manager host [del bastión.](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html)
+ Asegúrese de que la autenticación de K8sGPT utilice roles de IAM dedicados con permisos de privilegio mínimo para las interacciones de Amazon Bedrock y Amazon EKS. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.
+ Configure el [etiquetado de recursos](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html), habilite el CloudWatch [registro de Amazon para las pistas de auditoría](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html) e implemente la [anonimización de los datos](https://aws.amazon.com/solutions/guidance/data-anonymization-on-aws/) para la información confidencial. 
+ Haga copias de seguridad periódicas de las configuraciones de K8sGPT y, al mismo tiempo, establezca programas de análisis automatizados durante las horas de menor actividad para minimizar el impacto operativo.

## Epics
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-epics"></a>

### Cómo agregar Amazon Bedrock a la lista de proveedores de backend de IA
<a name="add-br-to-ai-backend-provider-list"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configurar Amazon Bedrock como proveedor de backend de IA para K8sGPT. | Para configurar Amazon Bedrock como el proveedor de [backend de la IA r para](https://docs.k8sgpt.ai/reference/providers/backend/) K8sgpt, utilice el siguiente comando: AWS CLI <pre>k8sgpt auth add -b amazonbedrock \<br /> -r us-west-2 \<br /> -m anthropic.claude-v2 \<br /> -n endpoint-name <br /></pre>En el comando de ejemplo se utiliza `us-west-2` para la Región de AWS. Sin embargo, puede seleccionar otra región, siempre que tanto el clúster de Amazon EKS como el modelo de Amazon Bedrock correspondiente estén disponibles y habilitados en la región seleccionada.Para comprobar si `amazonbedrock` se ha agregado a la lista de proveedores de backend de IA y si se encuentra en estado `Active`, ejecute el siguiente comando:<pre>k8sgpt auth list</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>Default: <br />> openai<br />Active: <br />> amazonbedrock<br />Unused: <br />> openai<br />> localai<br />> ollama<br />> azureopenai<br />> cohere<br />> amazonsagemaker<br />> google<br />> noopai<br />> huggingface<br />> googlevertexai<br />> oci<br />> customrest<br />> ibmwatsonxai</pre> | AWS DevOps | 

### Analizar los recursos mediante un filtro
<a name="scan-resources-using-a-filter"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ver una lista de filtros disponibles. | Para ver la lista de todos los filtros disponibles, utilice el siguiente AWS CLI comando:<pre>k8sgpt filters list</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>Active: <br />> Deployment<br />> ReplicaSet<br />> PersistentVolumeClaim<br />> Service<br />> CronJob<br />> Node<br />> MutatingWebhookConfiguration<br />> Pod<br />> Ingress<br />> StatefulSet<br />> ValidatingWebhookConfiguration</pre> | AWS DevOps | 
| Analizar un pod en un espacio de nombres específico mediante un filtro. | Este comando es útil para la depuración selectiva de problemas específicos de los pods dentro de un clúster de Kubernetes, utilizando las funcionalidades de IA de Amazon Bedrock para analizar y explicar los problemas que encuentra.Para escanear un pod en un espacio de nombres específico mediante un filtro, utilice el siguiente comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>100% |████████████████████████████████████████████████████████| (1/1, 645 it/s)        <br />AI Provider: amazonbedrock<br /><br />0: Pod default/crashme()<br />- Error: the last termination reason is Error container=crashme pod=crashme<br />Error: The pod named crashme terminated because the container named crashme crashed.<br />Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.</pre> | AWS DevOps | 
| Analizar una implementación en un espacio de nombres específico mediante un filtro. | Este comando es útil para identificar y solucionar problemas específicos de la implementación, especialmente cuando el estado real no coincide con el estado deseado.Para escanear una implementación en un espacio de nombres específico mediante un filtro, utilice el siguiente comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min)        <br />AI Provider: amazonbedrock<br /><br />0: Deployment default/nginx()<br />- Error: Deployment default/nginx has 1 replicas but 2 are available<br /> Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running.<br />Solution: Check if any other controllers like ReplicaSet or StatefulSet have created extra pods. Delete extra pods or adjust replica count to match available pods.</pre> | AWS DevOps | 
| Analizar un nodo en un espacio de nombres específico mediante un filtro. | Para escanear un nodo de un espacio de nombres específico mediante un filtro, utilice el siguiente comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default </pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> | AWS DevOps | 

### Analizar las salidas detalladas
<a name="analyze-detailed-outputs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Obtener salidas detalladas. |  Para obtener resultados detallados, utilice el siguiente AWS CLI comando:<pre>k8sgpt analyze --backend amazonbedrock --explain --ouput json</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>{<br />  "provider": "amazonbedrock",<br />  "errors": null,<br />  "status": "ProblemDetected",<br />  "problems": 1,<br />  "results": [<br />    {<br />      "kind": "Pod",<br />      "name": "default/crashme",<br />      "error": [<br />        {<br />          "Text": "the last termination reason is Error container=crashme pod=crashme",<br />          "KubernetesDoc": "",<br />          "Sensitive": []<br />        }<br />      ],<br />      "details": " Error: The pod named crashme terminated because the container named crashme crashed.\nSolution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.",<br />      "parentObject": ""<br />    }<br />  ]<br />}</pre> | AWS DevOps | 
| Comprobar los pods problemáticos. | Para comprobar si hay pods problemáticos específicos, usa el siguiente AWS CLI comando:<pre>kubectl get pods --all-namespaces | grep -v Running</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>NAMESPACE    NAME      READY    STATUS          RESTARTS      AGE                                       <br />default     crashme     0/1   CrashLoopBackOff   260(91s ago)   21h</pre> | AWS DevOps | 
| Obtener información específica de la aplicación. | Este comando resulta especialmente útil cuando:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.html)Para obtener información específica de la aplicación, use el siguiente comando:<pre>k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default</pre>A continuación, se muestra un ejemplo de la salida esperada de este comando:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> |  | 

## Recursos relacionados
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-resources"></a>

**Blogs de AWS**
+ [Automate Amazon EKS troubleshooting using an Amazon Bedrock agentic workflow](https://aws.amazon.com/blogs/machine-learning/automate-amazon-eks-troubleshooting-using-an-amazon-bedrock-agentic-workflow/)
+ [Use K8sGPT and Amazon Bedrock for simplified Kubernetes cluster maintenance](https://aws.amazon.com/blogs/machine-learning/use-k8sgpt-and-amazon-bedrock-for-simplified-kubernetes-cluster-maintenance/)

**AWS documentación**
+ AWS CLI [comandos: [create-cluster y describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-cluster.html)
+ [Introducción a Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) (documentación de Amazon EKS)
+ [Prácticas recomendadas de seguridad en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentación de IAM)

**Otros recursos**
+ [K8sGPT](https://k8sgpt.ai/)

# Detecta automáticamente los cambios e inicia diferentes CodePipeline canalizaciones para un monorepo en CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha y Ricardo Morais, Amazon Web Services*

## Resumen
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Aviso**: ya no AWS Cloud9 está disponible para nuevos clientes. Los clientes actuales de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. [Más información](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Este patrón le ayuda a detectar automáticamente los cambios en el código fuente de una aplicación basada en monorepo AWS CodeCommit y, a continuación, a iniciar una canalización AWS CodePipeline que ejecute la integración continua y la entrega continuas (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDcanalización), lo que garantiza una mejor visibilidad, un intercambio más sencillo del código y una mejor colaboración, estandarización y capacidad de descubrimiento.

La solución descrita en este patrón no realiza ningún análisis de dependencia entre los microservicios del monorepo. Solo detecta los cambios en el código fuente e inicia la canalización correspondiente. CI/CD 

El patrón AWS Cloud9 se utiliza como entorno de desarrollo integrado (IDE) y AWS Cloud Development Kit (AWS CDK) para definir una infraestructura mediante dos CloudFormation pilas: `MonoRepoStack` y. `PipelinesStack` La `MonoRepoStack` pila crea la entrada monorepo AWS CodeCommit y la AWS Lambda función que inicia las canalizaciones. CI/CD La pila `PipelinesStack` define su infraestructura de canalizaciones.

**importante**  
El flujo de trabajo de este patrón es una prueba de concepto (PoC). Le recomendamos que utilice esta opción solo en un entorno de prueba. Si desea utilizar el enfoque de este patrón en un entorno de producción, consulte [las prácticas recomendadas de seguridad en IAM en la documentación AWS Identity and Access Management (IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)) y realice los cambios necesarios en sus funciones de IAM y. Servicios de AWS 

## Requisitos previos y limitaciones
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Requisitos previos **
+ Una cuenta activa. AWS 
+ AWS Command Line Interface (AWS CLI), instalada y configurada. Para obtener más información, consulte [Instalación, actualización y desinstalación de AWS CLI en la](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) AWS CLI documentación.  
+ Python 3 y `pip` instalados en su equipo local. Para obtener más información, consulte la [documentación de Python](https://www.python.org/). 
+ AWS CDK instalado y configurado Para obtener más información, consulte [Introducción a AWS CDK la](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) AWS CDK documentación. 
+ Un AWS Cloud9 IDE, instalado y configurado. Para obtener más información, consulte [Configuración AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) en la AWS Cloud9 documentación. 
+ El repositorio de [activadores multicanalización de GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), clonado en su máquina local. 
+ Un directorio existente que contiene el código de la aplicación con el que desea crear e implementar. CodePipeline
+ Familiaridad y experiencia con las DevOps mejores prácticas en el Nube de AWS. Para aumentar su familiaridad DevOps, puede utilizar el patrón [Construir una arquitectura de acoplamiento flexible con microservicios utilizando DevOps prácticas y AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) en el AWS sitio web de orientación prescriptiva.  

## Arquitectura
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

El siguiente diagrama muestra cómo usar el AWS CDK para definir una infraestructura con dos AWS CloudFormation pilas: y. `MonoRepoStack` `PipelinesStack`

![\[Flujo de trabajo para usar la AWS CDK para definir una infraestructura con dos CloudFormation pilas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


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

1. El proceso de arranque utiliza el AWS CDK para crear las AWS CloudFormation pilas y. `MonoRepoStack` `PipelinesStack`

1. La `MonoRepoStack` pila crea el CodeCommit repositorio para la aplicación y la función `monorepo-event-handler` Lambda que se inicia después de cada confirmación.

1. La `PipelinesStack` pila crea las canalizaciones CodePipeline iniciadas por la función Lambda. Cada microservicio debe tener una canalización de infraestructura definida.

1. La canalización para `microservice-n` la inicia la función Lambda e inicia sus CI/CD etapas aisladas que se basan en el código fuente de. CodeCommit

1. La canalización para `microservice-1` la inicia la función Lambda e inicia sus CI/CD etapas aisladas que se basan en el código fuente de. CodeCommit

El siguiente diagrama muestra el despliegue de las AWS CloudFormation pilas `MonoRepoStack` y `PipelinesStack` en una cuenta.

![\[Implementación de las CloudFormation pilas MonoRepoStack y PipelinesStack en una cuenta de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Un usuario cambia el código de uno de los microservicios de la aplicación.

1. El usuario envía los cambios de un repositorio local a un CodeCommit repositorio.

1. La actividad de envío inicia la función Lambda que recibe todos los envíos al repositorio. CodeCommit 

1. La función de Lambda lee un parámetro en el Almacén de parámetros, una capacidad de AWS Systems Manager, para recuperar el ID de confirmación más reciente. El parámetro tiene el formato de denominación:. `/MonoRepoTrigger/{repository}/{branch_name}/LastCommit` Si no se encuentra el parámetro, la función Lambda lee el último ID de confirmación del CodeCommit repositorio y guarda el valor devuelto en el almacén de parámetros.

1. Tras identificar el ID de confirmación y los archivos modificados, la función Lambda identifica las canalizaciones de cada directorio de microservicios e inicia la canalización requerida. CodePipeline 

## Tools (Herramientas)
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)es un marco de desarrollo de software para definir la infraestructura de nube en código y aprovisionarla mediante ella. CloudFormation
+ [Python](https://www.python.org/) es un lenguaje de programación que le permite trabajar rápidamente e integrar sistemas de manera más eficaz.

**Código**

El código fuente y las plantillas de este patrón están disponibles en el GitHub [AWS CodeCommit repositorio multipipeline triggers de monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Prácticas recomendadas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Este ejemplo de arquitectura no incluye soluciones de supervisión para la infraestructura implementada. Si desea implementar esta solución en un entorno de producción, le recomendamos que habilite la supervisión. Para obtener más información, consulte [Supervise sus aplicaciones sin servidor con CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) en la AWS Serverless Application Model documentación ().AWS SAM
+ Al editar el código de muestra que proporciona este patrón, siga las [prácticas recomendadas para desarrollar e implementar la infraestructura de nube](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) de la AWS CDK documentación.
+ Al definir las canalizaciones de microservicios, revise las [prácticas recomendadas de seguridad](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) de la AWS CodePipeline documentación.
+ También puede comprobar las prácticas recomendadas en su AWS CDK código mediante la utilidad [cdk-nag](https://github.com/cdklabs/cdk-nag). Esta herramienta utiliza un conjunto de reglas, agrupadas por paquetes, para evaluar el código. Estos son los paquetes disponibles:
  + [AWS Biblioteca de soluciones](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Ley de Portabilidad y Responsabilidad de Seguros Médicos (HIPAA), norma de seguridad](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Instituto Nacional de Estándares y Tecnología (NIST) 800-53, rev. 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 rev. 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [La norma de seguridad de datos del sector de pagos con tarjeta (PCI DSS), versión 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Epics
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configuración del entorno
<a name="set-up-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un entorno virtual de Python. | En su AWS Cloud9 IDE, cree un entorno virtual de Python e instale las dependencias necesarias ejecutando el siguiente comando:`make install` | Desarrollador | 
| Arranca el Cuenta de AWS y Región de AWS para. AWS CDK | Inicie la región Cuenta de AWS y requerida ejecutando el siguiente comando:`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Desarrollador | 

### Cómo añadir una nueva canalización para un microservicio
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Añada su código de muestra al directorio de su aplicación. | Añada el directorio que contiene el código de la aplicación de muestra al `monorepo-sample` directorio del repositorio clonado de GitHub [AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) multi-pipeline triggers. | Desarrollador | 
| Edite el archivo `monorepo-main.json`. | Añada el nombre del directorio del código de la aplicación y el nombre de la canalización al archivo `monorepo-main.json` del repositorio clonado . | Desarrollador | 
| Cree la canalización. | En el directorio `Pipelines` del repositorio , añada la canalización `class` de su aplicación. El directorio contiene dos archivos de ejemplo, `pipeline_hotsite.py` y `pipeline_demo.py`. Cada archivo tiene tres etapas: código fuente, compilación e implementación.Puede copiar uno de los archivos y modificarlo según los requisitos de su aplicación.  | Desarrollador | 
| Edite el archivo `monorepo_config.py`. | En `service_map`, añada el nombre del directorio de su aplicación y la clase que creó para la canalización.Por ejemplo, en el siguiente código, se muestra una definición de canalización en el directorio `Pipelines` que usa un archivo llamado `pipeline_mysample.py` con una clase `MySamplePipeline`:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Desarrollador | 

### Despliega la pila MonoRepoStack
<a name="deploy-the-monorepostack-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Despliegue la AWS CloudFormation pila. | Ejecute el `make deploy-core` comando para implementar la AWS CloudFormation `MonoRepoStack` pila con los valores de los parámetros predeterminados en el directorio raíz del repositorio clonado.Puede cambiar el nombre del repositorio si ejecuta el comando `make deploy-core monorepo-name=<repo_name>`.Puede implementar ambas canalizaciones simultáneamente mediante el comando `make deploy monorepo-name=<repo_name>`. | Desarrollador | 
| Valide el CodeCommit repositorio. | Valide si sus recursos se crearon mediante la ejecución del comando `aws codecommit get-repository --repository-name <repo_name>`. Como la CloudFormation pila crea el CodeCommit repositorio en el que se almacena el monorepo, no ejecute el `cdk destroy MonoRepoStack ` comando si ha empezado a introducir modificaciones en él. | Desarrollador | 
| Valide los resultados de la CloudFormation pila. | Valide que la CloudFormation `MonoRepoStack` pila se haya creado y configurado correctamente ejecutando el siguiente comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Desarrollador | 

### Implemente la PipelinesStack pila
<a name="deploy-the-pipelinesstack-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Despliegue la CloudFormation pila. | La AWS CloudFormation `PipelinesStack` pila debe desplegarse después de `MonoRepoStack` desplegarla. La pila aumenta de tamaño cuando se añaden nuevos microservicios al código base del monorepo y se vuelve a implementar cuando se incorpora un nuevo microservicio.Implemente la PipelinesStack pila ejecutando el `make deploy-pipelines` comando.También puede ejecutar el comando `make deploy monorepo-name=<repo_name>` para implementar simultáneamente ambas canalizaciones.El siguiente ejemplo de resultado muestra cómo la `PipelinesStacks` implementación imprime URLs los microservicios al final de la implementación:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Desarrollador | 
| Valide los resultados de la AWS CloudFormation pila. | Valide que la AWS CloudFormation `PipelinesStacks` pila se haya creado y configurado correctamente ejecutando el siguiente comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Desarrollador | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimina tus AWS CloudFormation pilas. | Ejecute el comando `make destroy`. | Desarrollador | 
| Elimine los buckets de S3 para sus canalizaciones. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Desarrollador | 

## Resolución de problemas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| He encontrado AWS CDK problemas. | Consulte [Solución de AWS CDK problemas comunes](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) en la documentación de AWS CDK. | 
| Inserté mi código de microservicio, pero la canalización de microservicios no funcionó. | **Validación de la configuración***Verifique la configuración de la rama:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Valide los archivos de configuración:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Solución de problemas en la consola***AWS CodePipeline comprueba:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda solución de problemas:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Necesito volver a implementar todos mis microservicios.  | Existen dos métodos para volver a implementar todos los microservicios. Seleccione la opción que mejor se adapte a sus necesidades.**Método 1: Eliminar un parámetro del almacén de parámetros**Este método implica eliminar un parámetro específico del almacén de parámetros de Systems Manager que rastrea el último ID de confirmaciónq que se usó para la implementación. Al eliminar este parámetro, el sistema se ve obligado a volver a implementar todos los microservicios en el siguiente desencadenador, ya que lo percibe como un estado nuevo.Pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Ventajas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Desventajas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Método 2: Insertar una confirmación en cada subcarpeta de monorepo**Este método implica realizar un cambio menor e insertarlo en cada subcarpeta de microservicios del monorepo para iniciar sus canalizaciones individuales.Pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Ventajas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Desventajas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Recursos relacionados
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integración y entrega continuas (CI/CD) mediante CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentación)AWS CDK 
+ [módulo aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (referencia de la API)AWS CDK 

# Integre un repositorio de Bitbucket con AWS Amplify mediante AWS CloudFormation
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation"></a>

*Alwin Abraham, Amazon Web Services*

## Resumen
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-summary"></a>

AWS Amplify le ayuda a implementar y probar sitios web estáticos rápidamente sin tener que configurar la infraestructura que normalmente se requiere. Puede implementar el enfoque de este patrón si su organización quiere usar Bitbucket como control de código fuente, ya sea para migrar el código de una aplicación existente o para crear una nueva aplicación. Al utilizar AWS CloudFormation para configurar Amplify automáticamente, proporciona visibilidad de las configuraciones que utiliza.

Este patrón describe cómo crear una canalización y un entorno de implementación de integración y despliegue continuos (CI/CD) front-end mediante AWS CloudFormation para integrar un repositorio de Bitbucket con AWS Amplify. El enfoque del patrón significa que puede crear una canalización de frontend de Amplify para implementaciones repetibles.

## Requisitos previos y limitaciones
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-prereqs"></a>

**Requisitos previos**** **
+ Una cuenta de Amazon Web Services (AWS) activa
+ Una cuenta de Bitbucket activa con acceso de administrador
+ Acceder a un terminal que usa [cURL](https://curl.se/) o la aplicación [Postman](https://www.postman.com/)
+ Familiaridad con Amplify
+ Familiaridad con AWS CloudFormation
+ Familiaridad con los archivos con formato YAML

## Arquitectura
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-architecture"></a>

![\[Diagram showing user interaction with Bitbucket repository connected to AWS Amplify in Nube de AWS region.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/images/25d73a9d-d2ae-40bc-9ebc-57f9bd13884a.png)


**Pila de tecnología**
+ Amplify
+ AWS CloudFormation
+ Bitbucket

## Tools (Herramientas)
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-tools"></a>
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/): Amplify ayuda a los desarrolladores a desarrollar e implementar aplicaciones móviles y web impulsadas por la nube.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS CloudFormation es un servicio que le ayuda a modelar y configurar sus recursos de AWS para que pueda dedicar menos tiempo a gestionarlos y más a centrarse en las aplicaciones que se ejecutan en AWS.
+ [Bitbucket](https://bitbucket.org/): Bitbucket es una solución de gestión de repositorios de Git diseñada para equipos profesionales. Le brinda un lugar central para administrar los repositorios de Git, colaborar en su código fuente y guiarle a través del flujo de desarrollo.

 

**Código**

El `bitbucket-amplify.yml` archivo (adjunto) contiene la CloudFormation plantilla de AWS para este patrón.

## Epics
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-epics"></a>

### Configurar el repositorio de Bitbucket
<a name="configure-the-bitbucket-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| (Opcional) Cree un repositorio de Bitbucket.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)También puede utilizar un repositorio de Bitbucket ya existente. | DevOps ingeniero | 
| Abra la configuración del espacio de trabajo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps ingeniero | 
| Crea un OAuth consumidor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps ingeniero | 
| Obtenga el token de OAuth acceso.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)`curl -X POST -u "KEY:SECRET" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials `Sustituya `KEY` y `SECRET` por la clave y el secreto que registró anteriormente. 2. Registre el token de acceso sin utilizar las comillas. El token solo es válido durante un tiempo limitado y el tiempo predeterminado es de dos horas. Debe ejecutar la CloudFormation plantilla de AWS en este período de tiempo. | DevOps ingeniero | 

### Cree e implemente el CloudFormation stack de AWS
<a name="create-and-deploy-the-aws-cloudformation-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Descargue la CloudFormation plantilla de AWS. | Descargue la CloudFormation plantilla de `bitbucket-amplify.yml` AWS (adjunta). Esta plantilla crea la CI/CD canalización en Amplify, además del proyecto y la sucursal de Amplify. |  | 
| Cree e implemente la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)5. Seleccione **Siguiente** y después **Crear pilas**. | DevOps ingeniero | 

### Pruebe la CI/CD tubería
<a name="test-the-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar el código en la rama de su repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Para obtener más información sobre esto, consulte [Comandos básicos de Git](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html) en la documentación de Bitbucket.  | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-resources"></a>

[Métodos de autenticación](https://developer.atlassian.com/bitbucket/api/2/reference/meta/authentication) (documentación de Atlassian)

## Conexiones
<a name="attachments-24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/attachments/attachment.zip)

# Lance un CodeBuild proyecto en todas las cuentas de AWS mediante Step Functions y una función de proxy Lambda
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function"></a>

*Richard Milner-Watts y Amit Anjarlekar, Amazon Web Services*

## Resumen
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-summary"></a>

Este patrón demuestra cómo lanzar de forma asíncrona un CodeBuild proyecto de AWS en varias cuentas de AWS mediante AWS Step Functions y una función de proxy de AWS Lambda. Puedes usar la máquina de estados Step Functions de muestra del patrón para probar el éxito de tu CodeBuild proyecto.

CodeBuild le ayuda a lanzar tareas operativas mediante la interfaz de línea de comandos de AWS (AWS CLI) desde un entorno de ejecución totalmente gestionado. Puede cambiar el comportamiento de su CodeBuild proyecto en tiempo de ejecución anulando las variables de entorno. Además, se puede utilizar CodeBuild para gestionar los flujos de trabajo. Para obtener más información, consulte [las herramientas del catálogo de servicios](https://service-catalog-tools-workshop.com/tools.html) en el sitio web de AWS Workshop y [Programe trabajos en Amazon RDS para PostgreSQL con AWS y EventBridge Amazon en el blog de bases de datos de CodeBuild AWS](https://aws.amazon.com/blogs/database/schedule-jobs-in-amazon-rds-for-postgresql-using-aws-codebuild-and-amazon-eventbridge/).

## Requisitos previos y limitaciones
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-prereqs"></a>

**Requisitos previos **
+ Dos cuentas de AWS activas: una cuenta de origen para invocar una función de proxy de Lambda con Step Functions y una cuenta de destino para crear un CodeBuild proyecto de muestra remoto

**Limitaciones**
+ Este patrón no se puede utilizar para copiar [artefactos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html) entre cuentas.

## Arquitectura
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-architecture"></a>

En el siguiente diagrama, se muestra la arquitectura que crea este patrón.

![\[Diagrama de arquitectura del lanzamiento de un CodeBuild proyecto en varias cuentas de AWS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/857ba3ae-eb9a-4d6b-b73e-e596f41c8cb8.png)


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

1. La máquina de estado de Step Functions analiza el mapa de entrada proporcionado e invoca la función de proxy de Lambda (`codebuild-proxy-lambda`) para cada cuenta, región y proyecto que haya definido.

1. La función de proxy de Lambda usa AWS Security Token Service (AWS STS) para asumir un rol de proxy de IAM (`codebuild-proxy-role`), que está asociado a una política de IAM (`codebuild-proxy-policy`) en la cuenta de destino.

1. Con el rol asumido, la función Lambda lanza el CodeBuild proyecto y devuelve el identificador del CodeBuild trabajo. La máquina de estado Step Functions realiza un bucle y sondea el CodeBuild trabajo hasta recibir un estado de éxito o fracaso.

En la siguiente imagen se muestra la lógica de la máquina de estado.

![\[Flujo de trabajo de la máquina de estado de Step Functions\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/4729bbfc-79ad-455d-a85a-b96cce00f432.png)


**Pila de tecnología**
+ AWS CloudFormation
+ CodeBuild
+ IAM
+ Lambda
+ Step Functions
+ X-Ray

## Tools (Herramientas)
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-tools"></a>
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS CloudFormation Designer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html) proporciona un editor JSON y YAML integrado que le ayuda a ver y editar CloudFormation plantillas.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) es un servicio de orquestación sin servidor que le permite combinar funciones de AWS Lambda y otros servicios de AWS para crear aplicaciones esenciales desde el punto de vista empresarial.
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) le ayuda a recopilar datos sobre las solicitudes que atiende su aplicación y proporciona herramientas que puede utilizar para ver, filtrar y obtener información sobre esos datos para identificar problemas y oportunidades de optimización.

**Código**

El código de muestra para este patrón está disponible en el repositorio de GitHub [Cross Account CodeBuild Proxy](https://github.com/aws-samples/cross-account-codebuild-proxy). Este patrón utiliza la biblioteca AWS Lambda Powertools para Python para proporcionar funciones de registro y rastreo. Para obtener más información sobre esta biblioteca y sus utilidades, consulte [Powertools for AWS Lambda (Python)](https://docs.powertools.aws.dev/lambda/python/latest/).

## Prácticas recomendadas
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-best-practices"></a>

1. Ajuste los valores del tiempo de espera en la máquina de estado de Step Functions para minimizar las solicitudes de sondeo sobre el estado del trabajo. Utilice el tiempo de ejecución previsto para el CodeBuild proyecto.

1. Ajusta la `MaxConcurrency` propiedad del mapa en Step Functions para controlar cuántos CodeBuild proyectos se pueden ejecutar en paralelo.

1. Si es necesario, revise el código de ejemplo para ver si está listo para producción. Considera qué datos podría registrar la solución y si el CloudWatch cifrado predeterminado de Amazon es suficiente.

## Epics
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-epics"></a>

### Crear la función proxy Lambda y el rol de IAM asociado en la cuenta de origen
<a name="create-the-lambda-proxy-function-and-associated-iam-role-in-the-source-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Registre la cuenta de AWS IDs. |  IDs Se requiere una cuenta de AWS para configurar el acceso a todas las cuentas.Registre el ID de cuenta de AWS de sus cuentas de origen y destino. Para obtener más información, consulte [Cómo encontrar el ID de su cuenta de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId) en la documentación de IAM. | AWS DevOps | 
| Descargue las CloudFormation plantillas de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)En las CloudFormation plantillas de AWS, `<SourceAccountId>` es el ID de la cuenta de AWS de la cuenta de origen y `<TargetAccountId>` es el ID de la cuenta de AWS de la cuenta de destino. | AWS DevOps | 
| Cree e implemente la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)Debe crear la CloudFormation pila de AWS para la función de proxy Lambda antes de crear cualquier recurso en las cuentas de destino. Al crear una política de confianza en una cuenta de destino, el rol de IAM pasa del nombre del rol a un identificador interno. Es la razón por la que el rol de IAM debe existir previamente. | AWS DevOps | 
| Confirme la creación de la función proxy y la máquina de estado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Cree un rol de IAM en la cuenta de destino y lance un proyecto de muestra CodeBuild
<a name="create-an-iam-role-in-the-target-account-and-launch-a-sample-codebuild-project"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree e implemente la CloudFormation pila de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Verifique la creación del CodeBuild proyecto de muestra.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Prueba de la función de proxy de Lambda entre cuentas
<a name="test-the-cross-account-lambda-proxy-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Lance la máquina de estado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Valide las variables de entorno. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

## Resolución de problemas
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La ejecución de Step Functions está tardando más de lo esperado. | Ajuste la `MaxConcurrency` propiedad del mapa en la máquina de estados Step Function para controlar cuántos CodeBuild proyectos se pueden ejecutar en paralelo. | 
| La ejecución de los CodeBuild trabajos está tardando más de lo esperado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | 

# Administración de la conmutación por error de multi-AZ para clústeres de EMR mediante el Controlador de recuperación de aplicaciones
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

*Aarti Rajput, Ashish Bhatt, Neeti Mishra y Nidhi Sharma, Amazon Web Services*

## Resumen
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

Este patrón ofrece una estrategia de recuperación ante desastres eficiente para las cargas de trabajo de Amazon EMR a fin de garantizar la alta disponibilidad y la coherencia de datos en varias zonas de disponibilidad dentro de una sola Región de AWS. El diseño utiliza el [Controlador de recuperación de aplicaciones de Amazon](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) y un [equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) para administrar las operaciones de conmutación por error y la distribución del tráfico para un clúster EMR basado en Apache Spark. 

En condiciones estándar, la zona de disponibilidad principal aloja un clúster y una aplicación de EMR activos con funcionalidad completa read/write . Si se produce un error inesperado en una zona de disponibilidad, el tráfico se redirige automáticamente a la zona de disponibilidad secundaria, donde se inicializa un nuevo clúster de EMR. Ambas zonas de disponibilidad acceden a un bucket de Amazon Simple Storage Service (Amazon S3) compartido a través de [puntos de conexión de puerta de enlace](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) dedicados, lo que garantiza una administración de datos coherente. Este enfoque minimiza el tiempo de inactividad y permite una recuperación rápida de las cargas de trabajo críticas de macrodatos durante los errores de la zona de disponibilidad. La solución resulta útil en sectores como el financiero o el minorista, donde los análisis en tiempo real son fundamentales.

## Requisitos previos y limitaciones
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**Requisitos previos **
+ Una [Cuenta de AWS](https://aws.amazon.com/resources/create-account/) activa.
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) en Amazon Elastic Compute Cloud (Amazon) EC2
+ Acceda desde el nodo maestro del clúster de EMR a Amazon S3.
+ AWS Infraestructura Multi-AZ

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte la página [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ [Versiones 6.x y posteriores de Amazon EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## Arquitectura
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**Pila de tecnología de destino**
+ Clúster de Amazon EMR
+ Controlador de recuperación de aplicaciones de Amazon
+ Equilibrador de carga de aplicación
+ Bucket de Amazon S3
+ Puntos de conexión de puerta de enlace para Amazon S3

**Arquitectura de destino**

![\[Arquitectura para un mecanismo de recuperación automatizado con el Controlador de recuperación de aplicaciones.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


Esta arquitectura proporciona resiliencia a las aplicaciones mediante el uso de varias zonas de disponibilidad y la implementación de un mecanismo de recuperación automatizado a través del Controlador de recuperación de aplicaciones.

1. El equilibrador de carga de aplicación dirige el tráfico al entorno de Amazon EMR activo, que suele ser el clúster de EMR principal de la zona de disponibilidad principal.

1. El clúster de EMR activo procesa las solicitudes de las aplicaciones y se conecta a Amazon S3 a través de su punto de conexión de puerta de enlace de Amazon S3 dedicado para las operaciones de lectura y escritura.

1. Amazon S3 sirve como repositorio de datos central y se puede utilizar como punto de control o como almacenamiento compartido entre clústeres de EMR. Los clústeres de EMR mantienen la coherencia de datos cuando escriben directamente en Amazon S3 mediante el protocolo `s3://` y el [sistema de archivos de EMR (EMRFS)](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html). 

1. El Controlador de recuperación de aplicaciones supervisa continuamente el estado de la zona de disponibilidad principal y, cuando es necesario, administra automáticamente las operaciones de conmutación por error.

1. Si el Controlador de recuperación de aplicaciones detecta un error en el clúster de EMR principal, realiza las siguientes acciones:
   + Inicia el proceso de conmutación por error al clúster de EMR secundario en la zona de disponibilidad 2.
   + Actualiza las configuraciones de enrutamiento para dirigir el tráfico hacia el clúster secundario.

## Tools (Herramientas)
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**Servicios de AWS**
+ [Amazon Application Recovery Controller](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) le**** ayuda a gestionar y coordinar la recuperación de sus aplicaciones en todas Regiones de AWS las zonas de disponibilidad. Este servicio simplifica el proceso y mejora la fiabilidad de la recuperación de las aplicaciones al reducir los pasos manuales que necesitan las herramientas y los procesos tradicionales.
+ Un [equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) trabaja en la capa de aplicación, es decir, la séptima capa del modelo de interconexión de sistemas abiertos (OSI). Distribuye el tráfico de aplicaciones entrante entre varios destinos, como EC2 instancias, en varias zonas de disponibilidad. Esto aumenta la disponibilidad de la aplicación.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante los comandos de su consola de línea de comandos.
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) es una plataforma de macrodatos que proporciona procesamiento de datos, análisis interactivos y machine learning para marcos de código abierto como Apache Spark, Apache Hive y Presto.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ofrece una interfaz de servicios web simple que puede utilizar para almacenar y recuperar cualquier cantidad de datos, en cualquier momento y desde cualquier ubicación. Con este servicio, puede crear fácilmente aplicaciones que utilicen el almacenamiento nativo en la nube.
+ Los [puntos de enlace de Amazon S3](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) son puertas de enlace que se especifican en la tabla de enrutamiento para acceder a Amazon S3 desde la nube privada virtual (VPC) a través de la red. AWS 

## Prácticas recomendadas
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ Siga las [prácticas recomendadas de AWS en materia de seguridad, identidad y conformidad](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all) para garantizar una arquitectura sólida y segura.
+ Ajuste la infraestructura al [Marco de AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/).
+ Utilice Concesiones de acceso a Amazon S3 para administrar el acceso desde su clúster de EMR basado en Spark a Amazon S3. Para obtener más información, consulte la entrada en el blog [Use Amazon EMR with S3 Access Grants to Scale Spark access to Amazon S3](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/).
+ [Mejore el rendimiento de Spark con Amazon S3](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html).

## Epics
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie sesión en Consola de administración de AWS. | Inicie sesión en la [Consola de administración de AWS](https://console.aws.amazon.com/) como usuario de IAM. Para obtener instrucciones, consulte la [documentación de AWS](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html). | AWS DevOps | 
| Configure el AWS CLI. **** | Instálelo AWS CLI o actualícelo a la última versión para poder interactuar con Servicios de AWS él Consola de administración de AWS. Para obtener instrucciones, consulte la [documentación de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | AWS DevOps | 

### Implementación de una aplicación de Spark en su clúster de EMR
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un bucket de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Cree un clúster de EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Configure los ajustes de seguridad para el clúster de EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Conéctese al clúster de EMR. | Conéctese al nodo maestro del clúster de EMR a través de SSH mediante el par de claves proporcionado.Asegúrese de que el archivo del par de claves se encuentre en el mismo directorio que la aplicación.Ejecute los siguientes comandos para configurar los permisos correctos para el par de claves y establecer la conexión SSH:<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| Implemente la aplicación de Spark. | Tras establecer la conexión SSH, estará en la consola de Hadoop.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Supervise la aplicación de Spark. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

### Cambio del tráfico a otra zona de disponibilidad
<a name="shift-traffic-to-another-availability-zone"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un Equilibrador de carga de aplicación. | Configure el grupo de destino que enruta el tráfico entre los nodos maestros de Amazon EMR que se implementan en dos zonas de disponibilidad dentro de una Región de AWS.Para obtener instrucciones, consulte [Create a target group for your Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) en la documentación de Elastic Load Balancing. | AWS DevOps | 
| Configure el cambio de zona en el Controlador de recuperación de aplicaciones. | En este paso, usará la [característica de cambio de zona](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html) del Controlador de recuperación de aplicaciones para cambiar el tráfico a otra zona de disponibilidad.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html)Para utilizarlos AWS CLI, consulte los [ejemplos de uso del AWS CLI cambio zonal](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html) en la documentación de Application Recovery Controller. | AWS DevOps | 
| Verifique la configuración y el progreso del cambio de zona. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

## Recursos relacionados
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI comandos:
  + [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [Configuring Amazon EMR cluster instance types and best practices for Spot instances](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html) (documentación de Amazon EMR)
+ [Prácticas recomendadas de seguridad en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentación de IAM)
+ [Utilizar perfiles de instancia](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) (documentación de IAM)
+ [Use zonal shift and zonal autoshift to recovery applications in ARC](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html) (documentación del Controlador de recuperación de aplicaciones)

# Gestione blue/green las implementaciones de microservicios en varias cuentas y regiones mediante los servicios de código de AWS y las claves multirregionales de AWS KMS
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu y Anand Krishna Varanasi, Amazon Web Services*

## Resumen
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Este patrón describe cómo implementar una aplicación de microservicios global desde una cuenta central de AWS a varias cuentas de carga de trabajo y regiones de acuerdo con una estrategia de blue/green implementación. El patrón es compatible con lo siguiente:
+ El software se desarrolla en una cuenta central, mientras que las cargas de trabajo y las aplicaciones se distribuyen en varias cuentas y regiones de AWS.
+ Se utiliza una única clave multirregional del Sistema de administración de claves de AWS (AWS KMS) para el cifrado y el descifrado a fin de permitir la recuperación de desastres.
+ La clave KMS es específica de cada región y debe mantenerse o crearse en tres regiones diferentes para los artefactos del proyecto. Una clave KMS multirregional facilita poder conservar el mismo ID de clave en todas las regiones.
+ El modelo de ramificación del flujo de trabajo de Git se implementa con dos ramas (de desarrollo y principal) y el código se fusiona mediante solicitudes de extracción (PRs). La función de AWS Lambda que se implementa desde esta pila crea una PR desde la rama de desarrollo hacia la rama principal. La fusión de PR con la rama principal inicia una CodePipeline canalización de AWS, que organiza el flujo de integración y entrega continuas (CI/CD) y despliega las pilas en todas las cuentas.

Este patrón proporciona un ejemplo de configuración de infraestructura como código (IaC) mediante CloudFormation pilas de AWS para demostrar este caso de uso. La blue/green implementación de microservicios se implementa mediante AWS CodeDeploy.

## Requisitos previos y limitaciones
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**Requisitos previos **
+ Cuatro cuentas de AWS activas:
  + Una cuenta de herramientas para administrar la canalización de código y mantener el CodeCommit repositorio de AWS.
  + Tres cuentas de carga de trabajo (de prueba) para implementar la carga de trabajo de los microservicios.
+ Este patrón utiliza las siguientes regiones. Si desea utilizar otras regiones, debe realizar las modificaciones adecuadas en las pilas multirregionales de AWS CodeDeploy y AWS KMS.
  + Cuenta Tools (AWS CodeCommit): `ap-south-1`
  + Cuenta de carga de trabajo (de prueba) 1: `ap-south-1`
  + Cuenta de carga de trabajo (de prueba) 2: `eu-central-1`
  + Cuenta de carga de trabajo (de prueba) 3: `us-east-1`
+ Tres buckets de Amazon Simple Storage Service (Amazon S3) para las regiones de implementación de cada cuenta de carga de trabajo. (Se denominan `S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` y `S3BUCKETNAMETESTACCOUNT3 ` más adelante en este patrón).

  A modo de ejemplo, se pueden crear estos buckets en cuentas y regiones específicas con nombres de bucket únicos de la siguiente manera (reemplazar *xxxx* por un número aleatorio):

  ```
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
  ```

**Limitaciones**

El patrón utiliza AWS CodeBuild y otros archivos de configuración para implementar un microservicio de muestra. Si tiene un tipo de carga de trabajo diferente (por ejemplo, sin servidor), debe actualizar todas las configuraciones pertinentes.

## Arquitectura
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Pila de tecnología de destino**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Arquitectura de destino**

![\[Arquitectura de destino para implementar microservicios en varias cuentas y regiones\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automatización y escala**

La configuración se automatiza mediante plantillas de CloudFormation pila de AWS (IaC). Se puede escalar fácilmente para varios entornos y cuentas.

## Tools (Herramientas)
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Servicios de AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatiza las implementaciones en Amazon Elastic Compute Cloud (Amazon EC2) o en instancias locales, funciones de AWS Lambda o servicios de Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) es un servicio de administración de contenedores escalable y rápido que ayuda a ejecutar, detener y administrar contenedores en un clúster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) facilita poder crear y controlar claves criptográficas para proteger los datos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Herramientas adicionales**
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto que funciona con el CodeCommit repositorio de AWS.
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización del sistema operativo para entregar software en contenedores. Este patrón utiliza Docker para crear y probar imágenes de contenedores de forma local.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) y [cfn-nag](https://github.com/stelligent/cfn_nag) son herramientas de código abierto que le ayudan a revisar CloudFormation las pilas para detectar cualquier error o problema de seguridad.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de despliegues GitHub [globales Blue/Green ](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) en varias regiones y cuentas.

## Epics
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

### Configurar las variables de entorno
<a name="set-up-environment-variables"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Exporte las variables de entorno para el despliegue de la CloudFormation pila. | Defina las variables de entorno que se utilizarán como entrada en las CloudFormation pilas más adelante en este patrón.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package e implemente las CloudFormation pilas para la infraestructura
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Clone el [repositorio de muestras](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) en un nuevo repositorio de su lugar de trabajo:<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | AWS DevOps | 
| Empaquete los recursos de Cloudformation. | En este paso, empaqueta los artefactos locales a los que hacen referencia las CloudFormation plantillas para crear los recursos de infraestructura necesarios para servicios como Amazon Virtual Private Cloud (Amazon VPC) y Application Load Balancer.Las plantillas están disponibles en la carpeta `Infra` del repositorio de código.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Valide las plantillas de paquetes. | Valide las plantillas de paquetes:<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Implemente los archivos del paquete en las cuentas de carga de trabajo, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Insertar una imagen de muestra y escalar Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pase una imagen de muestra a un repositorio de Amazon ECR. | Pase una imagen de muestra (NGINX) al repositorio Amazon Elastic Container Registry (Amazon ECR) denominado `web` (tal y como se establece en los parámetros). Puede personalizar la imagen según sea necesario.Para iniciar sesión y configurar las credenciales para enviar una imagen a Amazon ECR, siga las instrucciones de la documentación de [Amazon ECR.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)Los comandos son:<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Escale Amazon ECS y verifique el acceso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Configurar los servicios y recursos de código
<a name="set-up-code-services-and-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un CodeCommit repositorio en la cuenta de herramientas. | Cree un CodeCommit repositorio en la cuenta de herramientas mediante la `codecommit.yaml` plantilla, que se encuentra en la `code` carpeta del GitHub repositorio. Debe crear este repositorio solo en la única región en la que planea desarrollar el código.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Cree un bucket de S3 para gestionar los artefactos generados por CodePipeline. | Cree un depósito de S3 para gestionar los artefactos generados CodePipeline mediante la `pre-reqs-bucket.yaml` plantilla, que se encuentra en la `code` carpeta del GitHub repositorio. Las pilas se deben implementar en las tres regiones y cuentas de carga de trabajo (prueba) y de herramientas.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Configure una clave KMS multirregional. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configure el CodeBuild proyecto en la cuenta de herramientas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configúrelo CodeDeploy en cuentas de carga de trabajo. | Utilice la `codedeploy.yaml` plantilla de la `code` carpeta del GitHub repositorio para configurar las tres cuentas CodeDeploy de carga de trabajo. El resultado de `mainInfraStack` incluye los nombres de recursos de Amazon (ARNs) del clúster de Amazon ECS y el listener Application Load Balancer.Los valores de las pilas de infraestructura ya se han exportado, por lo que las plantillas de pila los CodeDeploy importan.<pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Configúrelo CodePipeline en la cuenta de herramientas
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un proyecto de código en la cuenta de herramientas. | En la cuenta de herramientas, ejecute el comando:<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Proporcione acceso CodePipeline y CodeBuild funciones en la política de claves de AWS KMS y en la política de bucket de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Llamar y probar el proyecto
<a name="call-and-test-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envía los cambios al CodeCommit repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie todos los recursos implementados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Resolución de problemas
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los cambios realizados en el repositorio no se están implementando. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Recursos relacionados
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Insertar una imagen de Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentación de Amazon ECR)
+ [Conectarse a un CodeCommit repositorio](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) de AWS ( CodeCommit documentación de AWS)
+ [Solución de problemas de AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) ( CodeBuild documentación de AWS)

# Supervise los repositorios de Amazon ECR en busca de permisos comodín mediante AWS y AWS Config CloudFormation
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config"></a>

*Vikrant Telkar, Wassim Benhallam y Sajid Momin, Amazon Web Services*

## Resumen
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-summary"></a>

En la nube de Amazon Web Services (AWS), Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedores administrado que admite repositorios privados con permisos basados en recursos mediante AWS Identity and Access Management (IAM).

IAM admite el comodín “`*`” en los atributos tanto de recurso como de acción, lo que facilita la selección automática de varios elementos coincidentes. En su entorno de pruebas, puede permitir que todos los usuarios autenticados de AWS accedan a un repositorio de Amazon ECR utilizando el [permiso comodín](https://docs.aws.amazon.com/lambda/latest/operatorguide/wildcard-permissions-iam.html) `ecr:*` en un elemento de entidad principal de la [declaración de política del repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html). El permiso comodín `ecr:*` puede resultar útil a la hora de desarrollar y realizar pruebas en cuentas de desarrollo que no pueden acceder a sus datos de producción.

Sin embargo, debe asegurarse de que el permiso comodín `ecr:*` no se utilice en sus entornos de producción, ya que puede provocar graves vulnerabilidades de seguridad. El enfoque de este patrón le ayuda a identificar los repositorios de Amazon ECR que contienen el permiso comodín `ecr:*` en las declaraciones de política de repositorios.   El patrón proporciona los pasos y una CloudFormation plantilla de AWS para crear una regla personalizada en AWS Config. A continuación, una función de AWS Lambda supervisa las declaraciones de política del repositorio de Amazon ECR para detectar los permisos comodín `ecr:*`. Si encuentra declaraciones de política de repositorios no conformes, Lambda notifica a AWS Config que envíe un evento a EventBridge Amazon y, a continuación, inicia un tema del EventBridge Amazon Simple Notification Service (Amazon SNS). El tema SNS le notifica por correo electrónico sobre las declaraciones no conformes con la política de repositorios.

## Requisitos previos y limitaciones
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada. Para obtener más información, consulte [Instalar, actualizar y desinstalar la CLI de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la documentación de la CLI de AWS.
+ Un repositorio de Amazon ECR existente con una declaración de política adjunta, instalado y configurado en su entorno de pruebas. Para obtener más información al respecto, consulte [Creación de un repositorio privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) y [Configuración de una declaración de política de repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) en la documentación de Amazon ECR.
+ AWS Config, configurado en la región de AWS que prefiera. Para obtener más información al respecto, consulte [Introducción a AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) en la documentación de AWS Config.
+ El archivo `aws-config-cloudformation.template` (adjunto), descargado en su equipo local.

 

**Limitaciones**
+ La solución de este patrón es regional y sus recursos se deben crear en la misma región. 

## Arquitectura
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-architecture"></a>

El siguiente diagrama muestra cómo AWS Config evalúa las declaraciones de política de repositorios de Amazon ECR. 

![\[AWS Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/images/49bbf14b-0a18-4d4a-86ab-162d37708e01.png)


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

1. AWS Config inicia una regla personalizada. 

1. La regla personalizada invoca una función de Lambda para evaluar el cumplimiento de las declaraciones de política del repositorio de Amazon ECR. A continuación, la función de Lambda identifica las declaraciones no conformes con la política del repositorio.

1. La función de Lambda envía el estado de no conformidad a AWS Config.

1. AWS Config envía un evento a EventBridge.

1. EventBridge publica las notificaciones de incumplimiento en un tema de SNS.

1. Amazon SNS le envía una alerta por correo electrónico a usted o a un usuario autorizado.

**Automatizar y escalar**

La solución de este patrón puede supervisar cualquier número de declaraciones de política del repositorio de Amazon ECR, pero todos los recursos que desee evaluar deben ser creados en la misma región.

## Tools (Herramientas)
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS le CloudFormation ayuda a modelar y configurar sus recursos de AWS, a aprovisionarlos de forma rápida y coherente y a gestionarlos durante todo su ciclo de vida. Facilita poder usar una plantilla para describir los recursos y sus dependencias, y lanzarlos y configurarlos juntos como una pila, en lugar de administrarlos de forma individual. Puede administrar y aprovisionar pilas en varias cuentas y regiones de AWS.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html): AWS Config proporciona una visión detallada de la configuración de los recursos de AWS de su cuenta de AWS. Esto incluye cómo se relacionan los recursos entre sí y cómo se han configurado en el pasado, para que pueda ver cómo las configuraciones y las relaciones cambian a lo largo del tiempo.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html):** **** ** Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado por AWS que es seguro, escalable y fiable. Amazon ECR admite repositorios privados con permisos basados en recursos mediante IAM.                                 
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html): Amazon EventBridge es un servicio de bus de eventos sin servidor que puede utilizar para conectar sus aplicaciones con datos de diversas fuentes. EventBridge ofrece un flujo de datos en tiempo real desde sus aplicaciones, aplicaciones de software como servicio (SaaS) y servicios de AWS a objetivos como las funciones de AWS Lambda, los puntos de enlace de invocación HTTP que utilizan destinos de API o los buses de eventos de otras cuentas.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): AWS Lambda es un servicio de computación que permite ejecutar código sin aprovisionar ni administrar servidores. Lambda ejecuta su código solo cuando es necesario y escala de manera automática, desde unas pocas solicitudes por día hasta miles por segundo. Solo pagará por el tiempo de computación que consuma, no se aplican cargos cuando el código no se está ejecutando.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): Amazon Simple Notification Service (Amazon SNS) coordina y gestiona la entrega o el envío de mensajes entre publicadores y clientes, incluyendo los servidores web y las direcciones de correo electrónico. Los suscriptores reciben todos los mensajes publicados de los temas a los que están suscritos y todos los suscriptores de un tema reciben los mismos mensajes. 

**Código**

El código de este patrón está disponible en el archivo `aws-config-cloudformation.template` (adjunto).

## Epics
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-epics"></a>

### Cree la CloudFormation pila de AWS
<a name="create-the-aws-cloudformation-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la CloudFormation pila de AWS. | Cree una CloudFormation pila de AWS ejecutando el siguiente comando en la CLI de AWS:<pre>$ aws cloudformation create-stack --stack-name=AWSConfigECR \<br />    --template-body  file://aws-config-cloudformation.template \<br />    --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \<br />    --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Probar la regla personalizada de AWS Config
<a name="test-the-aws-config-custom-rule"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la regla personalizada de AWS Config. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.html) | AWS DevOps | 

## Conexiones
<a name="attachments-01bbf5f8-27aa-4c64-9a03-7fcccc0955b8"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/attachments/attachment.zip)

# Optimice las implementaciones sin servidor con varias cuentas mediante los flujos de trabajo y Actions AWS CDK GitHub
<a name="optimize-multi-account-serverless-deployments"></a>

*Sarat Chandra Pothula y VAMSI KRISHNA SUNKAVALLI, Amazon Web Services*

## Resumen
<a name="optimize-multi-account-serverless-deployments-summary"></a>

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
<a name="optimize-multi-account-serverless-deployments-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ AWS Identity and Access Management Existen [funciones y permisos](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html) (IAM) para el proceso de implementación. Esto incluye permisos para acceder a los repositorios de Amazon Elastic Container Registry (Amazon ECR), AWS Lambda crear funciones y cualquier otro recurso necesario en el destino. Cuentas de AWS
+ AWS Command Line Interface [https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)
+ AWS Cloud Development Kit (AWS CDK) [https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)
+ Versión 1.22 o posterior de Go, [instalada](https://go.dev/doc/install).
+ La versión 24.0.6 o posterior de Docker [instalada](https://docs.docker.com/engine/install/)

**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\$1, 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
<a name="optimize-multi-account-serverless-deployments-architecture"></a>

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.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8d61917b-bd27-44fa-ae95-55358aaf8812/images/a4b36793-95c7-42f7-a92f-99b4722c9c64.png)


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.

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

1. 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.

1. 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.

1. 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. 

1. 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

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

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

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

1. 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.

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

1. 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. 

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

1. 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)
<a name="optimize-multi-account-serverless-deployments-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le 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)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) 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](https://www.docker.com/) 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](https://docs.github.com/en/actions/writing-workflows/quickstart) 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](https://go.dev/doc/install) 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-](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions).

## Prácticas recomendadas
<a name="optimize-multi-account-serverless-deployments-best-practices"></a>
+ **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 PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)utilí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
<a name="optimize-multi-account-serverless-deployments-epics"></a>

### Configuración de los entornos
<a name="set-up-the-environments"></a>


| Tarea | Descripción | Habilidades 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:<pre>aws ecr create-repository --repository-name sample-repo</pre>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:<pre>{<br />  "Version": "2008-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "LambdaECRImageRetrievalPolicy",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "lambda.amazonaws.com"<br />      },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />      "Condition": {<br />        "StringLike": {<br />          "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*"<br />        }<br />      }<br />    },<br />    {<br />      "Sid": "new statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<Target_Account_ID>:root"<br />        },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />    }<br />  ] <br />}</pre> | AWS DevOps | 
| Configure un rol para el rol GitHub de OIDC en la central. Cuenta de AWS | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 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](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) el siguiente comando AWS :<pre>cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy></pre> | 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Cada rol tiene permisos específicos adaptados a su finalidad, siguiendo el principio de privilegio mínimo. El nombre «`Target_Account_ID`y`Target_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.<pre>Target Account CDK Bootstrap Roles<br />arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Para actualizar la política de permisos del rol de OIDC en la central Cuenta de AWS, usa el siguiente código:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "sts:AssumeRole",<br />            "Resource": [<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>"<br />            ]<br />        }<br />    ]<br /> }<br /></pre> | AWS DevOps | 

### Compilación de la imagen de Docker
<a name="build-the-docker-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio del proyecto. | Para clonar el [GitHub repositorio](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions) de este patrón, ejecute el siguiente comando:<pre>git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git</pre> | AWS DevOps | 
| Vaya a la ruta de Dockerfile. | Para ir a la ruta de Dockerfile, ejecute el siguiente comando:<pre>cd lambda</pre> | 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:<pre>aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com</pre>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:<pre>docker build --platform linux/arm64 -t sample-app .</pre> | 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:<pre>docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre><pre>docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre>Revise los marcadores de posición `AWS_Account_ID`, `AWS_REGION`, `ECR_REPOSITORY` y `DOCKER_TAG` con su información. | AWS DevOps | 

### Implemente la AWS CDK aplicación
<a name="deploy-the-cdk-app"></a>


| Tarea | Descripción | Habilidades 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:<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth</pre>Revise los siguientes marcadores de posición con su información:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 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.<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never</pre> | AWS DevOps | 

### Automatice CI/CD el uso de GitHub flujos de trabajo
<a name="automate-ci-cd-using-github-actions-workflows"></a>


| Tarea | Descripción | Habilidades 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:<pre>git checkout -b <feature_branch><br />git add .<br />git commit -m "add your changes"<br />git push origin <feature_branch></pre>A continuación, se muestran algunos ejemplos de cambios:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)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
<a name="optimize-multi-account-serverless-deployments-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `AccessDenied`errores 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| 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
<a name="optimize-multi-account-serverless-deployments-resources"></a>

**Recursos de AWS**
+ [AWS Prácticas recomendadas para seguridad, identidad y conformidad](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [AWS CDK Taller](https://cdkworkshop.com/60-go.html)
+ [AWS Biblioteca de kits de Cloud Development](https://pkg.go.dev/github.com/aws/aws-cdk-go/awscdk/v2)
+ [Creación de una función de Lambda con una imagen de contenedor](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [Identity and Access Management para Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html)
+ [Working with the AWS CDK in Go](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html)

**Otros recursos**
+ [Configuración de OpenID Connect en Amazon Web Services (documentación](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)) GitHub 
+ [Documentación de Golang](https://golang.org/doc/)
+ Guía de [inicio rápido para GitHub realizar acciones (documentación](https://docs.github.com/en/actions/writing-workflows/quickstart)) GitHub 
+ [Reutilización de flujos de trabajo](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (documentación) GitHub 

# AWS Service Catalog Aprovisione productos en función de AWS CloudFormation plantillas mediante GitHub acciones
<a name="provision-aws-service-catalog-products-using-github-actions"></a>

*Ashish Bhatt y Ruchika Modi, Amazon Web Services*

## Resumen
<a name="provision-aws-service-catalog-products-using-github-actions-summary"></a>

Este patrón proporciona a las organizaciones un enfoque simplificado que utiliza [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)productos y carteras para aprovisionar de forma estandarizada y compatible con Servicios de AWS todos los equipos. [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ayuda a combinar los componentes esenciales de los productos y carteras de Service Catalog para aprovisionar la infraestructura de red base. Nube de AWS[Este patrón también promueve DevOps prácticas al integrar la infraestructura como código (IaC) en los flujos de trabajo de desarrollo automatizados mediante Actions. GitHub ](https://github.com/features/actions)

AWS Service Catalog permite a las organizaciones crear y gestionar servicios de TI aprobados AWS, lo que ofrece ventajas como la estandarización, el control centralizado, el aprovisionamiento de autoservicio y la gestión de costes. Al automatizar la implementación de las carteras y productos de Service Catalog mediante GitHub Actions, las empresas pueden hacer lo siguiente:
+ Lograr implementaciones consistentes y repetibles. 
+ Usar el control de versiones para la IaC. 
+ Integrar la administración de recursos en la nube con los flujos de trabajo de desarrollo existentes. 

Esta combinación optimiza las operaciones en la nube, refuerza la conformidad y acelera la prestación de los servicios aprobados a la par que reduce los errores manuales y mejora la eficiencia general.

## Requisitos previos y limitaciones
<a name="provision-aws-service-catalog-products-using-github-actions-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS 
+ Acceso al [GitHub repositorio](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ Comprensión básica de AWS CloudFormation y AWS Service Catalog
+ Un depósito de Amazon Simple Storage Service (Amazon S3) para alojar plantillas CloudFormation 
+ Un nombre de rol AWS Identity and Access Management (IAM) `github-actions` que se utiliza para la conectividad entre y GitHub AWS

**Limitaciones**
+ El código reutilizable de este patrón solo se ha probado con GitHub Actions.
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**

La solución de este patrón se creó mediante las siguientes acciones de [GitHub Marketplace](https://github.com/marketplace) y sus versiones respectivas:
+ `actions/checkout@v4`
+ `aws-actions/configure-aws-credentials@v2`
+ `aws-actions/aws-cloudformation-github-deploy@v1.2.0`

## Arquitectura
<a name="provision-aws-service-catalog-products-using-github-actions-architecture"></a>

En el siguiente diagrama se muestra la arquitectura para esta solución.

![\[Uso de GitHub Actions para aprovisionar productos de Service Catalog en función CloudFormation de plantillas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/49f82fa7-0c74-4581-bf92-95505dca264c/images/a13c7b41-534e-4a9e-bdca-2974fa40a49a.png)


1. Los administradores o los ingenieros de plataformas CloudFormation envían las plantillas estandarizadas a un GitHub repositorio, donde se guardan. El GitHub repositorio también contiene flujos de trabajo que automatizan el aprovisionamiento o el AWS Service Catalog uso GitHub de Actions.

1. GitHub Las acciones activan un flujo de trabajo que se conecta al Nube de AWS uso de un proveedor de OpenID Connect (OIDC) para aprovisionar Service Catalog.

1. Service Catalog contiene la cartera y los productos que los desarrolladores pueden utilizar directamente para aprovisionar AWS recursos estandarizados. Este patrón agrupa AWS recursos como nubes privadas virtuales (VPCs), subredes, pasarelas de Internet y NAT y tablas de enrutamiento.

1. Una vez que el desarrollador crea un producto de Service Catalog, Service Catalog lo convierte en AWS recursos estandarizados y preconfigurados. Como resultado, los desarrolladores ahorran tiempo porque no tienen que aprovisionar recursos individuales ni configurarlos manualmente.

## Tools (Herramientas)
<a name="provision-aws-service-catalog-products-using-github-actions-tools"></a>

**Servicios de AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le 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 mundo Cuentas de AWS . Regiones de AWS Se trata de un servicio de infraestructura como código (IaC) que se puede utilizar fácilmente como uno de los tipos de productos con AWS Service Catalog los que cuenta.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted.html)le ayuda a gestionar de forma centralizada el catálogo de servicios de TI aprobados. AWS 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.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Otros**
+ [GitHub Actions](https://docs.github.com/en/actions) es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con GitHub los repositorios. Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [service-catalog-with-github-actions](https://github.com/aws-samples/service-catalog-with-github-actions). El repositorio contiene los siguientes archivos de interés:
+ `github/workflows`:
  + `e2e-test.yaml`: este archivo llama a `workflow.yaml`, que es el [flujo de trabajo reutilizable](https://docs.github.com/en/actions/sharing-automations/reusing-workflows). Este flujo de trabajo se activa en cuanto hay una confirmación y una inserción en una rama.
  + `workflow.yaml`: este archivo contiene el flujo de trabajo reutilizable de esta solución; está configurado con `workflow_call` como desencadenador. Al tratarse de un flujo de trabajo reutilizable, `workflow.yaml` se puede invocar desde cualquier otro flujo de trabajo.
+ `templates`:
  + `servicecatalog-portfolio.yaml`— Esta CloudFormation plantilla incluye recursos que aprovisionan la cartera de Service Catalog y el producto Service Catalog. La plantilla contiene un conjunto de parámetros que se utilizan al aprovisionar la cartera y los productos de Service Catalog. Un parámetro acepta la URL de un archivo de Amazon S3 en la que se carga la plantilla `vpc.yaml`. Si bien este patrón incluye el `vpc.yaml` archivo para aprovisionar AWS los recursos, también puede utilizar la URL del archivo S3 del parámetro para la configuración.
  + `vpc.yaml`— Esta CloudFormation plantilla contiene AWS los recursos que se van a añadir al producto Service Catalog. AWS los recursos incluyen subredes VPCs, puertas de enlace de Internet, puertas de enlace NAT y tablas de enrutamiento. La `vpc.yaml` plantilla es un ejemplo de cómo puede utilizar cualquier CloudFormation plantilla con una plantilla de productos y portafolios de Service Catalog.

## Prácticas recomendadas
<a name="provision-aws-service-catalog-products-using-github-actions-best-practices"></a>
+ Consulte [las prácticas recomendadas de seguridad AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html) en la AWS Service Catalog documentación. 
+ Consulte [Refuerzo de la seguridad para GitHub las acciones](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions) en la GitHub documentación.

## Epics
<a name="provision-aws-service-catalog-products-using-github-actions-epics"></a>

### Configuración de la estación de trabajo local
<a name="set-up-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure Git en su estación de trabajo. | Para instalar y configurar Git en su estación de trabajo local, siga las instrucciones de [Getting Started – Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) en la documentación de Git. | Desarrollador de aplicaciones | 
| Clona el repositorio GitHub del proyecto. | Para clonar el repositorio GitHub del proyecto, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps ingeniero | 

### Configuración del proveedor de OIDC
<a name="set-up-the-oidc-provider"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure un proveedor de OIDC. | Cree un proveedor de OpenID Connect (OIDC) que permita a los flujos de trabajo de GitHub Actions acceder a los recursos sin necesidad de almacenar las AWS credenciales como secretos de larga duración. AWS GitHub Para obtener instrucciones, consulte [Configuración de OpenID Connect en Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) en la GitHub documentación.Una vez configurado un proveedor de OIDC, se actualizará la política de confianza del rol de IAM `github-actions`, mencionada anteriormente en [Requisitos previos](#provision-aws-service-catalog-products-using-github-actions-prereqs). | Administrador de AWS DevOps, AWS general | 

### Proceso de activación de GitHub Actions para implementar la cartera y los productos de Service Catalog
<a name="trigger-github-actions-pipeline-to-deploy-sc-portfolio-and-products"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualizar `e2e-test.yaml`. | El archivo `e2e-test.yaml` desencadena el flujo de trabajo reutilizable en `workflow.yaml`. Actualice y valide los valores de los siguientes parámetros de entrada en `e2e-test.yaml`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps ingeniero | 

### Validación de la implementación
<a name="validate-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide los recursos de Service Catalog. | Para validar los recursos de Service Catalog, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | AWS DevOps | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine la CloudFormation pila. | Para eliminar la CloudFormation pila, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html)Para obtener más información, consulte [Eliminar una pila de la CloudFormation consola](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) en la CloudFormation documentación | DevOps ingeniero, administrador de AWS | 

## Resolución de problemas
<a name="provision-aws-service-catalog-products-using-github-actions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `e2e-test``Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions``Did you forget to run actions/checkout before running your local action?` | Para asegurarse de que ha activado la configuración de repositorio correcta, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | 

## Recursos relacionados
<a name="provision-aws-service-catalog-products-using-github-actions-resources"></a>

**AWS documentación**
+ [Descripción general de Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)

**Otros recursos**
+ [Acerca de los eventos que desencadenan los flujos de trabajo](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#about-events-that-trigger-workflows) (GitHub documentación)
+ [Reutilización de flujos de trabajo](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (GitHub documentación)

## Información adicional
<a name="provision-aws-service-catalog-products-using-github-actions-additional"></a>

Para ver capturas de pantalla relacionadas con las [epopeyas](#provision-aws-service-catalog-products-using-github-actions-epics), ve a la carpeta **Imágenes** del repositorio de este patrón. GitHub Están disponibles las siguientes capturas de pantalla:
+ [AWS Service Catalog portafolio, sección de administración](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_portfolio.png)
+ [AWS Service Catalog producto, sección de administración](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product.png)
+ [AWS Service Catalog producto, User/Provisioning sección](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product_User.png)

# Aprovisionamiento de roles de IAM con privilegio mínimo mediante la implementación de una solución de máquina expendedora de roles
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution"></a>

*Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi y Chad Moon, Amazon Web Services*

## Resumen
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-summary"></a>

Los permisos excesivos en los roles de AWS Identity and Access Management (IAM) para las canalizaciones pueden suponer un riesgo innecesario para la organización. A veces, los desarrolladores conceden permisos amplios durante el desarrollo, pero se olvidan de limitarlos después de solucionar problemas con el código. Esto provoca un problema, pues puede que haya roles importantes sin necesidad empresarial y que posiblemente no haya revisado un ingeniero de seguridad.

Este patrón ofrece una solución a este problema: la máquina expendedora de roles (RVM). Mediante un modelo de implementación seguro y centralizado, el RVM demuestra cómo aprovisionar las funciones de IAM con menos privilegios para las canalizaciones de los repositorios individuales con un esfuerzo mínimo por parte de los desarrolladores. GitHub Como la RVM es una solución central, puede configurar sus equipos de seguridad como revisores necesarios para aprobar los cambios. Este enfoque permite al personal de seguridad rechazar las solicitudes de roles de canalizaciones con un exceso de permisos. 

La RVM obtiene el código de Terraform como entrada y genera roles de IAM listos para su uso como salida. Las entradas obligatorias son el Cuenta de AWS ID, el nombre del repositorio y la política de permisos. GitHub La RVM usa estas entradas para crear la política de confianza y la política de permisos del rol. La política de confianza resultante permite que el GitHub repositorio especificado asuma la función y la utilice para las operaciones de canalización.

La RVM usa un rol de IAM (configurado durante el arranque). Este rol tiene permisos para asumir un rol role-provisioning-role en cada cuenta de la organización. El rol se configura mediante AWS Control Tower Account Factory for Terraform (AFT) o AWS CloudFormation StackSets. Estas role-provisioning-roles son las funciones que realmente crean las funciones de canalización para los desarrolladores.

## Requisitos previos y limitaciones
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Una GitHub organización que se utiliza para implementar la infraestructura como código (IaC) mediante GitHub acciones. (*no GitHub Enterprise/Premium/Ultimate* son**** obligatorios).
+ Un AWS entorno con varias cuentas. No es necesario que este entorno forme parte de AWS Organizations.
+ Un mecanismo para implementar una función de IAM en todos Cuentas de AWS (por ejemplo, AFT o CloudFormation StackSets).
+ La versión 1.3 o posterior de Terraform [instalada y configurada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ [Instalación](https://github.com/hashicorp/terraform-provider-aws/releases) [y configuración de Terraform AWS Provider, versión 4 o posterior.](https://developer.hashicorp.com/terraform/language/providers/configuration)

**Limitaciones**
+ El código de este patrón es específico de GitHub Actions y Terraform. Sin embargo, los conceptos generales del patrón se pueden reutilizar en otros marcos de integración y entrega continuas (CI/CD).
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-architecture"></a>

En el siguiente diagrama, se ilustra el flujo de trabajo de este patrón.

![\[Flujo de trabajo para automatizar la creación y el despliegue de funciones de IAM mediante GitHub Actions.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/215c590e-0c84-411d-be6e-b1739f1e19d2/images/82fcdc9f-9576-4e7c-b7fe-b45046ba79d2.png)


El flujo de trabajo para el uso típico de la máquina expendedora de roles consta de los siguientes pasos:

1. Un desarrollador envía el código que contiene el código de Terraform para un rol de IAM recién solicitado al repositorio de RVM. GitHub Esta acción activa la canalización de acciones de RVM. GitHub 

1. La canalización utiliza una política de confianza de OpenID Connect (OIDC) para asumir el rol de la RVM.

1. Conforme se pone en marcha la canalización de la RVM, esta asume el rol de flujo de trabajo de la RVM en la cuenta en la que se aprovisiona el nuevo rol de IAM del desarrollador. (La función de flujo de trabajo de RVM se aprovisionó mediante AFT o.) CloudFormation StackSets

1. La RVM crea el rol de IAM del desarrollador con la confianza y los permisos adecuados, de modo que otras canalizaciones de la aplicación puedan asumir el rol.

1. Los desarrolladores de la aplicación pueden configurar las canalizaciones de la aplicación para que asuman este rol aprovisionado por RVM.

El rol creado incluye los permisos solicitados por el desarrollador y una política `ReadOnlyAccess`. El rol solo lo pueden asumir las canalizaciones que se ponen en marcha en la rama `main` del repositorio especificado por el desarrollador. Este enfoque permite garantizar que sea necesaria la protección y las revisiones de las ramas para poder utilizar el rol.

**Automatización y escala**

Los permisos con privilegio mínimo requieren prestar atención a los detalles de cada rol que se aprovisione. Este modelo reduce la complejidad necesaria para crear estos roles, lo que permite a los desarrolladores crear los roles que necesitan sin mucho aprendizaje o esfuerzo adicionales.

## Tools (Herramientas)
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-tools"></a>

**Servicios de AWS**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)es un servicio de administración de cuentas que le ayuda a consolidar múltiples cuentas Cuentas de AWS en una organización que usted crea y administra de forma centralizada.

**Otras herramientas**
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto. Incluye la posibilidad de crear una [cuenta de organización](https://docs.github.com/en/get-started/learning-about-github/types-of-github-accounts#organization-accounts).
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con GitHub los repositorios. Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que te ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

El código de este patrón está disponible en el repositorio. GitHub [role-vending-machine](https://github.com/aws-samples/role-vending-machine)

## Prácticas recomendadas
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-best-practices"></a>
+ **Haga que lo correcto sea fácil y que lo incorrecto sea difícil**: procure que hacer lo correcto sea sencillo. Si los desarrolladores tienen dificultades con el proceso de aprovisionamiento de la RVM, podrían intentar crear roles por otros medios, lo que socavaría la naturaleza central de la RVM. Asegúrese de que su equipo de seguridad proporcione una guía clara sobre cómo utilizar la RVM de forma segura y eficaz.

  También debería impedir que los desarrolladores hagan cosas incorrectas. Usa las políticas de control de servicios (SCPs) o los límites de permisos para restringir qué roles pueden crear otros roles. Este enfoque puede ser útil para que solo la RVM y otros orígenes fiables puedan crear roles.
+ **Brinde buenos ejemplos**: es inevitable que algunos desarrolladores usen los roles existentes en el repositorio de la RVM como plantillas informales para conceder permisos a sus nuevos roles. Si tiene ejemplos de privilegio mínimo para los desarrolladores, puede reducir el riesgo de que soliciten permisos amplios y con muchos caracteres comodín. Si empieza con roles con muchos permisos y muchos comodines, el problema puede multiplicarse con el paso del tiempo.
+ **Use condiciones y convenciones de nomenclatura**: aunque un desarrollador no conozca todos los nombres de los recursos que va a crear su aplicación, debería limitar los permisos de los roles mediante una convención de nomenclatura. Por ejemplo, si el desarrollador está creando buckets de Amazon S3, el valor de la clave deñ recurso puede ser parecido a `arn:aws:s3:::myorg-myapp-dev-*` para que el rol no tenga permisos más allá de los buckets que coincidan con ese nombre. Implementar una convención de nomenclatura mediante una política de IAM tiene la ventaja adicional de mejorar el cumplimiento de la convención de nomenclatura. Esta mejora se debe a que no se permitirá la creación de recursos que no coincidan con dicha convención.
+ **Exija revisiones mediante solicitudes de extracción (PR)**: el valor de la solución de RVM es que crea una ubicación central donde se pueden revisar los nuevos roles de canalización. Sin embargo, este diseño solo es útil si hay barreras de protección que permitan garantizar que la RVM reciba código seguro y de alta calidad. Proteja las ramas que se utilizan para implementar código (por ejemplo, `main`) de las inserciones directas y solicite la aprobación de cualquier solicitud para fusionarlas.
+ **Configure los roles de solo lectura**: de forma predeterminada, la RVM aprovisiona una versión `readonly` de cada rol solicitado. Esta función se puede usar en CI/CD canalizaciones que no escriben datos, como un flujo de trabajo de `terraform plan` canalización. Este enfoque ayuda a evitar cambios no deseados si un flujo de trabajo de solo lectura no funciona correctamente.

  De forma predeterminada, la `ReadOnlyAccess` política AWS administrada está asociada tanto a las funciones de solo lectura como a las funciones de lectura y escritura. Esta política reduce la necesidad de iteración a la hora de determinar los permisos necesarios, pero puede resultar demasiado permisiva para algunas organizaciones. Si lo desea, puede eliminar la política del código de Terraform.
+ **Otorgue permisos mínimos**: siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-epics"></a>

### Preparación del entorno
<a name="prepare-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copie el repositorio de muestras en su organización. GitHub  | [Clona](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) el repositorio de este patrón o [bifurca](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) este repositorio a tu GitHub organización para que puedas adaptarlo a tus necesidades.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingeniero | 
| Determine el Cuenta de AWS para el RVM. | Determine qué implementación de infraestructura usar Cuenta de AWS para la RVM. No utilice la cuenta de administración ni la cuenta raíz. | Arquitecto de la nube | 
| (Opcional) Permita que se creen las canalizaciones de la organización. PRs | Este paso solo es necesario si quieres permitir la creación PRs del `generate_providers_and_account_vars` flujo de trabajo.Para permitir la creación de las canalizaciones de tu organización PRs, sigue estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Para obtener más información, consulte [Administrar la configuración de GitHub las acciones de un repositorio](https://docs.github.com/en/enterprise-server@3.10/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests) en la GitHub documentación. | DevOps ingeniero | 
| Otorgue permisos de solo lectura a la cuenta de la RVM. | Cree una política de delegación en su cuenta de administración que conceda permisos de solo lectura a la cuenta de la RVM. Esto permite que los GitHub flujos de trabajo de RVM obtengan dinámicamente una lista de las cuentas de su AWS organización cuando se ejecute el `generate_providers_and_account_vars.py` script. Utilice el siguiente código y `<YOUR RVM Account ID>` sustitúyalo por el Cuenta de AWS ID que seleccionó en el paso 2:<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "Statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<YOUR RVM Account ID>:root"<br />      },<br />      "Action": [<br />        "organizations:ListAccounts",<br />        "organizations:DescribeOrganization",<br />        "organizations:DescribeOrganizationalUnit",<br />        "organizations:ListRoots",<br />        "organizations:ListAWSServiceAccessForOrganization",<br />        "organizations:ListDelegatedAdministrators"<br />      ],<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre> | Administrador de la nube | 
| Actualice los valores predeterminados del repositorio de ejemplo. | Para configurar el RVM para que funcione en su entorno específico Región de AWS, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingeniero | 

### Inicialización de la infraestructura
<a name="initialize-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie el repositorio de la RVM. | Este paso es necesario para crear los roles de IAM y la política de confianza de OIDC que utiliza la propia canalización de la RVM, de modo que pueda empezar a operar y ofrecer otros roles.En la cuenta de la RVM, ponga en marcha manualmente un comando `terraform apply` desde el directorio `scripts/bootstrap`. Proporcione los valores necesarios en función de la documentación de las variables. | DevOps ingeniero | 

### Configuración de operaciones
<a name="configure-operations"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente los roles `github-workflow-rvm` y `github-workflow-rvm-readonly` en todas las cuentas. | Elija un método de implementación que se adapte a las prácticas de su organización, como AFT o StackSets. Utilice ese método para implementar las dos roles de IAM del archivo `scripts/assumed_role/main.tf` (nombres predeterminados `github-workflow-rvm` y `github-workflow-rvm-readonly`) en cada cuenta en la que desee que la RVM pueda crear roles de canalización.Estos roles de IAM tienen políticas de confianza que permiten que el rol de asunción de roles de la cuenta de la RVM (o su `readonly` equivalente) los asuma. Los roles también tienen políticas de permisos de IAM que les permiten leer roles y escribir (a menos que usen el rol `readonly`) en ellos, siempre que coincidan con `github-workflow-role-*`. | Administrador de AWS | 
| Ponga en marcha el flujo de trabajo `generate_providers_and_account_vars`. | Para configurar su RVM de forma que esté lista para crear roles de canalización, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Una vez finalizado el flujo de trabajo, la RVM está listo para hacer lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| He creado un rol mediante el RVM, pero GitHub no puedo asumirlo. | Compruebe que el nombre del GitHub repositorio coincide con el nombre proporcionado al `github_workflow_roles` módulo. El alcance de los roles solo permite que un único repositorio pueda asumirlos.Del mismo modo, compruebe que la rama utilizada en la GitHub canalización coincida con el nombre de la rama proporcionada al `github_workflow_roles` módulo. Por lo general, los roles creados por la RVM con permisos de escritura solo los pueden usar los flujos de trabajo relacionados con la rama `main` (es decir, las implementaciones provenientes de `main`). | 
| Mi rol de solo lectura no puede poner en marcha su canalización porque carece de permisos para leer un recurso específico. | Si bien la `ReadOnlyAccess` política proporciona amplios permisos de solo lectura, no incluye algunas acciones de lectura (por ejemplo, determinadas AWS Security Hub CSPM acciones).Puede agregar permisos de acciones específicas mediante el parámetro `inline_policy_readonly` del módulo `github-workflow-roles`. | 

## Recursos relacionados
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-resources"></a>
+ [Prácticas recomendadas de uso AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-bestpractices.html)
+ [Organizar su AWS entorno mediante varias cuentas](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html)
+ [Descripción general de AWS Control Tower Account Factory para Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)
+ [Mejores prácticas en materia de políticas](https://docs.aws.amazon.com/codepipeline/latest/userguide/security_iam_service-with-iam-policy-best-practices.html) 

## Información adicional
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-additional"></a>

**Uso de GitHub entornos**

GitHub Los entornos son un enfoque alternativo a las restricciones basadas en las sucursales para el acceso a los roles. Si prefiere utilizar un GitHub entorno, a continuación se muestra un ejemplo de la sintaxis de una condición adicional de la política de confianza de IAM. Esta sintaxis especifica que el rol solo se puede usar cuando la GitHub acción se ejecuta en el `Production` entorno.

```
"StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production"
}
```

La sintaxis de ejemplo usa los siguientes valores de marcador de posición:
+ `octo-org`es el nombre GitHub de la organización.
+ `octo-repo` es el nombre del repositorio.
+ `Production`es el nombre del GitHub entorno específico.

# Publica CloudWatch las métricas de Amazon en un archivo CSV
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Resumen
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-summary"></a>

Este patrón utiliza un script de Python para recuperar CloudWatch las métricas de Amazon y convertir la información de las métricas en un archivo de valores separados por comas (CSV) para mejorar la legibilidad. El script toma como argumento obligatorio el servicio de AWS cuyas métricas deben recuperarse. Puede especificar la región de AWS y el perfil de credenciales de AWS como argumentos opcionales. Si no especifica esos argumentos, el script utilizará la región y el perfil predeterminados configurados para la estación de trabajo en la que se ejecuta el script. Una vez ejecutado, el script genera y almacena un archivo CSV en el mismo directorio.

Consulte la sección *Adjuntos* para ver el script y los archivos asociados que se proporcionan con este patrón.

## Requisitos previos y limitaciones
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-prereqs"></a>

**Requisitos previos **
+ Python 3.x
+ Interfaz de la línea de comandos de AWS (AWS CLI)

**Limitaciones**

El script en estos momentos admite los siguientes servicios de AWS:
+ AWS Lambda
+ Amazon Elastic Compute Cloud (Amazon EC2)
  + De forma predeterminada, el script no recopila métricas de volúmenes de Amazon Elastic Block Store (Amazon EBS). Para recopilar las métricas de Amazon EBS, debe modificar el archivo adjunto `metrics.yaml`.
+ Amazon Relational Database Service (Amazon RDS)
  + Sin embargo, el script no es compatible con Amazon Aurora.
+ Equilibrador de carga de aplicación
+ Equilibrador de carga de red
+ Amazon API Gateway

## Tools (Herramientas)
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) es un servicio de supervisión creado para DevOps ingenieros, desarrolladores, ingenieros de confiabilidad de sitios (SREs) y administradores de TI. CloudWatch proporciona datos e información procesable para ayudarlo a monitorear sus aplicaciones, responder a los cambios de rendimiento en todo el sistema, optimizar la utilización de los recursos y obtener una visión unificada del estado operativo. CloudWatch recopila datos operativos y de supervisión en forma de registros, métricas y eventos, y proporciona una vista unificada de los recursos, las aplicaciones y los servicios de AWS que se ejecutan en AWS y en servidores locales.

## Epics
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-epics"></a>

### Instalar y configurar los requisitos previos
<a name="install-and-configure-the-prerequisites"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar los requisitos previos. | Use el siguiente comando:<pre>$ pip3 install -r requirements.txt</pre> | Desarrollador | 
| Configure la CLI de AWS. | Use el siguiente comando: <pre>$ aws configure</pre> | Desarrollador | 

### Configuración del script de Python
<a name="configure-the-python-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Abra el script. | Para cambiar la configuración predeterminada del script, abra `metrics.yaml`. | Desarrollador | 
| Defina el período del script. | Este es el período de tiempo para realizar la búsqueda. El período predeterminado es de 5 minutos (300 segundos). Puede cambiar el período de tiempo, pero tenga en cuenta las siguientes limitaciones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/publish-amazon-cloudwatch-metrics-to-a-csv-file.html)De lo contrario, la operación de la API no devolverá ningún punto de datos. | Desarrollador | 
| Defina las horas del script. | Este valor especifica cuántas horas de métricas desea obtener. El valor predeterminado es una hora. Para recuperar métricas de varios días, proporcione el valor en horas. Por ejemplo, para 2 días, especifique 48. | Desarrollador | 
| Cambie los valores de las estadísticas del script.  | (Opcional) El valor de las estadísticas globales es `Average`, que se utiliza al buscar métricas que no tienen asignado un valor estadístico específico. El script admite los valores estadísticos `Maximum`, `SampleCount` y `Sum`. | Desarrollador | 

### Ejecute el script de Python
<a name="run-the-python-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute el script. | Utilice el siguiente comando: <pre>$ python3 cwreport.py <service> </pre>Para ver una lista de los valores del servicio y los `region ` opcionales y parámetros `profile `, ejecute el siguiente comando:<pre> $ python3 cwreport.py -h</pre>Para más información sobre los parámetros opcionales, consulte la sección *Información adicional*. | Desarrollador | 

## Recursos relacionados
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-resources"></a>
+ [Configuración de la CLI de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Uso de CloudWatch las métricas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)
+ [ CloudWatch Documentación de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [EC2 CloudWatch Métricas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)
+ [Métricas de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/operatorguide/logging-metrics.html)
+ [Métricas de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html#rds-cw-metrics-instance)
+ [Métricas del Equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)
+ [Métricas del Equilibrador de carga de red](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html)
+ [Métricas de Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-metrics-and-dimensions.html)

## Información adicional
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-additional"></a>

**Uso de scripts**

```
$ python3 cwreport.py -h
```

**Ejemplo de sintaxis**

```
python3 cwreport.py <service> <--region=Optional Region> <--profile=Optional credential profile>
```

**Parámetros**
+ **servicio (obligatorio)**: el servicio en el que desea ejecutar el script. Actualmente, el script es compatible con los siguientes servicios: AWS Lambda, Amazon, EC2 Amazon RDS, Application Load Balancer, Network Load Balancer y API Gateway.
+ **región (opcional)**: la región de AWS de la que se van a obtener las métricas. La región predeterminada es `ap-southeast-1`.
+ **perfil (opcional)**: el perfil con nombre de la CLI de AWS que se va a utilizar. Si no se especifica este parámetro, se utiliza el perfil de credenciales configurado por defecto.

**Ejemplos**
+ Para usar la región predeterminada `ap-southeast-1` y las credenciales configuradas por defecto para obtener las EC2 métricas de Amazon: `$ python3 cwreport.py ec2`
+ Para especificar una región y obtener las métricas de API Gateway: `$ python3 cwreport.py apigateway --region us-east-1`
+ Para especificar un perfil de AWS y obtener las EC2 métricas de Amazon: `$ python3 cwreport.py ec2 --profile testprofile`
+ Para especificar la región y el perfil para obtener las EC2 métricas de Amazon: `$ python3 cwreport.py ec2 --region us-east-1 --profile testprofile`

## Conexiones
<a name="attachments-0a915a9d-2eef-4da1-8283-3cf4a115b3b2"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/0a915a9d-2eef-4da1-8283-3cf4a115b3b2/attachments/attachment.zip)

# Elimine EC2 las entradas de Amazon Cuentas de AWS de un lado a otro AWS Managed Microsoft AD mediante AWS Lambda la automatización
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad y Tamilselvan P, Amazon Web Services*

## Resumen
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) es una herramienta de secuencias de comandos de Microsoft que administra la información de dominio y las interacciones de los usuarios con los servicios de red. Los proveedores de servicios gestionados (MSPs) lo utilizan ampliamente para gestionar las credenciales de los empleados y los permisos de acceso. Como los atacantes de AD pueden usar cuentas inactivas para intentar hackear una organización, es importante encontrar las cuentas inactivas y desactivarlas siguiendo un programa de mantenimiento rutinario. Con AWS Directory Service for Microsoft Active Directory, puede ejecutar Microsoft Active Directory como un servicio gestionado. Este patrón puede ayudarle a configurar la AWS Lambda automatización para encontrar y eliminar rápidamente las cuentas inactivas.

Si los siguientes escenarios se aplican a su organización, este patrón puede ser útil para lo siguiente:
+ **Administración centralizada de AD**: si su organización tiene varias Cuentas de AWS, cada una con su propia implementación de AD, puede resultar difícil administrar las cuentas de usuario y los permisos de acceso de manera uniforme en todas las cuentas. Con una solución de limpieza de AD multicuenta, puede desactivar o eliminar las cuentas inactivas de todas las instancias de AD de forma centralizada.
+ **Reestructuración o migración de AD**: si su organización planea reestructurar o migrar su implementación de AD, una solución de limpieza de AD multicuenta puede ser útil para preparar el entorno. Con esta solución, podrá eliminar cuentas innecesarias o inactivas, simplificar el proceso de migración y reducir los posibles conflictos o problemas.

Cuando utiliza este patrón, puede obtener los siguientes beneficios:
+ Mejore el rendimiento de las bases de datos y los servidores, y corrija también de las vulnerabilidades de seguridad causadas por cuentas inactivas.
+ Si su servidor de AD está alojado en la nube, eliminar las cuentas inactivas también puede reducir los costes de almacenamiento y, al mismo tiempo, mejorar el rendimiento. Es posible que sus facturas mensuales disminuyan porque los cargos asociados al uso de ancho de banda y los recursos de computación pueden disminuir.
+ Mantenga a raya a los posibles atacantes con un Active Directory limpio.

## Requisitos previos y limitaciones
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-prereqs"></a>

**Requisitos previos **
+ Una cuenta principal activa Cuenta de AWS y una o varias cuentas secundarias. En este patrón, una *cuenta principal* es donde se crea Active Directory. Las *cuentas secundarias* alojan servidores Windows y se unen a través de la cuenta principal de Active Directory.
+ Git [instalado](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) y configurado en una estación de trabajo local.
+ Terraform [instalado](https://learn.hashicorp.com/tutorials/terraform/install-cli) y configurado en una estación de trabajo local.
+ AWS Managed Microsoft AD directorio configurado en la cuenta principal y compartido con todas las cuentas secundarias. Para obtener más información, consulta el [tutorial: Cómo compartir tu AWS Managed Microsoft AD directorio para EC2 unirte a un dominio sin problemas](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html) en la Guía de *AWS Directory Service administración*.
+ Una conexión de emparejamiento de nube privada virtual (VPC) o una AWS Transit Gateway conexión disponible entre la VPC de AWS Directory Service (cuenta principal) y la VPC de las instancias de Amazon Elastic Compute Cloud ( EC2Amazon) (cuentas secundarias). Para obtener más información, consulte [Configure a VPC peering connection between the directory owner and the directory consumer account](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) en la *Guía de administración de AWS Directory Service *.
+ Una máquina Windows configurada con el script `EC2WindowsUserdata` en la cuenta principal y en todas las cuentas secundarias. El archivo de script está disponible en la raíz del [repositorio de códigos](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup) de este patrón.
+ Un rol multicuenta AWS Identity and Access Management (IAM) disponible en cada cuenta secundaria que está configurado con una política de confianza que permite el uso de una AWS Lambda función de la cuenta principal. Para obtener más información, consulta [Enviar y recibir eventos entre Amazon Cuentas de AWS EventBridge en](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html) la *Guía del EventBridge usuario de Amazon*.
+ Los siguientes valores secretos están disponibles en el almacén de AWS Systems Manager parámetros de la cuenta principal:
  + `domainJoinUser`: nombre de usuario del servicio de directorio
  + `domainJoinPassword`: contraseña del servicio de directorio

  Para obtener más información sobre los secretos, consulte [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la *Guía del AWS Secrets Manager usuario*.

**Limitaciones**
+ La creación de un recurso en una cuenta secundaria no está automatizada con Terraform. Debe crear los siguientes recursos manualmente mediante Consola de administración de AWS:
  +  EventBridge Regla de Amazon para enviar los eventos de EC2 rescisión de Amazon a la cuenta principal
  + Creación de roles EC2 multicuentas de Amazon en la cuenta secundaria con política de confianza
  + conexión de emparejamiento de VPC o Transit Gateway
+ Algunas Servicios de AWS no están disponibles en todas las Regiones de AWS versiones. Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ [Terraform, versión 1.1.9 o posterior](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versión 3.0 o superior](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Arquitectura
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-architecture"></a>

El siguiente diagrama muestra la arquitectura de alto nivel de la solución.

![\[Proceso para utilizar la automatización de Lambda para eliminar EC2 entradas de todas las cuentas de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c397d873-e10d-44b6-8352-5f1380ab94ca/images/bd6c80a7-e490-47db-bd47-165314e1ea8a.png)


El diagrama de arquitectura ilustra el proceso siguiente:

1. En las cuentas infantiles, la EventBridge regla recopila todos los eventos de EC2 rescisión de Amazon. La regla envía los eventos EventBridge que están presentes en la cuenta principal.

1. De la cuenta principal, EventBridge recopila todos los eventos y contiene la regla para activar la función Lambda. `ADcleanup-Lambda`

1. La cuenta principal recibe cualquier evento de terminación de la cuenta principal o secundaria y activa la función de Lambda.

1. La función Lambda realiza la llamada a los grupos de Amazon EC2 Auto Scaling mediante el módulo boto de Python y obtiene el ID de instancia aleatorio. El ID de instancia se utiliza para poner en marcha los comandos de Systems Manager.

1. La función Lambda realiza otra llamada a Amazon EC2 mediante el módulo boto. La función de Lambda obtiene las direcciones IP privadas de los servidores Windows en marcha y las almacena en una variable temporal. En los pasos 5.1 y 5.2, las EC2 instancias de Windows en ejecución se recopilan de las cuentas secundarias.

1. La función de Lambda hace otra llamada a Systems Manager para obtener la información del equipo conectado a AWS Directory Service.

1. Un AWS Systems Manager documento ayuda a ejecutar el PowerShell comando en los servidores de Amazon EC2 Windows para obtener las direcciones IP privadas de las computadoras que están conectadas a AD. (El documento de Systems Manager usa el ID de instancia que se obtuvo en el paso 4).

1. El nombre de usuario y las contraseñas del dominio AD se almacenan en el almacén de AWS Systems Manager parámetros. AWS Lambda y Systems Manager hacen una llamada a Parameter Store y obtienen los valores de nombre de usuario y contraseña que se utilizarán para conectarse a AD.

1. Con el documento Systems Manager, el PowerShell script se ejecuta en el servidor Amazon EC2 Windows utilizando el identificador de instancia obtenido anteriormente en el paso 4.

1. Amazon EC2 se conecta AWS Directory Service mediante PowerShell comandos y elimina los ordenadores que no están en uso o inactivos.

## Tools (Herramientas)
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-tools"></a>

**AWS servicios**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)proporciona varias formas de utilizar Microsoft Active Directory (AD) con otras, Servicios de AWS como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) para SQL Server y FSx Amazon para Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)permite que sus cargas de trabajo y AWS recursos compatibles con directorios utilicen Microsoft Active Directory en. Nube de AWS
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) proporciona una capacidad informática escalable en el Nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos de enlace de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos. Con IAM, puede especificar quién o qué puede acceder a los servicios y recursos AWS, gestionar de forma centralizada los permisos detallados y analizar el acceso para restringir todos los permisos. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) lo ayuda a administrar las aplicaciones y la infraestructura que se ejecutan en la Nube de AWS. Simplifica la administración de aplicaciones y recursos, reduce el tiempo necesario para detectar y resolver problemas operativos y le ayuda a gestionar sus recursos de forma segura y a escala. AWS 
+ [AWS Systems Manager los documentos](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) definen las acciones que Systems Manager realiza en las instancias gestionadas. Systems Manager incluye más de 100 documentos preconfigurados que puede utilizar especificando los parámetros en tiempo de ejecución.
+ AWS Systems Manager El [almacén de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) es una capacidad AWS Systems Manager y proporciona un almacenamiento jerárquico seguro para la administración de los datos de configuración y la administración de secretos.

**Otras herramientas**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)es un programa de administración de automatización y configuración de Microsoft que se ejecuta en Windows, Linux y macOS.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [aws-lambda-ad-cleanup-terraform-samples](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup).

## Prácticas recomendadas
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Unirse a dominios de manera automática**.Cuando lances una instancia de Windows que vaya a formar parte de un Directory Service dominio, únete al dominio durante el proceso de creación de la instancia en lugar de añadirla manualmente más adelante. Para unirse automáticamente a un dominio, seleccione el directorio correcto de la lista desplegable **Directorio de unión al dominio** al lanzar una nueva instancia. Para obtener más información, consulte [Cómo unir sin problemas una instancia de Amazon EC2 Windows a AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) en la *Guía de Directory Service administración*.
+ **Elimine las cuentas que no se usen**.Es habitual encontrar cuentas en AD que nunca se han utilizado. Al igual que las cuentas desactivadas o inactivas que permanecen en el sistema, las cuentas no utilizadas y desatendidas pueden ralentizar el sistema de AD o hacer que la organización sea vulnerable a las filtraciones de datos.
+ **Automatice las limpiezas de Active Directory**.Para mitigar los riesgos de seguridad y evitar que las cuentas obsoletas afecten al rendimiento de AD, las limpiezas de AD deberían realizarse con una frecuencia periódica. Puede realizar la mayoría de las tareas de administración y limpieza de AD escribiendo scripts. Algunos ejemplos de tareas son eliminar cuentas desactivadas e inactivas, eliminar grupos vacíos e inactivos y localizar cuentas de usuario y contraseñas caducadas.

## Epics
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-epics"></a>

### Configuración de cuentas secundarias
<a name="set-up-child-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un rol multicuenta en la cuenta secundaria. | Para crear un rol multicuenta en una cuenta secundaria, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 
| Cree una regla de eventos en la cuenta secundaria. | Para crear una EventBridge regla para cada cuenta secundaria, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Para obtener más información, consulta [Cómo crear reglas que reaccionen a los eventos en Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) en la *Guía del EventBridge usuario de Amazon*. | DevOps ingeniero | 
| Crea una EC2 instancia y únete a AD. | Para crear una EC2 instancia para Windows, haz lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 

### Configuración de la estación de trabajo local
<a name="set-up-the-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una carpeta de proyecto y agregue los archivos. | Para clonar el repositorio y crear una carpeta de proyecto, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 
| Compile el archivo `adcleanup.zip`. | Para comprimir el archivo `lambda_function.py`, use el siguiente comando:`zip -r adcleanup.zip lambda_function.py` | DevOps ingeniero | 

### Aprovisionamiento de la arquitectura de destino mediante la configuración de Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Proporcione valores para las variables de Terraform. | En la cuenta secundaria, proporcione valores para las siguientes variables `arn` como tipos de cadenas en el archivo `terraform.tfvars`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 
| Inicialice la configuración de Terraform. | Para inicializar el directorio de trabajo que contiene los archivos de Terraform, use el siguiente comando:`terraform init` | DevOps ingeniero | 
| Previsualice los cambios. | Puede obtener una vista previa de los cambios que Terraform realizará en la infraestructura antes de implementarla. Para comprobar que Terraform realizará los cambios necesarios, use el siguiente comando:`terraform plan —-var-file=examples/terraform.tfvars` | DevOps ingeniero | 
| Realice las acciones propuestas. | Para comprobar que los resultados del comando `terraform plan` sean los esperados, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 

### Verifique la implementación
<a name="verify-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ponga en marcha y pruebe la función de Lambda. | Para verificar que la implementación se realizó correctamente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Los resultados de la puesta en marcha muestran el resultado de la función. | DevOps ingeniero | 
| Vea los resultados de la ejecución de la EventBridge regla desde la cuenta principal. | Para ver los resultados de la EventBridge regla que se basa en los eventos de EC2 rescisión de Amazon desde la cuenta principal, haz lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)En la CloudWatch consola, la página **Grupos de registros** muestra los resultados de la función Lambda. | DevOps ingeniero | 
| Vea los resultados de la ejecución de la EventBridge regla desde la cuenta secundaria. | Para ver los resultados de la EventBridge regla que se basa en los eventos de EC2 rescisión de Amazon desde la cuenta secundaria, haz lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)En la CloudWatch consola, la página **Grupos de registros** muestra los resultados de la función Lambda. | DevOps ingeniero | 

### Limpieza de la infraestructura después de utilizarla
<a name="clean-up-infrastructure-after-use"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie la infraestructura. | Para limpiar la infraestructura que ha creado, utilice el siguiente comando:`terraform destroy`Para confirmar el comando `destroy`, escriba `yes`. | DevOps ingeniero | 
| Verifique después de limpiar. | Compruebe que los recursos se hayan eliminado correctamente. | DevOps ingeniero | 

## Resolución de problemas
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Problema de conexión entre AWS Directory Service (cuenta principal) e EC2 instancia de Amazon (cuenta secundaria): no puedes unir los ordenadores de la cuenta secundaria a AD aunque la interconexión de VPC esté disponible. | Agregue el enrutamiento en. VPCs Para obtener instrucciones, consulte [Configurar una conexión de emparejamiento de VPC entre el propietario del directorio y la cuenta del consumidor del directorio](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) en la documentación. AWS Directory Service  | 

## Recursos relacionados
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentación**
+ [Amazon EventBridge y AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configuración de permisos de instancia requeridos para Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gestión de identidad y acceso para Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Políticas de IAM basadas en identidad para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)
+ [Unir manualmente una instancia de Amazon EC2 Windows a AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Elimine EC2 las entradas de Amazon en el mismo Cuenta de AWSAWS Managed Microsoft AD formulario mediante AWS Lambda la automatización](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)

**Otros recursos**
+ [AWS Proveedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentación de Terraform)
+ [Backend Configuration](https://developer.hashicorp.com/terraform/language/backend) (documentación de Terraform)
+ [Install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) (documentación de Terraform)
+ [Python boto module](https://pypi.org/project/boto/) (repositorio Python Package Index)
+ [Terraform binary download](https://www.terraform.io/downloads) (documentación de Terraform)

# Elimine EC2 las entradas de Amazon en el mismo Cuenta de AWS AWS Managed Microsoft AD formulario mediante AWS Lambda la automatización
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad y Tamilselvan P, Amazon Web Services*

## Resumen
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) es una herramienta de secuencias de comandos de Microsoft que administra la información de dominio y las interacciones de los usuarios con los servicios de red. Los proveedores de servicios gestionados (MSPs) la utilizan ampliamente para gestionar las credenciales de los empleados y los permisos de acceso. Como los atacantes de AD pueden usar cuentas inactivas para intentar hackear una organización, es importante encontrar las cuentas inactivas y desactivarlas siguiendo un programa de mantenimiento rutinario. Con AWS Directory Service for Microsoft Active Directory, puede ejecutar Microsoft Active Directory como un servicio gestionado. 

Este patrón puede ayudarle a configurar la AWS Lambda automatización para encontrar y eliminar rápidamente las cuentas inactivas. Cuando utiliza este patrón, puede obtener los siguientes beneficios:
+ Mejore el rendimiento de las bases de datos y los servidores, y corrija también de las vulnerabilidades de seguridad causadas por cuentas inactivas.
+ Si su servidor de AD está alojado en la nube, eliminar las cuentas inactivas también puede reducir los costes de almacenamiento y, al mismo tiempo, mejorar el rendimiento. Es posible que sus facturas mensuales disminuyan porque los cargos asociados al uso de ancho de banda y los recursos de computación pueden disminuir.
+ Mantenga a raya a los posibles atacantes con un Active Directory limpio.

## Requisitos previos y limitaciones
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Git [instalado](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) y configurado en una estación de trabajo local.
+ Terraform [instalado](https://learn.hashicorp.com/tutorials/terraform/install-cli) y configurado en una estación de trabajo local.
+ Equipo Windows con módulos de Active Directory (`ActiveDirectory`).
+ Un directorio AWS Managed Microsoft AD y credenciales almacenadas en un [parámetro del almacén de AWS Systems Manager parámetros.](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)
+ AWS Identity and Access Management *(IAM) con permisos para los que Servicios de AWS aparecen en [Herramientas](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools).* Para obtener más información sobre IAM, consulte [Recursos relacionados](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources).

**Limitaciones**
+ Este patrón no admite la configuración multicuenta.
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ [Terraform, versión 1.1.9 o posterior](https://developer.hashicorp.com/terraform/install)
+ [La versión 3.0 o posterior del Proveedor de AWS para Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Arquitectura
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-architecture"></a>

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

![\[Proceso para utilizar la automatización de Lambda para eliminar EC2 entradas de Managed Microsoft AD.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/6b50dcc5-4f4b-4eea-85a7-04cebc9f7454/images/b7fc5962-bfb8-4f5a-968e-7487b1d48c4f.png)


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

1. Amazon EventBridge activa la AWS Lambda función basándose en una expresión cron. (En este patrón, las expresiones cron están programadas una vez al día).

1. La función y la política de IAM requeridas se crean y se adjuntan a AWS Lambda través de Terraform.

1. La AWS Lambda función se ejecuta y llama a los grupos de Auto Scaling de Amazon Elastic Compute Cloud (Amazon EC2) mediante el módulo boto de Python. La función de Lambda obtiene el ID de instancia aleatorio. El identificador de instancia se usa para ejecutar AWS Systems Manager comandos.

1. AWS Lambda realiza otra llamada a Amazon EC2 mediante el módulo boto y obtiene las direcciones IP privadas de los servidores Windows en ejecución y las almacena en una variable temporal.

1. AWS Lambda realiza otra llamada a Systems Manager para obtener la información del equipo al que está conectado Directory Service.

1. Un AWS Systems Manager documento ayuda a ejecutar el PowerShell script en los servidores de Amazon EC2 Windows para obtener las direcciones IP privadas de los ordenadores que están conectados a AD.

1. El nombre de usuario y las contraseñas del dominio AD se almacenan en el almacén de AWS Systems Manager parámetros. AWS Lambda y Systems Manager hacen una llamada a Parameter Store y obtienen los valores de nombre de usuario y contraseña que se utilizarán para conectar AD.

1. Con el documento Systems Manager, el PowerShell script se ejecuta en el servidor Amazon EC2 Windows utilizando el identificador de instancia obtenido anteriormente en el paso 3.

1. Amazon EC2 se conecta Directory Service mediante PowerShell comandos y elimina los ordenadores que no están en uso o inactivos.

## Tools (Herramientas)
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools"></a>

**Servicios de AWS**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)proporciona varias formas de utilizar Microsoft Active Directory (AD) con otras, Servicios de AWS como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) para SQL Server y FSx Amazon para Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)permite que sus cargas de trabajo y AWS recursos compatibles con directorios utilicen Microsoft Active Directory en. Nube de AWS
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) proporciona una capacidad informática escalable en el Nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos de enlace de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos. Con IAM, puede especificar quién o qué puede acceder a los servicios y recursos AWS, gestionar de forma centralizada los permisos detallados y analizar el acceso para restringir todos los permisos. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) lo ayuda a administrar las aplicaciones y la infraestructura que se ejecutan en la Nube de AWS. Simplifica la administración de aplicaciones y recursos, reduce el tiempo necesario para detectar y resolver problemas operativos y le ayuda a gestionar sus recursos de forma segura y a escala. AWS 
+ [AWS Systems Manager los documentos](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) definen las acciones que Systems Manager realiza en las instancias gestionadas. Systems Manager incluye más de 100 documentos preconfigurados que puede utilizar especificando los parámetros en tiempo de ejecución.
+ AWS Systems Manager El [almacén de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) es una capacidad AWS Systems Manager y proporciona un almacenamiento jerárquico seguro para la administración de datos de configuración y la administración de secretos.

**Otras herramientas**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de código abierto de infraestructura como código (IaC) que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)es un programa de administración de automatización y configuración de Microsoft que se ejecuta en Windows, Linux y macOS.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**R****epositorio de código**

El código de este patrón está disponible en el repositorio de [soluciones GitHub personalizadas de AD Cleanup Automation](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/). 

## Prácticas recomendadas
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Unirse a dominios de manera automática**.Cuando lances una instancia de Windows que vaya a formar parte de un Directory Service dominio, únete al dominio durante el proceso de creación de la instancia en lugar de añadirla manualmente más adelante. Para unirse automáticamente a un dominio, seleccione el directorio correcto de la lista desplegable **Directorio de unión al dominio** al lanzar una nueva instancia. Para obtener más información, consulte [Cómo unir sin problemas una instancia de Amazon EC2 Windows a AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) en la *Guía de Directory Service administración*.
+ **Elimine las cuentas que no se usen**.Es habitual encontrar cuentas en AD que nunca se han utilizado. Al igual que las cuentas desactivadas o inactivas que permanecen en el sistema, las cuentas no utilizadas y desatendidas pueden ralentizar el sistema de AD o hacer que la organización sea vulnerable a las filtraciones de datos.
+ **Automatice las limpiezas de Active Directory**.Para mitigar los riesgos de seguridad y evitar que las cuentas obsoletas afecten al rendimiento de AD, las limpiezas de AD deberían realizarse con una frecuencia periódica. Puede realizar la mayoría de las tareas de administración y limpieza de AD escribiendo scripts. Algunos ejemplos de tareas son eliminar cuentas desactivadas e inactivas, eliminar grupos vacíos e inactivos y localizar cuentas de usuario y contraseñas caducadas. 

## Epics
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-epics"></a>

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una carpeta de proyecto y agregue los archivos. | Para clonar el repositorio y crear una carpeta de proyecto, haga lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 

### Aprovisionamiento de la arquitectura de destino mediante la configuración de Terraform
<a name="provision-the-target-architecture-by-using-the-terraform-configuration"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicialice la configuración de Terraform. | Para inicializar el directorio de trabajo que contiene los archivos de Terraform, use el siguiente comando.`terraform init` | DevOps ingeniero | 
| Previsualice los cambios. | Puede obtener una vista previa de los cambios que Terraform realizará en la infraestructura antes de implementarla. Para comprobar que Terraform realizará los cambios necesarios, use el siguiente comando.`terraform plan` | DevOps ingeniero | 
| Realice las acciones propuestas. | Para comprobar que los resultados del comando `terraform plan` sean los esperados, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps ingeniero | 
| Limpie la infraestructura. | Para limpiar la infraestructura que ha creado, utilice el siguiente comando.`terraform destroy`Para confirmar el comando de eliminación, ingrese `yes`. | DevOps ingeniero | 

### Verifique la implementación
<a name="verify-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ponga en marcha y pruebe la función de Lambda. | Para verificar que la implementación se realizó correctamente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Los resultados de la puesta en marcha muestran el resultado de la función. | DevOps ingeniero | 
| Vea los resultados de la función de Lambda. | En este patrón, una EventBridge regla ejecuta la función Lambda una vez al día. Para ver los resultados de la función de Lambda, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)En la CloudWatch consola, la página **Grupos de registros** muestra los resultados de la función Lambda. | DevOps ingeniero | 

### Limpieza de la infraestructura después de utilizarla
<a name="clean-up-infrastructure-after-use"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie la infraestructura. | Para limpiar la infraestructura que ha creado, utilice el siguiente comando.`terraform destroy`Para confirmar el comando de eliminación, ingrese `yes`. | DevOps ingeniero | 
| Verifique después de limpiar. | Compruebe que los recursos se hayan eliminado correctamente. | DevOps ingeniero | 

## Resolución de problemas
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Si intenta eliminar el equipo de AD, aparecerá un mensaje de “Acceso denegado”. No se puede eliminar el equipo de AD porque, de forma predeterminada, la acción intenta eliminar dos direcciones IP privadas que están conectadas como parte de los servicios de AD. | Para evitar este error, utilice la siguiente operación de Python para ignorar los dos primeros equipos al enumerar las diferencias entre la salida de un equipo de AD y la salida de un equipo que usa Windows.<pre>Difference = Difference[2:]</pre> | 
| Cuando Lambda ejecuta un PowerShell script en un servidor Windows, espera que los módulos de Active Directory estén disponibles de forma predeterminada. Si los módulos no están disponibles, una función Lambda crea un error que indica que «Get- no AdComputer está instalado en la instancia». | Para evitar este error, instala los módulos necesarios utilizando los datos de usuario de las EC2 instancias. Usa el [EC2WindowsUserdata](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/blob/main/EC2WindowsUserdata)script que se encuentra en el GitHub repositorio de este patrón. | 

## Recursos relacionados
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentación**
+ [Amazon EventBridge y AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configuración de permisos de instancia requeridos para Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gestión de identidad y acceso para Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Unir manualmente una instancia de Amazon EC2 Windows a AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Trabaje con políticas de IAM basadas en la identidad en AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)

**Otros recursos**
+ [AWS Proveedor (documentación de Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs))
+ [Backend Configuration](https://developer.hashicorp.com/terraform/language/backend) (documentación de Terraform)
+ [Install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) (documentación de Terraform)
+ [Python boto module](https://pypi.org/project/boto/) (repositorio Python Package Index)
+ [Terraform binary download](https://www.terraform.io/downloads) (documentación de Terraform)

# Ejecute pruebas unitarias para trabajos ETL de Python AWS Glue utilizando el marco pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan y Vaidy Sankaran, Amazon Web Services*

## Resumen
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Puede ejecutar pruebas unitarias para trabajos de extracción, transformación y carga (ETL) de Python AWS Glue en un [entorno de desarrollo local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), pero replicar esas pruebas en una DevOps canalización puede resultar difícil y llevar mucho tiempo. Las pruebas unitarias pueden resultar especialmente complicadas cuando se moderniza el proceso de ETL de un mainframe basándolo en AWS tecnologías. Este patrón le muestra cómo simplificar las pruebas unitarias y, al mismo tiempo, mantener intacta la funcionalidad existente, evitar interrupciones de funcionalidad de la aplicaciones clave cuando se lanzan nuevas características y mantener un software de alta calidad. Puede usar los pasos y los ejemplos de código de este patrón para ejecutar pruebas unitarias para trabajos ETL de Python AWS Glue utilizando el marco pytest en AWS CodePipeline. También puedes usar este patrón para probar e implementar varios AWS Glue trabajos.

## Requisitos previos y limitaciones
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Un URI de imagen de Amazon Elastic Container Registry (Amazon ECR) para AWS Glue su biblioteca, descargado de la galería pública de [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ Un terminal Bash (en cualquier sistema operativo) con un perfil para el destino y Cuenta de AWS Región de AWS
+ [Python 3.10](https://www.python.org/downloads/) o posterior
+ [Pytest](https://github.com/pytest-dev/pytest)
+ Biblioteca [Moto](https://github.com/getmoto/moto) Python para pruebas Servicios de AWS

## Arquitectura
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

El siguiente diagrama describe cómo incorporar las pruebas unitarias para los procesos de AWS Glue ETL basados en Python en una canalización típica de escala empresarial AWS DevOps .

![\[Pruebas unitarias para los procesos de ETL de AWS Glue\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


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

1. En la fase de código fuente, AWS CodePipeline utiliza un bucket versionado de Amazon Simple Storage Service (Amazon S3) para almacenar y gestionar los activos del código fuente. Estos activos incluyen un ejemplo de trabajo ETL de Python (`sample.py`), un archivo de prueba unitaria (`test_sample.py`) y una AWS CloudFormation plantilla. A continuación, CodePipeline transfiere el código más reciente de la rama principal al AWS CodeBuild proyecto para su posterior procesamiento.

1. En la fase de creación y publicación, el código más reciente de la fase fuente anterior se somete a pruebas unitarias con la ayuda de una imagen AWS Glue pública de Amazon ECR. A continuación, el informe de la prueba se publica en los grupos de CodeBuild informes. La imagen del contenedor del repositorio público de Amazon ECR para AWS Glue bibliotecas incluye todos los binarios necesarios para ejecutar tareas ETL [PySparkbasadas](https://spark.apache.org/docs/latest/api/python/) en AWS Glue pruebas unitarias de forma local. El repositorio de contenedores público tiene tres etiquetas de imagen, una para cada versión compatible con AWS Glue. Con fines de demostración, este patrón usa la etiqueta de imagen `glue_libs_4.0.0_image_01`. Para usar esta imagen de contenedor como imagen en tiempo de ejecución CodeBuild, copie el URI de la imagen que corresponda a la etiqueta de imagen que pretende usar y, a continuación, actualice el `pipeline.yml` archivo en el GitHub repositorio del recurso. `TestBuild`

1. En la fase de despliegue, el CodeBuild proyecto se lanza y publica el código en un bucket de Amazon S3 si se aprueban todas las pruebas.

1. El usuario implementa la AWS Glue tarea mediante la CloudFormation plantilla de la `deploy` carpeta.

## Tools (Herramientas)
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Servicios de AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) es un servicio de ETL completamente administrado. Ayuda a clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento líderes del sector.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación de uso general interpretado de alto nivel.
+ [Moto](https://github.com/getmoto/moto) es una biblioteca de Python para realizar pruebas Servicios de AWS.
+ [Pytest](https://github.com/pytest-dev/pytest) es un marco para escribir pruebas unitarias pequeñas que se escalan para permitir pruebas funcionales complejas para aplicaciones y bibliotecas.
+ La [biblioteca ETL de Python](https://github.com/awslabs/aws-glue-libs) para AWS Glue es un repositorio de bibliotecas de Python que se utilizan en el desarrollo local de trabajos PySpark por lotes para AWS Glue.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). El repositorio incluye los siguientes recursos:
+ Un ejemplo de AWS Glue trabajo basado en Python en la carpeta `src`
+ Los casos de pruebas unitarias asociados (creados con el marco pytest) están en la carpeta `tests`
+ Una CloudFormation plantilla (escrita en YAML) en la carpeta `deploy`

## Prácticas recomendadas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**Seguridad de los recursos CodePipeline **

Se recomienda utilizar el cifrado y la autenticación en los repositorios de origen que se conectan a tus canalizaciones. CodePipeline Para obtener más información, consulta [las prácticas recomendadas de seguridad](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) en la CodePipeline documentación.

**Supervisión y registro de los CodePipeline recursos**

Se recomienda utilizar las funciones de AWS registro para determinar qué acciones realizan los usuarios en tu cuenta y qué recursos utilizan. Los archivos de registro muestran lo siguiente:
+ La fecha y la hora de las acciones
+ Dirección IP de origen de las acciones
+ Las acciones que han fallado debido a permisos inadecuados

Las funciones de registro están disponibles en AWS CloudTrail Amazon CloudWatch Events. Puede utilizarlas CloudTrail para registrar las llamadas a la AWS API y los eventos relacionados realizados por usted o en su nombre Cuenta de AWS. Para obtener más información, consulta Cómo [registrar las llamadas a la CodePipeline API AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) en la CodePipeline documentación.

Puede usar CloudWatch Events para supervisar Nube de AWS los recursos y las aplicaciones que se estén ejecutando AWS. También puede crear alertas en CloudWatch Eventos. Para obtener más información, consulte [Supervisión de CodePipeline eventos](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) en la CodePipeline documentación.

## Epics
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Implementar el código fuente
<a name="deploy-the-source-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Prepare el archivo de códigos para su implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps ingeniero | 
| Crea la CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)La pila crea una CodePipeline vista con Amazon S3 como fuente. En los pasos anteriores, la canalización es **aws-glue-unit-test-pipeline**. | AWS DevOps, DevOps ingeniero | 

### Ejecute las pruebas unitarias
<a name="run-the-unit-tests"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute las pruebas unitarias en la canalización. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingeniero | 

### Limpia todos los AWS recursos
<a name="clean-up-all-aws-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie los recursos del entorno. | Para evitar costos de infraestructura adicionales, asegúrese de eliminar la pila después de experimentar con los ejemplos que se proporcionan en este patrón.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingeniero | 

## Resolución de problemas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El rol CodePipeline de servicio no puede acceder al bucket de Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline devuelve un error que indica que el bucket de Amazon S3 no está versionado. | CodePipeline requiere que el bucket Amazon S3 de origen esté versionado. Habilite el control de versiones en el bucket de origen de Amazon S3 Para obtener instrucciones, consulte [Habilitar el control de versiones en buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html). | 

## Recursos relacionados
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Desarrollar y probar AWS Glue trabajos a nivel local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Información adicional
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

Además, puede implementar las AWS CloudFormation plantillas mediante AWS Command Line Interface (AWS CLI). Para obtener más información, consulte [Implementación rápida de plantillas con transformaciones](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) en la CloudFormation documentación.

# Configure una CI/CD canalización mediante AWS CodePipeline y AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder y Cizer Pereira en Amazon Web Services*

## Inicio
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

Automatizar el proceso de creación y lanzamiento de software mediante una integración y una entrega continuas (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDimplica una cultura, un conjunto de principios operativos y un [conjunto de prácticas que ayudan a los equipos de](https://aws.amazon.com/devops/#cicd) desarrollo de aplicaciones a realizar cambios de código con mayor frecuencia y fiabilidad). Esta implementación también se conoce como *proceso de CI/CD*.

Este patrón define una canalización reutilizable de integración continua y entrega continua (CI/CD) en Amazon Web Services (AWS) con un repositorio de AWS CodeCommit . La CodePipeline canalización de AWS se ha escrito con el [AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Con CodePipeline él, puede modelar las diferentes etapas del proceso de lanzamiento de software a través de la interfaz de la consola de administración de AWS, la interfaz de línea de comandos de AWS (AWS CLI), CloudFormation AWS o AWS SDKs. Este patrón demuestra la implementación CodePipeline y sus componentes mediante AWS CDK. Además de crear bibliotecas, AWS CDK incluye un kit de herramientas (el comando de CLI `cdk`). Es la herramienta principal para interactuar con la aplicación de AWS CDK. Entre otras funciones, el kit de herramientas ofrece la posibilidad de convertir una o más pilas en CloudFormation plantillas e implementarlas en una cuenta de AWS.

El proceso incluye pruebas para validar la seguridad de sus bibliotecas de terceros, y ayuda a garantizar una publicación rápida y automatizada en los entornos especificados. Puede aumentar la seguridad general de sus aplicaciones sometiéndolas a un proceso de validación.

El objetivo de este patrón es acelerar el uso de las CI/CD canalizaciones para implementar el código y, al mismo tiempo, garantizar que los recursos que se implementen se ajusten a DevOps las mejores prácticas. Tras implementar el [código de ejemplo](https://github.com/aws-samples/aws-codepipeline-cicd), dispondrá de un [AWS CodePipeline](https://aws.amazon.com/codepipeline/) con procesos de linting, pruebas, controles de seguridad y procesos de implementación y posteriores a la implementación. Este patrón también incluye pasos para Makefile. Con un Makefile, los desarrolladores pueden reproducir los CI/CD pasos de forma local y aumentar la velocidad del proceso de desarrollo.

## Requisitos previos y limitaciones
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Una comprensión básica de lo siguiente:
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Limitaciones**

Este patrón utiliza [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) TypeScript únicamente para. No abarca otros lenguajes compatibles con AWS CDK.

**Versiones de producto**

Utilice las últimas versiones de las herramientas siguientes:
+ Interfaz de la línea de comandos de AWS (AWS CLI)
+ cfn\$1nag
+ git-remote-codecommit
+ Node.js

## Arquitectura
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Pila de tecnología de destino**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Arquitectura de destino**

La canalización se desencadena por un cambio en el CodeCommit repositorio de AWS (`SampleRepository`). Al principio, CodePipeline crea artefactos, se actualiza automáticamente e inicia el proceso de implementación. El proceso resultante implementa una solución en tres entornos independientes:
+ Desarrollo: verificación del código en tres pasos en el entorno de desarrollo activo
+ Prueba: entorno de pruebas de integración y regresión
+ Prod: entorno de producción

Los tres pasos incluidos en la etapa de desarrollo son el linting, la seguridad y las pruebas unitarias. Estos pasos se ejecutan en paralelo para acelerar el proceso. Para garantizar que el proceso solo proporcione artefactos funcionales, dejará de funcionar cada vez que falle un paso del proceso. Tras la implementación en la fase de desarrollo, el proceso ejecuta pruebas de validación para verificar los resultados. En caso de éxito, el proceso implementará los artefactos en el entorno de prueba, que contiene la validación posterior a la implementación. El paso final consiste en implementar los artefactos en el entorno de producción.

El siguiente diagrama muestra el flujo de trabajo desde el CodeCommit repositorio hasta los procesos de creación y actualización que se llevan a cabo en el entorno de desarrollo, así como el despliegue y la validación posteriores en cada uno de los tres entornos. CodePipeline

![\[El entorno de desarrollo incluye pruebas unitarias, de seguridad y linting, y todas incluyen la implementación y la validación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Tools (Herramientas)
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la infraestructura de la nube de AWS en código.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS. En este patrón, CloudFormation las plantillas se pueden utilizar para crear un CodeCommit repositorio y una canalización de CodePipeline CI/CD.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) es un CI/CD servicio que le ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
+ La [Interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de la línea de comandos.

**Otras herramientas**
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) es una herramienta de código abierto que busca patrones en las CloudFormation plantillas para identificar posibles problemas de seguridad.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)es una utilidad para insertar y extraer código de los CodeCommit repositorios mediante la extensión de Git.
+ [Node.js](https://nodejs.org/en/docs/) es un entorno de JavaScript ejecución basado en eventos diseñado para crear aplicaciones de red escalables.

**Código**

El código de este patrón está disponible en el repositorio GitHub [AWS CodePipeline CI/CD with practices](https://github.com/aws-samples/aws-codepipeline-cicd).

## Prácticas recomendadas
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Revise los recursos, como las políticas de AWS Identity and Access Management (IAM), para asegurarse de que se ajusten a las prácticas recomendadas de su organización.

## Epics
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

### Instalar herramientas
<a name="install-tools"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar herramientas en macOS o Linux. | Si usa macOS o Linux, puede instalar las herramientas ejecutando el siguiente comando en su terminal preferido o usando [Homebrew para Linux](https://docs.brew.sh/Homebrew-on-Linux).<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps ingeniero | 
| Configure AWS CLI. | Para configurar la CLI de AWS, consulte las instrucciones del sistema operativo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingeniero | 

### Configurar la implementación inicial
<a name="set-up-the-initial-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue o clone el código. | Para obtener el código que utiliza este patrón, realice una de las siguientes acciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre>Elimine el directorio `.git` del repositorio clonado.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre>Más adelante, utilizará un CodeCommit repositorio de AWS recién creado como origen remoto. | DevOps ingeniero | 
| Conéctese a la cuenta de AWS. | Puede conectarse mediante un token de seguridad temporal o una autenticación de zona de aterrizaje. Para confirmar que está utilizando la cuenta y región de AWS correctas, ejecute los siguientes comandos.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps ingeniero | 
| Arranque el entorno de . | Para arrancar un entorno AWS CDK, ejecute los siguientes comandos.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Tras arrancar correctamente el entorno, debería aparecer el siguiente resultado.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre>Para más información sobre el proceso de arranque de AWS CDK, consulte la [documentación de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html). | DevOps ingeniero | 
| Sintetice una plantilla. | Para sintetizar una aplicación de AWS CDK, ejecute el comando `cdk synth`.<pre>npm run cdk synth</pre>Debería ver la siguiente salida.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps ingeniero | 
| Despliega la CodePipeline pila. | Ahora que ha iniciado y sintetizado la CloudFormation plantilla, puede desplegarla. La implementación creará la CodePipeline canalización y un CodeCommit repositorio, que serán la fuente y el desencadenante de la canalización.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre>Tras ejecutar el comando, debería ver una implementación correcta de la CodePipeline pila y la información de salida. `CodePipeline.RepositoryName`Le da el nombre del CodeCommit repositorio de la cuenta de AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps ingeniero | 
| Configure el CodeCommit repositorio y la sucursal remotos. | Tras una implementación correcta, CodePipeline iniciará la primera ejecución de la canalización, que puede encontrar en la [ CodePipeline consola de AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Como AWS CDK y CodeCommit no inician una rama predeterminada, esta canalización inicial fallará y devolverá el siguiente mensaje de error.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre>Para corregir este error, configure un origen remoto como `SampleRepository` y cree la ramificación `main` requerida.<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps ingeniero | 

### Pruebe la CodePipeline canalización desplegada
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Realice un cambio para activar el proceso. | Tras una implementación inicial satisfactoria, deberías disponer de una CI/CD canalización completa con una `main` rama `SampleRepository` como rama de origen. En cuanto realice los cambios en la ramificación `main`, se iniciará el proceso y se ejecutará la siguiente secuencia de acciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingeniero | 

### Realice pruebas locales mediante Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute el proceso de desarrollo mediante Makefile. | Puede ejecutar todo el proceso de forma local mediante el comando `make`, o bien ejecutar un paso individual (por ejemplo, `make linting`).Para probar el uso de `make`, realice las siguientes acciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Desarrollador de aplicaciones, DevOps ingeniero | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos de la aplicación AWS CDK. | Para limpiar su aplicación AWS CDK, ejecute el siguiente comando.<pre>cdk destroy --all</pre>Tenga en cuenta que los buckets de Amazon Simple Storage Service (Amazon S3) creados durante el arranque no se eliminan automáticamente. Necesitará una política de retención que permita su eliminación, o bien tendrá que eliminarlos manualmente en su cuenta de AWS. | DevOps ingeniero | 

## Resolución de problemas
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La plantilla no funciona como se esperaba. | Si algo sale mal y la plantilla no funciona, asegúrese de que dispone de lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Recursos relacionados
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Introducción a las tareas habituales en IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Documentación de AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

# Configuración del registro centralizado a escala empresarial mediante Terraform
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform"></a>

*Aarti Rajput, Yashwant Patel y Nishtha Yadav, Amazon Web Services*

## Resumen
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-summary"></a>

El registro centralizado es vital para la infraestructura en la nube de una organización porque proporciona visibilidad de sus operaciones, seguridad y cumplimiento normativo. A medida que su organización amplía su AWS entorno a varias cuentas, una estrategia estructurada de administración de registros se vuelve fundamental para ejecutar las operaciones de seguridad, cumplir con los requisitos de auditoría y lograr la excelencia operativa.

Este patrón proporciona un marco seguro y escalable para centralizar los registros de múltiples servicios Cuentas de AWS y, de este modo, posibilitar la administración de registros a escala empresarial en despliegues complejos. AWS La solución se automatiza mediante Terraform, que es una herramienta de infraestructura como código (IaC) HashiCorp que garantiza despliegues consistentes y repetibles, y minimiza la configuración manual. Al combinar Amazon CloudWatch Logs, Amazon Data Firehose y Amazon Simple Storage Service (Amazon S3), puede implementar un proceso sólido de agregación y análisis de registros que ofrece:
+ Administración centralizada de registros en toda su organización en AWS Organizations
+ Recopilación de registros automatizada con controles de seguridad integrados
+ Procesamiento de registros escalable y almacenamiento duradero
+ Generación de informes de cumplimiento y registros de auditoría simplificados
+ Supervisión e información operativa en tiempo real

La solución recopila registros de los AWS Lambda contenedores de Amazon Elastic Kubernetes Service (Amazon EKS), las funciones y las instancias de bases de datos de Amazon Relational Database Service (Amazon RDS) mediante Logs. CloudWatch Reenvía automáticamente estos registros a una cuenta de registro dedicada mediante filtros de suscripción. CloudWatch Firehose administra el flujo de registro de alto rendimiento a Amazon S3 para un almacenamiento a largo plazo. Amazon Simple Queue Service (Amazon SQS) está configurado para recibir notificaciones de eventos de Amazon S3 al crear el objeto. Esto permite la integración con los servicios de análisis, tales como:
+ Amazon OpenSearch Service para búsqueda de registros, visualización y análisis en tiempo real
+ Amazon Athena para consultas basadas en SQL
+ Amazon EMR para procesamiento a gran escala
+ Lambda para una transformación personalizada
+ Amazon Quick Sight para paneles

Todos los datos se cifran mediante AWS Key Management Service (AWS KMS) y toda la infraestructura se implementa mediante Terraform para lograr una configuración uniforme en todos los entornos.

Este enfoque de registro centralizado permite a las organizaciones mejorar su postura de seguridad, mantener los requisitos de cumplimiento y optimizar la eficiencia operativa en toda su AWS infraestructura.

## Requisitos previos y limitaciones
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-prereqs"></a>

**Requisitos previos **
+ Una zona de aterrizaje para su organización que se crea mediante [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html)
+ [Generador de cuentas para Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html), implementado y configurado con las cuentas requeridas
+ [Terraform](https://developer.hashicorp.com/terraform/downloads) para aprovisionar la infraestructura
+ AWS Identity and Access Management Funciones y políticas [(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) para el acceso entre cuentas

Para obtener instrucciones sobre cómo configurar AWS Control Tower las cuentas AFT y de aplicación, consulta la sección [Epics](#set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics).

**Cuentas obligatorias**

Su organización AWS Organizations debe incluir estas cuentas:
+ **Cuenta de aplicación**: una o más cuentas de origen en las que Servicios de AWS (Amazon EKS, Lambda y Amazon RDS) ejecutan y generan registros
+ **Cuenta de archivo de registro**: una cuenta dedicada para el almacenamiento y la administración centralizados de registros

**Versiones de producto**
+ [AWS Control Tower versión 3.1](https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-1) o posterior
+ La [versión 0.15.0](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) o posterior de Terraform

## Arquitectura
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-architecture"></a>

El siguiente diagrama ilustra una arquitectura de registro AWS centralizada que proporciona una solución escalable para recopilar, procesar y almacenar los registros de varias cuentas de aplicaciones en una cuenta dedicada de Log Archive. Esta arquitectura gestiona de forma eficiente los registros de Servicios de AWS Amazon RDS, Amazon EKS y Lambda, y los enruta mediante un proceso simplificado a los buckets regionales de S3 de la cuenta de Log Archive.

![\[Arquitectura de registro centralizado de AWS para recopilar registros de varias cuentas de aplicaciones.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9fc71a10-65d6-437b-9128-cc27bda11af4/images/2e916040-0f11-4712-a8dd-31c95194ce5d.png)


El flujo de trabajo incluye cinco procesos:

1. **Proceso del flujo de registros**
   + El proceso de flujo de registros comienza en las cuentas de la aplicación, donde se Servicios de AWS generan varios tipos de registros, como registros generales, de errores, de auditoría, registros de consultas lentas de Amazon RDS, registros del plano de control de Amazon EKS y registros de ejecución de funciones y errores de Lambda.
   + CloudWatch sirve como punto de recopilación inicial. Recopila estos registros por grupo de registros dentro de cada cuenta de aplicación.
   + En CloudWatch, [los filtros de suscripción](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) determinan qué registros deben reenviarse a la cuenta central. Estos filtros le proporcionan un control pormenorizado del reenvío de los registros, de modo que puede especificar los patrones de registro exactos o flujos de registro completos para centralizarlos.

1. **Transferencia de registros entre cuentas**
   + Los registros se mueven a la cuenta de Log Archive. CloudWatch Los filtros de suscripción facilitan la transferencia entre cuentas y preservan el contexto regional.
   + La arquitectura establece varios flujos paralelos para gestionar diferentes orígenes de registro de manera eficiente, a fin de garantizar un rendimiento y una escalabilidad óptimos.

1. **Procesamiento de registros en la cuenta de archivo de registros**
   + En la cuenta de archivo de registros, Firehose procesa los flujos de registro entrantes.
   + Cada región mantiene flujos de entrega de Firehose dedicados que pueden transformar, convertir o enriquecer los registros según sea necesario.
   + Estos flujos de Firehose envían los registros procesados a los buckets de S3 de la cuenta de archivo de registros, que se encuentra en la misma región que las cuentas de la aplicación de origen (región A en el diagrama) para mantener los requisitos de soberanía de datos.

1. **Notificaciones y flujos de trabajo adicionales**
   + Cuando los registros llegan a sus buckets de S3 de destino, la arquitectura implementa un sistema de notificaciones mediante Amazon SQS.
   + Las colas de SQS regionales permiten el procesamiento asíncrono y pueden activar flujos de trabajo, análisis o sistemas de alertas adicionales según los registros almacenados.

1. **AWS KMS por seguridad**

   La arquitectura incorpora medidas AWS KMS de seguridad. AWS KMS proporciona claves de cifrado para los cubos S3. Esto garantiza que todos los registros almacenados mantengan el cifrado en reposo y, al mismo tiempo, que el cifrado sea regional para cumplir con los requisitos de residencia de datos.

## Tools (Herramientas)
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-tools"></a>

**Servicios de AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) es un servicio de monitoreo y observabilidad que recopila datos operativos y de monitoreo en forma de registros, métricas y eventos. Proporciona una vista unificada de AWS los recursos, las aplicaciones y los servicios que se ejecutan en AWS y en los servidores locales.
+ CloudWatch Los [filtros de suscripción a los registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html) son expresiones que coinciden con un patrón en los eventos de registro entrantes y envían los eventos de registro coincidentes al AWS recurso especificado para su posterior procesamiento o análisis.
+ [AWS Control Tower Account Factory For Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) establece una canalización de Terraform para ayudarlo a aprovisionar y personalizar las cuentas. AWS Control Tower AFT proporciona un aprovisionamiento de cuentas basado en Terraform y, al mismo tiempo, le permite administrar sus cuentas con. AWS Control Tower
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) ofrece datos de streaming en tiempo real a destinos como Amazon S3, Amazon Redshift y Amazon Service. OpenSearch Se escala automáticamente para adaptarse al rendimiento de los datos y no es necesaria ninguna administración continua.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) es un servicio administrado de orquestación de contenedores que facilita la implementación, administración y escalado de aplicaciones en contenedores con Kubernetes. Administra de manera automática la disponibilidad y la escalabilidad de los nodos del plano de control de Kubernetes.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) crea y controla las claves de cifrado para cifrar sus datos. AWS KMS se integra con otros Servicios de AWS para ayudarle a proteger los datos que almacena con estos servicios.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio informático sin servidor que permite ejecutar código sin aprovisionar ni administrar servidores. Escala de manera automática las aplicaciones mediante la ejecución de código en respuesta a cada desencadenador y solo cobra por el tiempo de procesamiento que se utilice.
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) es un servicio administrado de base de datos relaciona que facilita la configuración, la operación y la escala de una base de datos relacional en la nube. Proporciona una capacidad rentable y redimensionable, además de que automatiza las tareas de administración que consumen mucho tiempo.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) es un servicio de colas de mensajes que le permite desacoplar y escalar microservicios, sistemas distribuidos y aplicaciones sin servidor. Elimina la complejidad de administrar y operar el middleware orientado a los mensajes.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento. Puede almacenar y recuperar cualquier cantidad de datos desde cualquier parte de la web.

**Otras herramientas**
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Código**

El código de este patrón está disponible en el repositorio de registro GitHub [centralizado](https://github.com/aws-samples/sample-centralised-logging-at-enterprise-scale-using-terraform).

## Prácticas recomendadas
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-best-practices"></a>
+ Utilice [varios Cuentas de AWS en una sola organización en AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html). Esta práctica permite una administración centralizada y un registro estandarizado en las cuentas.
+ Configure los [buckets de S3 con el control de versiones, las políticas de ciclo de vida y la replicación entre regiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html). Implemente el cifrado y el registro de acceso para garantizar la seguridad y el cumplimiento.
+ Implemente [estándares de registro comunes mediante el formato JSON](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html) con marcas de tiempo y campos estándares. Utilice una estructura de prefijos y una correlación coherentes IDs para facilitar el seguimiento y el análisis.
+ Habilite [los controles de seguridad con AWS KMS cifrado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) y acceso con privilegios mínimos. Mantenga la AWS CloudTrail supervisión y la rotación regular de las claves para mejorar la seguridad.
+ Configure [CloudWatch métricas y alertas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) para el seguimiento de las entregas. Supervise los costos y el rendimiento con notificaciones automáticas.
+ Configure las [políticas de retención de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) para satisfacer los requisitos de cumplimiento y habilite el registro de acceso al servidor de Amazon S3 para hacer un seguimiento de las solicitudes hechas a los buckets de S3. Conserve la documentación sobre las políticas de los buckets de S3 y las reglas del ciclo de vida. Haga revisiones periódicas de los registros de acceso, los permisos de los buckets y las configuraciones de almacenamiento para garantizar el cumplimiento y las [prácticas recomendadas de seguridad](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html).

## Epics
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics"></a>

### Configure cuentas AWS Control Tower de AFT y de aplicación
<a name="set-up-ctowerlong-aft-and-application-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure un AWS Control Tower entorno con AFT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrador de AWS | 
| Habilite el uso compartido de recursos para la organización. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrador de AWS | 
| Verifique o aprovisione las cuentas de la aplicación. | Para aprovisionar cuentas nuevas de aplicación para su caso de uso, créelas mediante AFT. Para obtener más información, consulte [Aprovisionar una nueva cuenta con AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html) en la AWS Control Tower documentación. | Administrador de AWS | 

### Configuración de archivos de configuración para cuentas de la aplicación
<a name="set-up-configuration-files-for-application-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copie el contenido de la carpeta `Application_account` al repositorio `aft-account-customizations`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 
| Revise y edite los parámetros de entrada para configurar la cuenta de la aplicación. | En este paso, debe configurar el archivo de configuración para crear recursos en las cuentas de la aplicación, incluidos los grupos de CloudWatch registros, los filtros de CloudWatch suscripción, las funciones y políticas de IAM y los detalles de configuración de las funciones de Amazon RDS, Amazon EKS y Lambda.En el repositorio `aft-account-customizations`, en la carpeta `Application_account`, configure los parámetros de entrada del archivo `terraform.tfvars` según los requisitos de su organización:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 

### Definición de los archivos de configuración para la cuenta de archivo de registros
<a name="set-up-configuration-files-for-the-log-archive-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copie el contenido de la carpeta `Log_archive_account` al repositorio `aft-account-customizations`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 
| Revise y edite los parámetros de entrada para configurar la cuenta de archivo de registros. | En este paso, definirá el archivo de configuración para crear recursos en la cuenta de archivo de registros, tales como los flujos de entrega de Firehose, los buckets de S3, las colas de SQS y los roles y políticas de IAM.En la carpeta `Log_archive_account` del repositorio `aft-account-customizations`, configure los parámetros de entrada del archivo `terraform.tfvars` según los requisitos de su organización:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 

### Ejecución de los comandos de Terraform para aprovisionar recursos
<a name="run-terraform-commands-to-provision-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Opción 1: implemente los archivos de configuración de Terraform desde AFT. | En AFT, la canalización de AFT se activa después de introducir el código con los cambios de configuración en el GitHub `aft-account-customizations` repositorio. AFT detecta de manera automática los cambios e inicia el proceso de personalización de la cuenta.Después de hacer cambios en los archivos de Terraform (`terraform.tfvars`), confirme y envíe los cambios al repositorio `aft-account-customizations`:<pre>$ git add *<br />$ git commit -m "update message"<br />$ git push origin main</pre>Si utiliza una rama distinta (por ejemplo `dev`), sustituya `main` por el nombre de la rama. | DevOps ingeniero | 
| Opción 2: implemente el archivo de configuración de Terraform de manera manual. | Si no utiliza AFT o quiere implementar la solución de manera manual, puede utilizar los comandos siguientes de Terraform de las carpetas `Application_account` y `Log_archive_account`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 

### Valide los recursos
<a name="validate-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique los filtros de suscripción. | Para verificar que los filtros de suscripción reenvían correctamente los registros de los grupos de registros de cuentas de la aplicación a la cuenta de archivo de registros, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 
| Verifique los flujos de Firehose. | Para verificar que los flujos de Firehose en la cuenta de archivo de registros procesan los registros de la aplicación correctamente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 
| Valide los buckets de S3 centralizados. | Para verificar que los buckets de S3 centralizados reciben y organizan los registros correctamente, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 
| Valide las colas de SQS. | Para verificar que las colas de SQS reciben notificaciones de archivos de registro nuevos, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Opción 1: retire los archivos de configuración de Terraform desde AFT. | Al eliminar los archivos de configuración de Terraform e introducir los cambios, AFT inicia de manera automática el proceso de eliminación de recursos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 
| Opción 2: limpie los recursos de Terraform de manera manual. | Si no utiliza AFT o quiere limpiar los recursos de manera manual, utilice los comandos siguientes de Terraform de las carpetas `Application_account` y `Log_archive_account`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El destino CloudWatch de los registros no se creó o está inactivo. | Valide lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Se produjo un error en el filtro de suscripción o está bloqueado en estado pendiente. | Comprueba lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| El flujo de entrega de Firehose no muestra registros de entrada. | Compruebe lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 

## Recursos relacionados
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-resources"></a>
+ [Terraform infrastructure setup](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) (documentación de Terraform)
+ [Implemente AWS Control Tower Account Factory para Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html) (AWS Control Tower documentación)
+ [Tutorial de IAM: delegue el acceso mediante el Cuentas de AWS uso de funciones de IAM (](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)) IAMdocumentation

# Configure el end-to-end cifrado para aplicaciones en Amazon EKS mediante cert-manager y Let's Encrypt
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Revanasiddappa y Vasanth Jeyaraj, Amazon Web Services*

## Resumen
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

La implementación del end-to-end cifrado puede resultar compleja y necesita administrar los certificados de cada activo de su arquitectura de microservicios. Si bien puede finalizar la conexión de Transport Layer Security (TLS) en el extremo de la red de Amazon Web Services (AWS) con un Network Load Balancer o Amazon API Gateway, algunas organizaciones end-to-end requieren el cifrado.

Este patrón utiliza el controlador de entrada NGINX para la entrada. Esto se debe a que cuando se crea una entrada de Kubernetes, el recurso de entrada utiliza un equilibrador de carga de red. El equilibrador de carga de red no permite cargar certificados de cliente. Por lo tanto, no puede lograr el TLS mutuo con el ingreso de Kubernetes.

Este patrón está pensado para las organizaciones que requieren la autenticación mutua entre todos los microservicios de sus aplicaciones. El TLS mutuo reduce la carga que supone mantener los nombres de usuario o las contraseñas y, además, puede utilizar un marco de seguridad listo para usar. El enfoque de este patrón es compatible si su organización tiene una gran cantidad de dispositivos conectados o si debe cumplir con estrictas pautas de seguridad.

Este patrón ayuda a aumentar la postura de seguridad de su organización al implementar el end-to-end cifrado para las aplicaciones que se ejecutan en Amazon Elastic Kubernetes Service (Amazon EKS). Este patrón proporciona una aplicación y un código de muestra en el repositorio de GitHub [End-to-end cifrado de Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) para mostrar cómo se ejecuta un microservicio con el end-to-end cifrado en Amazon EKS. El enfoque del patrón utiliza [cert-manager](https://cert-manager.io/docs/), un complemento de Kubernetes, con [Let's Encrypt](https://letsencrypt.org/) como autoridad de certificación (CA). Let's Encrypt es una solución rentable para administrar certificados y proporciona certificados gratuitos con una validez de 90 días. Cert-Manager automatiza el aprovisionamiento bajo demanda y la rotación de los certificados cuando se implementa un nuevo microservicio en Amazon EKS. 

**Destinatarios previstos**

Este patrón se recomienda para los usuarios que tengan experiencia con Kubernetes, TLS, Amazon Route 53 y el Sistema de nombres de dominio (DNS).

## Requisitos previos y limitaciones
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Un clúster existente de Amazon EKS.
+ Interfaz de la línea de comandos de AWS (AWS CLI) versión 1.7, instalada y configurada en macOS, Linux o Windows
+ La utilidad de línea de comandos `kubectl`, instalada y configurada para acceder al clúster de Amazon EKS. Para obtener más información, consulte [Installing kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (Instalación de kubectl) en la documentación de Amazon EKS.
+ Un nombre DNS existente para probar una aplicación. Para obtener más información, consulte [Registrar nombres de dominio mediante Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) en la documentación de Amazon Route 53. 
+ La última versión de [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html), instalada en su máquina local. Para obtener más información al respecto, consulte [Uso de Helm con Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) en la documentación de Amazon EKS y en el repositorio de GitHub [Helm](https://github.com/helm/helm). 
+ El GitHub [End-to-end cifrado del repositorio EKS de Amazon](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), clonado en su máquina local. 
+ Sustituya los siguientes valores en los `trustpolicy.json` archivos `policy.json` y del repositorio de GitHub [End-to-end cifrado clonado en Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme):
  + `<account number>`: sustitúyalo por el ID de cuenta de AWS de la cuenta en la que desea implementar la solución. 
  + `<zone id>`: sustitúyalo por el ID de zona de Route 53 del nombre de dominio. 
  + `<node_group_role>`: sustitúyalo por el nombre de la función de AWS Identity and Access Management del rol de IAM asociada a los nodos de Amazon EKS.
  + `<namespace>`: sustitúyalo por el espacio de nombres de Kubernetes en el que se despliega el controlador de entrada NGINX y la aplicación de ejemplo.
  + `<application-domain-name>`: sustitúyalo por el nombre de dominio DNS de Route 53

**Limitaciones**
+ Este patrón no describe cómo rotar los certificados y solo muestra cómo usar los certificados con microservicios en Amazon EKS. 

## Arquitectura
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

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

![\[Flujo de trabajo para configurar el cifrado para las aplicaciones en Amazon EKS mediante cert-manager y Let's Encrypt.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


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

1. Un cliente envía una solicitud de acceso a la aplicación al nombre DNS.

1. El registro de Route 53 es un CNAME para el equilibrador de carga de red.

1. El equilibrador de carga de red reenvía la solicitud al controlador de entrada NGINX que está configurado con un agente oyente TLS. La comunicación entre el controlador de entrada NGINX y el equilibrador de carga de red sigue el protocolo HTTPS.

1. El controlador de entrada NGINX realiza un enrutamiento basado en rutas en función de la solicitud del cliente al servicio de la aplicación.

1. El servicio de aplicaciones reenvía la solicitud al pod de la aplicación. La aplicación está diseñada para utilizar el mismo certificado al llamar a secretos.

1. Los pods ejecutan la aplicación de ejemplo con los certificados del administrador de certificados. La comunicación entre el controlador de entrada de NGINX y los pods utiliza HTTPS.


| 
| 
| Nota: Cert-Manager se ejecuta en su propio espacio de nombres. Utiliza un rol de clúster de Kubernetes para aprovisionar certificados como secretos en espacios de nombres específicos. Puede adjuntar esos espacios de nombres a los pods de aplicaciones y al NGINX Ingress Controller.  | 
| --- |

## Tools (Herramientas)
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Servicios de AWS**
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) es un servicio administrado que puede utilizar para ejecutar Kubernetes en AWS sin necesidad de instalar, operar ni mantener su propio plano de control o nodos de Kubernetes.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuye automáticamente el tráfico entrante entre varios destinos, por ejemplo, instancias EC2, contenedores y direcciones IP en una o varias zonas de disponibilidad.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.

**Otras herramientas**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) es un complemento de Kubernetes que solicita certificados, los distribuye a los contenedores de Kubernetes y automatiza la renovación de los certificados.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) es una solución de gestión del tráfico para aplicaciones nativas en la nube en Kubernetes y entornos contenerizados.

## Epics
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Cree y configure una zona alojada pública con Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una zona alojada pública para Route 53. | Inicie sesión en la consola de administración de AWS, abra la consola Amazon Route 53, elija **Zonas alojadas** y, a continuación, elija **Crear zona alojada**. Cree una zona alojada pública y registre el ID de la zona. Para obtener más información, consulte [Crear una zona alojada pública](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) en la documentación de Amazon Route 53.ACME DNS01 utiliza el proveedor de DNS para solicitar al administrador de certificados que emita el certificado. Este desafío le pide que demuestre que controla el DNS de su nombre de dominio poniendo un valor específico en un registro TXT situado debajo de ese nombre de dominio. Cuando Let's Encrypt proporciona un token a su cliente ACME, este crea un registro TXT derivado de ese token y de su clave de cuenta, y coloca ese registro en `_acme-challenge.<YOURDOMAIN>`. Luego, Let's Encrypt consulta el DNS de ese registro. Si encuentra una coincidencia, puede proceder a emitir un certificado. | AWS DevOps | 

### Configure un rol de IAM para permitir que el administrador de certificados acceda a la zona alojada pública
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la política de IAM para cert-manager.  | Se requiere una política de IAM para proporcionar a cert-manager permiso para validar que usted es propietario del dominio de Route 53. El `policy.json` ejemplo de política de IAM se proporciona en el `1-IAMRole` directorio del repositorio de GitHub [End-to-end cifrado clonado de Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).Escriba el siguiente comando en la CLI de AWS para crear la política de IAM:<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Cree el rol de IAM para cert-manager. | Después de crear la política de IAM, debe crear un rol de IAM. El ejemplo del rol de IAM `trustpolicy.json` se proporciona en el directorio `1-IAMRole`.Escriba el siguiente comando en la CLI de AWS para crear el rol de IAM:<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Asocie la política de al rol. | Escriba el siguiente comando en la CLI de AWS para adjuntar la política de IAM al rol de IAM: Sustituya `AWS_ACCOUNT_ID` por el ID de la cuenta de AWS. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Configure el controlador de entrada NGINX en Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente el controlador de entrada NGINX. | Instale la versión más reciente de `nginx-ingress` mediante Helm. Puede modificar la configuración `nginx-ingress` según sus requisitos antes de implementarla. Este patrón utiliza un equilibrador de carga de red anotado e interno que está disponible en el directorio `5-Nginx-Ingress-Controller`. Instale el controlador de entrada NGINX ejecutando el siguiente comando Helm desde el directorio `5-Nginx-Ingress-Controller`.`helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Verifique que el controlador de entrada NGINX se encuentre instalado. | Escriba el comando `helm list`. El resultado debería mostrar que el controlador de entrada NGINX está instalado. | AWS DevOps | 
| Cree un registro A de Route 53. | El registro A apunta al equilibrador de carga de red creado por el controlador de entrada de NGINX.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Configurar NGINX en VirtualServer Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente NGINX. VirtualServer | El VirtualServer recurso NGINX es una configuración de equilibrio de carga que es una alternativa al recurso de entrada. La configuración para crear el VirtualServer recurso NGINX está disponible en el archivo del `nginx_virtualserver.yaml` directorio. `6-Nginx-Virtual-Server` Introduzca el siguiente comando `kubectl` para crear el recurso VirtualServer NGINX.`kubectl apply -f  nginx_virtualserver.yaml`Asegúrese de actualizar el nombre de dominio de la aplicación, el secreto del certificado y el nombre del servicio de la aplicación en el archivo `nginx_virtualserver.yaml`. | AWS DevOps | 
| Compruebe que se ha creado NGINX VirtualServer . | Introduzca el siguiente comando `kubectl` para comprobar que el VirtualServer recurso NGINX se creó correctamente.`kubectl get virtualserver`Compruebe que la columna `Host` coincida con el nombre de dominio de su aplicación. | AWS DevOps | 
| Implemente el servidor web NGINX con TLS habilitado. | Este patrón utiliza un servidor web NGINX con TLS habilitado como aplicación para probar el cifrado. end-to-end Los archivos de configuración necesarios para implementar la aplicación de prueba están disponibles en el directorio `demo-webserver`. Para implementar la aplicación de prueba, ejecute el siguiente comando en `kubectl`:`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Compruebe que se hayan creado los recursos de la aplicación de prueba. | Introduzca los siguientes comandos en `kubectl` para comprobar que se han creado los recursos necesarios para la aplicación de prueba:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Validación de la solicitud. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Recursos relacionados
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Recursos de AWS**
+ [Creación de registros con la consola de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (documentación de Amazon Route 53)
+ [Uso de un equilibrador de carga de red con el controlador de entrada de NGINX en Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) en el blog de AWS

**Otros recursos**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (documentación del administrador de certificados)
+ [Configuración del proveedor de desafíos DNS01](https://cert-manager.io/docs/configuration/acme/dns01/) (documentación sobre el administrador de certificados)
+ [El desafío Let's Encrypt DNS](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (documentación de Let's Encrypt)

# Simplificación de la implementación de aplicaciones multiusuario de Amazon EKS mediante Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate y Shrikant Patil, Amazon Web Services*

## Resumen
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Muchas empresas que ofrecen productos y servicios son sectores regulados por los datos que deben mantener las barreras de datos entre sus funciones empresariales internas. Este patrón describe cómo puede utilizar la característica de varias tenencias de Amazon Elastic Kubernetes Service (Amazon EKS) para crear una plataforma de datos que logre el aislamiento lógico y físico entre los inquilinos o usuarios que comparten un clúster único de Amazon EKS. El patrón proporciona aislamiento a través de los enfoques siguientes:
+ Aislamiento del espacio de nombres de Kubernetes
+ Control de acceso basado en roles (RBAC)
+ Políticas de red
+ Cuotas de recursos
+ AWS Identity and Access Management Funciones (IAM) para cuentas de servicio (IRSA)

Además, esta solución utiliza Flux para mantener inmutable la configuración del inquilino al implementar aplicaciones. Puede implementar las aplicaciones del inquilino y especificar el repositorio del inquilino que contiene el archivo `kustomization.yaml` de Flux en la configuración.

Este patrón implementa lo siguiente:
+ Un AWS CodeCommit repositorio, AWS CodeBuild proyectos y una AWS CodePipeline canalización, que se crean mediante la implementación manual de los scripts de Terraform.
+ Componentes de red y cómputo obligatorios para alojar a los inquilinos. Se crean a través de Terraform CodePipeline y CodeBuild utilizando Terraform.
+ Espacios de nombres de inquilinos, políticas de red y cuotas de recursos, que se configuran a través de un gráfico de Helm.
+ Aplicaciones que pertenecen a diferentes inquilinos, implementadas con Flux.

Le recomendamos que planifique y cree con detenimiento su propia arquitectura para varios inquilinos según sus requisitos únicos y sus consideraciones de seguridad. Este patrón proporciona un punto de partida para la implementación.

## Requisitos previos y limitaciones
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ AWS Command Line Interface [(AWS CLI) versión 2.11.4 o posterior, [instalada y configurada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ La versión 0.12 o posterior de [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) instalada en su máquina local
+ La versión 3.0.0 o posterior del [Proveedor de AWS para Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest)
+ Versión 2.10 o posterior de [Kubernetes Provider](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs)
+ Versión 2.8.0 o posterior de [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs)
+ Versión 1.14 o posterior de [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs)

**Limitaciones**
+ **Dependencia de las implementaciones manuales de Terraform:** la configuración inicial del flujo de trabajo, que incluye la creación de CodeCommit repositorios, CodeBuild proyectos y CodePipeline canalizaciones, se basa en las implementaciones manuales de Terraform. Esto introduce una posible limitación respecto de automatización y escalabilidad, ya que requiere una intervención manual para hacer cambios en la infraestructura.
+ **CodeCommit dependencia de los repositorios:** el flujo de trabajo se basa en CodeCommit los repositorios como solución de gestión del código fuente y está estrechamente vinculado a ellos. Servicios de AWS

## Arquitectura
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Arquitecturas de destino **

Este patrón implementa tres módulos para crear la infraestructura de canalización, red y computación de una plataforma de datos, como se ilustra en los diagramas siguientes.

*Arquitectura de canalización:*

![\[Infraestructura de canalización para la arquitectura multiusuario de Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Arquitectura de redes:*

![\[Infraestructura de redes para la arquitectura multiusuario de Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Arquitectura de computación:*

![\[Infraestructura de computación para la arquitectura multiusuario de Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Tools (Herramientas)
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Servicios de AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que permite almacenar y administrar repositorios de Git de forma privada, sin necesidad de administrar su propio sistema de control de origen.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)es un centro central que conecta nubes privadas virtuales () y redes locales. VPCs
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.

**Otras herramientas**
+ Las [políticas de red de Cilium](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) son compatibles con las políticas de red de L3 y L4 de Kubernetes. Se pueden ampliar con políticas de L7 para proporcionar seguridad de las API para HTTP, Kafka y gRPC, y otros protocolos similares.
+ [Flux](https://fluxcd.io/) es una herramienta de entrega continua (CD) basada en Git que automatiza las implementaciones de aplicaciones en Kubernetes.
+ [Helm](https://helm.sh/docs/): es un administrador de paquetes de código abierto para Kubernetes que le permite instalar y administrar aplicaciones en el clúster de Kubernetes.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de soluciones Terraform [Multi-Tenancy de GitHub EKS](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

## Prácticas recomendadas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Para directrices y prácticas recomendadas para utilizar esta implementación, consulte lo siguiente:
+ [Amazon EKS multi-tenancy best practices](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentación de Flux](https://fluxcd.io/flux/get-started/)

## Epics
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Creación de canalizaciones para las etapas de compilación, prueba e implementación de Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio del proyecto. | Clone el repositorio de la [solución GitHub EKS Multi-Tenancy Terraform](https://github.com/aws-samples/aws-eks-multitenancy-deployment) ejecutando el siguiente comando en una ventana de terminal:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Inicie el bucket de S3 de Terraform y Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Actualice los archivos `run.sh` y `locals.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Implemente el módulo de canalización. | Para crear recursos de canalización, ejecute los comandos siguientes de Terraform de manera manual. No hay ninguna orquestación para ejecutar estos comandos automáticamente.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Creación de la infraestructura de red
<a name="create-the-network-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Iniciar la canalización.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Tras esta primera ejecución, la canalización se iniciará automáticamente cada vez que realices un cambio en la rama principal del CodeCommit repositorio.La canalización incluye las siguientes [etapas](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide los recursos creados a través del módulo de red. | Confirme que los siguientes AWS recursos se crearon después de que la canalización se implementara correctamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Creación de la infraestructura de computación
<a name="create-the-compute-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice `locals.tf` para permitir el acceso del CodeBuild proyecto a la VPC. | Para implementar los complementos para el clúster privado de Amazon EKS, el CodeBuild proyecto debe estar adjunto a la VPC de Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Actualice los archivos `buildspec` para crear el módulo de computación. | En la carpeta `templates`, en todos los archivos de YAML `buildspec`, establezca el valor de la variable `TF_MODULE_TO_BUILD` de `network` a `compute`:<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Actualice el archivo `values` para el gráfico de Helm de administración de inquilinos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide los recursos de computación. | Tras actualizar los archivos en los pasos anteriores, se CodePipeline inicia automáticamente. Confirme que creó los siguientes AWS recursos para la infraestructura informática:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Comprobación de la administración de inquilinos y otros recursos
<a name="check-tenant-management-and-other-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide los recursos de administración de inquilinos en Kubernetes. | Ejecute los comandos siguientes para comprobar que los recursos de administración de inquilinos se hayan creado correctamente con la ayuda de Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifique las implementaciones de aplicaciones de inquilinos. | Para comprobar que se implementaron las aplicaciones de inquilinos, ejecute los comandos siguientes.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Resolución de problemas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Aparece un mensaje de error similar al siguiente:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Para solucionar el problema, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Recursos relacionados
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Amazon EKS Blueprints for Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Amazon EKS Best Practices Guides, Multi-tenancy section](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Sitio web de Flux](https://fluxcd.io/)
+ [Sitio web de Helm](https://helm.sh/)

## Información adicional
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

A continuación, se muestra un ejemplo de estructura de repositorios para implementar aplicaciones de inquilinos:

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```

# Simplificación del desarrollo y la implementación de los bots de Amazon Lex mediante un flujo de trabajo automatizado
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow"></a>

*Balaji Panneerselvam, Attila Dancso, Pavan Dusanapudi, Anand Junnani y James O'Hara, Amazon Web Services*

## Resumen
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-summary"></a>

Desarrollar e implementar los bots conversacionales de Amazon Lex puede ser un desafío cuando se trata de administrar varias características, desarrolladores y entornos. Un flujo de trabajo automatizado que utilice los principios de la infraestructura como código (IaC) puede ayudar a agilizar el proceso. Este patrón puede ayudar a mejorar la productividad de los desarrolladores de Amazon Lex y permitir una administración eficiente del ciclo de vida de los bots de las maneras siguientes:
+ **Permita el desarrollo simultáneo de varias características**: con un flujo de trabajo automatizado, los desarrolladores pueden trabajar en distintas características en paralelo en ramas independientes. Luego, los cambios se pueden combinar e implementar sin bloquear otros trabajos.
+ **Utilice la IU de la consola de Amazon Lex**: los desarrolladores pueden utilizar la consola sencilla de Amazon Lex para crear y probar bots. A continuación, se describen los bots en el código de infraestructura para su implementación.
+ **Promocione los bots en los entornos**: el flujo de trabajo automatiza la promoción de las versiones de los bots desde entornos más bajos, como el de desarrollo y las pruebas, hasta la producción. Este enfoque reduce el riesgo y la sobrecarga de las promociones manuales.
+ **Mantenga el control de versiones**: la administración de las definiciones de bots en Git, en lugar de hacerlo únicamente a través del servicio Amazon Lex, le proporciona el control de versiones y un registro de auditoría. Los cambios se rastrean a los desarrolladores individuales, a diferencia de cuando solo se utilizan Consola de administración de AWS o APIs para modificar los bots almacenados en ellos AWS. 

Al automatizar el proceso de lanzamiento de los bots de Amazon Lex, los equipos pueden ofrecer características más rápido, con menos riesgos y esfuerzos. Los bots permanecen bajo control de versiones en lugar de estar aislados en la consola de Amazon Lex. 

## Requisitos previos y limitaciones
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-prereqs"></a>

**Requisitos previos**
+ El flujo de trabajo incluye varios Cuentas de AWS para diferentes entornos (desarrollo, producción y DevOps), lo que requiere configuraciones de administración de cuentas y acceso entre cuentas.
+ Python 3.9 está disponible en el entorno de implementación o canalización.
+ Git se [instaló](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) y configuró en una estación de trabajo local para el control del código fuente.
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) y configurado para autenticarse mediante la línea de comandos o Python.

**Limitaciones**
+ **Acceso al repositorio**: el flujo de trabajo presupone que la canalización de integración continua y entrega continua (CI/CD) tiene los permisos necesarios para llevar a cabo cambios en el repositorio de código fuente. 
+ **Versión inicial del bot**: las herramientas requieren que se implemente una versión inicial del bot mediante AWS CloudFormation plantillas. Debe crear la primera iteración del bot y enviarla al repositorio antes de que el flujo de trabajo automatizado pueda tomar el control.
+ **Conflictos de combinación**: aunque el flujo de trabajo tiene como objetivo permitir el desarrollo simultáneo, aún existe la posibilidad de que se produzcan conflictos de combinación al integrar cambios de ramas distintas. La resolución de conflictos en las configuraciones de los bots puede requerir una intervención manual.

**Versiones de producto**
+ [Python 3.9](https://www.python.org/downloads/) o superior
+ [AWS CDK v2 2.12.4.0](https://docs.aws.amazon.com/cdk/api/versions.html) o superior
+ [AWS SDK para Python (Boto3)](https://docs.aws.amazon.com/pythonsdk/)1,28 o superior

## Arquitectura
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-architecture"></a>

En el diagrama siguiente se muestra la arquitectura de alto nivel y los componentes clave de la solución.

![\[Flujo de trabajo para automatizar el desarrollo y la implementación de los bots de Amazon Lex.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/3c7f9d16-9708-43c4-afa6-9d804d6b9dad/images/cdc73e82-a777-4e88-8bf8-a73c9bacb47f.png)


Entre los componentes clave se incluyen los siguientes:
+ **Repositorio de bots de Lex**: un repositorio de Git que almacena las definiciones de IaC para los bots de Amazon Lex.
+ **DevOps**— Una Cuenta de AWS dedicada a alojar los CI/CD oleoductos y los recursos relacionados para el proceso de desarrollo e implementación.
+ **Canalizaciones**: AWS CodePipeline instancias que automatizan varias etapas del ciclo de vida de desarrollo e implementación de los bots, como la creación de un nuevo bot, la exportación de la definición de un bot, la importación de una definición de bot y la eliminación de un bot.
+ **Bots de tickets y bot principal**: los recursos del bot de Amazon Lex, en los que los bots de tickets son bots con características específicas desarrollados por equipos o desarrolladores individuales, y el bot principal es el bot básico que integra todas las características.

El diagrama de arquitectura ilustra el flujo de trabajo siguiente:

1. **Bot principal de referencia**: el punto de partida del flujo de trabajo es basar el bot principal en el entorno de desarrollo (Dev). El bot principal sirve de base para desarrollos futuros y adiciones de características.

1. **Cree un bot de tickets**: cuando es necesaria una característica nueva o un cambio, se crea un bot de tickets. El bot de tickets es básicamente una copia o una rama del bot principal en la que los desarrolladores pueden trabajar sin que ello afecte a la versión principal.

1. **Exporte el bot de tickets**: una vez finalizado el trabajo en el bot de tickets, se exporta desde el servicio Amazon Lex. A continuación, se hace un cambio de base de la rama que contiene el bot de tickets desde la rama principal. Este paso garantiza que se incorporen todos los cambios hechos en el bot principal mientras el bot de tickets se encontraba en desarrollo, lo que reduce los conflictos posibles.

1. **Importe el bot de tickets con cambio de base y valide**: el bot de tickets con cambio de base se importa de nuevo al entorno de desarrollo y se valida para garantizar que funciona correctamente con los cambios más recientes de la rama principal. Si la validación se hace correctamente, se crea una solicitud de extracción (PR) para combinar los cambios del bot de tickets con la rama principal.

1. **Elimine el bot de tickets**: una vez que los cambios se hayan combinado correctamente en la rama principal, el bot de tickets ya no será necesario. El bot de tickets se puede eliminar para mantener el entorno limpio y manejable.

1. **Implemente el bot principal en el entorno de desarrollo y pruébelo**: el bot principal actualizado, que ahora incluye las nuevas características o cambios, se implementa en el entorno de desarrollo. Aquí se somete a pruebas exhaustivas para garantizar que todas las funcionalidades responden según lo previsto.

1. **Implemente el bot principal en el entorno de producción**: una vez finalizadas y satisfactorias las pruebas en el entorno de desarrollo, el bot principal se implementa en el entorno de producción. Este paso es la etapa final del flujo de trabajo, en la que las características nuevas están disponibles para los usuarios finales.

**Automatización y escala**

El flujo de trabajo automatizado permite a los desarrolladores trabajar en características distintas en paralelo, cada una en ramas independientes. Esto facilita el desarrollo simultáneo, lo que permite a los equipos colaborar de manera eficaz y ofrecer características con mayor rapidez. Al estar las ramas aisladas unas de otras, los cambios se pueden combinar e implementar sin bloquear ni interferir con otros trabajos en curso.

El flujo de trabajo automatiza la implementación y la promoción de versiones de bots en entornos distintos, por ejemplo, desarrollo, pruebas y producción.

El almacenamiento de las definiciones de bots en un sistema de control de versiones como Git proporciona un registro de auditoría completo y permite una colaboración eficiente. Los desarrolladores individuales controlan los cambios, lo que garantiza la transparencia y la responsabilidad durante todo el ciclo de vida del desarrollo. Este enfoque también facilita las revisiones del código, lo que permite a los equipos identificar y abordar los problemas antes de la implementación en la producción.

Al usar AWS CodePipeline y otros Servicios de AWS, el flujo de trabajo automatizado se puede escalar para adaptarse a cargas de trabajo y tamaños de equipos cada vez mayores.

## Tools (Herramientas)
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software de código abierto para definir la Nube de AWS infraestructura en el código mediante el uso de lenguajes de programación conocidos y aprovisionarla mediante el aprovisionamiento. CloudFormation La implementación de muestra de este patrón utiliza Python.
+ [AWS CDK Interfaz de línea de comandos (AWS CDK CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): el AWS CDK kit de herramientas es la herramienta principal para interactuar con AWS CDK la aplicación. Ejecuta tu aplicación, consulta el modelo de aplicación que has definido y produce e implementa las CloudFormation plantillas generadas por la CDK.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le 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 país. Cuentas de AWS Regiones de AWS Este patrón se utiliza CloudFormation para implementar las configuraciones de bots de Amazon Lex y los recursos relacionados utilizando la infraestructura como código.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar. Este patrón se utiliza CodeBuild para crear y empaquetar los artefactos de implementación.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua. Este patrón se utiliza CodePipeline para organizar el proceso de entrega continua.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante comandos en el shell de tu línea de comandos.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) sirve Servicio de AWS para crear interfaces de conversación (bots) para aplicaciones que utilizan voz y texto.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

**Otras herramientas**
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido de código abierto.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [management-framework-sample-for-amazon-lex](https://github.com/aws-samples/management-framework-sample-for-amazon-lex). El repositorio de código contiene las carpetas y los archivos siguientes.
+ `prerequisite`carpeta: contiene las definiciones de CloudFormation pila (utilizando la AWS CDK) para configurar los recursos y entornos necesarios.
+ Carpeta `prerequisite/lexmgmtworkflow`: directorio principal del proyecto de Lex Management Workflow, que incluye las definiciones de pila y el código Python.
+ `prerequisite/tests`: contiene pruebas unitarias.
+ `src`: directorio de código fuente, que incluye el contenedor y las utilidades de administración de bots de Amazon Lex.
+ `src/dialogue_lambda`: directorio de códigos fuente de la función de Lambda del enlace de diálogo que intercepta y procesa las entradas de los usuarios durante una conversación con un bot de Amazon Lex.

## Prácticas recomendadas
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-best-practices"></a>
+ **Separación de preocupaciones**
  + Mantenga una clara separación de responsabilidades entre DevOps los entornos de desarrollo y producción.
  + Úselo Cuentas de AWS por separado para cada entorno a fin de reforzar los límites de aislamiento y seguridad adecuados.
  + Utilice roles entre cuentas y principios de acceso con privilegios mínimos para garantizar el acceso controlado entre entornos.
+ **La infraestructura como código**
  + Revise y actualice de manera periódica el código de infraestructura para adaptarlo a las prácticas recomendadas y a los requisitos en evolución.
  + Establezca una estrategia clara de ramificación y combinación para el repositorio de código fuente
+ **Pruebas y validación**
  + Implemente pruebas automatizadas en varias etapas del proceso para detectar los problemas al principio del ciclo de desarrollo.
  + Utilice la consola de Amazon Lex o los marcos de pruebas automatizadas para validar las configuraciones y la funcionalidad de los bots antes de pasarlo a entornos superiores.
  + Considere la posibilidad de implementar puertas de aprobación manuales para las implementaciones en entornos críticos o de producción.
+ **Supervisión y registro**
  + Configure mecanismos de supervisión y registro para las canalizaciones, las implementaciones y las interacciones de bots.
  + Supervise los eventos de la canalización, los estados de la implementación y las métricas de rendimiento de los bots para identificar y abordar los problemas de inmediato.
  + Utilice los servicios de AWS, como Amazon CloudWatch AWS CloudTrail, y AWS X-Ray para el registro y la supervisión centralizados.
  + Revise y analice de manera periódica el rendimiento, la eficiencia y la eficacia del flujo de trabajo automatizado.
+ **Seguridad y conformidad**
  + Implemente prácticas de codificación seguras y siga las prácticas recomendadas de AWS seguridad para el desarrollo e implementación de los bots Amazon Lex.
  + Revise y actualice de manera periódica los roles, las políticas y los permisos de IAM para ajustarlos al principio de privilegios mínimos.
  + Considere la posibilidad de integrar el análisis de seguridad y las comprobaciones de cumplimiento en los procesos.

## Epics
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-epics"></a>

### Configuración de IaC para la administración de bots de Amazon Lex
<a name="set-up-iac-for-lex2-bot-management"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el entorno local de CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | AWS DevOps | 
| Cree un rol entre cuentas en el entorno de `devops`. | La `devops` cuenta es responsable del alojamiento y la administración de las CI/CD canalizaciones. Para permitir que las CI/CD canalizaciones interactúen con los `prod` entornos `dev` y, ejecuta los siguientes comandos para crear un rol multicuenta en la cuenta. `devops`<pre>cdk bootstrap --profile=devops<br /><br />cdk deploy LexMgmtDevopsRoleStack -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 
| Cree un rol entre cuentas en el entorno de `dev`. | Cree un rol de IAM en la cuenta de `dev` con los permisos necesarios para permitir que la cuenta de `devops` asuma este rol. La CI/CD canalización utiliza esta función para realizar acciones en la `dev` cuenta, como implementar y administrar los recursos de los bots de Amazon Lex.Para crear el rol de IAM, ejecute los comandos siguientes:<pre>cdk bootstrap --profile=dev<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=dev</pre> | AWS DevOps | 
| Cree un rol entre cuentas en el entorno de `prod`. | Cree un rol de IAM en la cuenta de `prod` con los permisos necesarios para permitir que la cuenta de `devops` asuma este rol. La CI/CD canalización utiliza esta función para realizar acciones en la `prod` cuenta, como implementar y administrar los recursos de los bots de Amazon Lex.<pre>cdk bootstrap --profile=prod<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=prod</pre> | AWS DevOps | 
| Cree canalizaciones en el entorno de `devops`. | Para administrar el flujo de trabajo de desarrollo de los bots de Amazon Lex, ejecute el comando siguiente para configurar las canalizaciones en el entorno de `devops`. <pre>cdk deploy LexMgmtWorkflowStack -c devops-account-id=1111111111111 -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 

### Establecimiento de la línea de base para el bot principal
<a name="establish-the-baseline-for-the-main-bot"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Defina la versión inicial del bot principal. | Para definir la versión inicial del bot principal, [desencadene](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-triggers) la canalización de `BaselineBotPipeline`.La canalización implementa la definición básica del bot que se define en la CloudFormation plantilla, exporta la definición principal del bot en forma de archivos.json y almacena el código del bot principal en un sistema de control de versiones. | AWS DevOps | 

### Implemente el flujo de trabajo de desarrollo de características
<a name="implement-the-feature-development-workflow"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el bot de tickets para desarrollar y probar una característica. | `TicketBot` es una instancia de bot nueva que se importa de la definición de bot principal existente en la rama de características. Este enfoque garantiza que el bot nuevo tenga todas las funcionalidades y configuraciones actuales del bot principal.Para definir la versión inicial del bot de tickets, desencadene la canalización `CreateTicketBotPipeline`.La canalización crea una rama nueva de características en el sistema de control de versiones y crea una instancia nueva de bot de tickets basada en el bot principal. | Desarrollador de bots de Lex | 
| Desarrolle y pruebe la característica del bot de tickets.  | Para desarrollar y probar la función, inicie sesión en la consola Amazon Lex Consola de administración de AWS y ábrala en [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/). Para más información, consulte [Testing a bot using the console](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html) en la documentación de Amazon Lex.Con la instancia de `TicketBot`, ahora puede agregar, modificar o ampliar la funcionalidad del bot para implementar la característica nueva. Por ejemplo, puede crear o modificar intenciones, expresiones, espacios y flujos de diálogo. Para más información, consulte [Adding intents](https://docs.aws.amazon.com/lexv2/latest/dg/add-intents.html) en la documentación de Amazon Lex. | Desarrollador de bots de Lex | 
| Exporte la definición de bot de tickets. | La definición de bot exportada es básicamente una representación de la configuración y la funcionalidad del bot en formato JSON.Para exportar la definición del bot de tickets, desencadene la canalización `ExportTicketBotPipeline`.La canalización exporta la definición del bot de tickets como archivos .json y almacena el código del bot de tickets en una rama de características del sistema de control de versiones. | Desarrollador de bots de Lex | 
| Cambie la base de la rama de características desde la última rama principal. | Durante el desarrollo de una característica nueva, es posible que la rama principal haya recibido otros cambios por parte de desarrolladores o equipos distintos. Para incorporar estos cambios en la rama de características, haga una operación `rebase` de Git. Básicamente, esta operación reproduce las confirmaciones de la rama de características sobre las confirmaciones más recientes de la rama principal, lo que garantiza que la rama de características incluya todos los cambios más recientes | Desarrollador de bots de Lex | 
| Importe y valide el bot de tickets que cambió de base. | Tras cambiar la base de la rama de características, debe importarla a la instancia del bot de tickets. Esta importación actualiza el bot de tickets existente con los cambios más recientes de la rama que cambió de base.Para importar el bot de tickets con nueva base, desencadene la canalización `ImportTicketBotPipeline`.La canalización importa a la instancia de `TicketBot` los archivos .json de la definición del bot de tickets que se encuentran en la rama de características del sistema de control de versiones. | Desarrollador de bots de Lex | 
| Valide la definición de bot que cambió de base. | Tras importar la definición de bot con cambio de base, es fundamental validar su funcionalidad. Debe asegurarse de que la característica nueva funcione según lo esperado y no entre en conflicto con la funcionalidad existente. Por lo general, esta validación implica probar el bot con varios escenarios de entrada, comprobar las respuestas y comprobar que el bot se comporta según lo previsto. Puede llevar a cabo la validación de cualquiera de las siguientes maneras:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Desarrollador de bots de Lex | 
| Combine la rama de características con la rama principal. | Tras desarrollar y probar la característica nueva en la instancia de `TicketBot` aislada, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Desarrollador de bots de Lex, administrador de repositorios | 
| Elimine la rama de características y el bot de tickets.  | Cuando una rama de características se haya combinado correctamente con la rama principal, elimine la rama de características y el bot de tickets del repositorio de código fuente. Para eliminar la rama de características y el bot de tickets, desencadene la canalización `DeleteTicketBotPipeline`.La canalización elimina los recursos de bots temporales que se crearon durante el proceso de desarrollo (por ejemplo, el bot de tickets). Esta acción ayuda a mantener un repositorio limpio y a evitar confusiones o conflictos con las ramas de características futuras.  | Desarrollador de bots de Lex | 

### Mantén el bot principal
<a name="maintain-the-main-bot"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Importe la última definición de bot principal al entorno de `dev`. | Para importar al entorno de `dev` la última definición de bot principal de la rama principal, desencadene la canalización de `DeployBotDevPipeline`.La canalización también crea una etiqueta de git tras su aprobación. | AWS DevOps | 
| Importe la última definición de bot principal al entorno de `prod`. | Para importar al entorno de `prod` la definición de bot más reciente de la rama principal, proporcione la referencia de etiqueta de la tarea anterior como parámetro y desencadene la canalización de `DeployBotProdPipeline`.La canalización importa al entorno de `prod` la definición de bot más reciente de una etiqueta específica. | AWS DevOps | 

## Resolución de problemas
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Al implementar los bots de Amazon Lex en diferentes cuentas Cuentas de AWS, los servicios de herramientas deben tener los permisos necesarios para acceder a los recursos de esas cuentas. | Para conceder acceso entre cuentas, utilice roles y políticas de IAM. Cree roles de IAM en las cuentas de destino y adjunte políticas a los roles que concedan los permisos necesarios. A continuación, asuma estos roles desde la cuenta en la que está implementado el bot de Amazon Lex.Para más información, consulte [IAM permissions required to import](https://docs.aws.amazon.com/lexv2/latest/dg/import.html#import-permissions) y [IAM permissions required to export bots in Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/export.html#export-permissions) en la documentación de Amazon Lex. | 

## Recursos relacionados
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-resources"></a>
+ [Importing bots in Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/import.html)
+ [Inicie una canalización en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)
+ [Trabajar con los bots de Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/building-bots.html)

# Coordine la dependencia de los recursos y la ejecución de tareas mediante la construcción AWS Fargate WaitCondition hook
<a name="use-the-aws-fargate-waitcondition-hook-construct"></a>

*Stan Fan, Amazon Web Services*

## Resumen
<a name="use-the-aws-fargate-waitcondition-hook-construct-summary"></a>

Este patrón describe el paquete npm WaitCondition hook (`waitcondition-hook-for-aws-fargate-task`), que es una solución nativa de la nube diseñada para organizar tareas [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)en clústeres de Amazon Elastic Container Service (Amazon ECS). 

El WaitCondition gancho es una AWS Cloud Development Kit (AWS CDK) construcción diseñada específicamente para su integración con. AWS CloudFormation El WaitCondition gancho ofrece las siguientes funciones clave:
+ Actúa como un mecanismo de condición de espera y detiene la ejecución de la CloudFormation pila hasta que se complete una tarea específica de Fargate, lo que ayuda a organizar las implementaciones y el aprovisionamiento de recursos.
+ Soporta TypeScript Python, lo que lo hace ideal para AWS CDK proyectos.
+ Permite a los desarrolladores y arquitectos orquestar las implementaciones coordinando la finalización de las tareas y la administración de los recursos para las aplicaciones en contenedores en AWS.
+ Permite ejecutar tareas de Fargate con uno o varios contenedores integrados en un CloudFormation ciclo de vida, y puede gestionar los errores de las tareas y revertir la CloudFormation pila después de un error en las tareas.
+ Proporciona flexibilidad para agregar dependencias entre los recursos y los resultados de la ejecución de tareas de Fargate, lo que permite personalizar tareas o invocar otros puntos de conexión. Por ejemplo, puede pausar una CloudFormation pila y esperar a que se realice una migración de base de datos (realizada mediante una tarea de Fargate) y aprovisionar otros recursos que podrían depender del éxito de la migración de la base de datos.

## Requisitos previos y limitaciones
<a name="use-the-aws-fargate-waitcondition-hook-construct-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ AWS Cloud Development Kit (AWS CDK) Interfaz de línea de comandos (CLI) instalada en una estación de trabajo local. Para obtener más información, consulte la [referencia de AWS CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) en la AWS CDK documentación.
+ [Gestor de paquetes de nodos (npm), instalado en una estación de trabajo local y configurado para entrar.AWS CDK TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Para obtener más información, consulte [Descarga e instalación de Node.js y npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) en la documentación de npm.
+ Yarn instalado en un equipo de trabajo local. Para más información, consulte [Installation](https://yarnpkg.com/getting-started/install) en la documentación de Yarn.

**Limitaciones**
+ Esta solución se implementa en una sola. Cuenta de AWS
+ El código de retorno esperado del contenedor es `0` para indicar que es correcto. Cualquier otro código devuelto indica un error y la CloudFormation pila se revertirá. 
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="use-the-aws-fargate-waitcondition-hook-construct-architecture"></a>

En el siguiente diagrama se muestra la arquitectura del constructo.

![\[Flujo de trabajo de AWS Step Functions del constructo waitcondition-hook-for-aws -fargate-task.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/598020df-908c-4486-9844-c05af759c18a.png)


En el diagrama siguiente se muestra el flujo de trabajo de `waitcondition-hook-for-aws-fargate-task`:

1. `WaitCondition`y `WaitConditionHandler` están aprovisionados para escuchar la respuesta de las funciones. AWS Lambda 

1. Según el resultado de la tarea, se desencadena `CallbackFunction` o `ErrorHandlerFunction` al finalizar la tarea de Fargate.

1. La función de Lambda envía una señal de CORRECTO o ERROR a `WaitConditionHandler`.

1. `WaitConditionHandler` continúa aprovisionando los recursos si el resultado de la ejecución de la tarea de Fargate es correcto o revierte la pila si se produjo un error en la tarea.

En el diagrama siguiente se muestra un ejemplo de un flujo de trabajo para hacer una migración de bases de datos.

![\[Flujo de trabajo de migración de bases de datos de Amazon RDS mediante WaitCondition Hook Construct.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/3b83fc2a-80bb-4ba9-9637-782060493cf0.png)


El flujo de trabajo de ejemplo utiliza el constructo `waitcondition-hook-for-aws-fargate-task` para hacer una migración de base de datos de la manera siguiente:

1. Una instancia de Amazon Relational Database Service (Amazon RDS) aprovisionada.

1. El constructo `waitcondition-hook-for-aws-fargate-task` ejecuta la tarea de migración de la base de datos y detiene la pila como una instancia de Amazon Elastic Compute Cloud (Amazon EC2).

1. Si la tarea de migración finaliza correctamente, envía una señal de éxito a CloudFormation. De lo contrario, envía una señal de error a la pila CloudFormation y la revierte.

## Tools (Herramientas)
<a name="use-the-aws-fargate-waitcondition-hook-construct-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software que le ayuda a definir la infraestructura de nube en código y a aprovisionarla CloudFormation.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le 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.
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) le CloudWatch ayuda a supervisar las métricas de sus AWS recursos y las aplicaciones en las que se ejecuta AWS en tiempo real.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) es un servicio de administración de contenedores escalable y rápido que ayuda a ejecutar, detener y administrar contenedores en un clúster.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) le permite ejecutar contenedores sin necesidad de administrar servidores o instancias de Amazon EC2. Se utiliza en conjunto con Amazon ECS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones esenciales para la empresa.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de utilizar la infraestructura escalable de AWS. 

**Otras herramientas**
+ [npm](https://docs.npmjs.com/about-npm) es un registro de software que se ejecuta en un entorno Node.js y se utiliza para compartir o tomar prestados paquetes y administrar la implementación de paquetes privados.
+ [Yarn](https://yarnpkg.com/) es un administrador de paquetes de código abierto que puede usar para administrar las dependencias en JavaScript los proyectos. Yarn puede serle útil para instalar, actualizar, configurar y eliminar las dependencias de los paquetes.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [waitcondition-hook-for-aws-fargate-task](https://github.com/aws-samples/waitcondition-hook-for-aws-fargate-task).

## Prácticas recomendadas
<a name="use-the-aws-fargate-waitcondition-hook-construct-best-practices"></a>
+ Al crear su AWS CDK aplicación, siga las [prácticas recomendadas para desarrollar e implementar una infraestructura de nube que figuran AWS CDK en la documentación de la versión 2](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html). AWS CDK 
+ Para la AWS Fargate tarea, siga las [prácticas recomendadas para las imágenes de contenedores de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/application.html) de la documentación de Amazon ECS.

## Epics
<a name="use-the-aws-fargate-waitcondition-hook-construct-epics"></a>

### Configure el AWS CDK
<a name="set-up-the-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale el AWS CDK. | Para instalarlo AWS CDK en su máquina local u otro entorno, ejecute el siguiente comando: <pre>npm install -g aws-cdk@latest</pre> | Arquitecto de la nube, desarrollador de aplicaciones | 
| Inicie el AWS CDK. | El [arranque](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) es el proceso para preparar un [entorno](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) para la implementación. Para iniciar su AWS CDK kit de herramientas para el objetivo Cuenta de AWS Región de AWS, ejecute el siguiente comando:<pre>cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 </pre>Este comando crea una CloudFormation pila llamada. `CDKToolkit`  | Arquitecto de la nube | 

### Ejecute el WaitCondition enlace para la construcción de AWS Fargate tareas
<a name="run-the-waitcondition-hook-for-fargatelong-tasks-construct"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear el proyecto de CDK | Cree un proyecto de CDK con el lenguaje que prefiera. Este patrón usa TypeScript. Para crear un proyecto de CDK mediante TypeScript, ejecute el siguiente comando: `cdk init app —language typescript` | Arquitecto de la nube | 
| Instale el paquete. | Ejecute `npm install` en la ruta raíz de su proyecto de CDK. Después de instalar la biblioteca de CDK, ejecute el comando siguiente para instalar `waitcondition-hook-for-aws-fargate-task`: `yarn add waitcondition-hook-for-aws-fargate-task` | Arquitecto de la nube | 
| Cree su aplicación de CDK y los componentes de Amazon ECS. | Cree el proyecto de CDK. Se requiere un recurso de definición de tareas de Amazon ECS. Para obtener información acerca de la creación de una definición de tareas, consulte [Definiciones de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) en la documentación de Amazon ECS.El ejemplo siguiente utiliza este constructo:<pre>import * as cdk from 'aws-cdk-lib';<br />import { Vpc } from 'aws-cdk-lib/aws-ec2';<br />import * as ecr from 'aws-cdk-lib/aws-ecr';<br />import * as ecs from 'aws-cdk-lib/aws-ecs';<br />import { Construct } from 'constructs';<br />import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task';<br />import { Queue } from 'aws-cdk-lib/aws-sqs';<br /><br />export class FargateRunnerStack extends cdk.Stack {<br />    constructor(scope: Construct, id: string, props?: cdk.StackProps) {<br />        super(scope, id, props);<br />        // Define the VPC<br />        const vpc = new Vpc(this, 'MyVpc')<br />        // Define the Fargate Task<br />        const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {});<br />        // Import exiting ecr repo<br />        const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName');<br />        // Add a container to the task<br />        taskDefinition.addContainer('MyContainer', {<br />            image: ecs.ContainerImage.fromEcrRepository(repo),<br />        });<br />        // Create the Fargate runner<br />        const myFargateRunner = new FargateRunner(this, 'MyRunner', {<br />            fargateTaskDef: taskDefinition,<br />            timeout: `${60 * 5}`,<br />            vpc: vpc,<br />        });<br />        // Create the SQS queue<br />        const myQueue = new Queue(this, 'MyQueue', {});<br />        // Add dependency<br />        myQueue.node.addDependency(myFargateRunner);<br />    }<br />}</pre> | Arquitecto de la nube | 
| Sintetice y lance la aplicación de CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)El constructo `waitcondition-hook-for-aws-fargate-task` ejecuta la tarea de Fargate.  | Arquitecto de la nube | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de recursos. | Para limpiar los recursos aprovisionados en el paso anterior, ejecute el comando siguiente:<pre>cdk destroy </pre> | Arquitecto de la nube | 

## Resolución de problemas
<a name="use-the-aws-fargate-waitcondition-hook-construct-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Fallo general en la CloudFormation pila | Para ayudar a solucionar los errores generales de la CloudFormation pila, añade la `--no-rollback` marca como se muestra en el siguiente ejemplo: <pre>cdk deploy --no-rollback</pre>Este comando hará que la CloudFormation pila deje de revertirse, lo que te proporcionará recursos para solucionar problemas. Para obtener más información, consulte [Elegir cómo gestionar los errores al aprovisionar recursos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html) en la CloudFormation documentación. | 
| AWS Step Functions error | Es posible que una máquina de AWS Step Functions estados no se ejecute por diferentes motivos. Una vez configurado `—disable-rollback`, haga lo siguiente para solucionar un error:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Para obtener más información, consulte [Solución de problemas en Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html) y [Visualización de los detalles de ejecución en la consola de Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-view-execution-details.html#exec-details-intf-step-details) en la AWS Step Functions documentación. | 
| AWS Lambda fallo de función | Este constructo proporciona dos funciones de Lambda: `CallbackFunction` y `ErrorhandlerFunction`. Pueden producirse error por varios motivos, como excepciones no controladas. Haga lo que se indica a continuación para solucionar un error: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Para obtener más información, consulte [Solución de problemas en Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html) en la AWS Lambda documentación. | 

## Recursos relacionados
<a name="use-the-aws-fargate-waitcondition-hook-construct-resources"></a>

**AWS documentación**
+ [AWS CDK Construye una referencia de API](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)
+ [Cómo empezar con el AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Aprenda a crear y utilizar los recursos de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started.html)
+ [Aprenda cómo empezar a usar Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
+ [¿Qué es AWS CDK?](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Otros recursos**
+ [Waitcondition Hook for AWS Fargate task](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (npm)
+ [waitcondition-hook-for-aws-fargate-task 1.0.6](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (pypi.org)

# Utilice repositorios de código fuente de Git de terceros en AWS CodePipeline
<a name="use-third-party-git-source-repositories-in-aws-codepipeline"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumen
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-summary"></a>

Este patrón describe cómo usar AWS CodePipeline con repositorios de código fuente de Git de terceros.

[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) es un servicio de entrega continua que automatiza las tareas de creación, prueba e implementación del software. Actualmente, el servicio es compatible con los repositorios de Git gestionados por GitHub [AWS CodeCommit](https://aws.amazon.com/codecommit) y Atlassian Bitbucket. Sin embargo, algunas empresas utilizan repositorios Git de terceros que están integrados con su servicio de inicio de sesión único (SSO) y Microsoft Active Directory para la autenticación. Puedes usar estos repositorios de Git de terceros como fuentes CodePipeline creando acciones personalizadas y webhooks.

Un webhook es una notificación HTTP que detecta eventos en otra herramienta, como un GitHub repositorio, y conecta esos eventos externos a una canalización. Cuando creas un webhook en CodePipeline, el servicio devuelve una URL que puedes usar en el webhook de tu repositorio de Git. **Si insertas código en una rama específica del repositorio de Git, el webhook de Git inicia el CodePipeline webhook a través de esta URL y establece la etapa de origen de la canalización como En progreso.** Cuando la canalización se encuentra en este estado, el trabajador CodePipeline busca el trabajo personalizado, lo ejecuta y envía un estado de éxito o fracaso a. CodePipeline En este caso, dado que la canalización se encuentra en la fase de origen, el trabajador obtiene el contenido del repositorio de Git, lo comprime y lo carga en el depósito de Amazon Simple Storage Service (Amazon S3), donde se almacenan los artefactos de la canalización, utilizando la clave de objeto proporcionada por el trabajo sondeado. También puedes asociar una transición para la acción personalizada a un evento en Amazon CloudWatch e iniciar el trabajo en función del evento. Esta configuración te permite usar repositorios Git de terceros que el servicio no admite de forma nativa como fuentes. CodePipeline

## Requisitos previos y limitaciones
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un repositorio de Git que admite webhooks y puede conectarse a una URL de CodePipeline webhook a través de Internet 
+ Interfaz de la línea de comandos de AWS (AWS CLI) [instalada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) y [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) con la cuenta de AWS

## Arquitectura
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-architecture"></a>

El patrón incluye los siguientes pasos:

1. El usuario confirma el código en un repositorio de Git.

1. Se llama el webhook de Git.

1. Se llama CodePipeline webhook.

1. La canalización está configurada **En curso** y la etapa de origen está configurada en el estado **En curso**.

1. La acción de la etapa de origen inicia una regla de CloudWatch eventos, lo que indica que se ha iniciado.

1. El CloudWatch evento inicia una función Lambda.

1. La función de Lambda obtiene los detalles del trabajo de acción personalizado.

1. La función Lambda inicia CodeBuild AWS y le pasa toda la información relacionada con el trabajo.

1. CodeBuild obtiene la clave SSH pública o las credenciales de usuario para el acceso a HTTPS Git desde Secrets Manager.

1. CodeBuild clona el repositorio de Git para una rama específica.

1. CodeBuild comprime el archivo y lo carga en el depósito de S3 que sirve como almacén de CodePipeline artefactos.

![\[Flujo de trabajo que utiliza repositorios de fuentes de Git de terceros como fuentes para AWS CodePipeline.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/84284bec-b39d-466a-9fd9-994be2c953df/images/85555dab-7317-40f5-86a7-ccb8987c5bf3.png)


 

## Tools (Herramientas)
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/): AWS CodePipeline es un servicio de [entrega continua](https://aws.amazon.com/devops/continuous-delivery/) totalmente gestionado que le ayuda a automatizar sus procesos de lanzamiento para obtener actualizaciones rápidas y fiables de las aplicaciones y la infraestructura. CodePipeline automatiza las fases de creación, prueba e implementación del proceso de publicación para cada cambio de código, en función del modelo de publicación que defina. Le permite entregar características y actualizaciones de forma rápida y de confianza. Puede integrar AWS CodePipeline con servicios de terceros, como GitHub su propio complemento personalizado.
+ [AWS Lambda](https://aws.amazon.com/lambda/): AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. Con Lambda, puede ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend sin necesidad de administración. Sólo tiene que cargar su código y Lambda se encarga de todo lo necesario para ejecutar y escalar su código con alta disponibilidad. Puede configurar el código para que se active automáticamente desde otros servicios de AWS o puede llamarlo directamente desde cualquier aplicación web o móvil.
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/): AWS CodeBuild es un servicio de [integración continua](https://aws.amazon.com/devops/continuous-integration/) totalmente gestionado que compila el código fuente, ejecuta pruebas y produce paquetes de software listos para su implementación. Con CodeBuild, no necesita aprovisionar, administrar ni escalar sus propios servidores de compilación. CodeBuild escala de forma continua y procesa varias compilaciones simultáneamente, para que sus compilaciones no se queden esperando en una cola. Puede comenzar con rapidez usando entornos de compilación preempaquetados, o crear sus propios entornos de compilación personalizados que utilicen sus propias herramientas de compilación.
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/): AWS Secrets Manager le ayuda a proteger los secretos necesarios para acceder a sus aplicaciones, servicios y recursos de TI. El servicio le permite rotar, administrar y recuperar fácilmente credenciales de bases de datos, claves de API y otros datos confidenciales durante todo su ciclo de vida. Los usuarios y las aplicaciones recuperan los secretos llamando a Secrets Manager APIs, sin tener que codificar información confidencial en texto plano. Secrets Manager ofrece rotación secreta con integración integrada para Amazon Relational Database Service (Amazon RDS), Amazon Redshift y Amazon DocumentDB. El servicio se puede ampliar para admitir otros tipos de secretos, incluidas las claves y los OAuth tokens de API. Además, Secrets Manager le permite controlar el acceso a los datos secretos mediante permisos detallados y auditar la rotación de secretos de forma centralizada para los recursos de la nube de AWS, los servicios de terceros y los entornos locales.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/): Amazon CloudWatch es un servicio de monitoreo y observación creado para DevOps ingenieros, desarrolladores, ingenieros de confiabilidad de sitios (SREs) y administradores de TI. CloudWatch le proporciona datos e información útil para supervisar sus aplicaciones, responder a los cambios en el rendimiento de todo el sistema, optimizar la utilización de los recursos y obtener una visión unificada del estado de las operaciones. CloudWatch recopila datos operativos y de supervisión en forma de registros, métricas y eventos, lo que le proporciona una visión unificada de los recursos, las aplicaciones y los servicios de AWS que se ejecutan en AWS y en servidores locales. Puede utilizarlos CloudWatch para detectar comportamientos anómalos en sus entornos, configurar alarmas, visualizar registros y métricas uno al lado del otro, tomar medidas automatizadas, solucionar problemas y descubrir información para que sus aplicaciones sigan funcionando sin problemas.
+ [Amazon S3](https://aws.amazon.com/s3/): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos que le permite almacenar y proteger cualquier cantidad de datos para diversos casos de uso, tales como sitios web, aplicaciones móviles, copia de seguridad y restauración, archivado, aplicaciones empresariales, dispositivos IoT y análisis de macrodatos. Amazon S3 ofrece funciones easy-to-use de administración que le ayudan a organizar sus datos y configurar controles de acceso ajustados con precisión para cumplir con sus requisitos empresariales, organizativos y de conformidad específicos.

## Epics
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-epics"></a>

### Cree una acción personalizada en CodePipeline
<a name="create-a-custom-action-in-codepipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una acción personalizada mediante AWS CLI o AWS CloudFormation. | Este paso implica la creación de una acción de origen personalizada que se pueda utilizar en la fase de origen de una canalización en su cuenta de AWS en una región concreta. Debe usar AWS CLI o AWS CloudFormation (no la consola) para crear la acción de origen personalizada. Para obtener más información sobre los comandos y los pasos descritos en esta y otras epics, consulte la sección «Recursos relacionados» al final de este patrón. En AWS CLI, utilice el create-custom-action-type comando. Utilice --configuration-properties para proporcionar todos los parámetros necesarios para que el trabajador del trabajo los procese cuando busca un trabajo CodePipeline . Asegúrese de anotar los valores proporcionados a las opciones --provider y --action-version, de modo que puedas usar los mismos valores al crear la canalización con esta etapa fuente personalizada. También puede crear la acción de origen personalizada en AWS CloudFormation mediante el tipo de recurso AWS::CodePipeline::CustomActionType. | AWS general | 

### Configuración de la autenticación
<a name="set-up-authentication"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un par de claves SSH. | Cree un par de claves Secure Shell (SSH). Para obtener instrucciones, consulte la GitHub documentación. | Sistemas/ingeniero DevOps  | 
| Crear un secreto en AWS Secrets Manager. | Copie el contenido de la clave privada del par de claves SSH y cree un secreto en AWS Secrets Manager. Este secreto se utiliza para la autenticación al acceder al repositorio de Git. | AWS general | 
| Añada la clave pública al repositorio de Git. | Añada la clave pública del par de claves SSH a la configuración de la cuenta del repositorio de Git para autenticarte con la clave privada. | Ingeniero/sistema DevOps  | 

### Crear una canalización y un webhook
<a name="create-a-pipeline-and-webhook"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una canalización que incluya la acción de origen personalizada. | Crea una canalización en CodePipeline. Al configurar la etapa de origen, elija la acción de origen personalizada que creó anteriormente. Puede hacerlo en la CodePipeline consola de AWS o en la CLI de AWS. CodePipeline le solicita las propiedades de configuración que ha establecido en la acción personalizada. Esta información es necesaria para que el trabajador procese el trabajo para la acción personalizada. Siga las instrucciones del asistente y cree la siguiente etapa para la canalización. | AWS general | 
| Crea un CodePipeline webhook. | Cree un webhook para la canalización que creócon la acción de origen personalizada. Debe usar AWS CLI o AWS CloudFormation (no la consola) para crear el webhook. En AWS CLI, ejecute el comando put-webhook y proporcione los valores adecuados para las opciones de webhook. Anote la URL del webhook que devuelve el comando. Si utiliza AWS CloudFormation para crear el webhook, utilice el tipo AWS::CodePipeline::Webhook de recurso. Asegúrese de generar la URL del webhook del recurso creado y anotarla. | AWS general | 
| Cree una función y CodeBuild un proyecto de Lambda. | En este paso, utiliza Lambda CodeBuild para crear un trabajador laboral que sondee las solicitudes de trabajo CodePipeline para la acción personalizada, ejecute el trabajo y devuelva el resultado de estado al. CodePipeline Cree una función Lambda que se inicie mediante una regla de Amazon CloudWatch Events cuando la etapa de acción de origen personalizada de la canalización pase a «En curso». Cuando se inicia la funciónde Lambda, debe obtener los detalles del trabajo de acción personalizado consultando los trabajos. Puede utilizar la PollForJobs API para devolver esta información. Una vez obtenida la información del trabajo sondeada, la función de Lambda debe devolver un acuse de recibo y, a continuación, procesar la información con los datos que obtiene de las propiedades de configuración de la acción personalizada. Cuando el trabajador esté listo para comunicarse con el repositorio de Git, puedes iniciar un CodeBuild proyecto, ya que es conveniente gestionar las tareas de Git mediante el cliente SSH. | AWS general, desarrollador de código | 

### Crea un evento en CloudWatch
<a name="create-an-event-in-cloudwatch"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea una regla de CloudWatch eventos. | Cree una regla de CloudWatch eventos que inicie la función Lambda como objetivo siempre que la etapa de acción personalizada de la canalización pase a «En curso». | AWS general | 

## Recursos relacionados
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-resources"></a>

**Crear una acción personalizada en CodePipeline**
+ [Cree y añada una acción personalizada en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [AWS::CodePipeline::CustomActionType recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html)

**Configurar la autenticación**
+ [Creación y administración de secretos con AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)

**Crear una canalización y un webhook**
+ [Crea una canalización en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html)
+ [Referencia del comando put-webhook](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/put-webhook.html)
+ [AWS::CodePipeline::Webhook recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-webhook.html)
+ [PollForJobs Referencia de la API](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html)
+ [Crea y añade una acción personalizada en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [Cree un proyecto de compilación en AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html)

**Creación de un evento**
+ [Detecte los cambios en el estado de la canalización y reaccione ante ellos con Amazon CloudWatch Events](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html)

**Referencias adicionales**
+ [Trabajando con canalizaciones en CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines.html)
+ [Guía para desarrolladores de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

# Cree una CI/CD canalización para validar las configuraciones de Terraform mediante AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan y Vijesh Vijayakumaran Nair, Amazon Web Services*

## Resumen
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Este patrón muestra cómo probar las configuraciones de HashiCorp Terraform mediante una canalización de integración y entrega continuas (CI/CD) implementada por AWS. CodePipeline

Terraform es una aplicación de interfaz de la línea de comandos que le ayuda a usar código para aprovisionar y administrar la infraestructura y los recursos de la nube. [La solución que se proporciona en este patrón crea una CI/CD canalización que le ayuda a validar la integridad de las configuraciones de Terraform mediante cinco etapas: CodePipeline ](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`extrae la configuración de Terraform que está probando de un repositorio de AWS CodeCommit .

1. `"validate"`[ejecuta herramientas de validación de infraestructura como código (IaC), incluidas [tfsec](https://github.com/aquasecurity/tfsec) y checkov. [TFLint](https://github.com/terraform-linters/tflint)](https://www.checkov.io/) La etapa también ejecuta los siguientes comandos de validación de Terraform IaC: `terraform validate` y `terraform fmt`.

1. `"plan"` muestra qué cambios se aplicarán a la infraestructura si se aplica la configuración de Terraform.

1. `"apply"` utiliza el plan generado para aprovisionar la infraestructura requerida en un entorno de prueba.

1. `"destroy"` elimina la infraestructura de prueba que se creó durante la `"apply"` etapa.

## Requisitos previos y limitaciones
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Interfaz de la línea de comandos de AWS (AWS CLI)[instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), instalado y configurado en su equipo local
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), instalado y configurado en su equipo local

**Limitaciones**
+ El enfoque de este patrón implementa AWS CodePipeline en una sola cuenta de AWS y solo en una región de AWS. Se requieren cambios de configuración para las implementaciones de varias cuentas y regiones.
+ El rol de AWS Identity and Access Management (IAM) que proporciona este patrón (**codepipeline\$1iam\$1role**) sigue el principio de privilegio mínimo. Los permisos de este rol de IAM deben actualizarse en función de los recursos específicos que necesite crear su canalización.** **

**Versiones de producto**
+ Versión de AWS CLI 2.9.15 o posterior
+ Versión de Terraform 1.3.7 o posterior

## Arquitectura
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Pila de tecnología de destino**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de flujo de trabajo en CI/CD canalización para probar las configuraciones de Terraform. CodePipeline

![\[Arquitectura para probar las configuraciones de Terraform mediante una CI/CD canalización de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


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

1. En CodePipeline, un usuario de AWS inicia las acciones propuestas en un plan de Terraform ejecutando el `terraform apply` comando en la CLI de AWS.

1. AWS CodePipeline asume una función de servicio de IAM que incluye las políticas necesarias para acceder CodeCommit a AWS KMS y Amazon S3. CodeBuild

1. CodePipeline ejecuta la etapa de `"checkout"` canalización para extraer la configuración de Terraform de un CodeCommit repositorio de AWS para probarla.

1. CodePipeline ejecuta la `"validate"` etapa para probar la configuración de Terraform ejecutando las herramientas de validación de IaC y los comandos de validación de Terraform IaC en un proyecto. CodeBuild 

1. CodePipeline ejecuta la `"plan"` etapa para crear un plan en el CodeBuild proyecto basado en la configuración de Terraform. El usuario de AWS puede revisar este plan antes de aplicar los cambios al entorno de prueba.

1. Code Pipeline ejecuta la `"apply"` fase de implementación del plan utilizando el CodeBuild proyecto para aprovisionar la infraestructura requerida en el entorno de prueba.

1. CodePipeline ejecuta la `"destroy"` etapa, que se utiliza CodeBuild para eliminar la infraestructura de prueba que se creó durante la `"apply"` etapa.

1. Un bucket de Amazon S3 almacena los artefactos de la canalización, que se cifran y descifran mediante una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) de AWS KMS.

## Tools (Herramientas)
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Herramientas**

*Servicios de AWS*
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) facilita poder crear y controlar claves criptográficas para proteger los datos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

*Otros servicios*
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una aplicación de interfaz de línea de comandos que le ayuda a usar código para aprovisionar y administrar la infraestructura y los recursos de la nube.

**Código**

El código de este patrón está disponible en el repositorio. GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples) El repositorio contiene las configuraciones de Terraform necesarias para crear la arquitectura de destino descrita en este patrón.

## Epics
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Aprovisionar los componentes de la solución
<a name="provision-the-solution-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el GitHub repositorio. | Clone el GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repositorio ejecutando el siguiente comando en una ventana de terminal:<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Para obtener más información, consulte [Clonación de un repositorio](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) en la GitHub documentación. | DevOps ingeniero | 
| Cree un archivo de definiciones de variables de Terraform.  | Cree un archivo `terraform.tfvars` en función de los requisitos del caso de uso. Puede actualizar las variables del archivo `examples/terraform.tfvars` que se encuentra en el repositorio clonado.Para obtener más información, consulte [Asignación de valores a las variables del módulo raíz](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) en la documentación de Terraform.El archivo `Readme.md` del repositorio incluye más información sobre las variables obligatorias. | DevOps ingeniero | 
| Configure AWS como proveedor de Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Para obtener más información, consulte [AWS provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) en la documentación de Terraform. | DevOps ingeniero | 
| Actualice la configuración del proveedor de Terraform para crear el bucket de replicación de Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)La replicación activa la copia de objetos entre buckets de Amazon S3 de forma automática y asincrónica. | DevOps ingeniero | 
| Inicialice la configuración de Terraform. | Para inicializar el directorio de trabajo que contiene los archivos de configuración de Terraform, ejecute el siguiente comando en la carpeta raíz del repositorio clonado:<pre>terraform init</pre> | DevOps ingeniero | 
| Crear el plan Terraform. | Para crear un plan de Terraform, ejecuta el siguiente comando en la carpeta raíz del repositorio clonado:<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform evalúa los archivos de configuración para determinar el estado objetivo de los recursos declarados. A continuación, compara el estado objetivo con el estado actual y crea un plan. | DevOps ingeniero | 
| Verifique el plan de Terraform. | Revise el plan Terraform y confirme que configura la arquitectura requerida en su cuenta de AWS de destino. | DevOps ingeniero | 
| Implemente la solución. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform crea, actualiza o destruye la infraestructura para alcanzar el estado objetivo declarado en los archivos de configuración. | DevOps ingeniero | 

### Validar las configuraciones de Terraform ejecutando la canalización
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configurar el repositorio de código fuente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps ingeniero | 
| Valide las etapas de la canalización. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Para obtener más información, consulte [Ver los detalles y el historial de la canalización (consola)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) en la *Guía del CodePipeline usuario de AWS*.Cuando se confirma un cambio en la ramificación principal del repositorio de origen, la canalización de pruebas se activa automáticamente. | DevOps ingeniero | 
| Verifique el resultado del informe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)El `<project_name>-validate` CodeBuild proyecto genera informes de vulnerabilidad para el código durante la `"validate"` fase. | DevOps ingeniero | 

### Eliminación de sus recursos
<a name="clean-up-your-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie la canalización y los recursos asociados. | Para eliminar los recursos de prueba de su cuenta de AWS, ejecute el siguiente comando en la carpeta raíz del repositorio clonado:<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps ingeniero | 

## Resolución de problemas
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Recibes un **AccessDenied **error durante la `"apply"` etapa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Recursos relacionados
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Bloques de módulos](https://developer.hashicorp.com/terraform/language/modules/syntax) (documentación de Terraform)
+ [Cómo implementar y configurar CI/CD los servicios de seguridad de AWS con Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (entrada del blog de AWS)
+ [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) (documentación de IAM)
+ [create-pipeline](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) (documentación de AWS CLI)
+ [Configurar el cifrado del lado del servidor para los artefactos almacenados en Amazon S3 para](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) (documentación de CodePipeline AWS CodePipeline )
+ [Cuotas para AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild documentación de AWS)
+ [Protección de datos en AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline documentación de AWS)

## Información adicional
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Módulos Terraform personalizados**

La siguiente es una lista de los módulos personalizados de Terraform que se utilizan en este patrón:
+ `codebuild_terraform`crea los CodeBuild proyectos que forman cada etapa del proceso.
+ `codecommit_infrastructure_source_repo`captura y crea el CodeCommit repositorio de origen.
+ `codepipeline_iam_role` crea las funciones de IAM necesarias para la canalización.
+ `codepipeline_kms` crea la clave de AWS KMS necesaria para el cifrado y descifrado de objetos de Amazon S3.
+ `codepipeline_terraform`crea la canalización de pruebas para el CodeCommit repositorio de origen.
+ `s3_artifacts_bucket` crea un bucket de Amazon S3 para administrar los artefactos de canalización.

**Cree archivos de especificaciones**

La siguiente es una lista de los archivos de especificaciones de compilación (buildspec) que este patrón utiliza para ejecutar cada etapa de la canalización:
+ `buildspec_validate.yml` ejecuta la etapa `"validate"`.
+ `buildspec_plan.yml` ejecuta la etapa `"plan"`.
+ `buildspec_apply.yml` ejecuta la etapa `"apply"`.
+ `buildspec_destroy.yml` ejecuta la etapa `"destroy"`.

*Cree variables del archivo de especificaciones*

Cada archivo de especificaciones de compilación utiliza las siguientes variables para activar diferentes ajustes específicos de la compilación:


| 
| 
| Variable | Predeterminado | Description (Descripción) | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." | Define el CodeCommit directorio de origen | 
| `TF_VERSION` | «1.3.7» | Define la versión de Terraform para el entorno de compilación | 

El archivo `buildspec_validate.yml`también admite las siguientes variables para activar diferentes ajustes específicos de la compilación:


| 
| 
| Variable | Predeterminado | Description (Descripción) | 
| --- |--- |--- |
| `SCRIPT_DIR` | »./templates/scripts» | Define el directorio de scripts | 
| `ENVIRONMENT` | «dev» | Define el nombre del entorno | 
| `SKIPVALIDATIONFAILURE` | «Y» | Omite la validación en caso de errores | 
| `ENABLE_TFVALIDATE` | «Y» | Activa la validación de Terraform  | 
| `ENABLE_TFFORMAT` | «Y» | Activa el formato Terraform | 
| `ENABLE_TFCHECKOV` | «Y» | Activa el análisis de checkov | 
| `ENABLE_TFSEC` | «Y» | Activa el análisis de TFSec | 
| `TFSEC_VERSION` | «v1.28.1» | Define la versión tfsec | 

# Más patrones
<a name="devops-more-patterns-pattern-list"></a>

**Topics**
+ [Acceda a aplicaciones de contenedores de forma privada en Amazon EKS mediante AWS PrivateLink y un Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Asociar un AWS CodeCommit repositorio de una cuenta Cuenta de AWS a Amazon SageMaker AI Studio Classic de otra cuenta](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [Automatice la creación de cuentas mediante el acelerador de zonas de aterrizaje en AWS](automate-account-creation-lza.md)
+ [Automatice la adición o actualización de entradas de registro de Windows con AWS Systems Manager](automate-adding-or-updating-windows-registry-entries-using-aws-systems-manager.md)
+ [Automatizar las copias de seguridad de las instancias de base de datos de Amazon RDS para PostgreSQL mediante AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatice la implementación de aplicaciones anidadas mediante SAM de AWS](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatice la implementación del controlador de terminación de nodos en Amazon EKS mediante una CI/CD canalización](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Automatizar la configuración de RabbitMQ en Amazon MQ](automate-rabbitmq-configuration-in-amazon-mq.md)
+ [Automatice la replicación de las instancias de Amazon RDS en Cuentas de AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Cree e implemente automáticamente una aplicación Java en Amazon EKS mediante una CI/CD canalización](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Generación automática de un modelo de PynamoDB y funciones CRUD para Amazon DynamoDB mediante una aplicación de Python](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [Valide e implemente automáticamente las políticas y funciones de IAM mediante CodePipeline IAM Access Analyzer y macros de AWS CloudFormation](automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.md)
+ [Realice copias de seguridad de los servidores Sun SPARC en el emulador Stromasys Charon-SSP del Nube de AWS](back-up-sun-sparc-servers-in-the-stromasys-charon-ssp-emulator-on-the-aws-cloud.md)
+ [Cree una canalización de datos para incorporar, transformar y analizar los datos de Google Analytics con el kit de AWS DataOps desarrollo](build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.md)
+ [Cree un PAC de servidor empresarial Micro Focus con Amazon EC2 Auto Scaling y Systems Manager](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [Cree una canalización para imágenes de contenedores reforzadas con EC2 Image Builder y Terraform](build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.md)
+ [Cree un MLOps flujo de trabajo con Amazon SageMaker AI y Azure DevOps](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [Centralice la resolución de DNS mediante AWS Managed Microsoft AD Microsoft Active Directory local](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Limpie los recursos de AWS Account Factory for Terraform (AFT) de forma segura después de la pérdida de archivos estatales](clean-up-aft-resources-safely-after-state-file-loss.md)
+ [Configure el registro para las aplicaciones.NET en Amazon CloudWatch Logs mediante NLog](configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.md)
+ [Copie imágenes de contenedores de Amazon ECR en y Cuentas de AWS Regiones de AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Cree una imagen de contenedor Docker personalizada SageMaker y úsela para el entrenamiento de modelos en AWS Step Functions](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [Cree una canalización en las regiones de AWS que no sean compatibles con AWS CodePipeline](create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline.md)
+ [Cree alarmas para métricas personalizadas mediante la detección de CloudWatch anomalías de Amazon](create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection.md)
+ [Personalice los nombres de los roles predeterminados mediante AWS CDK aspectos y trampillas de escape](customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.md)
+ [Implementación de una canalización que detecte simultáneamente los problemas de seguridad en varios entregables de código](deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.md)
+ [Implementar y administrar un lago de datos sin servidor en la nube de AWS mediante el uso de la infraestructura como código](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Implemente aplicaciones en contenedores si se AWS IoT Greengrass V2 ejecutan como un contenedor Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Implementar recursos y paquetes de Kubernetes con Amazon EKS y un repositorio de gráficos de Helm en Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Implemente aplicaciones de varias pilas mediante AWS CDK con TypeScript](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [Implemente la validación de seguridad de la codificación en tiempo real mediante un servidor MCP con Kiro y otros asistentes de codificación](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [Implemente instancias de clústeres de conmutación por error de SQL Server en Amazon EC2 y Amazon FSx mediante Terraform](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Implemente las automatizaciones de seguridad para la AWS WAF solución mediante Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Desarrolle asistentes avanzados de IA generativa basados en chat mediante RAG y solicitudes ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Habilita Amazon de GuardDuty forma condicional mediante plantillas AWS CloudFormation](enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.md)
+ [Configuración del escalado automático basado en eventos en Amazon EKS mediante Amazon EKS Pod Identity y KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Genere recomendaciones personalizadas y reclasificadas con Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Reciba notificaciones de Amazon SNS cuando cambie el estado de clave de una clave de AWS KMS](get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.md)
+ [Control de los conjuntos de permisos para varias cuentas mediante Account Factory for Terraform](govern-permission-sets-aft.md)
+ [Identificación automática de las imágenes de contenedor duplicadas al migrar a un repositorio de Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Implementación del control de versiones de API basado en rutas mediante dominios personalizados en Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Mejore el rendimiento operativo habilitando Amazon DevOps Guru en varias regiones y cuentas de AWS y OUs con la CDK de AWS](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Instalación del agente SSM en los nodos de trabajo de Amazon EKS mediante Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Integrar el controlador universal Stonebranch con AWS Mainframe Modernization](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [Modernización del mainframe: DevOps adelante AWS con Rocket Software Enterprise Suite](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [Administre los conjuntos de AWS IAM Identity Center permisos como código mediante AWS CodePipeline](manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.md)
+ [Administre los conjuntos de AWS permisos de forma dinámica mediante Terraform](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [Gestión de las aplicaciones de contenedores en las instalaciones mediante la configuración de Amazon ECS Anywhere con AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Gestione AWS Organizations las políticas como código mediante AWS CodePipeline Amazon Bedrock](manage-organizations-policies-as-code.md)
+ [Migración de registros DNS de forma masiva a una zona alojada privada de Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Migre aplicaciones alojadas en IIS a Amazon EC2 mediante appcmd.exe](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Supervise el uso de una imagen de máquina de Amazon compartida en múltiples Cuentas de AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Organice una canalización de ETL con validación, transformación y particionamiento mediante AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Automatice blue/green las implementaciones de las bases de datos globales de Amazon Aurora mediante los principios de la IaC](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [Preserve el espacio IP enrutable en los diseños de VPC de varias cuentas para subredes que no son de carga de trabajo](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Aprovisione un producto de Terraform AWS Service Catalog mediante un repositorio de código](provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.md)
+ [Puesta en marcha de las tareas de Automatización de AWS Systems Manager de forma sincrónica desde AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Configure una CI/CD canalización para cargas de trabajo híbridas en Amazon ECS Anywhere mediante AWS CDK y GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Configure una CI/CD canalización para la migración de bases de datos mediante Terraform](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [Configure una infraestructura Multi-AZ para una FCI Always On de SQL Server mediante Amazon FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [Configure automáticamente los bots de UiPath RPA en Amazon EC2 mediante AWS CloudFormation](set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.md)
+ [Simplificación de la autenticación de aplicaciones con TLS mutuo en Amazon ECS mediante el equilibrador de carga de aplicación](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Incorporación de inquilinos en la arquitectura SaaS para el modelo de silo mediante C\$1 y AWS CDK](tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.md)
+ [Usa Terraform para habilitar Amazon automáticamente GuardDuty para una organización](use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.md)
+ [Uso de agentes de Amazon Bedrock para automatizar la creación de controles de entrada de acceso en Amazon EKS mediante peticiones basadas en texto](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [Validar Account Factory para el código Terraform (AFT) localmente](validate-account-factory-for-terraform-aft-code-locally.md)
+ [Visualice los resultados AI/ML del modelo con Flask y AWS Elastic Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)