

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.

# Herramientas para desarrolladores
<a name="developer-tools-pattern-list"></a>

**Topics**
+ [DevOps](devops-pattern-list.md)
+ [infraestructura](infrastructure-pattern-list.md)
+ [Aplicaciones web y móviles](websitesandwebapps-pattern-list.md)

# 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)

# infraestructura
<a name="infrastructure-pattern-list"></a>

**Topics**
+ [Acceda a un host bastión mediante Session Manager y Amazon EC2 Instance Connect](access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.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)
+ [Centralice la supervisión mediante Amazon CloudWatch Observability Access Manager](centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.md)
+ [Comprueba EC2 las instancias para ver si hay etiquetas obligatorias en el lanzamiento](check-ec2-instances-for-mandatory-tags-at-launch.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)
+ [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)
+ [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)
+ [Implemente un clúster de Cassandra en Amazon EC2 con estática privada IPs para evitar el reequilibrio](deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing.md)
+ [Amplíe VRFs su alcance a AWS mediante AWS Transit Gateway Connect](extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.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)
+ [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)
+ [Registre varios Cuentas de AWS con una sola dirección de correo electrónico mediante Amazon SES](register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.md)
+ [Configure la resolución de DNS para redes híbridas en un entorno de AWS de una sola cuenta](set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment.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)
+ [Configure una PeopleSoft arquitectura de alta disponibilidad en AWS](set-up-a-highly-available-peoplesoft-architecture-on-aws.md)
+ [Configure la recuperación ante desastres para Oracle JD Edwards EnterpriseOne con AWS Elastic Disaster Recovery](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [Configure la detección de CloudFormation desviaciones en una organización multirregional y multicuenta](set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization.md)
+ [Importación correcta de un bucket de S3 como CloudFormation pila de AWS](successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.md)
+ [Sincronice los datos entre los sistemas de archivos de Amazon EFS en distintas regiones de AWS mediante AWS DataSync](synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync.md)
+ [Pruebe AWS la infraestructura mediante LocalStack Terraform Tests](test-aws-infra-localstack-terraform.md)
+ [Actualice los clústeres de SAP Pacemaker de a ENSA1 ENSA2](upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2.md)
+ [Utilice zonas de disponibilidad coherentes en VPCs diferentes cuentas de AWS](use-consistent-availability-zones-in-vpcs-across-different-aws-accounts.md)
+ [Utilice el usuario IDs en las políticas de IAM para el control de acceso y la automatización](use-user-ids-iam-policies-access-control-automation.md)
+ [Validar Account Factory para el código Terraform (AFT) localmente](validate-account-factory-for-terraform-aft-code-locally.md)
+ [Más patrones](infrastructure-more-patterns-pattern-list.md)

# Acceda a un host bastión mediante Session Manager y Amazon EC2 Instance Connect
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect"></a>

*Piotr Chotkowski y Witold Kowalik, Amazon Web Services*

## Resumen
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-summary"></a>

Un *host bastión*, también denominado *jump box*, es un servidor que proporciona un único punto de acceso desde una red externa a los recursos ubicados en una red privada. Un servidor expuesto a una red pública externa, como Internet, supone un posible riesgo de seguridad en caso de acceso no autorizado. Es importante proteger y controlar el acceso a estos servidores.

Este patrón describe cómo puede utilizar [Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) y [Amazon EC2 Instance Connect para conectarse](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect.html) de forma segura a un host bastión de Amazon Elastic Compute Cloud (Amazon EC2) implementado en su Cuenta de AWS servidor. El administrador de sesiones es una capacidad de AWS Systems Manager. Las ventajas de este patrón incluyen:
+ El host bastión implementado no tiene ningún puerto de entrada abierto expuesto a la Internet pública. Esto reduce la posible superficie expuesta a ataques.
+ No necesita almacenar ni mantener las claves de Secure Shell (SSH) de larga duración en su Cuenta de AWS. En su lugar, cada usuario genera un nuevo key pair de claves SSH cada vez que se conecta al host bastión. AWS Identity and Access Management Las políticas (IAM) que se adjuntan a las AWS credenciales del usuario controlan el acceso al host bastión.

**Destinatarios previstos**

Este patrón está dirigido a lectores que tengan experiencia con conocimientos básicos de Amazon EC2, Amazon Virtual Private Cloud (Amazon VPC) y Hashicorp Terraform.

## Requisitos previos y limitaciones
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ AWS Command Line Interface (AWS CLI) versión 2, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) y [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
+ [Se ha instalado](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) el AWS CLI complemento Session Manager para
+ CLI de Terraform, [instalada](https://developer.hashicorp.com/terraform/cli)
+ Almacenamiento para el [estado](https://developer.hashicorp.com/terraform/language/state) de Terraform, como un bucket de Amazon Simple Storage Service (Amazon S3) y una tabla de Amazon DynamoDB que sirven como un backend remoto para almacenar el estado de Terraform. Para obtener más información sobre el uso de backends remotos para el estado de Terraform, consulte los [backends de Amazon S3](https://www.terraform.io/language/settings/backends/s3) (documentación de Terraform). Para ver un ejemplo de código que configura la administración remota del estado con un backend de Amazon S3, consulte [remote-state-s3-backend](https://registry.terraform.io/modules/nozaq/remote-state-s3-backend/aws/latest) (Terraform Registry). Tenga en cuenta los siguientes requisitos:
  + El bucket de Amazon S3 y la tabla de DynamoDB deben estar en la misma Región de AWS.
  + Al crear la tabla de DynamoDB, la clave de partición debe ser `LockID` (distingue entre mayúsculas y minúsculas) y el tipo de clave de partición debe ser `String`. Todos los demás valores de la tabla deben estar en sus valores predeterminados. Para obtener más información, consulte [Acerca de las claves principales](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) y [Crear una tabla](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) en la documentación de DynamoDB.
+ Un cliente SSH, instalado.

**Limitaciones**
+ Este patrón pretende ser una prueba de concepto (PoC) o una base para un mayor desarrollo. No debe utilizarse en su forma actual en entornos de producción. Antes de la implementación, ajuste el código de muestra del repositorio para que se adapte a sus requisitos y a su caso de uso.
+ Este patrón supone que el host bastión de destino utiliza Amazon Linux 2 como sistema operativo. Si bien es posible utilizar otras Amazon Machine Images (AMIs), otros sistemas operativos están fuera del alcance de este patrón.
**nota**  
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/).
+ En este patrón, el host bastión está ubicado en una subred privada sin una puerta de enlace NAT ni una puerta de enlace de Internet. Este diseño aísla la EC2 instancia de Amazon de la Internet pública. Puede añadir una configuración de red específica que le permita comunicarse con Internet. Para obtener más información, consulte [Conectar su nube privada virtual (VPC) a otras redes](https://docs.aws.amazon.com/vpc/latest/userguide/extend-intro.html) en la documentación de Aamazon VPC. Del mismo modo, siguiendo el [principio de privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege), el host del bastión no tiene acceso a ningún otro recurso suyo a Cuenta de AWS menos que le concedas permisos de forma explícita. Para más información, consulte [Políticas basadas en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) en la documentación de IAM.

**Versiones de producto**
+ CLI de AWS versión 2
+ Terraform versión 1.3.9

## Arquitectura
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-architecture"></a>

**Pila de tecnología de destino**
+ Una VPC con una única subred privada
+ Los siguientes [puntos de conexión de VPC de interfaz](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html):
  + `amazonaws.<region>.ssm`— El punto final del AWS Systems Manager servicio.
  + `amazonaws.<region>.ec2messages`: Systems Manager utiliza este punto de conexión para realizar llamadas desde SSM Agent al servicio de Systems Manager.
  + `amazonaws.<region>.ssmmessages`— Session Manager usa este punto final para conectarse a tu EC2 instancia de Amazon a través de un canal de datos seguro.
+ Una EC2 instancia de `t3.nano` Amazon que ejecuta Amazon Linux 2
+ Rol de IAM y perfil de instancia
+ Grupos de seguridad de Amazon VPC y reglas de grupos de seguridad para los puntos de conexión y la instancia de Amazon EC2 

**Arquitectura de destino**

![\[Diagrama de arquitectura del uso de Session Manager para acceder a un host bastión.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a02aed20-1852-4c91-902f-f553795006e2/images/819c503b-7eec-4a9c-862b-b87107d50dc1.png)


El diagrama muestra el proceso siguiente:

1. El usuario asume un rol de IAM que tiene permisos para hacer lo siguiente:
   + Autenticar, autorizar y conectarse a la instancia de Amazon EC2 
   + Iniciar una sesión con Session Manager

1. El usuario inicia una sesión SSH a través de Session Manager.

1. Session Manager autentica al usuario, verifica los permisos de las políticas de IAM asociadas, comprueba los ajustes de configuración y envía un mensaje al agente SSM para abrir una conexión bidireccional.

1. El usuario envía la clave pública SSH al host del bastión a través de los metadatos de Amazon. EC2 Esto debe hacerse antes de cada conexión. La clave pública SSH permanece disponible durante 60 segundos.

1. El host bastión se comunica con los puntos finales de la interfaz de VPC para Systems Manager y Amazon. EC2

1. El usuario accede al host bastión a través de Session Manager mediante un canal de comunicación bidireccional cifrado con TLS 1.2.

**Automatizar y escalar**

Las siguientes opciones están disponibles para automatizar la implementación o escalar esta arquitectura:
+ Puede implementar la arquitectura mediante una canalización de integración y entrega continuas (CI/CD).
+ Puede modificar el código para cambiar el tipo de instancia del host bastión.
+ Puede modificar el código para implementar varios hosts bastión. En el archivo `bastion-host/main.tf`, en el bloque de recursos `aws_instance`, añada el meta argumento `count`. Para obtener más información, consulte la [documentación de Terraform](https://developer.hashicorp.com/terraform/language/meta-arguments/count).

## Tools (Herramientas)
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-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 shell de línea de comandos.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) proporciona una capacidad informática escalable en el 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 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. Este patrón utiliza el [Administrador de sesiones](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html), una capacidad de Administrador de sistemas.
+ [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**
+ [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 usa [Terraform CLI](https://developer.hashicorp.com/terraform/cli).

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [Access a bastion mediante el administrador de sesiones y el repositorio Amazon EC2 Instance Connect](https://github.com/aws-samples/secured-bastion-host-terraform).

## Prácticas recomendadas
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-best-practices"></a>
+ Recomendamos usar herramientas de escaneo de código automatizadas para mejorar la seguridad y la calidad del código. Este patrón se escaneó con [Checkov](https://www.checkov.io/), una herramienta de análisis de código estático para IaC. Como mínimo, le recomendamos que realice comprobaciones básicas de validación y formato mediante los comandos `terraform validate` y `terraform fmt -check -recursive` de Terraform.
+ Es una buena práctica añadir pruebas automatizadas para la iAC. Para obtener más información sobre los diferentes enfoques para probar el código de Terraform, consulte [Probar HashiCorp Terraform (entrada del blog de Terraform](https://www.hashicorp.com/blog/testing-hashicorp-terraform)).
+ Durante la implementación, Terraform usa la EC2 instancia de Amazon que reemplaza cada vez que se detecta una nueva versión de la [AMI de Amazon Linux 2](https://aws.amazon.com/marketplace/pp/prodview-zc4x2k7vt6rpu?sr=0-1&ref_=beagle&applicationId=AWSMPContessa). Esto implementa la nueva versión del sistema operativo, que incluye los parches y las actualizaciones. Si el programa de implementación no es frecuente, esto puede suponer un riesgo para la seguridad, ya que la instancia no tiene los parches actualizados. Es importante actualizar y aplicar con frecuencia los parches de seguridad a las EC2 instancias de Amazon desplegadas. Para obtener más información, consulta [Gestión de actualizaciones en Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/update-management.html).
+ Como este patrón es una prueba de concepto, utiliza políticas AWS gestionadas, como`AmazonSSMManagedInstanceCore`. AWS las políticas administradas cubren casos de uso comunes, pero no otorgan permisos con privilegios mínimos. Según sea necesario en su caso, le recomendamos que cree políticas personalizadas que concedan permisos con privilegios mínimos para los recursos implementados en esta arquitectura. Para obtener más información, consulte [Comenzar con las políticas AWS administradas y avanzar hacia](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-use-aws-defined-policies) los permisos con privilegios mínimos.
+ Use una contraseña para proteger el acceso a las claves SSH y guarde las claves en un lugar seguro.
+ Configure el registro y la supervisión del host bastión. El registro y la supervisión son partes importantes del mantenimiento de los sistemas, tanto desde una perspectiva operativa como de seguridad. Existen varias formas de supervisar las conexiones y la actividad en su host bastión. Para obtener más información, consulte los siguientes temas en la documentación de Systems Manager.
  + [Supervisión AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/monitoring.html)
  + [Inicio de sesión y supervisión AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/logging-and-monitoring.html)
  + [Auditoría de la actividad de sesiones](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-auditing.html)
  + [Registro de la actividad de la sesión](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging.html)

## Epics
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-epics"></a>

### Implementación de recursos
<a name="deploy-the-resources"></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/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html) | DevOps ingeniero, desarrollador | 
| Inicialice el directorio de trabajo de Terraform. | Este paso solo es necesario para la primera implementación. Si va a realizar una reimplementación del patrón, vaya al paso siguiente.En el directorio raíz del repositorio clonado, introduzca el siguiente comando, donde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html)<pre>terraform init \<br />    -backend-config="bucket=$S3_STATE_BUCKET" \<br />    -backend-config="key=$PATH_TO_STATE_FILE" \<br />    -backend-config="region=$AWS_REGION</pre>También puede abrir el archivo **config.tf** y, en la sección `terraform`, proporcionar estos valores manualmente. | DevOps ingeniero, desarrollador, Terraform | 
| Implementación de recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html) | DevOps ingeniero, desarrollador, Terraform | 

### Configurar el entorno local
<a name="set-up-the-local-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la conexión SSH. | Actualice el archivo de configuración de SSH para permitir las conexiones SSH a través de Session Manager. Para obtener instrucciones, consulte [Permitir conexiones SSH para Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html#ssh-connections-enable). Esto permite a los usuarios autorizados introducir un comando proxy que inicia una sesión de Session Manager y transfiere todos los datos a través de una conexión bidireccional. | DevOps ingeniero | 
| Genere las claves SSH. | Introduzca el siguiente comando para general un par de claves de SSH locales privadas y publicas. Use este par de claves para conectarse al host bastión.<pre>ssh-keygen -t rsa -f my_key</pre> | DevOps ingeniero, desarrollador | 

### Conectarse al host bastión mediante Session Manager
<a name="connect-to-the-bastion-host-by-using-sesh"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Obtenga el ID de la instancia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html) | AWS general | 
| Envíe la clave pública SSH. | En esta sección, debe cargar la clave pública en los [metadatos de la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) del host bastión. Una vez cargada la clave, dispone de 60 segundos para iniciar una conexión con el host bastión. Transcurridos 60 segundos, se elimina la clave pública. Para obtener más información, consulte la sección [Solución de problemas](#access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-troubleshooting) de este patrón. Complete los siguientes pasos rápidamente para evitar que se extraiga la clave antes de conectarse al host bastión.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html) | AWS general | 
| Conéctese al host bastión. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html)Existen otras opciones para abrir una conexión SSH con el host bastión. Para obtener más información, consulte *Enfoques alternativos para establecer una conexión SSH con el host bastión* en la sección de [Información adicional](#access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-additional) de este patrón. | AWS general | 

### (Opcional) Limpieza
<a name="optional-clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos implementados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html) | DevOps ingeniero, desarrollador, Terraform | 

## Resolución de problemas
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `TargetNotConnected` error al intentar conectarse al host bastión | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html) | 
| `Permission denied` error al intentar conectarse al host bastión | Una vez cargada la clave pública en el host bastión, solo dispondrá de 60 segundos para iniciar la conexión. Transcurridos 60 segundos, la clave se elimina automáticamente y no puede usarla para conectarse a la instancia. Si esto ocurre, puede repetir el paso para volver a enviar la clave a la instancia. | 

## Recursos relacionados
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-resources"></a>

**AWS documentación**
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) (documentación de Systems Manager)
+ [Instalación del plugin de Session Manager para la AWS CLI](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) (documentación de Systems Manager)
+ [Permitir conexiones SSH para Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html#ssh-connections-enable) (documentación de Systems Manager)
+ [Acerca del uso de EC2 Instance Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect.html) ( EC2 documentación de Amazon)
+ [Conéctese mediante EC2 Instance Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html) ( EC2 documentación de Amazon)
+ [Gestión de identidad y acceso para Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-iam.html) ( EC2 documentación de Amazon)
+ [Uso de una función de IAM para conceder permisos a las aplicaciones que se ejecutan en EC2 instancias de Amazon (documentación](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html) de IAM)
+ [Prácticas recomendadas de seguridad en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentación de IAM)
+ [Control del tráfico hacia los recursos mediante grupos de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) (documentación de Amazon VPC)

**Otros recursos**
+ [Página web para desarrolladores de Terraform](https://developer.hashicorp.com/terraform)
+ [Comando: validar](https://developer.hashicorp.com/terraform/cli/commands/validate) (documentación de Terraform)
+ [Comando: fmt](https://developer.hashicorp.com/terraform/cli/commands/fmt) (documentación de Terraform)
+ [Probando HashiCorp Terraform (entrada de](https://www.hashicorp.com/blog/testing-hashicorp-terraform) blog) HashiCorp 
+ [Página web Checkov](https://www.checkov.io/)

## Información adicional
<a name="access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-additional"></a>

**Enfoques alternativos para establecer una conexión SSH con el host bastión**

*Enrutamiento de puertos*

Puede usar la opción `-D 8888` para abrir una conexión SSH con reenvío dinámico de puertos. Para más información, consulte [las instrucciones](https://explainshell.com/explain?cmd=ssh+-i+%24PRIVATE_KEY_FILE+-D+8888+ec2-user%40%24INSTANCE_ID) en explainshell.com. El siguiente es un ejemplo de un comando para abrir una conexión SSH mediante el reenvío de puertos.

```
ssh -i $PRIVATE_KEY_FILE -D 8888 ec2-user@$INSTANCE_ID
```

Este tipo de conexión abre un proxy SOCKS que puede reenviar el tráfico de su navegador local a través del host bastión. Si utiliza Linux o macOS, para ver todas las opciones, introduzca `man ssh`. Se mostrará el manual de referencia de SSH.

*Uso del script proporcionado*

En lugar de ejecutar manualmente los pasos descritos en *Conectar al host bastión mediante Session Manager* en la sección [Epics](#access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect-epics), puede utilizar el script **connect.sh** incluido en el repositorio de código. Este script genera el par de claves SSH, envía la clave pública a la EC2 instancia de Amazon e inicia una conexión con el host del bastión. Al ejecutar el script, se pasan la etiqueta y el nombre de la clave como argumentos. A continuación se muestra un ejemplo del comando para ejecutar el script.

```
./connect.sh sandbox-dev-bastion-host my_key
```

# Centralice la resolución de DNS mediante AWS Managed Microsoft AD Microsoft Active Directory local
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory"></a>

*Brian Westmoreland, Amazon Web Services*

## Resumen
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-summary"></a>

Este patrón proporciona orientación para centralizar la resolución de DNS en un entorno de AWS varias cuentas mediante AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) y Amazon Route 53. En este patrón, el espacio de nombres AWS DNS es un subdominio del espacio de nombres DNS local. Este patrón también proporciona instrucciones sobre cómo configurar los servidores DNS locales para que reenvíen consultas AWS cuando la solución DNS local utilice Microsoft Active Directory.  

## Requisitos previos y limitaciones
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-prereqs"></a>

**Requisitos previos **
+ Un entorno AWS de varias cuentas configurado mediante. AWS Organizations
+ Conectividad de red establecida entre Cuentas de AWS.
+ Conectividad de red establecida entre el entorno local AWS y el entorno local (mediante el uso de AWS Direct Connect cualquier tipo de conexión VPN).
+ AWS Command Line Interface (AWS CLI) configurado en una estación de trabajo local.
+ AWS Resource Access Manager (AWS RAM) se utiliza para compartir las reglas de Route 53 entre cuentas. Por lo tanto, el uso compartido debe estar habilitado en el AWS Organizations entorno, como se describe en la sección [Epics](#centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-epics).

**Limitaciones**
+ AWS Managed Microsoft AD La Edición Estándar tiene un límite de 5 acciones.
+ AWS Managed Microsoft AD La Edición Enterprise tiene un límite de 125 acciones.
+ La solución de este patrón se limita a Regiones de AWS que el soporte se comparta a través de él AWS RAM.

**Versiones de producto**
+ Microsoft Active Directory ejecutado en Windows Server 2008, 2012, 2012 R2 o 2016.

## Arquitectura
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-architecture"></a>

**Arquitectura de destino**

![\[Arquitectura para la resolución de DNS centralizada en AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/91430e2a-f7f6-4dbe-9fe7-8abed1f764a7/images/9b5fc51d-590b-468f-80f7-1949f3b3b258.png)


En este diseño, AWS Managed Microsoft AD se instala en los servicios compartidos Cuenta de AWS. Si bien no es un requisito, este patrón presupone dicha configuración. Si lo configuras AWS Managed Microsoft AD de forma diferente Cuenta de AWS, es posible que tengas que modificar los pasos de la sección [Epics](#centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-epics) en consecuencia.

Este diseño emplea Route 53 Resolvers para admitir la resolución de nombres mediante el uso de reglas de Route 53. Si la solución de DNS en las instalaciones usa Microsoft DNS, no es fácil crear una regla de reenvío condicional para el espacio de nombres de AWS (`aws.company.com`), que es un subdominio del espacio de nombres DNS (`company.com`) de la empresa. Si intenta crear un reenviador condicional tradicional, se producirá un error. Esto se debe a que Microsoft Active Directory ya se considera autorizado para cualquier subdominio de `company.com`. Para evitar este error, primero debe crear una delegación para `aws.company.com` que permita delegar la autoridad de ese espacio de nombres. A continuación, puede crear el reenviador condicional.

La nube privada virtual (VPC) de cada cuenta radial puede tener su propio espacio de nombres DNS único basado en el espacio de nombres raíz. AWS En este diseño, cada cuenta radial añade una abreviatura del nombre de cuenta al espacio de nombres base de AWS. Una vez creadas las zonas alojadas privadas en la cuenta de radio, las zonas se asocian a la VPC local de la cuenta de radio y a la VPC de la cuenta de red central. AWS Esto permite que la cuenta de AWS red central responda a las consultas de DNS relacionadas con las cuentas de radio. De esta manera, tanto Route 53 como Route 53 AWS Managed Microsoft AD trabajan juntos para compartir la responsabilidad de administrar el espacio de AWS nombres ()`aws.company.com`.

**Automatización y escala**

Este diseño utiliza los puntos finales de Route 53 Resolver para escalar las consultas de DNS entre el entorno local AWS y el entorno local. Cada punto de conexión de Route 53 Resolver incluye varias interfaces de red elásticas (distribuidas en varias zonas de disponibilidad), y cada interfaz de red puede gestionar hasta 10 000 consultas por segundo. Route 53 Resolver admite hasta 6 direcciones IP por punto de conexión, por lo que, en total, este diseño admite hasta 60 000 consultas de DNS por segundo distribuidas en varias zonas de disponibilidad para lograr una alta disponibilidad.  

Además, este patrón tiene en cuenta automáticamente el crecimiento futuro en AWS. No es necesario modificar las reglas de reenvío de DNS configuradas localmente para que sean compatibles con las zonas alojadas privadas nuevas VPCs y las asociadas que se agreguen a ellas. AWS 

## Tools (Herramientas)
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-tools"></a>

**Servicios de AWS**
+ [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
+ [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 varias cuentas Cuentas de AWS en una organización que puede crear y administrar de forma centralizada.
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) le ayuda a compartir sus recursos de forma segura Cuentas de AWS para reducir la sobrecarga operativa y ofrecer visibilidad y capacidad de auditoría.
+ [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.

**Herramientas**
+ [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 los comandos de tu consola de línea de comandos. En este patrón, AWS CLI se usa para configurar las autorizaciones de Route 53.

## Epics
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-epics"></a>

### Cree y comparta un directorio AWS Managed Microsoft AD
<a name="create-and-share-an-managed-ad-directory"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar AWS Managed Microsoft AD. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.html) | Administrador de AWS | 
| Compartir el directorio. | Una vez creado el directorio, compártalo con otros miembros Cuentas de AWS de la AWS organización. Para obtener más instrucciones, consulte [Cómo compartir su directorio](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step2_share_directory.html) en la *Guía de administración de AWS Directory Service *.  AWS Managed Microsoft AD La Edición Estándar tiene un límite de 5 acciones. La Edición Enterprise tiene un límite de 125 acciones. | Administrador de AWS | 

### Configure Route 53
<a name="configure-r53"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree Route 53 Resolvers. | Los solucionadores Route 53 facilitan la resolución de consultas de DNS entre el centro de datos local AWS y el centro de datos local.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.html)Si bien el uso de la VPC de la cuenta de AWS red central no es obligatorio, en los pasos restantes se asume esta configuración. | Administrador de AWS | 
| Cree reglas de Route 53. | Es posible que su caso de uso específico requiera una gran cantidad de reglas de Route 53, pero tendrá que configurar las siguientes reglas como base:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.html)Para más información, consulte [Gestión de reglas de reenvío](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing.html) en la *Guía del desarrollador de Route 53*. | Administrador de AWS | 
| Configure un perfil de Route 53. | Puede usar un perfil de Route 53 para compartir las reglas con las cuentas de radio.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.html) | Administrador de AWS | 

### Configure el DNS de Active Directory en las instalaciones
<a name="configure-on-premises-active-directory-dns"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la delegación. | Use el complemento DNS de Microsoft (`dnsmgmt.msc`) para crear una nueva delegación para el espacio de nombres `company.com` de Active Directory. El nombre del dominio delegado debe ser `aws`. Esto lo convierte en el nombre completo del dominio (FQDN) de la delegación `aws.company.com`. Utilice las direcciones IP de los controladores de AWS Managed Microsoft AD dominio para los valores de IP del servidor de nombres y `server.aws.company.com` utilícelas para el nombre. (Esta delegación solo se usa en la redundancia, ya que se creará un reenviador condicional para este espacio de nombres que tendrá prioridad sobre la delegación). | Active Directory | 
| Cree el reenviador condicional. | Use el complemento DNS de Microsoft (`dnsmgmt.msc`) para crear un nuevo reenviador condicional para `aws.company.com`.  Utilice las direcciones IP de los AWS Route 53 Resolvers entrantes del DNS Cuenta de AWS central como destino del reenviador condicional.   | Active Directory | 

### Cree zonas alojadas privadas de Route 53 para los radios Cuentas de AWS
<a name="create-r53-private-hosted-zones-for-spoke-aws-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree las zonas alojadas privadas de Route 53. | Crear una zona alojada privada de Route 53 en cada cuenta radial. Asocie esta zona alojada privada con la VPC de la cuenta radial. Para ver los pasos detallados, consulte [Crear una zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) en la *Guía del desarrollador de Route 53*. | Administrador de AWS | 
| Cree autorizaciones. | Utilice el AWS CLI para crear una autorización para la VPC de la cuenta AWS de red central. Ejecute este comando desde el contexto de cada Cuenta de AWS radial:<pre>aws route53 create-vpc-association-authorization --hosted-zone-id <hosted-zone-id> \<br />   --vpc VPCRegion=<region>,VPCId=<vpc-id></pre>donde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.html) | Administrador de AWS | 
| Cree asociaciones. | Cree la asociación de zonas alojadas privadas de Route 53 para la VPC de la cuenta de AWS red central mediante. AWS CLI Ejecute este comando desde el contexto de la cuenta de AWS red central:<pre>aws route53 associate-vpc-with-hosted-zone --hosted-zone-id <hosted-zone-id> \<br />   --vpc VPCRegion=<region>,VPCId=<vpc-id></pre>donde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.html) | Administrador de AWS | 

## Recursos relacionados
<a name="centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory-resources"></a>
+ [Simplifique la administración del DNS en un entorno con varias cuentas con Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (AWS entrada del blog)
+ [Creando su AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html) (AWS Directory Service documentación)
+ [Compartir un AWS Managed Microsoft AD directorio](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step2_share_directory.html) (AWS Directory Service documentación)
+ [¿Qué es Amazon Route 53 Resolver?](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html) (Documentación de Amazon Route 53)
+ [Creación de una zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) (documentación de Amazon Route 53)
+ [Qué es Perfiles de Amazon Route 53?](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html) (Documentación de Amazon Route 53)

# Centralice la supervisión mediante Amazon CloudWatch Observability Access Manager
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager"></a>

*Anand Krishna Varanasi, JAGDISH KOMAKULA, Ashish Kumar, Jimmy Morgan, Sarat Chandra Pothula, Vivek Thangamuthu y Balaji Vedagiri, Amazon Web Services*

## Resumen
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-summary"></a>

La observabilidad es fundamental para la supervisión, la comprensión y la solución de problemas de las aplicaciones. Las aplicaciones que abarcan varias cuentas, como las AWS Control Tower implementaciones de landing zone, generan una gran cantidad de registros y datos de rastreo. Para solucionar problemas rápidamente o comprender los análisis de usuarios o empresariales, necesita una plataforma de observabilidad común en todas las cuentas. El Amazon CloudWatch Observability Access Manager le permite acceder a varios registros de cuentas y controlarlos desde una ubicación central.

Puede usar Observability Access Manager para ver y administrar los registros de datos de observabilidad generados por las cuentas de origen. Las cuentas de origen son individuales y Cuentas de AWS generan datos de observabilidad para sus recursos. Las cuentas de origen comparten sus datos de observabilidad con la cuenta de monitoreo. Los datos de observabilidad compartidos pueden incluir métricas en Amazon CloudWatch, registros en Amazon CloudWatch Logs y rastreos. AWS X-Ray Para más información, consulte [la documentación de Observability Access Manager](https://docs.aws.amazon.com/OAM/latest/APIReference/Welcome.html).

Este patrón es para los usuarios que tienen aplicaciones o infraestructuras que se ejecutan en varias direcciones Cuentas de AWS y necesitan un lugar común para ver los registros. En él se explica cómo puede configurar Observability Access Manager mediante Terraform para supervisar el estado y el estado de estas aplicaciones o infraestructuras. Puede instalar esta solución de varias maneras:
+ Como un módulo Terraform independiente que puede configurar manualmente
+ Mediante el uso de una canalización de integración y entrega continuas (CI/CD)
+ Mediante la integración con otras soluciones, como [Generador de cuentas para Terraform (AFT) de AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)

Las instrucciones de la sección [Epics](#centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-epics) tratan sobre la implementación manual. Para ver los pasos de instalación de AFT, consulte el archivo README del repositorio de GitHub [Observability Access Manager](https://github.com/aws-samples/cloudwatch-obervability-access-manager-terraform).

## Requisitos previos y limitaciones
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-prereqs"></a>

**Requisitos previos **
+ [Terraform](https://www.terraform.io/) está instalado o referenciado en su sistema o en canalizaciones automatizadas. (Le recomendamos que utilice [la última versión](https://releases.hashicorp.com/terraform/).)
+ Una cuenta que puede usar como cuenta de monitoreo central. Otras cuentas crean enlaces a la cuenta de monitoreo central para ver los registros.
+ (Opcional) Un repositorio de código fuente como GitHub Atlassian Bitbucket o un sistema similar. AWS CodeCommit No es necesario disponer de un repositorio de código fuente si utilizas canalizaciones automatizadas. CI/CD 
+ (Opcional) Permisos para crear solicitudes de cambios (PRs) para revisar el código y colaborar con él. GitHub

**Limitaciones**

Observability Access Manager tiene las siguientes Service quotas, que no se pueden cambiar. Tenga en cuenta estas cuotas antes de implementar esta característica. Para obtener más información, consulta [las cuotas de CloudWatch servicio](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html) en la CloudWatch documentación.
+ **Vínculos de cuentas de origen**: puede vincular cada cuenta de origen a un máximo de cinco cuentas de supervisión.
+ **Depósitos**: puedes crear varios depósitos para una cuenta, pero solo Región de AWS se permite un depósito por cuenta.

Además:
+ Los sumideros y los enlaces deben crearse de la misma manera Región de AWS; no pueden ser de una región a otra.

**Supervisión entre cuentas y entre regiones**

Para la supervisión entre regiones y cuentas, puede elegir una de las siguientes opciones:
+ Cree [ CloudWatch paneles de control multicuentas y regiones](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) para alarmas y métricas. Esta opción no admite registros ni rastreos.
+ Implemente el [registro centralizado](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) mediante Amazon OpenSearch Service.
+ Cree un colector por región a partir de todas las cuentas de los inquilinos, transfiera las métricas a una cuenta de supervisión centralizada (como se describe en este patrón) y, a continuación, utilice los [flujos de CloudWatch métricas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Metric-Streams.html) para enviar los datos a un destino externo común o a productos de supervisión de terceros, como Datadog, Dynatrace, Sumo Logic, Splunk o New Relic.

## Arquitectura
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-architecture"></a>

**Componentes**

CloudWatch Observability Access Manager consta de dos componentes principales que permiten la observabilidad entre cuentas:
+ Un *receptor* permite a las cuentas de origen enviar datos de observabilidad a la cuenta de monitoreo central. Básicamente, un receptor proporciona una puerta de enlace a la que se pueden conectar las cuentas de origen. Solo puede haber una puerta de enlace o conexión receptora y varias cuentas pueden conectarse a ella.
+ Cada cuenta de origen tiene un *enlace* al cruce de la puerta de enlace receptora y los datos de observabilidad se envían a través de este enlace. Debe crear un receptor antes de crear enlaces desde cada cuenta de origen.

**Arquitectura**

El siguiente diagrama ilustra Observability Access Manager y sus componentes.

![\[Arquitectura para la observabilidad entre cuentas con receptores y enlaces.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/00603763-4f99-456e-85e7-a80d803b087d/images/5188caf9-348b-4d91-b560-2b3d6ea81191.png)


## Tools (Herramientas)
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-tools"></a>

**Servicios 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.
+ [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.
+ [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.

**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.
+ [AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) configura una canalización de Terraform para ayudarte a aprovisionar y personalizar las cuentas. AWS Control Tower Si lo desea, puede utilizar AFT para configurar Observability Access Manager de forma escalable en varias cuentas.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de GitHub [Observability Access Manager](https://github.com/aws-samples/cloudwatch-obervability-access-manager-terraform).

## Prácticas recomendadas
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-best-practices"></a>
+ En AWS Control Tower los entornos, marque la cuenta de registro como la cuenta de supervisión central (receptáculo).
+ Si tiene varias organizaciones con varias cuentas AWS Organizations, le recomendamos que incluya las organizaciones en lugar de las cuentas individuales en la política de configuración. Si tiene un número reducido de cuentas o si las cuentas no forman parte de una organización en la política de configuración de destino, puede optar por incluir cuentas individuales en su lugar.

## Epics
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-epics"></a>

### Configure el módulo de receptor
<a name="set-up-the-sink-module"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Clona el repositorio GitHub de Observability Access Manager:<pre>git clone https://github.com/aws-samples/cloudwatch-obervability-access-manager-terraform</pre> | AWS DevOps, administrador de la nube, administrador de AWS | 
| Especifique los valores de las propiedades del módulo receptor. | En el archivo `main.tf` (en la ****carpeta `deployments/aft-account-customizations/LOGGING/terraform/` del repositorio), especifique los valores de las siguientes propiedades:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.html)Para obtener más información, consulte [AWS::Oam::Sink](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-oam-sink.html)la CloudFormation documentación. | AWS DevOps, administrador de la nube, administrador de AWS | 
| Instale el módulo receptor. | Exporte las credenciales de la cuenta Cuenta de AWS que haya seleccionado como cuenta de monitoreo e instale el módulo receptor Observability Access Manager:<pre>Terraform Init<br />Terrafom Plan<br />Terraform Apply</pre> | AWS DevOps, administrador de la nube, administrador de AWS | 

### Configure el módulo receptor
<a name="set-up-the-link-module"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Especifique los valores de las propiedades del módulo de enlace. | En el archivo `main.tf ` (en la ****carpeta `deployments/aft-account-customizations/LOGGING/terraform/` del repositorio), especifique los valores de las siguientes propiedades:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.html)Para obtener más información, consulte [AWS::Oam::Link](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-oam-link.html)la CloudFormation documentación. | AWS DevOps, administrador de nube, arquitecto de nube | 
| Instale el módulo de enlace para cuentas individuales. | Exporte las credenciales de las cuentas individuales e instale el módulo de enlace Observability Access Manager:<pre>Terraform Plan<br />Terraform Apply</pre>Puede configurar el módulo de enlace de forma individual para cada cuenta o usar [AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) para instalar automáticamente este módulo en una gran cantidad de cuentas. | AWS DevOps, administrador de nube, arquitecto de nube | 

### Apruebe sink-to-link las conexiones
<a name="approve-sink-to-link-connections"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique el mensaje del estado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.html)A la derecha, debería ver el mensaje de estado **Supervisar la cuenta con una cuenta habilitada** con una marca de verificación verde. Esto significa que la cuenta de monitoreo tiene un receptor de Observability Access Manager al que se conectarán los enlaces de otras cuentas. |  | 
| Apruebe las link-to-sink conexiones. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.html)Para obtener más información, consulte [Vincular las cuentas de supervisión con las cuentas de origen](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account-Setup.html) en la CloudWatch documentación. | AWS DevOps, administrador de nube, arquitecto de nube | 

### Verificar los datos de observabilidad entre cuentas
<a name="verify-cross-account-observability-data"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ver datos entre cuentas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.html) | AWS DevOps, administrador de nube, arquitecto de nube | 

### (Opcional) Habilite las cuentas de origen para que confíen en la cuenta de monitoreo
<a name="optional-enable-source-accounts-to-trust-monitoring-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Consulte las métricas, los paneles, los registros, los widgets y las alarmas de otras cuentas. | Como función adicional,**** puede compartir CloudWatch las métricas, los paneles, los registros, los widgets y las alarmas con otras cuentas. Cada cuenta utiliza un rol de IAM denominado **CloudWatch: CrossAccountSharingRole ** para acceder a estos datos.Las cuentas de origen que tienen una relación de confianza con la cuenta de supervisión central pueden asumir esta función y ver los datos de la cuenta de supervisión.CloudWatch proporciona un ejemplo de CloudFormation script para crear el rol. Elija **Administrar el rol en IAM** y ejecute este script en las cuentas en las que desee ver los datos.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "AWS": [<br />                    "arn:aws:iam::XXXXXXXXX:root",<br />                    "arn:aws:iam::XXXXXXXXX:root",<br />                    "arn:aws:iam::XXXXXXXXX:root",<br />                    "arn:aws:iam::XXXXXXXXX:root"<br />                ]<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}</pre>Para obtener más información, consulte [Habilitar la funcionalidad multicuenta CloudWatch en](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html#enable-cross-account-cross-Region) la CloudWatch documentación. | AWS DevOps, administrador de nube, arquitecto de nube | 

### (Opcional) Ver las cuentas y Regiones cruzadas desde la cuenta de monitoreo
<a name="optional-view-cross-account-cross-region-from-the-monitoring-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configuración del acceso entre cuentas y regiones. | En la cuenta de supervisión central, si lo desea, puede añadir un selector de cuentas para cambiar fácilmente de una cuenta a otra y ver sus datos sin tener que autenticarse.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager.html)Para obtener más información, consulte la [ CloudWatch consola multicuentas y regiones](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) en la documentación. CloudWatch  | AWS DevOps, administrador de nube, arquitecto de nube | 

## Recursos relacionados
<a name="centralize-monitoring-by-using-amazon-cloudwatch-observability-access-manager-resources"></a>
+ [CloudWatch observabilidad entre cuentas (documentación de](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html) Amazon CloudWatch )
+ [Referencia de la API de Amazon CloudWatch Observability Access Manager](https://docs.aws.amazon.com/OAM/latest/APIReference/Welcome.html) ( CloudWatch documentación de Amazon)
+ [Recurso: aws\$1oam\$1sink](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/oam_sink) (documentación de Terraform)
+ [Origen de datos: aws\$1oam\$1link](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/oam_link) (documentación de Terraform)
+ [CloudWatchObservabilityAccessManager](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/oam.html)(documentación de AWS Boto3)

# Comprueba EC2 las instancias para ver si hay etiquetas obligatorias en el lanzamiento
<a name="check-ec2-instances-for-mandatory-tags-at-launch"></a>

*Susanne Kangnoh y Archit Mathur, Amazon Web Services*

## Resumen
<a name="check-ec2-instances-for-mandatory-tags-at-launch-summary"></a>

Amazon Elastic Compute Cloud (Amazon EC2) proporciona capacidad informática escalable en la nube de Amazon Web Services (AWS). El uso de Amazon EC2 elimina la necesidad de invertir en hardware por adelantado, por lo que puede desarrollar e implementar aplicaciones más rápido.

Puede usar el etiquetado para categorizar los recursos de AWS de diferentes maneras. EC2 El etiquetado de instancias resulta útil cuando tiene muchos recursos en su cuenta y quiere identificar rápidamente un recurso específico en función de las etiquetas. Puedes asignar metadatos personalizados a tus EC2 instancias mediante etiquetas. Una etiqueta es una marca que consta de una clave y un valor definidos por el usuario. Le recomendamos que cree un conjunto de etiquetas coherente para satisfacer los requisitos de su organización. 

Este patrón proporciona una CloudFormation plantilla de AWS que le ayuda a supervisar EC2 las instancias para etiquetas específicas. La plantilla crea un evento de Amazon CloudWatch Events que vigila los **UntagResource**eventos de AWS para detectar el etiquetado CloudTrail **TagResource**o la eliminación de etiquetas de nuevas EC2 instancias. Si falta una etiqueta predefinida, llama una función de AWS Lambda, que envía un mensaje de infracción a la dirección de correo electrónico que usted proporcione mediante Amazon Simple Notification Service (Amazon SNS). 

## Requisitos previos y limitaciones
<a name="check-ec2-instances-for-mandatory-tags-at-launch-prerequisites-and-limitations"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Cargue el código de Lambda proporcionado en un bucket de Amazon Simple Storage Service (Amazon S3).
+ Una dirección de correo electrónico en la que desee recibir las notificaciones de infracciones.

**Limitaciones**
+ Esta solución es compatible con CloudTrail **TagResource**nuestros **UntagResource**eventos. No crea notificaciones para ningún otro evento.
+ Esta solución solo comprueba las claves de las etiquetas. No supervisa los valores clave.

## Arquitectura
<a name="check-ec2-instances-for-mandatory-tags-at-launch-architecture"></a>

**Arquitectura ****de flujo de trabajo**

![\[Workflow diagram showing Servicios de AWS interaction for EC2 instance monitoring and notification.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9cd74141-a87f-419e-94b3-0b28fd04a018/images/b48fd21b-a86b-4ec7-b9f6-4f1a64999437.png)


 

**Automatización y escala**
+ Puede utilizar la CloudFormation plantilla de AWS varias veces para distintas regiones y cuentas de AWS. Debe ejecutar la plantilla solo una vez en cada región o cuenta.

## Tools (Herramientas)
<a name="check-ec2-instances-for-mandatory-tags-at-launch-tools"></a>

**Servicios de AWS**
+ [Amazon EC2](https://aws.amazon.com/ec2/): Amazon Elastic Compute Cloud (Amazon EC2) es un servicio web que proporciona una capacidad informática segura y de tamaño variable en la nube. Se ha diseñado para facilitar a los desarrolladores la computación en la nube en la Web.
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html): CloudTrail es un servicio de AWS que le ayuda con la gobernanza, el cumplimiento y la auditoría operativa y de riesgos de su cuenta de AWS. Las acciones realizadas por un usuario, un rol o un servicio de AWS se registran como eventos en CloudTrail. 
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html): Amazon CloudWatch Events ofrece una transmisión casi en tiempo real de los eventos del sistema que describen los cambios en los recursos de AWS. CloudWatch Events se da cuenta de los cambios operativos a medida que se producen y toma las medidas correctivas necesarias, mediante el envío de mensajes en respuesta al entorno, la activación de funciones, la introducción de cambios y la recopilación de información sobre el estado. 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): 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. 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos altamente escalable que se puede utilizar para una amplia gama de soluciones de almacenamiento, incluidos sitios web, aplicaciones móviles, copias de seguridad y lagos de datos.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): Amazon Simple Notification Service (Amazon SNS) es un servicio web que permite a las aplicaciones, los usuarios finales y los dispositivos enviar y recibir al instante notificaciones desde la nube.

**Codigo**

Este patrón incluye un adjunto con dos archivos:
+ `index.zip` es un archivo comprimido que incluye el código de Lambda de este patrón.
+ `ec2-require-tags.yaml`es una CloudFormation plantilla que despliega el código Lambda.

Consulte la sección *Epics* para obtener información sobre cómo usar estos archivos.

## Epics
<a name="check-ec2-instances-for-mandatory-tags-at-launch-epics"></a>

### Implementar el código de Lambda
<a name="deploy-the-lambda-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cargue el código en un bucket de S3. | Cree un bucket de S3 nuevo o utilice un bucket de S3 ya existente para cargar el archivo adjunto `index.zip` (código de Lambda). Este depósito debe estar en la misma región de AWS que los recursos (EC2 instancias) que desee supervisar. | Arquitecto de la nube | 
| Implemente la CloudFormation plantilla. | Abra la consola de Cloudformation en la misma región de AWS que el bucket de S3 e implemente el archivo `ec2-require-tags.yaml` que se incluye en el archivo adjunto. En la siguiente Epic, proporcione los valores de los parámetros.   | Arquitecto de la nube | 

### Complete los parámetros de la CloudFormation plantilla
<a name="complete-the-parameters-in-the-cloudformation-template"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Proporcione el nombre del bucket de S3. | Escriba el nombre del bucket de S3 que ha creado o seleccionado en la primera Epic. Este bucket de S3 contiene el archivo.zip del código Lambda y debe estar en la misma región de AWS que CloudFormation la plantilla y EC2 las instancias que desea monitorear. | Arquitecto de la nube | 
| Proporcione la clave de S3. | Proporcione la ubicación del archivo .zip del código de Lambda en su bucket de S3, sin barras diagonales iniciales (por ejemplo, `index.zip` o `controls/index.zip`). | Arquitecto de la nube | 
| Proporcione una dirección de correo electrónico. | Proporcione una dirección de correo electrónico activa en la que desee recibir notificaciones de infracciones. | Arquitecto de la nube | 
| Defina un nivel de registro. | Especifique el nivel de registro y el detalle. `Info` designa mensajes informativos detallados sobre el progreso de la aplicación y solo debe usarse para la depuración. `Error` designa los eventos de error que aún podrían permitir que la aplicación siguiera ejecutándose. `Warning` designa situaciones potencialmente dañinas. | Arquitecto de la nube | 
| Ingrese las claves de etiqueta requeridas. | Escriba las claves de etiqueta que desea comprobar. Si desea especificar varias claves, sepárelas con comas, sin espacios. (Por ejemplo, `ApplicationId,CreatedBy,Environment,Organization` busca cuatro claves). El evento CloudWatch Events busca estas claves de etiquetas y envía una notificación si no las encuentra. | Arquitecto de la nube | 

### Confirmar la suscripción
<a name="confirm-the-subscription"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Confirme la suscripción de correo electrónico. | Cuando la CloudFormation plantilla se implementa correctamente, envía un mensaje de correo electrónico de suscripción a la dirección de correo electrónico que has proporcionado. Debe confirmar esta suscripción de correo electrónico para recibir notificaciones.   | Arquitecto de la nube | 

## Recursos relacionados
<a name="check-ec2-instances-for-mandatory-tags-at-launch-related-resources"></a>
+ [Creación de un bucket](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) (documentación de Amazon S3)
+ [Carga de objetos](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) (documentación de Amazon S3)
+ [Etiquete sus EC2 recursos de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) ( EC2 documentación de Amazon)
+ [Creación de una regla de CloudWatch eventos que se active en una llamada a la API de AWS mediante AWS CloudTrail](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-CloudTrail-Rule.html) ( CloudWatch documentación de Amazon)

## Conexiones
<a name="attachments-9cd74141-a87f-419e-94b3-0b28fd04a018"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/9cd74141-a87f-419e-94b3-0b28fd04a018/attachments/attachment.zip)

# Limpie los recursos de AWS Account Factory for Terraform (AFT) de forma segura después de la pérdida de archivos estatales
<a name="clean-up-aft-resources-safely-after-state-file-loss"></a>

*Gokendra Malviya, Amazon Web Services*

## Resumen
<a name="clean-up-aft-resources-safely-after-state-file-loss-summary"></a>

Cuando usa AWS Account Factory for Terraform (AFT) para administrar su AWS Control Tower entorno, AFT genera un archivo de estado de Terraform para rastrear el estado y la configuración de los recursos creados por Terraform. La pérdida del archivo de estado de Terraform puede suponer importantes desafíos para la administración y limpieza de los recursos. Este patrón proporciona un enfoque sistemático para identificar y eliminar de forma segura los recursos relacionados con la AFT y, al mismo tiempo, mantener la integridad de su entorno. AWS Control Tower 

El proceso está diseñado para garantizar la eliminación adecuada de todos los componentes de AFT, incluso sin la referencia del archivo de estado original. Este proceso proporciona un camino claro para restablecer y reconfigurar correctamente la AFT en su entorno, a fin de garantizar una interrupción mínima de sus operaciones. AWS Control Tower 

Para obtener más información sobre AFT, consulte la [documentación de AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html).

## Requisitos previos y limitaciones
<a name="clean-up-aft-resources-safely-after-state-file-loss-prereqs"></a>

**Requisitos previos **
+ Un conocimiento detallado de la [arquitectura de AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-architecture.html).
+ Acceso de administrador a las siguientes cuentas:
  + Cuenta de administración de AFT
  + AWS Control Tower Cuenta de administración
  + Cuenta del archivo de registro
  + Cuenta de auditoría
+ Verificación de que ninguna política de control de servicios (SCPs) contiene restricciones o limitaciones que puedan bloquear la eliminación de los recursos relacionados con AFT.

**Limitaciones**
+ Este proceso puede limpiar los recursos de forma eficaz, pero no puede recuperar los archivos de estado perdidos, y algunos recursos pueden requerir una identificación manual.
+ La duración del proceso de limpieza depende de la complejidad del entorno y puede tardar varias horas.
+ Este patrón se probó con la versión 1.12.2 de AFT y elimina los siguientes recursos. Si está utilizando una versión diferente de AFT, es posible que deba eliminar recursos adicionales.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html)

**importante**  
Los recursos que se eliminan mediante los pasos de este patrón no se pueden recuperar. Antes de seguir estos pasos, compruebe cuidadosamente los nombres de los recursos y asegúrese de que fueron creados por AFT.

## Arquitectura
<a name="clean-up-aft-resources-safely-after-state-file-loss-architecture"></a>

En el siguiente diagrama se muestran los componentes de AFT y el flujo de trabajo de alto nivel. AFT configura una canalización de Terraform que le ayuda a aprovisionar y personalizar varias cuentas de AWS Control Tower. AFT sigue un GitOps modelo para automatizar los procesos de aprovisionamiento de cuentas en. AWS Control Tower Puede crear un archivo de Terraform para una solicitud de cuenta y confirmarlo en un repositorio, que proporciona la entrada que activa el flujo de trabajo de AFT para el aprovisionamiento de la cuenta. Una vez completado el aprovisionamiento de la cuenta, AFT puede ejecutar automáticamente pasos de personalización adicionales.

![\[Componentes de AFT y flujo de trabajo de alto nivel.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/1342c0a6-4b07-46df-a063-ceab2e2f83c8/images/3e0cae87-20ef-4fcc-aacf-bb450844ac56.png)


En esta arquitectura:
+ **AWS Control Tower La cuenta de administración** es una Cuenta de AWS que está dedicada al AWS Control Tower servicio. Por lo general, también se denomina *cuenta de pagador de AWS * o *cuenta de administración de AWS Organizations *.
+ La **cuenta de administración de AFT** está dedicada a las operaciones de administración de AFT. Cuenta de AWS Es diferente de la cuenta de administración de su organización.
+ La **cuenta vendida** es una Cuenta de AWS que contiene todos los componentes y controles básicos que seleccionó. AFT utiliza AWS Control Tower para vender una cuenta nueva.

Para obtener información adicional sobre esta arquitectura, consulte [Introducción a la AFT](https://catalog.workshops.aws/control-tower/en-US/customization/aft) en el AWS Control Tower taller.

## Tools (Herramientas)
<a name="clean-up-aft-resources-safely-after-state-file-loss-tools"></a>

**Servicios de AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)le ayuda a configurar y gobernar un entorno de AWS múltiples cuentas, siguiendo las mejores prácticas prescriptivas.
+ [AWS Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html) establece una canalización de Terraform para ayudarlo a aprovisionar y personalizar cuentas y recursos. AWS Control Tower
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)le ayuda a gestionar y gobernar su entorno de forma centralizada a medida que crece y escala sus AWS recursos. Con Organizations, puede crear nuevas cuentas y asignar recursos, agrupar cuentas para organizar sus flujos de trabajo, aplicar políticas con fines de gobernanza y simplificar la facturación mediante un único método de pago para todas sus cuentas.
+ [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. Este patrón requiere roles y permisos de IAM.

**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.

## Prácticas recomendadas
<a name="clean-up-aft-resources-safely-after-state-file-loss-best-practices"></a>
+ Para ello AWS Control Tower, consulte [las prácticas recomendadas para AWS Control Tower administradores](https://docs.aws.amazon.com/controltower/latest/userguide/best-practices.html) en la documentación. AWS Control Tower 
+ Para más información de IAM, consulte [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="clean-up-aft-resources-safely-after-state-file-loss-epics"></a>

### Eliminación de los recursos de AFT en la cuenta de administración de AFT
<a name="delete-aft-resources-in-the-aft-management-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos que identifique la etiqueta AFT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 
| Elimine roles de IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 
| Elimine la bóveda AWS Backup de respaldo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 
| Elimina CloudWatch los recursos de Amazon. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 
| Eliminar AWS KMS recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 

### Eliminación de recursos de AFT en la cuenta del archivo de registros
<a name="delete-aft-resources-in-the-log-archive-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine buckets de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 
| Elimine roles de IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 

### Eliminación de recursos de AFT en la cuenta de auditoría
<a name="delete-aft-resources-in-the-audit-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine roles de IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 

### Elimine los recursos de AFT de la cuenta AWS Control Tower de administración
<a name="delete-aft-resources-in-the-ctower-management-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine roles de IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 
| Eliminar EventBridge reglas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | Administrador de AWS DevOps, DevOps ingeniero de AWS | 

## Resolución de problemas
<a name="clean-up-aft-resources-safely-after-state-file-loss-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se pudo desconectar la puerta de enlace de Internet. | Mientras elimina los recursos identificados mediante la etiqueta **AFT**, si se encuentras con este problema al desconectar o eliminar la puerta de enlace de Internet, primero debe eliminar los puntos de conexión de VPC:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | 
| No puede encontrar las consultas CloudWatch especificadas. | Si no puede encontrar las CloudWatch consultas que creó AFT, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/clean-up-aft-resources-safely-after-state-file-loss.html) | 

## Recursos relacionados
<a name="clean-up-aft-resources-safely-after-state-file-loss-resources"></a>
+ AFT:
  + [GitHub Repositorio](https://github.com/aws-ia/terraform-aws-control_tower_account_factory)
  + [Taller](https://catalog.workshops.aws/control-tower/en-US/customization/aft)
  + [Documentación](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)
+ [AWS Control Tower documentación](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html)

## Información adicional
<a name="clean-up-aft-resources-safely-after-state-file-loss-additional"></a>

Para ver las consultas AFT en el panel de control de CloudWatch Logs Insights, selecciona el icono de **consultas guardadas y de muestra** en la esquina superior derecha, como se muestra en la siguiente captura de pantalla:

![\[Acceder a las consultas AFT en el panel de control de CloudWatch Logs Insights.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/1342c0a6-4b07-46df-a063-ceab2e2f83c8/images/255d4032-738b-4600-9084-9684d2e9a328.png)


# Cree una canalización en las regiones de AWS que no sean compatibles con AWS CodePipeline
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Resumen
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline-summary"></a>

**Aviso**: ya no AWS CodeCommit 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/)

AWS CodePipeline es un servicio de organización de entrega continua (CD) que forma parte de un conjunto de DevOps herramientas de Amazon Web Services (AWS). Se integra con una gran variedad de fuentes (como sistemas de control de versiones y soluciones de almacenamiento), productos y servicios de integración continua (CI) de AWS y sus socios, y productos de código abierto para proporcionar un servicio de end-to-end flujo de trabajo que permita una implementación rápida de aplicaciones e infraestructuras.

Sin embargo, CodePipeline no es compatible en todas las regiones de AWS y es útil tener un orquestador invisible que conecte CI/CD los servicios de AWS. Este patrón describe cómo implementar una canalización de end-to-end flujo de trabajo en las regiones de AWS en las que aún CodePipeline no se admite mediante el uso de CI/CD servicios de AWS como AWS CodeCommit CodeBuild, AWS y AWS CodeDeploy.

## Requisitos previos y limitaciones
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa
+ CLI del AWS Cloud Development Kit (AWS CDK) versión 2.28 o posterior

## Arquitectura
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline-architecture"></a>

**Pila de tecnología de destino**

En el siguiente diagrama se muestra una canalización que se creó en una región que no es compatible CodePipeline, como la región de África (Ciudad del Cabo). Un desarrollador envía los archivos de CodeDeploy configuración (también denominados *scripts de enlace del ciclo de vida de despliegue*) al repositorio de Git que aloja. CodeCommit (Consulta el [GitHub repositorio](https://github.com/aws-samples/invisible-codepipeline-unsupported-regions) que se proporciona con este patrón). Se inicia CodeBuild automáticamente una EventBridge regla de Amazon.

Los archivos CodeDeploy de configuración se obtienen CodeCommit como parte de la etapa de origen de la canalización y se transfieren a ella. CodeBuild 

En la siguiente fase, CodeBuild realiza las siguientes tareas: 

1. Descargue el archivo TAR del código fuente de la aplicación. Puede configurar el nombre de este archivo mediante Parameter Store, una capacidad de AWS Systems Manager.

1. Descarga los archivos CodeDeploy de configuración.

1. Crea un archivo combinado de código fuente de la aplicación y archivos de CodeDeploy configuración específicos del tipo de aplicación.

1. Inicia el CodeDeploy despliegue en una instancia de Amazon Elastic Compute Cloud (Amazon EC2) mediante el archivo combinado.

![\[Creación de canalizaciones en una región de AWS no compatible\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e27750de-b597-424e-b5bf-4d58dc9b60cc/images/95fc815e-a762-4142-b0fd-2a716823e498.png)


## Tools (Herramientas)
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline-tools"></a>

**Servicios 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 instancias locales o de Amazon EC2, 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 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.

**Código**

El código de este patrón está disponible en el repositorio de [regiones GitHub CodePipeline no compatibles](https://github.com/aws-samples/invisible-codepipeline-unsupported-regions).

## Epics
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline-epics"></a>

### Configurar la estación de trabajo de desarrollador
<a name="set-up-your-developer-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale la CLI de AWS CDK. | Para obtener instrucciones, consulte la [documentación de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites). | AWS DevOps | 
| Instalar un cliente Git. | Para crear confirmaciones, puedes usar un cliente Git instalado en tu computadora local y, a continuación, enviar tus confirmaciones al CodeCommit repositorio. Para configurarlo CodeCommit con tu cliente Git, consulta la [CodeCommit documentación](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-commit.html). | AWS DevOps | 
| Instale npm. | Instale el administrador de paquetes **npm**. Para obtener más información, consulte la [documentación npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). | AWS DevOps | 

### Configurar la canalización
<a name="set-up-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código. | Clone el repositorio de [Regions GitHub CodePipeline no compatibles](https://github.com/aws-samples/invisible-codepipeline-unsupported-regions) en su máquina local ejecutando el siguiente comando.<pre>git clone https://github.com/aws-samples/invisible-codepipeline-unsupported-regions</pre> | DevOps ingeniero | 
| Establezca los parámetros en cdk.json. | Abra el archivo `cdk.json` y proporcione valores para los siguientes parámetros:<pre>"pipeline_account":"XXXXXXXXXXXX",<br />"pipeline_region":"us-west-2",<br />"repo_name": "app-dev-repo",<br />"ec2_tag_key": "test-vm",<br />"configName" : "cbdeployconfig",<br />"deploymentGroupName": "cbdeploygroup",<br />"applicationName" : "cbdeployapplication",<br />"projectName" : "CodeBuildProject"</pre>donde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline.html) | AWS DevOps | 
| Configure la biblioteca de constructo de AWS CDK. | En el GitHub repositorio clonado, utilice los siguientes comandos para instalar la biblioteca de construcción de AWS CDK, compilar la aplicación y sintetizar para generar la CloudFormation plantilla de AWS para la aplicación.<pre>npm i aws-cdk-lib<br />npm run build<br />cdk synth</pre> | AWS DevOps | 
| Implementar la aplicación de AWS CDK de muestra | Implemente el código ejecutando el siguiente comando en una región no compatible (por ejemplo `af-south-1`).<pre>cdk deploy</pre> | AWS DevOps | 

### Configure el CodeCommit repositorio para CodeDeploy
<a name="set-up-the-codecommit-repository-for-codedeploy"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure CI/CD para la aplicación. | Clone el CodeCommit repositorio que especificó en el `cdk.json` archivo (se denomina de forma `app-dev-repo` predeterminada) para configurar la CI/CD canalización de la aplicación.<pre>git clone https://git-codecommit.us-west-2.amazonaws.com/v1/repos/app-dev-repo</pre>donde el nombre y la región del repositorio dependen de los valores que haya proporcionado en el archivo `cdk.json`. | AWS DevOps | 

### Prueba la canalización
<a name="test-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la canalización con las instrucciones de implementación. | La `CodeDeploy_Files` carpeta del repositorio de [regiones GitHub CodePipeline no compatibles](https://github.com/aws-samples/invisible-codepipeline-unsupported-regions) incluye archivos de muestra que indican cómo CodeDeploy implementar la aplicación. El `appspec.yml` archivo es un archivo CodeDeploy de configuración que contiene enlaces para controlar el flujo de implementación de la aplicación. Puede usar los archivos de muestra `index.html`, `start_server.sh`, `stop_server.sh` y `install_dependencies.sh` para actualizar un sitio web alojado en Apache. Estos son ejemplos: puede usar el código del GitHub repositorio para implementar cualquier tipo de aplicación. Cuando los archivos se envían al CodeCommit repositorio, la canalización invisible se inicia automáticamente. Para ver los resultados de la implementación, compruebe los resultados de las fases individuales en las CodeDeploy consolas CodeBuild y consolas. | AWS DevOps | 

## Recursos relacionados
<a name="create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline-resources"></a>
+ [Introducción](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites) (documentación de AWS CDK)
+ [Introducción al Cloud Development Kit (CDK)](https://catalog.us-east-1.prod.workshops.aws/workshops/5962a836-b214-4fbf-9462-fedba7edcc9b/en-US) (AWS Workshop Studio)
+ [Taller sobre AWS CDK](https://cdkworkshop.com/)

# Personalice los nombres de los roles predeterminados mediante AWS CDK aspectos y trampillas de escape
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches"></a>

*SANDEEP SINGH y James Jacob, Amazon Web Services*

## Resumen
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-summary"></a>

Este patrón muestra cómo personalizar los nombres predeterminados de los roles que se crean mediante componentes fijos. AWS Cloud Development Kit (AWS CDK) La personalización de los nombres de los roles suele ser necesaria si la organización tiene restricciones específicas basadas en las convenciones de nomenclatura. Por ejemplo, su organización puede establecer [límites de permisos AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) (IAM) o [políticas de control de servicios (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) que requieran un prefijo específico en los nombres de las funciones. En esos casos, es posible que los nombres de los roles predeterminados generados por AWS CDK las construcciones no cumplan estas convenciones y sea necesario modificarlos. Este patrón aborda esos requisitos mediante el uso de [vías de escape](https://docs.aws.amazon.com/cdk/v2/guide/cfn-layer.html) y [aspectos](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html) de AWS CDK. Utilice las vías de escape para definir los nombres de los roles personalizados y los aspectos para aplicar un nombre personalizado a todos los roles, a fin de garantizar el cumplimiento de las políticas y restricciones de la organización.

## Requisitos previos y limitaciones
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Requisitos previos especificados en la [documentación de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)

**Limitaciones**
+ Los aspectos filtran los recursos en función de los tipos de recursos, por lo que todos los roles comparten el mismo prefijo. Si necesita prefijos de rol diferentes para roles distintos, es necesario aplicar filtros adicionales en función de otras propiedades. Por ejemplo, para asignar distintos prefijos a los roles que están asociados a AWS Lambda funciones, puede filtrar por atributos o etiquetas de rol específicos y aplicar un prefijo para los roles relacionados con Lambda y un prefijo diferente para los demás roles.
+ Los nombres de los roles de IAM tienen una longitud máxima de 64 caracteres, por lo que los nombres de los roles modificados deben recortarse para cumplir con esta restricción.
+ Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para conocer la disponibilidad de las regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para 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.

## Arquitectura
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-architecture"></a>

**Pila de tecnología de destino**
+ AWS CDK
+ AWS CloudFormation

**Arquitectura de destino**

![\[Arquitectura para usar vías de escape y aspectos para personalizar los nombres de los roles asignados por AWS CDK.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c149d8d2-1da6-4680-ab0b-e5051b69688c/images/15e56ca5-f150-4522-b374-8ee2dcc655a9.png)

+ Una AWS CDK aplicación consta de una o más CloudFormation pilas, que se sintetizan e implementan para administrar AWS los recursos.
+ Para modificar una propiedad de un recurso AWS CDK administrado que no esté expuesta por una construcción de capa 2 (L2), se utiliza una vía de escape para anular las CloudFormation propiedades subyacentes (en este caso, el nombre de la función) y un aspecto para aplicar la función a todos los recursos de la AWS CDK aplicación durante el proceso de síntesis de la pila. AWS CDK 

## Tools (Herramientas)
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-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 el código.
+ [AWS CDK La interfaz de línea de comandos (AWS CDK CLI)](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) (también conocida como kit de AWS CDK herramientas) es un kit de desarrollo en la nube de línea de comandos que le ayuda a interactuar con su AWS CDK aplicación. El `cdk` comando CLI 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 el. AWS CDK
+ [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 todas Cuentas de AWS las regiones.

**Repositorio de código**

El código fuente y las plantillas de este patrón están disponibles en el repositorio GitHub [CDK Aspects Override](https://github.com/aws-samples/cdk-aspects-override).

## Prácticas recomendadas
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-best-practices"></a>

Consulte [las mejores prácticas para usar el AWS CDK in TypeScript para crear proyectos de IaC](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/introduction.html) en el sitio web de la Guía **AWS **prescriptiva.

## Epics
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-epics"></a>

### Instalación de la AWS CDK CLI
<a name="install-the-cdk-cli"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale la AWS CDK CLI. | Para instalar la AWS CDK CLI globalmente, ejecute el comando:<pre>npm install -g aws-cdk</pre> | AWS DevOps | 
| Verificar la versión. | Ejecute el comando:<pre>cdk --version</pre>Confirme que está utilizando la versión 2 de la AWS CDK CLI. | AWS DevOps | 
| Inicie el AWS CDK entorno. | Antes de implementar las CloudFormation plantillas, prepare la cuenta Región de AWS que desea usar. Ejecute el comando:<pre>cdk bootstrap <account>/<Region></pre>Para obtener más información, consulte el proceso de [AWS CDK arranque en](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) la documentación. AWS  | AWS DevOps | 

### Implemente la AWS CDK aplicación para demostrar el uso de los aspectos
<a name="deploy-the-cdk-app-to-demonstrate-the-use-of-aspects"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el proyecto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.html) | AWS DevOps | 
| Implemente pilas con los nombres de rol predeterminados asignados por AWS CDK. | Implemente dos CloudFormation pilas (`ExampleStack1`y`ExampleStack2`) que contengan las funciones de Lambda y sus funciones asociadas:<pre>npm run deploy:ExampleAppWithoutAspects</pre>El código no transfiere explícitamente las propiedades de los roles, por lo que los nombres de los roles los construirá AWS CDK.Para obtener un ejemplo de resultado, consulte la sección [Información adicional](#customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-additional). | AWS DevOps | 
| Implemente pilas con aspectos. | En este paso, se aplica un aspecto que impone una convención de nombres de roles añadiendo un prefijo a todos los roles de IAM que se implementan en el proyecto. AWS CDK El aspecto se define en el archivo `lib/aspects.ts`. El aspecto utiliza una vía de escape para anular el nombre del rol mediante la adición de un prefijo. El aspecto se aplica a las pilas del archivo `bin/app-with-aspects.ts`. En este ejemplo, el prefijo del nombre del rol es `dev-unicorn`.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.html)Para obtener un ejemplo de resultado, consulte la sección [Información adicional](#customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-additional). | AWS DevOps | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine sus AWS CloudFormation pilas. | Cuando termine este patrón, ejecute el comando siguiente para eliminar los recursos y evitar incurrir en costos adicionales:<pre>cdk destroy --all -f && cdk --app npx ts-node bin/app-with-aspects.ts' destroy --all -f </pre> | AWS DevOps | 

## Resolución de problemas
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Tiene problemas al utilizar el AWS CDK. | Consulte [Solución de AWS CDK problemas comunes](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) en la AWS CDK documentación. | 

## Recursos relacionados
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-resources"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)
+ [AWS CDK documentación](https://docs.aws.amazon.com/cdk/)
+ [AWS CDK en GitHub](https://github.com/aws/aws-cdk)
+ [Vías de escape](https://docs.aws.amazon.com/cdk/v2/guide/cfn-layer.html)
+ [Aspectos y el AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html)

## Información adicional
<a name="customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches-additional"></a>

**Nombres de roles creados por CloudFormation sin aspectos**

```
Outputs:
ExampleStack1WithoutAspects.Function1RoleName = example-stack1-without-as-Function1LambdaFunctionSe-y7FYTY6FXJXA
ExampleStack1WithoutAspects.Function2RoleName = example-stack1-without-as-Function2LambdaFunctionSe-dDZV4rkWqWnI
...

Outputs:
ExampleStack2WithoutAspects.Function3RoleName = example-stack2-without-as-Function3LambdaFunctionSe-ygMv49iTyMq0
```

**Nombres de rol creados por CloudFormation With Aspects**

```
Outputs:
ExampleStack1WithAspects.Function1RoleName = dev-unicorn-Function1LambdaFunctionServiceRole783660DC
ExampleStack1WithAspects.Function2RoleName = dev-unicorn-Function2LambdaFunctionServiceRole2C391181
...

Outputs:
ExampleStack2WithAspects.Function3RoleName = dev-unicorn-Function3LambdaFunctionServiceRole4CAA721C
```

# Implemente un clúster de Cassandra en Amazon EC2 con estática privada IPs para evitar el reequilibrio
<a name="deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing"></a>

*Dipin Jain, Amazon Web Services*

## Resumen
<a name="deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing-summary"></a>

La IP privada de una instancia de Amazon Elastic Compute Cloud (Amazon EC2) se conserva durante todo su ciclo de vida. Sin embargo, la IP privada puede cambiar durante un bloqueo planificado o imprevisto del sistema; por ejemplo, durante una actualización de Imagen de máquina de Amazon (AMI). En algunos escenarios, retener una IP estática privada puede mejorar el rendimiento y el tiempo de recuperación de las cargas de trabajo. Por ejemplo, el uso de una IP estática para un nodo raíz de Apache Cassandra evita que el clúster incurra en una sobrecarga de reequilibrio. 

Este patrón describe cómo conectar una interfaz de red elástica secundaria a EC2 las instancias para mantener la IP estática durante el realojamiento. El patrón se centra en los clústeres de Cassandra, pero puedes usar esta implementación para cualquier arquitectura que se beneficie de la estática privada. IPs

## Requisitos previos y limitaciones
<a name="deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa

**Versiones de producto**
+ DataStax versión 5.11.1
+ Sistema operativo: Ubuntu 16.04.6 LTS

## Arquitectura
<a name="deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing-architecture"></a>

**Arquitectura de origen**

La fuente podría ser un clúster de Cassandra en una máquina virtual (VM) local o en EC2 instancias de la nube de AWS. En el siguiente diagrama se ilustra el segundo escenario. Este ejemplo incluye cuatro nodos en el clúster: tres nodos raíz y un nodo de administración. En la arquitectura de origen, cada nodo tiene una única interfaz de red conectada.

![\[Cuatro nodos de EC2 clúster de Amazon, cada uno con una única interfaz de red conectada.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/47ca4dbc-0922-4e65-b66c-4db5122fc4ac/images/5d80cfc9-4b72-4c72-aefd-b77cc0fb58e3.png)


**Arquitectura de destino**

El clúster de destino se aloja en EC2 instancias con una interfaz de red elástica secundaria conectada a cada nodo, como se muestra en el siguiente diagrama.

![\[Cuatro nodos de EC2 clúster de Amazon, cada uno con una interfaz de red elástica secundaria conectada.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/47ca4dbc-0922-4e65-b66c-4db5122fc4ac/images/d1e22017-f041-426b-9204-31ac158a407d.png)


**Automatización y escala**

También puede automatizar la conexión de una segunda interfaz de red elástica a un grupo de EC2 Auto Scaling, tal y como se describe en un [vídeo del AWS Knowledge Center](https://www.youtube.com/watch?v=RmwGYXchb4E).

## Epics
<a name="deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing-epics"></a>

### Configurar un clúster de Cassandra en Amazon EC2
<a name="configure-a-cassandra-cluster-on-amazon-ec2"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Lanza EC2 nodos para alojar un clúster de Cassandra. | En la [ EC2 consola de Amazon](https://console.aws.amazon.com/ec2/), lanza cuatro EC2 instancias para tus nodos de Ubuntu en tu cuenta de AWS. Se utilizan tres nodos (iniciales) para el clúster de Cassandra y el cuarto nodo actúa como nodo de administración de clústeres en el que se instalará DataStax Enterprise (DSE) OpsCenter. Para obtener instrucciones, consulta la [ EC2 documentación de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance). | Ingeniero de nube | 
| Confirmar las comunicaciones de los nodos. | Asegúrese de que los cuatro nodos se puedan comunicar entre sí a través de los puertos de administración de la base de datos y el clúster. | Ingeniero de redes | 
| Instale el DSE OpsCenter en el nodo de administración. | Instale DSE OpsCenter 6.1 desde el paquete Debian en el nodo de gestión. Para obtener instrucciones, consulte la [documentación de DataStax ](https://docs.datastax.com/en/opscenter/6.1/opsc/install/opscInstallDeb_t.html). | Administrador de base de datos | 
| Cree una interfaz de red secundaria. | Cassandra genera un identificador único universal (UUID) para cada nodo en función de la dirección IP de la EC2 instancia de ese nodo. Este UUID se utiliza para distribuir los nodos virtuales (vnodes) en el anillo. Cuando Cassandra se implementa en EC2 las instancias, las direcciones IP se asignan automáticamente a las instancias a medida que se crean.  En caso de que se produzca una interrupción planificada o imprevista, la dirección IP de la nueva EC2 instancia cambia, la distribución de los datos cambia y es necesario reequilibrar todo el anillo. Esta situación no es deseable. Para conservar la dirección IP asignada, utilice una [interfaz de red elástica secundaria](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#scenarios-enis) con una dirección IP fija.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing.html)Para obtener más información sobre la creación de una interfaz de red, consulta la [ EC2 documentación de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#create_eni). | Ingeniero de nube | 
| Conectar la interfaz de red secundaria a los nodos del clúster. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing.html)Para obtener más información sobre cómo conectar una interfaz de red, consulta la [ EC2 documentación de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#attach_eni). | Ingeniero de nube | 
| Añade rutas en Amazon EC2 para abordar el enrutamiento asimétrico.  | Al conectar la segunda interfaz de red, es muy probable que la red realice un enrutamiento asimétrico. Para evitarlo, puede agregar rutas para las nuevas interfaces de red.Para obtener una explicación detallada y corregir el enrutamiento asimétrico, consulte el [vídeo del AWS Knowledge Center](https://www.youtube.com/watch?v=RmwGYXchb4E) o [Cómo superar el enrutamiento asimétrico en servidores multihogar](http://www.linuxjournal.com/article/7291) (artículo *publicado por Patrick en Linux Journal* McManus, el 5 de abril de 2004). | Ingeniero de redes | 
| Actualizar las entradas de DNS para que apunten a la IP de la interfaz de red secundaria. | Apunte el nombre de dominio completo (FQDN) del nodo a la IP de la interfaz de red secundaria. | Ingeniero de redes | 
| Instale y configure el clúster de Cassandra mediante DSE. OpsCenter | Cuando los nodos del clúster estén listos con las interfaces de red secundarias, podrá instalar y configurar el clúster de Cassandra. | Administrador de base de datos | 

### Recuperar el clúster de un fallo de nodo
<a name="recover-cluster-from-node-failure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una AMI para el nodo raíz del clúster. | Haga una copia de seguridad de los nodos para poder restaurarlos con los archivos binarios de la base de datos en caso de que fallen los nodos. Para obtener instrucciones, consulte [Crear una AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-ami.html) en la EC2 documentación de Amazon. | Administrador de copias de seguridad | 
| Recuperarse del fallo de un nodo. | Sustituya el nodo fallido por una nueva EC2 instancia lanzada desde la AMI y conecte la interfaz de red secundaria del nodo fallido. | Administrador de copias de seguridad | 
| Verificar que el clúster de Cassandra está en buen estado. | Cuando el nodo de reemplazo esté activo, compruebe el estado del clúster en el DSE OpsCenter. | Administrador de base de datos | 

## Recursos relacionados
<a name="deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing-resources"></a>
+ [Instalación del DSE OpsCenter 6.1 desde el paquete Debian](https://docs.datastax.com/en/opscenter/6.1/opsc/install/opscInstallDeb_t.html) (DataStax documentación)
+ [Cómo hacer que una interfaz de red secundaria funcione en una EC2 instancia de Ubuntu](https://www.youtube.com/watch?v=RmwGYXchb4E) (vídeo del AWS Knowledge Center)
+ [Prácticas recomendadas para ejecutar Apache Cassandra en Amazon EC2](https://aws.amazon.com/blogs/big-data/best-practices-for-running-apache-cassandra-on-amazon-ec2/) (entrada del blog de AWS)

# Amplíe VRFs su alcance a AWS mediante AWS Transit Gateway Connect
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect"></a>

*Adam Till, Yashar Araghi, Vikas Dewangan y Mohideen, de Amazon Web Services HajaMohideen*

## Resumen
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-summary"></a>

El enrutamiento y el reenvío virtuales (VRF) son una característica de las redes tradicionales. Utiliza dominios de enrutamiento lógico aislados, en forma de tablas de enrutamiento, para separar el tráfico de red dentro de la misma infraestructura física. Puede configurar AWS Transit Gateway para que admita el aislamiento de VRF al conectar su red en las instalaciones a AWS. Este patrón utiliza una arquitectura de ejemplo para conectarse de forma local a diferentes tablas de rutas de las pasarelas de tránsito. VRFs 

Este patrón utiliza interfaces virtuales de tránsito (VIFs) en los archivos adjuntos de AWS Direct Connect y Transit Gateway Connect para ampliar la VRFs. Un [VIF de tránsito](https://docs.aws.amazon.com/directconnect/latest/UserGuide/WorkingWithVirtualInterfaces.html) se utiliza para acceder a una o más puertas de enlace de tránsito de Amazon VPC asociadas a las puertas de enlace de Direct Connect. Una [conexión de Transit Gateway Connect](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html) conecta una puerta de enlace de tránsito con un dispositivo virtual de terceros que se ejecuta en una VPC. Una conexión de Transit Gateway Connect admite el protocolo de túnel de encapsulación de enrutamiento genérico (GRE) para un alto rendimiento y el protocolo de puerta de enlace fronteriza (BGP) para el enrutamiento dinámico.

El enfoque descrito en este patrón tiene los siguientes beneficios:
+ Con Transit Gateway Connect, puede anunciar hasta 1000 rutas en el dispositivo homólogo de Transit Gateway Connect y recibir hasta 5000 rutas de este. El uso de la característica VIF de tránsito Direct Connect sin Transit Gateway Connect está limitado a 20 prefijos por puerta de enlace.
+ Puede mantener el aislamiento del tráfico y utilizar Transit Gateway Connect para proporcionar servicios con host en AWS, independientemente de los esquemas de direcciones IP que utilicen sus clientes.
+ No es necesario que el tráfico de VRF atraviese una interfaz virtual pública. Esto facilita el cumplimiento de los requisitos de cumplimiento y seguridad en muchas organizaciones.
+ Cada túnel de GRE admite hasta 5 Gbps y puede tener hasta cuatro túneles de GRE por cada conexión de Transit Gateway Connect. Es más rápido que muchos otros tipos de conexión, como las conexiones Site-to-Site VPN de AWS que admiten hasta 1,25 Gbps.

## Requisitos previos y limitaciones
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-prereqs"></a>

**Requisitos previos **
+ Se han creado las cuentas de AWS necesarias (consulte la arquitectura para obtener más información)
+ Permisos para asumir un rol de AWS Identity and Access Management (IAM) en cada cuenta.
+ Los roles de IAM de cada cuenta deben tener permisos para aprovisionar los recursos de AWS Transit Gateway y AWS Direct Connect. Para obtener más información, consulte [Autenticación y control de acceso para sus puertas de enlace](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-authentication-access-control.html) y [Administración de identidad y acceso para Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/security-iam.html).
+ Las conexiones Direct Connect se crearon correctamente. Para obtener más información, consulte [Creación de una conexión mediante el asistente de conexión](https://docs.aws.amazon.com/directconnect/latest/UserGuide/dedicated_connection.html#create-connection).

**Limitaciones**
+ Hay límites para las conexiones de Transit Gateway a VPCs las cuentas de producción, control de calidad y desarrollo. Para obtener más información, consulte [Conexión de puerta de enlace de tránsito a una VPC](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html).
+ Existen límites para la creación y el uso de puertas de enlace de Direct Connect. Para obtener más información, consulte [Cuotas AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/limits.html).

## Arquitectura
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-architecture"></a>

**Arquitectura de destino**

El siguiente ejemplo de arquitectura proporciona una solución reutilizable para implementar Transit VIFs con los archivos adjuntos Transit Gateway Connect. Esta arquitectura proporciona resiliencia mediante el uso de varias ubicaciones de Direct Connect. Para obtener más información, consulte [Resiliencia máxima](https://docs.aws.amazon.com/directconnect/latest/UserGuide/maximum_resiliency.html) en la documentación de Direct Connect. La red local tiene producción, control de calidad y desarrollo VRFs que se extienden a AWS y se aíslan mediante tablas de rutas dedicadas.

![\[Diagrama de arquitectura del uso de los recursos de AWS Direct Connect y AWS Transit Gateway para ampliar VRFs\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/db17e177-6c94-4d81-ab39-0923ecab2f1b/images/10be0625-8574-40eb-bc00-bb0a07d0dc26.png)


En el entorno de AWS, hay dos cuentas dedicadas a ampliarla VRFs: una cuenta de *Direct Connect y una cuenta* de *hub de red*. La cuenta Direct Connect contiene la conexión y el tránsito VIFs de cada router. El tránsito se crea VIFs desde la cuenta de Direct Connect, pero se despliega en la cuenta del concentrador de red para poder asociarlo a la puerta de enlace de Direct Connect en la cuenta del concentrador de red. La cuenta del hub de red contiene la puerta de enlace de Direct Connect y la puerta de enlace de tránsito. Los recursos de AWS están conectados de la siguiente manera:

1. Transit VIFs conecta los enrutadores de las ubicaciones de Direct Connect con AWS Direct Connect en la cuenta de Direct Connect.

1. Un VIF de tránsito conecta Direct Connect con la puerta de enlace Direct Connect de la cuenta del hub de red.

1. Una [asociación de puertas de enlace de tránsito](https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-transit-gateways.html) conecta la puerta de enlace Direct Connect con la puerta de enlace de tránsito de la cuenta del hub de red.

1. [Los accesorios Transit Gateway Connect](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html) conectan la pasarela de tránsito con VPCs las cuentas de producción, control de calidad y desarrollo.

*Arquitectura Transit VIF*

El siguiente diagrama muestra los detalles de configuración del tránsito VIFs. En este ejemplo de arquitectura se utiliza una VLAN para la fuente del túnel, pero también se puede utilizar un bucle invertido.

![\[Detalles de configuración de las conexiones VIF de tránsito entre los enrutadores y AWS Direct Connect\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/db17e177-6c94-4d81-ab39-0923ecab2f1b/images/e88d2546-61ef-4531-972b-089cdf44ed67.png)


A continuación se muestran los detalles de configuración, como los números de sistema autónomo (ASNs), del tránsito VIFs.


| 
| 
| Recurso | Elemento | Detalle | 
| --- |--- |--- |
| router-01 | ASN | 65534 | 
| router-02 | ASN | 65534 | 
| router-03 | ASN | 65534 | 
| router-04 | ASN | 65534 | 
| Gateway de Direct Connect | ASN | 64601 | 
| Puerta de enlace de tránsito | ASN | 64600 | 
| Bloque CIDR | 10,100,254,0/24 | 

*Arquitectura Transit Gateway Connect*

El diagrama y las tablas siguientes describen cómo configurar un VRF único a través de una conexión Transit Gateway Connect. Además VRFs, asigne direcciones IP GRE de túnel IDs, pasarela de tránsito y BGP únicos dentro de los bloques CIDR. La dirección IP GRE homóloga coincide con la dirección IP homóloga del router del VIF de tránsito.

![\[Detalles de configuración de los túneles de GRE entre los enrutadores y la puerta de enlace de tránsito\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/db17e177-6c94-4d81-ab39-0923ecab2f1b/images/e58278e1-f3b4-442d-95d9-1dafab4aa5ac.png)


La siguiente tabla contiene detalles de configuración del enrutador.


| 
| 
| Enrutador | Túnel | Dirección IP | Origen | Destino | 
| --- |--- |--- |--- |--- |
| router-01 | Túnel 1 | 169.254.101.17 | VLAN 60169,254,1001 | 10,100,254.1 | 
| router-02 | Túnel 11 | 169,254,101,81 | VLAN 61169,254,1005 | 10,100254,11 | 
| router-03 | Túnel 21 | 169,254,101,145 | VLAN 62169,254,1009 | 10,100254,21 | 
| router-04 | Túnel 31 | 169,254,101,209 | VLAN 63169,254100,13 | 10,100254,31 | 

La siguiente tabla contiene detalles de la puerta de enlace de tránsito.


| 
| 
| Túnel | Dirección IP GRE de puerta de enlace | Direcciones IP GRE del mismo nivel | BGP dentro de los bloques CIDR | 
| --- |--- |--- |--- |
| Túnel 1 | 10,100254.1 | VLAN 60169,254,1001 | 169,254,101,16/29 | 
| Túnel 11 | 10,100254,11 | VLAN 61169,254,1005 | 169,254,101,80/29 | 
| Túnel 21 | 10,100254,21 | VLAN 62169,254,1009 | 169,254.101.144/29 | 
| Túnel 31 | 10,100254,31 | VLAN 63169,254100,13 | 169,254,101.208/29 | 

**Implementación**

La sección [Epics](#extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-epics) describe cómo implementar un ejemplo de configuración para un** **único VRF en varios enrutadores de clientes. Una vez completados los pasos 1 a 5, puede crear nuevas conexiones de Transit Gateway Connect siguiendo los pasos 6 y 7 para cada VRF nuevo que extienda a AWS:

1. Cree la puerta de enlace de tránsito.

1. Crear una tabla de enrutamiento de la puerta de enlace de tránsito para cada VRF.

1. Cree las interfaces virtuales de tránsito.

1. Cree una puerta de enlace Direct Connect.

1. Cree la interfaz virtual de la puerta de enlace Direct Connect y las asociaciones de puerta de enlace con los prefijos permitidos.

1. Cree una conexión de Connect de puerta de enlace de tránsito.

1. Crear pares de Transit Gateway Connect.

1. Asocie las conexiones de Transit Gateway Connect con la tabla de enrutamiento.

1. Anuncie las rutas a los enrutadores.

## Tools (Herramientas)
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-tools"></a>

**Servicios de AWS**
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) vincula su red interna con una ubicación de Direct Connect a través de un cable estándar Ethernet de fibra óptica. Con esta conexión, puede crear interfaces virtuales directamente en servicios públicos de AWS omitiendo a los proveedores de servicios de Internet en su ruta de acceso a la red.
+ [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 (VPCs) y redes locales.
+ [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.

## Epics
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-epics"></a>

### Planifique la arquitectura
<a name="plan-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree diagramas de arquitectura personalizados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Arquitecto de la nube, administrador de redes | 

### Cree los recursos de la puerta de enlace de tránsito.
<a name="create-the-transit-gateway-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la puerta de enlace de tránsito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Administrador de redes, arquitecto de la nube | 
| Cree una tabla de enrutamiento para la puerta de enlace de tránsito. | Siga las instrucciones de [Crear una tabla de enrutamiento para la puerta de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#create-tgw-route-table). Tenga en cuenta lo siguiente para este patrón:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Arquitecto de la nube, administrador de redes | 

### Cree las interfaces virtuales de tránsito
<a name="create-the-transit-virtual-interfaces"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree las interfaces virtuales de tránsito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Arquitecto de la nube, administrador de redes | 

### Cree los recursos de Direct Connect
<a name="create-the-direct-connect-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una puerta de enlace de Direct Connect. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Arquitecto de la nube, administrador de redes | 
| Conecte la puerta de enlace Direct Connect al transporte público VIFs. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Arquitecto de la nube, administrador de redes | 
| Cree las asociaciones de puerta de enlace Direct Connect con los prefijos permitidos. | En la cuenta del hub de red, siga las instrucciones de [Para asociar una puerta de enlace de tránsito](https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-transit-gateways.html#associate-tgw-with-direct-connect-gateway). Tenga en cuenta lo siguiente para este patrón:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html)Al crear esta asociación, se crea automáticamente una conexión de puerta de enlace de tránsito que tiene un tipo de recurso Direct Connect Gateway. No es necesario que esta conexión esté asociada a una tabla de enrutamiento de puerta de enlace de tránsito. | Arquitecto de la nube, administrador de redes | 
| Cree una conexión de Connect de puerta de enlace de tránsito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Arquitecto de la nube, administrador de redes | 
| Crear pares de Transit Gateway Connect. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) |  | 

### Anuncie las rutas a los enrutadores.
<a name="advertise-routes-to-the-routers"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Anuncie las rutas. | Asocie la nueva conexión de puerta de enlace de Connect a la tabla de enrutamiento que creó anteriormente para este VRF. Por ejemplo, asocie las conexiones de Transit Gateway Connect de producción con la tabla de enrutamiento `Production-VRF`.Cree una ruta estática para el prefijo que se anuncia en los enrutadores.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.html) | Administrador de redes, arquitecto de la nube | 

## Recursos relacionados
<a name="extend-vrfs-to-aws-by-using-aws-transit-gateway-connect-resources"></a>

**Documentación de AWS**
+ Documentación de Direct Connect
  + [Uso de puertas de enlace de Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-gateways.html)
  + [Asociaciones de la puerta de enlace de tránsito](https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-transit-gateways.html)
  + [Interfaces virtuales de AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/WorkingWithVirtualInterfaces.html)
+ Documentación de Transit Gateway
  + [Usar puertas de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/working-with-transit-gateways.html)
  + [Conexiones de puertas de enlace de tránsito a una puerta de enlace de Direct Connect](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-dcg-attachments.html)
  + [Conexiones de puertas de enlace de tránsito y pares de Transit Gateway Connect](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html)
  + [Crear una conexión Transit gateway Connect](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html#create-tgw-connect-attachment)

**Publicaciones del blog de AWS**
+ [Segmentación de redes híbridas con AWS Transit Gateway Connect](https://aws.amazon.com/blogs/networking-and-content-delivery/segmenting-hybrid-networks-with-aws-transit-gateway-connect/)
+ [Uso de AWS Transit Gateway connect para ampliar VRFs y aumentar la publicidad de prefijos de IP](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-transit-gateway-connect-to-extend-vrfs-and-increase-ip-prefix-advertisement/)

## Conexiones
<a name="attachments-db17e177-6c94-4d81-ab39-0923ecab2f1b"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/db17e177-6c94-4d81-ab39-0923ecab2f1b/attachments/attachment.zip)

# Reciba notificaciones de Amazon SNS cuando cambie el estado de clave de una clave de AWS KMS
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes"></a>

*Shubham Harsora, Aromal Raj Jayarajan y Navdeep Pareek, Amazon Web Services*

## Resumen
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-summary"></a>

Los datos y los metadatos asociados con una clave de AWS Key Management Service (AWS KMS) se pierden al eliminarla. Esta eliminación es irreversible, y no se pueden recuperar los datos perdidos (incluidos los datos cifrados). Puede evitar la pérdida de datos configurando un sistema de notificaciones que le avise de los cambios de estado en los [estados de clave](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html#key-state-cmk-type) de sus claves de AWS KMS.

Este patrón le muestra cómo supervisar los cambios de estado en las claves de AWS KMS mediante Amazon EventBridge y Amazon Simple Notification Service (Amazon SNS) para emitir notificaciones automáticas siempre que el estado clave de una clave de AWS KMS cambie a o. `Disabled` `PendingDeletion` Por ejemplo, si un usuario intenta deshabilitar o eliminar una clave de AWS KMS, recibirá una notificación por correo electrónico con detalles sobre el intento de cambio de estado. También puede usar este patrón para programar la eliminación de las claves de AWS KMS.

## Requisitos previos y limitaciones
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS con un usuario de AWS Identity and Access Management (IAM)
+ Una [clave de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)

## Arquitectura
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-architecture"></a>

**Pila de tecnología**
+ Amazon EventBridge
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Notification Service (Amazon SNS)

**Arquitectura de destino**

El siguiente diagrama muestra una arquitectura para crear un proceso automatizado de supervisión y notificación que detecta cualquier cambio en el estado de una clave de AWS KMS.

![\[Arquitectura para crear un proceso automatizado de supervisión y notificación\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2534df87-a6fd-4360-9b5d-4a8b1f533de3/images/0cb6a6b0-405b-4d26-ad04-2067176aa086.png)


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

1. Un usuario deshabilita o programa la eliminación de una clave de AWS KMS.

1. Una EventBridge regla evalúa la programación `Disabled` o el `PendingDeletion` evento.

1. La EventBridge regla invoca el tema Amazon SNS.

1. Amazon SNS envía un mensaje de notificación por correo electrónico a los usuarios.

**nota**  
Puede personalizar el mensaje de correo electrónico para adaptarlo a las necesidades de su organización. Recomendamos incluir información sobre las entidades en las que se usa la clave de AWS KMS. Esto puede ayudar a los usuarios a comprender el impacto de eliminar la clave de AWS KMS. También puede programar una notificación de recordatorio por correo electrónico que se envíe uno o dos días antes de eliminar la clave de AWS KMS.

**Automatización y escala**

La CloudFormation pila de AWS implementa todos los recursos y servicios necesarios para que este patrón funcione. Puede implementar el patrón de forma independiente en una sola cuenta o mediante [AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) para varias cuentas o [unidades organizativas](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_ous.html) independientes en AWS Organizations.

## Tools (Herramientas)
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-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. La CloudFormation plantilla de este patrón describe todos los recursos de AWS que desee y los CloudFormation aprovisiona y configura automáticamente.
+ [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. EventBridge ofrece un flujo de datos en tiempo real desde sus propias aplicaciones y servicios de AWS, y dirige esos datos a objetivos como AWS Lambda. EventBridge simplifica el proceso de creación de arquitecturas basadas en eventos.
+ [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 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.

**Código**

El código de este patrón está disponible en el repositorio GitHub [Monitor AWS KMS Keys Disable and Scheduled Delete](https://github.com/aws-samples/aws-kms-deletion-notification).

## Epics
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Clone el repositorio de [claves, deshabilitación y eliminación programada de claves de AWS KMS de GitHub Monitor](https://github.com/aws-samples/aws-kms-deletion-notification) en su máquina local ejecutando el siguiente comando:`git clone https://github.com/aws-samples/aws-kms-deletion-notification` | Administrador de AWS, arquitecto de la nube | 
| Actualice los parámetros de la plantilla. | En un editor de código, abra la `Alerting-KMS-Events.yaml` CloudFormation plantilla que ha clonado del repositorio y, a continuación, actualice los siguientes parámetros:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | Administrador de AWS, arquitecto de la nube | 
| Implemente la CloudFormation plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | Administrador de AWS, arquitecto de la nube | 

### Confirmar la suscripción
<a name="confirm-the-subscription"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Confirme la suscripción por correo electrónico. | Una vez que la CloudFormation plantilla se haya implementado correctamente, Amazon SNS envía un mensaje de confirmación de suscripción a la dirección de correo electrónico que proporcionó en CloudFormation la plantilla.Debe confirmar esta suscripción de correo electrónico para recibir notificaciones. Para obtener más información, consulte [Cómo confirmar la suscripción](https://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.confirm.html) en la Guía para desarrolladores de Amazon SNS. | Administrador de AWS, arquitecto de la nube | 

### Pruebe la notificación de la suscripción
<a name="test-the-subscription-notification"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Deshabilite las claves de AWS KMS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | Administrador de AWS | 
| Valide la suscripción. | Confirme que ha recibido la notificación de Amazon SNS por correo electrónico. | Administrador de AWS | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine la pila CloudFormation . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.html) | Administrador de AWS | 

## Recursos relacionados
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-resources"></a>
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/) (documentación de AWS)
+ [Creación de una pila en la CloudFormation consola de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) ( CloudFormation documentación de AWS)
+ [Creación de arquitecturas basadas en eventos en AWS](https://catalog.us-east-1.prod.workshops.aws/workshops/63320e83-6abc-493d-83d8-f822584fb3cb/en-US) (documentación de AWS Workshop Studio)
+ [Prácticas recomendadas de AWS Key Management Service](https://d1.awsstatic.com/whitepapers/aws-kms-best-practices.pdf) (documento técnico de AWS)
+ [Prácticas recomendadas de seguridad para AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html) (Guía del desarrollador de AWS KMS)

## Información adicional
<a name="get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes-additional"></a>

Amazon SQS proporciona cifrado en tránsito de forma predeterminada. Para satisfacer las prácticas recomendadas de seguridad, también puede habilitar el cifrado en el servidor para Amazon SNS mediante una clave de AWS KMS gestionada por el cliente.

# Preserve el espacio IP enrutable en los diseños de VPC de varias cuentas para subredes que no son de carga de trabajo
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets"></a>

*Adam Spicer, Amazon Web Services*

## Resumen
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-summary"></a>

Amazon Web Services (AWS) ha publicado prácticas recomendadas que animan a usar subredes dedicadas en una nube privada virtual (VPC) tanto para [conexiones de puerta de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-best-design-practices.html) como para [los puntos de conexión del equilibrador de carga de la puerta de enlace](https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/getting-started.html) (para admitir [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-high-level-steps.html) o dispositivos de terceros). Estas subredes se utilizan para contener interfaces de red elásticas para estos servicios. Si utiliza AWS Transit Gateway y una puerta de enlace de equilibrador de carga, se crean dos subredes en cada zona de disponibilidad para la VPC. Debido a la forma en que VPCs están diseñadas, estas subredes adicionales [no pueden ser más pequeñas que una máscara /28 y pueden consumir un](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-sizing) valioso espacio IP enrutable que, de otro modo, podría usarse para cargas de trabajo enrutables. Este patrón muestra cómo se puede utilizar un rango de enrutamiento entre dominios sin clase (CIDR) secundario y no enrutable para estas subredes dedicadas a fin de ayudar a preservar el espacio IP enrutable.

## Requisitos previos y limitaciones
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-prereqs"></a>

**Requisitos previos**
+ [Estrategia de múltiples VPC](https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/welcome.html) para un espacio IP enrutable
+ Un rango de CIDR no enrutable para los servicios que está utilizando ([conexión de puerta de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-best-design-practices.html) y [conexiones al equilibrador de carga de la puerta de enlace](https://aws.amazon.com/blogs/apn/centralized-traffic-inspection-with-gateway-load-balancer-on-aws/) o [puntos de conexión de Network Firewall](https://aws.amazon.com/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/))

## Arquitectura
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-architecture"></a>

**Arquitectura de destino**

Este patrón incluye dos arquitecturas de referencia: una arquitectura tiene subredes para los adjuntos de la pasarela de tránsito (TGW) y un punto final de Gateway Load Balancer (GWLBe), y la segunda arquitectura tiene subredes solo para los adjuntos de la TGW.

**Arquitectura 1: VPC conectada a TGW-con enrutamiento de entrada a un dispositivo**

El siguiente diagrama representa una arquitectura de referencia para una VPC que abarca dos zonas de disponibilidad. Al entrar, la VPC utiliza [un patrón de enrutamiento de entrada](https://aws.amazon.com/blogs/aws/new-vpc-ingress-routing-simplifying-integration-of-third-party-appliances/) para dirigir el tráfico destinado a la subred pública a [bump-in-the-wire un](https://aws.amazon.com/blogs/networking-and-content-delivery/introducing-aws-gateway-load-balancer-supported-architecture-patterns/) dispositivo para inspeccionar el firewall. Un adjunto de TGW admite la salida de las subredes privadas a una VPC independiente.

Este patrón utiliza un rango CIDR no enrutable para la subred adjunta del TGW y la subred. GWLBe En la tabla de enrutamiento de TGW, este CIDR no enrutable se configura con una ruta de agujero negro (estática) mediante un conjunto de rutas más específicas. Si las rutas se propagaran a la tabla de enrutamiento de TGW, se aplicarían estas rutas de agujero negro más específicas.

En este ejemplo, el CIDR enrutable /23 se divide y se asigna completamente a las subredes enrutables.

![\[VPC adjunta a TGW con enrutamiento de entrada a un dispositivo.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/0171d91d-ab1e-41ca-a425-1e6e610080e1/images/adad1c83-cdc2-4c5e-aa35-f47fc31af384.png)


**Arquitectura 2: VPC adjunta a TGW**

El siguiente diagrama representa otra arquitectura de referencia para una VPC que abarca dos zonas de disponibilidad. Una conexión de TGW admite el tráfico de salida (egreso) de las subredes privadas a una VPC independiente. Utiliza un rango CIDR no enrutable solo para la subred de conexión de TGW. En la tabla de enrutamiento de TGW, este CIDR no enrutable se configura con una ruta de agujero negro mediante un conjunto de rutas más específicas. Si las rutas se propagaran a la tabla de enrutamiento de TGW, se aplicarían estas rutas de agujero negro más específicas.

En este ejemplo, el CIDR enrutable /23 se divide y se asigna completamente a las subredes enrutables. 

![\[La VPC abarca 2 zonas de disponibilidad con conexión a TGW para salir de subredes privadas a una VPC independiente.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/0171d91d-ab1e-41ca-a425-1e6e610080e1/images/31a2a241-5be6-425e-93e9-5ff7ffeca3a9.png)


## Tools (Herramientas)
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-tools"></a>

**Servicios y recursos de AWS**
+ [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. En este patrón, las VPC secundarias CIDRs se utilizan para conservar el espacio IP enrutable en la carga de trabajo. CIDRs
+ El [enrutamiento de ingreso de la puerta de enlace de Internet](https://aws.amazon.com/blogs/aws/new-vpc-ingress-routing-simplifying-integration-of-third-party-appliances/) (asociaciones de periferia) se puede utilizar junto con los puntos de conexión del equilibrador de carga de la puerta de enlace para subredes dedicadas no enrutables.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) es un centro central que conecta VPCs las redes locales. Según este patrón, VPCs están conectados centralmente a una puerta de enlace de tránsito y los adjuntos a la puerta de enlace de tránsito están en una subred dedicada no enrutable.
+ [Los equilibradores de carga de la puerta de enlace](https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/introduction.html) permiten implementar, escalar y administrar dispositivos virtuales, como firewalls, sistemas de prevención y detección de intrusiones así como sistemas de inspección profunda de paquetes. La puerta de enlace sirve como punto único de entrada y salida para todo el tráfico. En este patrón, los puntos de conexión de un equilibrador de carga de puerta de enlace se pueden usar en una subred dedicada no enrutable.
+ [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) es un servicio de detección y prevención de intrusiones y firewall de red gestionado y con estado para la VPCs nube de AWS. En este patrón, los puntos de conexión de un firewall se pueden usar en una subred dedicada no enrutable.

**Repositorio de código**

En el repositorio de patrones [CIDR secundarios GitHub no enrutables](https://github.com/aws-samples/non-routable-secondary-vpc-cidr-patterns/) hay un manual y CloudFormation plantillas de AWS para este patrón. Puede usar los archivos de muestra para configurar un laboratorio de trabajo en su entorno.

## Prácticas recomendadas
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-best-practices"></a>

**AWS Transit Gateway**
+ Utilice una subred independiente para cada archivo asociado a la VPC de la puerta de enlace de tránsito.
+ Asigne una subred /28 del rango CIDR secundario no enrutable para las subredes de conexión de puerta de enlace de tránsito.
+ En cada tabla de enrutamiento de la puerta de enlace de tránsito, añada una ruta estática más específica para el rango CIDR no enrutable como agujero negro.

**Equilibrador de carga de puerta de enlace y enrutamiento de ingreso**
+ Utilice el enrutamiento de ingreso para dirigir el tráfico de Internet a los puntos de conexión del equilibrador de carga de puerta de enlace.
+ Utilice una subred independiente para cada punto de conexión del equilibrador de carga de puerta de enlace.
+ Asigne una subred /28 del rango CIDR secundario no enrutable para las subredes de punto de conexión de puerta de enlace del equilibrador de carga.

## Epics
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-epics"></a>

### Crear VPCs
<a name="create-vpcs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Determine el rango CIDR no enrutable. | Determine un rango CIDR no enrutable que se utilizará para la subred de conexión de puerta de enlace de tránsito y (opcionalmente) para cualquier subred de punto de conexión de equilibrador de carga de puerta de enlace o Network Firewall. Este rango de CIDR se utilizará como CIDR secundario para la VPC. **No debe poder enrutarse** desde el rango CIDR principal de la VPC ni desde la red más amplia. | Arquitecto de la nube | 
| Determine los rangos de CIDR enrutables para. VPCs | Determine un conjunto de rangos de CIDR enrutables que se utilizarán para su. VPCs Este rango de CIDR se utilizará como el CIDR principal de su. VPCs | Arquitecto de la nube | 
| Crear. VPCs | Crea las tuyas VPCs y adjúntalas a la pasarela de transporte. Cada VPC debe tener un rango CIDR principal que se pueda enrutar y un rango CIDR secundario que no se pueda enrutar, según los rangos que haya determinado en los dos pasos anteriores. | Arquitecto de la nube | 

### Configuración de las rutas de agujeros negros de puerta de enlace de tránsito
<a name="configure-transit-gateway-blackhole-routes"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea agujeros negros más específicos que no se puedan enrutar CIDRs . | Cada tabla de enrutamiento de las pasarelas de tránsito debe tener un conjunto de rutas negras creadas para las que no se pueden enrutar. CIDRs Están configurados para garantizar que el tráfico del CIDR de la VPC secundaria no se pueda enrutar y no se filtre a la red más amplia. Estas rutas deben ser más específicas que el CIDR no enrutable que se establece como el CIDR secundario en la VPC. Por ejemplo, si el CIDR secundario no enrutable es 100.64.0.0/26, las rutas de agujero negro de la tabla de enrutamiento de la puerta de enlace de tránsito deberían ser 100.64.0.0/27 y 100.64.0.32/27. | Arquitecto de la nube | 

## Recursos relacionados
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-resources"></a>
+ [Prácticas recomendadas para implementar el Equilibrador de carga de puerta de enlace](https://aws.amazon.com/blogs/networking-and-content-delivery/best-practices-for-deploying-gateway-load-balancer/)
+ [Arquitecturas de inspección distribuida con el Equilibrador de carga de puerta de enlace](https://d1.awsstatic.com/architecture-diagrams/ArchitectureDiagrams/distributed-inspection-architectures-gwlb-ra.pdf?did=wp_card&trk=wp_card)
+ [Día de inmersión en redes](https://catalog.workshops.aws/networking/en-US/gwlb/lab2-internettovpc): [laboratorio de firewall de Internet a VPC](https://catalog.workshops.aws/networking/en-US/gwlb/lab2-internettovpc)
+ [Prácticas recomendadas de diseño de una puerta de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-best-design-practices.html)

## Información adicional
<a name="preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets-additional"></a>

El rango CIDR secundario no enrutable también puede resultar útil cuando se trabaja con implementaciones de contenedores de mayor escala que requieren un gran conjunto de direcciones IP. Puede utilizar este patrón con una puerta de enlace NAT privada para utilizar una subred no enrutable para alojar las implementaciones de contenedores. Para obtener más información, consulte la entrada de blog sobre [cómo resolver el agotamiento de la IP privada con una solución de NAT privada](https://aws.amazon.com/blogs/networking-and-content-delivery/how-to-solve-private-ip-exhaustion-with-private-nat-solution/).

# Aprovisione un producto de Terraform AWS Service Catalog mediante un repositorio de código
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dr. Rahul Sharad Gaikwad y Tamilselvan P, Amazon Web Services*

## Resumen
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog [admite el aprovisionamiento de autoservicio con gobernanza para sus configuraciones de Terraform. HashiCorp ](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Si usa Terraform, puede usar Service Catalog como la única herramienta para organizar, gobernar y distribuir sus configuraciones de Terraform AWS a escala. Puede acceder a las funciones clave de Service Catalog, como la catalogación de plantillas de infraestructura como código (IaC) estandarizadas y previamente aprobadas, el control de acceso, el aprovisionamiento de recursos en la nube con el menor acceso privilegiado, el control de versiones, el uso compartido con miles de personas y el etiquetado. Cuentas de AWS Los usuarios finales, como ingenieros, administradores de bases de datos y científicos de datos, ven una lista de productos y versiones a los que tienen acceso y, a continuación, pueden implementarlos con una sola acción.

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

Los siguientes son beneficios de esta solución:
+ Gracias a la característica de reversión de Service Catalog, si se produce algún problema durante la implementación, puede revertir el producto a una versión anterior.
+ Puede identificar fácilmente las diferencias entre las versiones del producto. Esto le permite resolver los problemas durante la implementación.
+ Puede configurar una conexión al repositorio en Service Catalog, por ejemplo, a GitHub o GitLab. Puede realizar cambios en los productos directamente a través del repositorio.

Para obtener información sobre las ventajas generales de AWS Service Catalog, consulte [Qué es Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html).

## Requisitos previos y limitaciones
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Un GitHub repositorio u otro que contenga archivos de configuración de Terraform en formato ZIP. BitBucket
+ AWS Serverless Application Model Interfaz de línea de comandos (AWS SAM CLI), [instalada](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).
+ 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).
+ Go [instalado](https://go.dev/doc/install).
+ Versión 3.9 de Python, [instalada](https://www.python.org/downloads/release/python-3913/). AWS SAM La CLI requiere esta versión de Python.
+ Permisos para escribir y ejecutar AWS Lambda funciones y permisos para acceder a los productos y carteras de Service Catalog y administrarlos.

## Arquitectura
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Diagrama de arquitectura del aprovisionamiento de un producto de Terraform en Service Catalog desde un repositorio de código\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


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

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

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

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

## Tools (Herramientas)
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

**Servicios 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 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.

**Otros servicios**
+ [Go](https://go.dev/doc/install) es un lenguaje de programación de código abierto compatible con Google.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

Si necesita ejemplos de configuraciones de Terraform que pueda implementar a través de Service Catalog, puede usar las configuraciones del repositorio GitHub [Amazon Macie Organization Setup Using](https://github.com/aws-samples/aws-macie-customization-terraform-samples) Terraform. No es necesario usar los ejemplos de código de este repositorio.

## Prácticas recomendadas
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ En lugar de proporcionar los valores de las variables en el archivo de configuración de Terraform (`terraform.tfvars`), configure los valores de las variables al lanzar el producto a través de Service Catalog.
+ Conceda acceso a la cartera solo a usuarios o administradores específicos.
+ 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 las [mejores prácticas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) y [concesión de privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) en la documentación AWS Identity and Access Management (IAM).

## Epics
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Configure su equipo de trabajo local
<a name="set-up-your-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| (Opcional) Instale Docker. | Si desea ejecutar las AWS Lambda funciones en su entorno de desarrollo, instale Docker. Para ver instrucciones, consulte [Install Docker Engine](https://docs.docker.com/engine/install/) (Instalar motor de Docker) en la documentación de Docker. | DevOps ingeniero | 
| Instale el AWS Service Catalog motor para Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero, administrador de AWS | 

### Conectar el GitHub repositorio
<a name="connect-the-github-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una conexión con el GitHub repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 

### Creación de un producto de Terraform en Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el producto de Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Cree una cartera. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Agregue el producto de Terraform a la cartera. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Cree la política de acceso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Cree una política de confianza personalizada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Agregue una restricción de lanzamiento al producto de Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Conceda acceso al producto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 
| Lance el producto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la implementación. | Hay dos máquinas de AWS Step Functions estado para el flujo de trabajo de aprovisionamiento de Service Catalog:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Debe comprobar los registros de la máquina de estados `ManageProvisionedProductStateMachine` para confirmar que el producto se ha aprovisionado.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los productos aprovisionados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingeniero | 
| Retire el AWS Service Catalog motor de Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador de AWS | 

## Recursos relacionados
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS documentación**
+ [Cómo empezar con un producto de Terraform](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Documentación de Terraform**
+ [Instalación de Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Terraform backend configuration](https://developer.hashicorp.com/terraform/language/backend)
+ [Documentación de Terraform Provider AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Información adicional
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**Política de acceso**

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

**Política de confianza**

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

# Registre varios Cuentas de AWS con una sola dirección de correo electrónico mediante Amazon SES
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses"></a>

*Joe Wozniak y Shubhangi Vishwakarma, Amazon Web Services*

## Resumen
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-summary"></a>

Este patrón describe cómo puede desvincular las direcciones de correo electrónico reales de la dirección de correo electrónico asociada a una. Cuenta de AWS Cuentas de AWS requieren que se proporcione una dirección de correo electrónico única al momento de crear la cuenta. En algunas organizaciones, el equipo que lo administra Cuentas de AWS debe asumir la carga de administrar muchas direcciones de correo electrónico únicas con su equipo de mensajería. Esto puede resultar difícil para las grandes organizaciones que administran muchas Cuentas de AWS. Además, si su sistema de correo electrónico no permite usar el *símbolo \$1 en direcciones* ni usar *subdirecciones*, tal como se define en [Sieve Email Filtering: Subaddress Extension (RFC 5233)](https://datatracker.ietf.org/doc/html/rfc5233) (agregando un signo más [\$1] y un identificador al final de la parte local del correo, como `admin+123456789123@example.com`) este patrón permite sortear dicha limitación.

Este patrón proporciona una solución única de venta de direcciones de correo electrónico que permite a Cuenta de AWS los propietarios asociar una dirección de correo electrónico con varias Cuentas de AWS. Luego, las direcciones de correo electrónico reales de Cuenta de AWS los propietarios se asocian a estas direcciones de correo electrónico generadas en una tabla. La solución gestiona todo el correo entrante de las cuentas de correo electrónico únicas, busca al propietario de cada cuenta y, a continuación, reenvía los mensajes recibidos al propietario.  

## Requisitos previos y limitaciones
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-prereqs"></a>

**Requisitos previos **
+ Acceso administrativo a un Cuenta de AWS.
+ Acceso a un entorno de desarrollo. 
+ (Opcional) Estar familiarizado con los AWS Cloud Development Kit (AWS CDK) flujos de trabajo y el lenguaje de programación Python le ayudará a solucionar cualquier problema o a realizar modificaciones.

**Limitaciones**
+ La longitud total de la dirección de correo electrónico vendida es de 64 caracteres. Para obtener más información, consulta la [CreateAccount](https://docs.aws.amazon.com/organizations/latest/APIReference/API_CreateAccount.html)referencia de la *AWS Organizations API*.

**Versiones de producto**
+ Node.js, versión 22.x o posterior
+ Python 3.13 o posterior
+ Paquetes de Python **pip** y **virtualenv**
+ AWS CDK CLI versión 2.1019.2 o posterior
+ Docker, versión 20.10x o posterior

## Arquitectura
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-architecture"></a>

**Pila de tecnología de destino**
+ CloudFormation pila
+ AWS Lambda funciones
+ Reglas y conjunto de reglas de Amazon Simple Email Service (Amazon SES)
+ AWS Identity and Access Management funciones y políticas (IAM)
+ Un bucket de Amazon Simple Storage Service (Amazon S3) y política de bucket
+ AWS Key Management Service (AWS KMS) política clave y clave
+ Tema de Amazon Simple Notification Service (Amazon SNS) y política de temas
+ Tabla de Amazon DynamoDB 

**Arquitectura de destino**

![\[Arquitectura de destino para registrar varias cuentas de AWS con una sola dirección de correo electrónico\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/1be85b92-69e5-43b2-aeed-27b9509e145e/images/c7ae9d7a-d4e0-412e-97cb-0f3073e012e7.png)


En este diagrama se muestran dos flujos:
+ **Flujo de venta de direcciones de correo electrónico:** en el diagrama, el flujo de venta de direcciones de correo electrónico (sección inferior) comienza normalmente con una solución de venta de cuentas o con una automatización externa, o se invoca manualmente. En la solicitud, se llama a una función de Lambda con una carga útil que contiene los metadatos necesarios. La función utiliza esta información para generar un nombre de cuenta y una dirección de correo electrónico únicos, los almacena en una base de datos de DynamoDB y devuelve los valores a la persona que llama. Luego, estos valores se pueden usar para crear una nueva Cuenta de AWS (normalmente mediante AWS Organizations).
+ **Flujo de reenvío de correo electrónico:** este flujo se ilustra en la sección superior del diagrama anterior. Cuando Cuenta de AWS se crea una con el correo electrónico de la cuenta generado a partir del flujo de venta de direcciones de correo electrónico, AWS envía varios correos electrónicos, como la confirmación de registro de la cuenta y las notificaciones periódicas, a esa dirección de correo electrónico. Siguiendo los pasos de este patrón, configuras tu cuenta Cuenta de AWS con Amazon SES para recibir correos electrónicos de todo el dominio. Esta solución configura reglas de reenvío que permiten a Lambda procesar todos los correos electrónicos entrantes, comprobar si la dirección `TO` está en la tabla de DynamoDB y, en su lugar, reenviar el mensaje a la dirección de correo electrónico del propietario de la cuenta. El uso de este proceso permite a los propietarios de las cuentas asociar varias cuentas a una sola dirección de correo electrónico.

**Automatización y escala**

Este patrón lo utiliza AWS CDK para automatizar completamente la implementación. La solución utiliza servicios AWS gestionados que se escalarán automáticamente (o se pueden configurar) para adaptarse a sus necesidades. Es posible que las funciones de Lambda requieran una configuración adicional para satisfacer sus necesidades de escalado. Para obtener más información, consulte [Comprender el escalado de la función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html) en la documentación de Lambda.

## Tools (Herramientas)
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-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 administrarlos a lo largo de su ciclo de vida en todas Cuentas de AWS las regiones.
+ [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 con los servicios de AWS mediante comandos en su shell de línea de comandos.
+ [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.
+ [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 Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) facilita poder enviar y recibir correos electrónicos 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 le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Herramientas necesarias para la implementación**
+ Entorno de desarrollo con acceso AWS CLI de IAM a su. Cuenta de AWS Para obtener más información, consulte los enlaces de la sección de [recursos relacionados](#register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-resources).  
+ En su sistema de desarrollo, instale lo siguiente:
  + Herramienta de línea de comandos de Git, disponible en el [sitio web de descargas de Git](https://git-scm.com/downloads).
  +  AWS CLI Para configurar las credenciales de acceso para AWS CDK. Para obtener más información, consulte la [Documentación de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html).
  + La versión 3.13 o posterior de Python, disponible en el [sitio web de descargas de Python](https://www.python.org/downloads/).
  + UV para la administración de paquetes de Python. Para ver instrucciones de instalación, consulte [UV installation guide](https://docs.astral.sh/uv/getting-started/installation/).
  + La versión 22.x o posterior de Node.js. Consulte la [documentación de Node.js](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) para ver las instrucciones de instalación.
  + AWS CDK CLI versión 2.1019.2 o posterior. Consulte la [documentación de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting-started.html#getting-started-install) para ver las instrucciones de instalación.
  + La versión 20.10.x o posterior de Docker. Consulte la [documentación de Docker](https://docs.docker.com/engine/install/) para ver las instrucciones de instalación.

**Código**

El código de este patrón está disponible en el repositorio de correo electrónico de GitHub [Cuenta de AWS fábrica](https://github.com/aws-samples/aws-account-factory-email).

## Epics
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-epics"></a>

### Asigne un entorno de implementación objetivo
<a name="allocate-a-target-deployment-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Identifique o cree un Cuenta de AWS. | Identifique uno existente o nuevo Cuenta de AWS al que tenga acceso administrativo completo para implementar la solución de correo electrónico. | Administrador de la nube, administrador de AWS | 
| Configure un entorno de implementación. | Configure un entorno de implementación fácil de usar y configure las dependencias siguiendo estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | AWS DevOps, desarrollador de aplicaciones | 

### Configuración de un dominio verificado
<a name="set-up-a-verified-domain"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Identifique y asigne un dominio. | La funcionalidad de reenvío de correo electrónico requiere un dominio dedicado. Identifique y asigne un dominio o subdominio que pueda verificar con Amazon SES. Este dominio debe estar disponible para recibir el correo electrónico entrante en el Cuenta de AWS lugar donde esté implementada la solución de reenvío de correo electrónico.Requisitos del dominio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | Administrador de la nube, administrador de redes, administrador de DNS | 
| Compruebe el dominio. | Compruebe que el dominio identificado se puede utilizar para aceptar el correo entrante.Complete las instrucciones de [Verificación de su dominio para la recepción de correos electrónicos de Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-verification.html) en la documentación de Amazon SES. Esto requerirá la coordinación con la persona o el equipo responsable de los registros de DNS del dominio. | Desarrollador de aplicaciones, AWS DevOps | 
| Configure los registros MX. | Configure su dominio con registros MX que apunten a los puntos de enlace de Amazon SES de su Cuenta de AWS región. Para obtener más información, consulte [Publicar un registro MX para la recepción de correos electrónicos de Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-mx-record.html) en la documentación de Amazon SES. | Administrador de la nube, administrador de redes, administrador de DNS | 

### Implemente la solución de venta y reenvío de correo electrónico
<a name="deploy-the-email-vending-and-forwarding-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique los valores predeterminados en `cdk.json`. | Edite algunos de los valores predeterminados del archivo `cdk.json` (en la raíz del repositorio) para que la solución funcione correctamente una vez implementada.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Implemente la solución de venta y reenvío de correo electrónico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Compruebe que la solución se haya implementado. | Compruebe que la solución se ha implementado correctamente antes de comenzar las pruebas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | Desarrollador de aplicaciones, AWS DevOps | 

### Compruebe que la venta y el reenvío de correo electrónico funcionan según lo previsto
<a name="verify-that-email-vending-and-forwarding-operate-as-expected"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique que la API está en funcionamiento. | En este paso, debe enviar los datos de prueba a la API de la solución y confirmar que la solución produce el resultado esperado y que las operaciones de backend se han realizado según lo previsto.Ejecute manualmente la función **Vend Email** de la función de Lambda mediante una entrada de prueba. (Para ver un ejemplo, consulte el archivo [sample\$1vend\$1request.json](https://github.com/aws-samples/aws-account-factory-email/blob/main/src/events/sample_vend_request.json)). Para `OwnerAddress`, utilice una dirección de correo electrónico válida. La API debería devolver el nombre de la cuenta y el correo electrónico de la cuenta con los valores esperados. | Desarrollador de aplicaciones, AWS DevOps | 
| Compruebe que el correo electrónico se está reenviando. | En este paso, envía un correo electrónico de prueba a través del sistema y comprueba que el correo electrónico se ha reenviado al destinatario previsto.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | Desarrollador de aplicaciones, AWS DevOps | 

## Resolución de problemas
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El sistema no reenvía el correo electrónico como se esperaba. | Compruebe que la configuración es correcta:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html)Después de verificar la configuración de dominio, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | 
| Cuando intenta implementar la AWS CDK pila, recibe un error similar al siguiente:“Template format error: Unrecognized resource types”  | En la mayoría de las instancias, este mensaje de error significa que la región a la que se dirige no tiene todos los servicios de AWS disponibles. Si utilizas una EC2 instancia de Amazon para implementar la solución, es posible que te dirijas a una región diferente de la región en la que se ejecuta la instancia.De forma predeterminada, se AWS CDK despliega en la región y la cuenta que configuraste en. AWS CLIPosibles soluciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses.html) | 
| Al implementar la solución, recibirá el siguiente mensaje de error:«Fallo en la implementación: Error AwsMailFwdStack: no se encontró el parámetro bootstrap/hnb659fds/version /cdk- de SSM. ¿Arrancó el entorno? Please run 'cdk bootstrap'” | Si nunca has desplegado ningún AWS CDK recurso en la región a la que te diriges, primero tendrás que ejecutar el `cdk bootstrap` comando, tal Cuenta de AWS y como indica el error. Si sigue recibiendo este error después de usar el comando de arranque, es posible que esté intentando implementar la solución en una región distinta de la región del entorno de desarrollo.Para resolver este problema, defina la variable de `AWS_DEFAULT_REGION` entorno o defina una región con la AWS CLI antes de implementar la solución. Como alternativa, puede modificar el archivo `app.py` en la raíz del repositorio para incluir un ID y región de cuenta de codificación rígida y una región siguiendo las instrucciones de la [documentación de AWS CDK sobre entornos](https://docs.aws.amazon.com/cdk/v2/guide/environments.html). | 

## Recursos relacionados
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-resources"></a>
+ Para obtener ayuda con la instalación AWS CLI, consulte [Instalación o actualización a la versión más reciente de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ Para obtener ayuda para configurar el AWS CLI con credenciales de acceso de IAM, consulte [Configurar los ajustes del AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Para obtener ayuda con el AWS CDK, consulte [Primeros pasos con](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install). AWS CDK

## Información adicional
<a name="register-multiple-aws-accounts-with-a-single-email-address-by-using-amazon-ses-additional"></a>

**Costos**

Al implementar esta solución, el Cuenta de AWS propietario puede incurrir en costos asociados con el uso de los siguientes servicios.  Es importante que comprenda cómo se facturan estos servicios para estar al tanto de los posibles cargos. Para obtener información sobre precios, consulte las siguientes páginas:
+ [Precios de Amazon SES](https://aws.amazon.com/ses/pricing/)
+ [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/)
+ [AWS KMS precios](https://aws.amazon.com/kms/pricing/)
+ [AWS Lambda precios](https://aws.amazon.com/lambda/pricing/)
+ [Precios de Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/)

# Configure la resolución de DNS para redes híbridas en un entorno de AWS de una sola cuenta
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Resumen
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment-summary"></a>

Este patrón describe cómo configurar una arquitectura de sistema de nombres de dominio (DNS) totalmente híbrida que permita la resolución end-to-end mediante DNS de recursos locales, recursos de AWS y consultas de DNS de Internet, sin sobrecargas administrativas. El patrón describe cómo configurar las reglas de reenvío de Amazon Route 53 Resolver que determinan dónde debe enviarse una consulta de DNS que se origina en AWS, en función del nombre de dominio. Las consultas de DNS para los recursos en las instalaciones se reenvían a los solucionadores de DNS en las instalaciones. Route 53 Resolver resuelve las consultas de DNS para los recursos de AWS y las consultas de DNS de Internet.

Este patrón cubre la resolución de DNS híbrido en un entorno de cuenta única de AWS. Para obtener información sobre la configuración de consultas de DNS salientes en un entorno de varias cuentas de AWS, consulte el patrón [Configurar la resolución de DNS para redes híbridas en un entorno de AWS de varias cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html).

## Requisitos previos y limitaciones
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS
+ Crear una nube privada virtual (VPC) en la cuenta de AWS.
+ Conectividad de red entre el entorno en las instalaciones y VPC a través de los servicios de AWS Virtual Private Network (AWS VPN) o AWS Direct Connect
+ Direcciones IP de sus resolutores de DNS en las instalaciones (accesibles desde su VPC)
+ Nombre de dominio o subdominio para reenviar a los solucionadores en las instalaciones (por ejemplo, onprem.mydc.com)
+ Nombre de dominio/subdominio de la zona alojada privada de AWS (por ejemplo, myvpc.cloud.com)

## Arquitectura
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment-architecture"></a>

**Pila de tecnología de destino**
+ Zona alojada privada de Amazon Route 53
+ Amazon Route 53 Resolver
+ Amazon VPC
+ AWS VPN o Direct Connect

**Arquitectura de destino**

![\[Flujo de trabajo de resolución de DNS híbrido en un entorno de cuenta única de AWS mediante Route 53 Resolver.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/120dedc8-cc6c-4aa7-be11-c70a7ee80642/images/7b75f534-1adc-4a39-86d6-5c4596ff7b6a.png)


 

## Tools (Herramientas)
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment-tools"></a>
+ [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) facilita la nube híbrida a los clientes empresariales al permitir una resolución de consultas de DNS perfecta en toda la nube híbrida. Puede crear puntos de enlace de DNS y reglas de reenvío condicional para resolver los espacios de nombres de DNS entre su centro de datos local y el suyo. VPCs
+ La [zona alojada privada de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) es un contenedor que contiene información sobre cómo desea que Route 53 responda a las consultas de DNS de un dominio y sus subdominios dentro de uno o varios VPCs que cree con el servicio Amazon VPC.

## Epics
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment-epics"></a>

### Configure una zona alojada privada
<a name="configure-a-private-hosted-zone"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una zona alojada privada de Route 53 para un nombre de dominio reservado de AWS, como myvpc.cloud.com. | Esta zona contiene los registros de DNS de los recursos de AWS que deben resolverse desde el entorno en las instalaciones. Para obtener instrucciones, consulte [Crear una zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) en la documentación de Route 53. | Administrador de red, administrador del sistema | 
| Asocie esta zona alojada privada con la VPC de la VPC. | Para permitir que los recursos de la VPC resuelvan los registros DNS en esta zona alojada privada, debe asociar la VPC a la zona alojada. Para obtener instrucciones, consulte [Crear una zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) en la documentación de Route 53. | Administrador de red, administrador del sistema | 

### Configure los puntos de conexión de Route 53 Resolver
<a name="set-up-route-53-resolver-endpoints"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un punto de conexión de entrada | Route 53 Resolver utiliza un punto de conexión de entrada para recibir las consultas de DNS de los solucionadores en las instalaciones. Para obtener instrucciones, consulte [Reenviar consultas DNS entrantes a su](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html) cuenta VPCs en la documentación de Route 53. Anote la dirección IP del punto de conexión entrante. | Administrador de red, administrador del sistema | 
| Crear un punto de conexión de salida | Route 53 Resolver utiliza un punto de conexión de salida para enviar las consultas de DNS de los solucionadores en las instalaciones. Para obtener instrucciones, consulte [Reenvío de consultas de DNS de salida a su red](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-outbound-queries.html) en la documentación de Route 53. Anote el ID del punto de conexión de salida. | Administrador de red, administrador del sistema | 

### Configure una regla de reenvío y asóciela a su VPC
<a name="set-up-a-forwarding-rule-and-associate-it-with-your-vpc"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una regla de reenvío para un dominio en las instalaciones | Esta regla indicará a Route 53 Resolver que reenvíe cualquier consulta de DNS para los dominios en las instalaciones (como onprem.mydc.com) a los solucionadores de DNS en las instalaciones. Para crear esta regla, necesitará las direcciones IP de los resolutores de DNS en las instalaciones y el ID del punto de conexión de salida de Route 53 Resolver. Para obtener instrucciones, consulte [Administración de reglas de reenvío](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing.html) en la documentación de Route 53. | Administrador de red, administrador del sistema | 
| Asocie la regla de reenvío a su VPC. | Para que la regla de reenvío entre en vigor, debe asociarla a su VPC. Luego, Route 53 Resolver tiene en cuenta la regla al resolver un dominio. Para obtener instrucciones, consulte [Administración de reglas de reenvío](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing.html) en la documentación de Route 53. | Administrador de red, administrador del sistema | 

### Configuración de solucionadores DNS en las instalaciones
<a name="configure-on-premises-dns-resolvers"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el reenvío condicional en los solucionadores de DNS en las instalaciones.  | Para que las consultas de DNS se envíen a la zona alojada privada de Route 53 desde el entorno en las instalaciones, debe configurar el reenvío condicional en los solucionadores de DNS en las instalaciones. Esto indica a los solucionadores de DNS que reenvíen todas las consultas de DNS del dominio de AWS (por ejemplo, para myvpc.cloud.com) a la dirección IP del punto de conexión entrante de Route 53 Resolver. | Administrador de red, administrador del sistema | 

### Pruebe la resolución de DNS end-to-end
<a name="test-end-to-end-dns-resolution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Probar la resolución DNS desde AWS en el entorno en las instalaciones. | Desde un servidor de la VPC, realice una consulta de DNS para un dominio en las instalaciones (como server1.onprem.mydc.com). | Administrador de red, administrador del sistema | 
| Probar la resolución DNS desde AWS en el entorno en las instalaciones. | Desde un servidor en las instalaciones, realice la resolución de DNS para un dominio de AWS (como server1.myvpc.cloud.com). | Administrador de red, administrador del sistema | 

## Recursos relacionados
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-single-account-aws-environment-resources"></a>
+ [Administración centralizada de DNS de la nube híbrida con Amazon Route 53 y AWS Transit Gateway (AWS Transit Gateway (AWS Transit Gateway](https://aws.amazon.com/blogs/networking-and-content-delivery/centralized-dns-management-of-hybrid-cloud-with-amazon-route-53-and-aws-transit-gateway/) (Blog de AWS Networking y Content Delivery)
+ [Simplifique la administración de DNS en un entorno multicuenta con Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (publicación del blog de AWS Security)
+ [Trabajar con zonas alojadas privadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) (documentación de Route 53)
+ [Introducción a Route 53 Resolver ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) (documentación de Route 53)

# Configure automáticamente los bots de UiPath RPA en Amazon EC2 mediante AWS CloudFormation
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation"></a>

*Dr. Rahul Sharad Gaikwad y Tamilselvan P, Amazon Web Services*

## Resumen
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-summary"></a>

Este patrón explica cómo puede implementar bots de automatización robótica de procesos (RPA) en instancias de Amazon Elastic Compute Cloud (Amazon EC2). Utiliza una canalización de [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html) para crear una Amazon Machine Image (AMI) personalizada. Una AMI es una imagen de máquina virtual (VM) preconfigurada que contiene el sistema operativo (SO) y el software preinstalado para implementar EC2 instancias. Este patrón utiliza CloudFormation plantillas de AWS para instalar [la edición UiPath Studio Community](https://www.uipath.com/product/studio) en la AMI personalizada. UiPath es una herramienta de RPA que le ayuda a configurar robots para automatizar sus tareas.

Como parte de esta solución, las instancias de EC2 Windows se lanzan mediante la AMI base y la aplicación UiPath Studio se instala en las instancias. El patrón utiliza la herramienta Microsoft System Preparation (Sysprep) para duplicar la instalación personalizada de Windows. Después, elimina la información del host y crea una AMI final de la instancia. A continuación, puede lanzar las instancias bajo demanda mediante la AMI final con sus propias convenciones de nomenclatura y configuración de supervisión.


| 
| 
| Nota: Este patrón no proporciona ninguna información sobre el uso de bots de RPA. Para obtener esa información, consulte la [UiPath documentación](https://docs.uipath.com/). También puede usar este patrón para configurar otras aplicaciones de bots de RPA personalizando los pasos de instalación en función de sus necesidades. | 
| --- |

Este patrón proporciona las siguientes automatizaciones y ventajas:
+ Implementación y uso compartido de aplicaciones: puede crear Amazon EC2 AMIs para el despliegue de aplicaciones y compartirlas en varias cuentas a través de una canalización de EC2 Image Builder, que utiliza CloudFormation plantillas de AWS como scripts de infraestructura como código (IaC).
+  EC2 Aprovisionamiento y escalado de Amazon: las plantillas de CloudFormation IaC proporcionan secuencias de nombres de ordenadores personalizadas y automatizan las uniones de Active Directory.
+ Observabilidad y supervisión: el patrón configura los CloudWatch paneles de Amazon para ayudarte a monitorear las EC2 métricas de Amazon (como el uso de CPU y disco).
+ Ventajas de la RPA para su empresa: la RPA mejora la precisión porque los robots pueden realizar las tareas asignadas de forma automática y coherente. La RPA también aumenta la velocidad y la productividad porque elimina las operaciones que no añaden valor y gestiona las actividades repetitivas.

## Requisitos previos y limitaciones
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-prereqs"></a>

**Requisitos previos**
+ Una [cuenta de AWS](https://aws.amazon.com/free/) activa
+ [Permisos de AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) para implementar plantillas CloudFormation 
+ [Políticas de IAM](https://docs.aws.amazon.com/imagebuilder/latest/userguide/cross-account-dist.html) para configurar la distribución de AMI entre cuentas con Image Builder EC2 

## Arquitectura
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-architecture"></a>

![\[Arquitectura de destino para configurar bots de RPA en Amazon EC2\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/5555a62d-91d4-4e81-9961-ff89faedd6ad/images/1893d2d3-8912-4473-adf1-6633b5badcd9.png)


1. El administrador proporciona la AMI de Windows básica en el `ec2-image-builder.yaml` archivo e implementa la pila en la CloudFormation consola.

1. La CloudFormation pila implementa la canalización EC2 Image Builder, que incluye los siguientes recursos:
   + `Ec2ImageInfraConfiguration`
   + `Ec2ImageComponent`
   + `Ec2ImageRecipe`
   + `Ec2AMI`

1. La canalización de EC2 Image Builder lanza una EC2 instancia temporal de Windows mediante la AMI base e instala los componentes necesarios (en este caso, UiPath Studio).

1.  EC2 Image Builder elimina toda la información del host y crea una AMI desde Windows Server.

1. Actualiza el `ec2-provisioning yaml` archivo con la AMI personalizada y lanza varias EC2 instancias en función de sus requisitos.

1. La macro Count se implementa mediante una CloudFormation plantilla. Esta macro proporciona una propiedad **Count** para CloudFormation los recursos, de modo que puede especificar fácilmente varios recursos del mismo tipo.

1. Actualiza el nombre de la macro en el CloudFormation `ec2-provisioning.yaml` archivo y despliega la pila.

1. El administrador actualiza el archivo `ec2-provisioning.yaml` en función de los requisitos y lanza la pila.

1. La plantilla implementa EC2 instancias con la aplicación UiPath Studio.

## Tools (Herramientas)
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-tools"></a>

**Servicios de AWS**
+ [AWS](https://aws.amazon.com/cloudformation/) le CloudFormation ayuda a modelar y gestionar los recursos de infraestructura de forma automatizada y segura.
+ [Amazon](https://aws.amazon.com/cloudwatch/) le CloudWatch ayuda a observar y supervisar los recursos y las aplicaciones en AWS, en las instalaciones y en otras nubes.
+ [Amazon Elastic Compute Cloud (Amazon EC2](https://aws.amazon.com/ec2/)) proporciona una capacidad informática segura y de tamaño variable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [EC2 Image Builder](https://aws.amazon.com/image-builder/) simplifica la creación, las pruebas y el despliegue de máquinas virtuales e imágenes de contenedores para su uso en AWS o de forma local.
+ [Amazon](https://aws.amazon.com/eventbridge/) le EventBridge ayuda a crear aplicaciones basadas en eventos a escala en AWS, sistemas existentes o aplicaciones de software como servicio (SaaS).
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a controlar de forma segura el acceso a los recursos de AWS. Con IAM, puede administrar de forma centralizada los permisos que controlan a qué recursos de AWS pueden acceder los usuarios. Utilice IAM para controlar quién está autenticado (ha iniciado sesión) y autorizado (tiene permisos) para utilizar recursos.
+ [AWS Lambda](https://aws.amazon.com/lambda/) es un servicio de computación controlado por eventos sin servidor que permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend, sin aprovisionar ni administrar servidores. Puede utilizar funciones de Lambda desde más de 200 servicios de AWS y aplicaciones SaaS y pagar solo por el consumo realizado.
+ [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS Systems Manager Agent (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) ayuda a Systems Manager a actualizar, gestionar y configurar EC2 instancias, dispositivos periféricos, servidores locales y máquinas virtuales ()VMs.

**Repositorios de código**

El código de este patrón está disponible en la [configuración del bot de GitHub UiPath RPA mediante](https://github.com/aws-samples/uipath-rpa-setup-ec2-windows-ami-cloudformation) el repositorio. CloudFormation El patrón también usa una macro que está disponible en el [repositorio de CloudFormation macros de AWS](https://github.com/aws-cloudformation/aws-cloudformation-macros/tree/master/Count).

## Prácticas recomendadas
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-best-practices"></a>
+ AWS lanza nuevas versiones de [Windows AMIs](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-ami-version-history.html) cada mes. Contienen los últimos parches del sistema operativo, controladores y agentes de lanzamiento. Le recomendamos que aproveche las AMI más recientes al lanzar nuevas instancias o al crear sus propias imágenes personalizadas.
+ Aplique todos los parches de seguridad disponibles para Windows o Linux durante la creación de imágenes.

## Epics
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-epics"></a>

### Implemente una canalización de imágenes para la imagen base
<a name="deploy-an-image-pipeline-for-the-base-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure una canalización EC2 de Image Builder. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Vea EC2 la configuración de Image Builder. | La configuración EC2 de Image Builder incluye la configuración de la infraestructura, la configuración de distribución y la configuración de escaneo de seguridad. Para ver la configuración:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html)Como práctica recomendada, las actualizaciones de EC2 Image Builder se deben realizar únicamente a través de la CloudFormation plantilla. | AWS DevOps | 
| Puede ver la canalización de imágenes. | Para ver la canalización de imágenes desplegada:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Ver los registros de Generador de imágenes. | EC2 Los registros de Image Builder se agrupan en grupos de CloudWatch registros. Para ver los registros en CloudWatch:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html)EC2 Los registros de Image Builder también se almacenan en un bucket de S3. Para consultar los registros en el bucket:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Cargue el UiPath archivo en un bucket de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 

### Implementación y pruebas de la macro Count
<a name="deploy-and-test-the-count-macro"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la macro Count. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html)Si quieres usar la consola, sigue las instrucciones de la epopeya anterior o de la [CloudFormation documentación](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html).  | DevOps ingeniero | 
| Pruebe la macro Count. | Para probar las capacidades de la macro, intente iniciar la plantilla de ejemplo que se proporciona con la macro. <pre>aws cloudformation deploy \<br />    --stack-name Count-test \<br />    --template-file test.yaml \<br />    --capabilities CAPABILITY_IAM</pre> | DevOps ingeniero | 

### Implemente la CloudFormation pila para aprovisionar instancias con la imagen personalizada
<a name="deploy-the-cloudformation-stack-to-provision-instances-with-the-custom-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la plantilla de EC2 aprovisionamiento de Amazon. | Para implementar EC2 Image Pipeline mediante CloudFormation:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Consulta la EC2 configuración de Amazon. | La EC2 configuración de Amazon incluye configuraciones de seguridad, redes, almacenamiento, comprobaciones de estado, monitoreo y etiquetas. Para ver estas configuraciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Vea el CloudWatch panel de control. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html)Después de aprovisionar la pila, se tarda un tiempo en rellenar el panel con las métricas.El panel proporciona las siguientes métricas: `CPUUtilization`, `DiskUtilization`, `MemoryUtilization`, `NetworkIn`, `NetworkOut`, `StatusCheckFailed`. | AWS DevOps | 
| Vea las métricas personalizadas del uso de memoria y disco.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Vea las alarmas de uso de memoria y disco.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 
| Verifique la regla del ciclo de vida de las instantáneas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html) | AWS DevOps | 

### Eliminar el entorno (opcional)
<a name="delete-the-environment-optional"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine las pilas. | Cuando haya completado su PoC o su proyecto piloto, le recomendamos que elimine las pilas que ha creado para asegurarse de que no se le cobre por estos recursos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.html)La operación de eliminación de la pila no se puede detener una vez que comienza. La pila avanza al estado `DELETE_IN_PROGRESS`.Si la eliminación ha fallado, la pila tendrá el estado `DELETE_FAILED`. Para obtener soluciones, consulte Fallos al [eliminar una pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-delete-stack-fails) en la documentación de CloudFormation solución de problemas de AWS.Para obtener información sobre cómo proteger las pilas para que no se eliminen accidentalmente, consulte Cómo [proteger una pila para que no se elimine](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) en la CloudFormation documentación de AWS. | AWS DevOps | 

## Resolución de problemas
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Al implementar la plantilla de EC2 aprovisionamiento de Amazon, aparece el error: Se *ha recibido una respuesta con formato incorrecto de transform 123xxxx*: :Count. | Se trata de un problema conocido. (Consulte la solución personalizada y las relaciones públicas en el [repositorio de CloudFormation macros de AWS](https://github.com/aws-cloudformation/aws-cloudformation-macros/pull/20)).[Para solucionar este problema, abra la consola de AWS Lambda y actualice `index.py` con el contenido del GitHub repositorio.](https://raw.githubusercontent.com/aws-cloudformation/aws-cloudformation-macros/f1629c96477dcd87278814d4063c37877602c0c8/Count/src/index.py)  | 

## Recursos relacionados
<a name="set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation-resources"></a>

**GitHub repositorios**
+ [UiPath Configuración del bot RPA mediante CloudFormation](https://github.com/aws-samples/uipath-rpa-setup-ec2-windows-ami-cloudformation)
+ [Count Macro CloudFormation ](https://github.com/aws-cloudformation/aws-cloudformation-macros/tree/master/Count)

**Referencias de AWS**
+ [Creación de una pila en la CloudFormation consola de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) (CloudFormation documentación)
+ [Solución de problemas CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) (CloudFormation documentación)
+ [Supervise las métricas de memoria y disco de las EC2 instancias de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) ( EC2 documentación de Amazon)
+ [¿Cómo puedo usar el CloudWatch agente para ver las métricas del monitor de rendimiento en un servidor Windows?](https://repost.aws/knowledge-center/cloudwatch-performance-monitor-windows) (artículo de AWS Re:post)

**Referencias adicionales**
+ [UiPath documentación](https://docs.uipath.com/)
+ [Configuración del nombre de host en una SysPreped AMI](https://blog.brianbeach.com/2014/07/setting-hostname-in-syspreped-ami.html) (entrada de blog de Brian Beach)
+ [¿Cómo hago para que Cloudformation reprocese una plantilla mediante una macro cuando cambian los parámetros?](https://stackoverflow.com/questions/59828989/how-do-i-make-cloudformation-reprocess-a-template-using-a-macro-when-parameters) (Desbordamiento de pila)

# Configure una PeopleSoft arquitectura de alta disponibilidad en AWS
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws"></a>

*Ramanathan Muralidhar, Amazon Web Services*

## Resumen
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-summary"></a>

Cuando migra sus PeopleSoft cargas de trabajo a AWS, la resiliencia es un objetivo importante. Garantiza que su PeopleSoft aplicación siempre tenga una alta disponibilidad y pueda recuperarse rápidamente de los errores.

Este patrón proporciona una arquitectura para sus PeopleSoft aplicaciones en AWS a fin de garantizar la alta disponibilidad (HA) en los niveles de red, aplicación y base de datos. Emplea una base de datos [Amazon Relational Database Service (Amazon RDS](https://aws.amazon.com/rds/)) para Oracle o Amazon RDS para SQL Server en el nivel de base de datos. Esta arquitectura escalable también incluye servicios de AWS como [Amazon Route 53](https://aws.amazon.com/route53/), instancias de Linux en [Amazon Elastic Compute Cloud (Amazon EC2)](https://aws.amazon.com/ec2/), [Amazon Elastic Block Storage (Amazon EBS)](https://aws.amazon.com/ebs/), [Amazon Elastic File System (Amazon EFS)](https://aws.amazon.com/efs/) y un [equilibrador de carga de aplicación](https://aws.amazon.com/elasticloadbalancing/application-load-balancer).

[Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/) proporciona un conjunto de herramientas y aplicaciones para la administración de la fuerza laboral y otras operaciones empresariales.

## Requisitos previos y limitaciones
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un PeopleSoft entorno con las licencias necesarias para configurarlo en AWS
+ Una nube privada virtual (VPC) configurada en su cuenta de AWS con los siguientes recursos:
  + Al menos dos zonas de disponibilidad
  + Una subred pública y tres subredes privadas en cada zona de disponibilidad
  + Una puerta de enlace NAT y una puerta de enlace de Internet
  + Tablas de enrutamiento en cada subred para enrutar el tráfico
  + Listas de control de acceso a la red (red ACLs) y grupos de seguridad definidos para garantizar la seguridad de la PeopleSoft aplicación de acuerdo con los estándares de su organización

**Limitaciones**
+ Este patrón proporciona una solución de alta disponibilidad (HA). No es compatible con escenarios de recuperación de desastres (DR). En el infrecuente caso de que toda la región de AWS para la implementación de alta disponibilidad dejase de estar disponible, la aplicación dejaría de estar disponible.

**Versiones de producto**
+ PeopleSoft aplicaciones que ejecutan la versión PeopleTools 8.52 y versiones posteriores

## Arquitectura
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-architecture"></a>

**Arquitectura de destino**

El tiempo de inactividad o la interrupción de PeopleSoft la aplicación de producción afectan a la disponibilidad de la aplicación y provocan importantes interrupciones en su negocio.

Le recomendamos que diseñe su aplicación de PeopleSoft producción de manera que siempre tenga una alta disponibilidad. Para ello, puede eliminar los puntos únicos de fallo, añadir puntos de cruce o conmutación por error fiables y detectar los fallos. El siguiente diagrama ilustra una arquitectura de alta disponibilidad para PeopleSoft AWS.

![\[Arquitectura de alta disponibilidad para PeopleSoft AWS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/0db96376-dadb-4545-b130-ebbe64acd4e9/images/5d585a8e-320a-495d-a049-97171633e90f.png)


Esta implementación de arquitectura utiliza Amazon RDS for Oracle como PeopleSoft base de datos e instancias EC2 que se ejecutan en Red Hat Enterprise Linux (RHEL). También puede usar Amazon RDS para SQL Server como base de datos de Peoplesoft.

Esta arquitectura contiene los siguientes componentes: 
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) se utiliza como servidor de nombres de dominio (DNS) para enrutar las solicitudes de Internet a la PeopleSoft aplicación.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) le ayuda a protegerse contra exploits y bots web comunes que pueden afectar a la disponibilidad, comprometer la seguridad o consumir recursos excesivos. [AWS Shield Avanzado](https://docs.aws.amazon.com/waf/latest/developerguide/shield-chapter.html) (no se ilustra) proporciona una protección mucho más amplia.
+ El [Equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) equilibra la carga del tráfico HTTP y HTTPS con un enrutamiento de solicitudes avanzado dirigido a los servidores web.
+ Los servidores web, los servidores de aplicaciones, los servidores del programador de procesos y los servidores Elasticsearch que admiten la PeopleSoft aplicación se ejecutan en varias zonas de disponibilidad y utilizan [Amazon](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) EC2 Auto Scaling.
+ La base de datos utilizada por la PeopleSoft aplicación se ejecuta en [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) en una configuración Multi-AZ.
+ El recurso compartido de archivos que utiliza la PeopleSoft aplicación está configurado en [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) y se utiliza para acceder a los archivos de todas las instancias.
+ [Amazon EC2 Auto Scaling utiliza Amazon Machine Images (AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)) para garantizar PeopleSoft que los componentes se clonen rápidamente cuando sea necesario.
+ Las [puertas de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) conectan las instancias de una subred privada a servicios externos a su VPC y garantizan que los servicios externos no puedan iniciar una conexión con dichas instancias.
+ La [puerta de enlace de internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) es un componente de la VPC de escalado horizontal, redundante y de alta disponibilidad que permite la comunicación entre su VPC e internet.
+ Los host bastión de la subred pública proporcionan acceso a los servidores de la subred privada desde una red externa, como Internet o una red en las instalaciones. Los host bastión proporcionan un acceso controlado y seguro a los servidores de las subredes privadas.

**Detalles de la arquitectura**

La PeopleSoft base de datos está alojada en una base de datos Amazon RDS for Oracle (o Amazon RDS for SQL Server) en una configuración Multi-AZ. La [función Amazon RDS Multi-AZ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) replica las actualizaciones de la base de datos en dos zonas de disponibilidad para aumentar la durabilidad y la disponibilidad. Amazon RDS conmuta automáticamente a la base de datos en espera en caso de mantenimiento planificado e interrupciones imprevistas.

La PeopleSoft web y el nivel medio se instalan en las instancias EC2. Estas instancias se distribuyen en varias zonas de disponibilidad, y están vinculadas a un [grupo de escalado automático](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html). Esto garantiza que estos componentes estén siempre altamente disponibles. Se mantiene el número mínimo de instancias necesarias para garantizar que la aplicación esté siempre disponible y pueda escalarse cuando sea necesario.

Recomendamos usar un tipo de instancia EC2 de la generación actual para las instancias EC2 OEM. Los tipos de instancias de la generación actual, como [las instancias creadas en el sistema Nitro de AWS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances), admiten máquinas virtuales de hardware (HVMs). Las HVM AMIs son necesarias para aprovechar las ventajas de las [redes mejoradas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) y, además, ofrecen una mayor seguridad. Las instancias de EC2 que forman parte de cada grupo de escalado automático usan su propia AMI al reemplazar o escalar verticalmente las instancias. Le recomendamos que seleccione los tipos de instancias EC2 en función de la carga que desee que PeopleSoft gestione su aplicación y de los valores mínimos recomendados por Oracle para su PeopleSoft aplicación y PeopleTools versión. Para obtener más información sobre los requisitos de hardware y software, consulte el [sitio web de soporte de Oracle.](https://support.oracle.com)

La PeopleSoft web y el nivel medio comparten una montura de Amazon EFS para compartir informes, archivos de datos y (si es necesario) el `PS_HOME` directorio. Amazon EFS se configura con objetivos de montaje en cada zona de disponibilidad por motivos de rendimiento y costo.

Se aprovisiona un Application Load Balancer para soportar el tráfico que accede a la PeopleSoft aplicación y equilibra la carga del tráfico entre los servidores web de las diferentes zonas de disponibilidad. Un equilibrador de carga de aplicación es un dispositivo de red que proporciona alta disponibilidad en, al menos, dos zonas de disponibilidad. Los servidores web distribuyen el tráfico a diferentes servidores de aplicaciones mediante una configuración de equilibrio de carga. El equilibrador de carga entre el servidor web y el servidor de aplicaciones garantiza que la carga se distribuya de manera uniforme entre las instancias, ayudando a evitar los cuellos de botella y las interrupciones del servicio debido a la sobrecarga de las instancias.

Amazon Route 53 se emplea como servicio de DNS para enrutar el tráfico desde Internet al equilibrador de carga de aplicación. Route 53 es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.

**Detalles de HA**
+ Bases de datos: la función Multi-AZ de Amazon RDS opera dos bases de datos en varias zonas de disponibilidad con replicación sincrónica. Esto crea un entorno de alta disponibilidad con conmutación por error automática. Amazon RDS cuenta con una función de detección de eventos de conmutación por error, e inicia una conmutación por error automática cuando se producen dichos eventos. También puede iniciar una conmutación por error manual a través de la API de Amazon RDS. Para obtener una explicación detallada, consulte la entrada del blog [Amazon RDS entre bastidores: Multi-AZ](https://aws.amazon.com/blogs/database/amazon-rds-under-the-hood-multi-az/). La conmutación por error es fluida, y la aplicación se vuelve a conectar automáticamente a la base de datos cuando se produce. Sin embargo, cualquier trabajo del programador de procesos durante la conmutación por error genera errores y debe volver a enviarse.
+ PeopleSoft servidores de aplicaciones: los servidores de aplicaciones están distribuidos en múltiples zonas de disponibilidad y tienen un grupo de Auto Scaling definido para ellos. Si una instancia falla, el grupo de escalado automático la reemplaza inmediatamente por una instancia en buen estado que se clona desde la AMI de la plantilla del servidor de aplicaciones. Se habilita la *agrupación por descargas* de modo que, cuando una instancia del servidor de aplicaciones deja de funcionar, las sesiones se conmutan automáticamente por error a otro servidor de aplicaciones, y el grupo de escalado automático activa automáticamente otra instancia, abre el servidor de aplicaciones y la registra en el montaje de Amazon EFS. El servidor de aplicaciones recién creado se añade automáticamente a los servidores web mediante el script `PSSTRSETUP.SH` de los servidores web. Esto garantiza que el servidor de la aplicación esté siempre altamente disponible y se recupere de los errores con rapidez.
+ Programadores de procesos: los servidores de los programadores de procesos están distribuidos en varias zonas de disponibilidad, y tienen un grupo de escalado automático definido para ellos. Si falla una instancia, el grupo de escalado automático la sustituye inmediatamente por una instancia sana clonada a partir de la AMI de la plantilla de servidor del programador de procesos. Cuando una instancia del programador de procesos deja de funcionar, el grupo de escalado automático activa automáticamente otra instancia y abre el programador de procesos. Todos los trabajos que estaban en ejecución cuando la instancia falló deben volver a enviarse. Esto garantiza que el programador de procesos esté disponible en todo momento y se recupere rápidamente de los errores.
+ Servidores Elasticsearch: Los servidores Elasticsearch tienen un grupo de escalado automático definido para ellos. Si falla una instancia, el grupo de escalado automático la sustituye inmediatamente por una instancia sana clonada a partir de la AMI de la plantilla del servidor de Elasticsearch. Cuando una instancia de Elasticsearch deja de funcionar, el equilibrador de carga de aplicación que le envía las solicitudes detecta el error y deja de enviarle tráfico. El grupo de escalado automático activa automáticamente otra instancia y abre la instancia de Elasticsearch. Cuando la instancia de Elasticsearch se recupera, el equilibrador de carga de aplicación detecta que está en buen estado y vuelve a enviarle solicitudes. Esto garantiza que el servidor de Elasticsearch esté siempre altamente disponible y se recupere de los errores con rapidez.
+ Servidores web: Los servidores web tienen un grupo de escalado automático definido para ellos. Si falla una instancia, el grupo de escalado automático la sustituye inmediatamente por una instancia sana clonada a partir de la AMI de la plantilla del servidor web. En concreto, cuando una instancia de servidor web se cae, el Equilibrador de carga de aplicación que le sirve las peticiones detecta el fallo y deja de enviarle tráfico. El grupo de escalado automático pone en marcha automáticamente otra instancia y pone en marcha la instancia del servidor web. Cuando la instancia del servidor web vuelve a funcionar, el Equilibrador de carga de aplicación detecta que está en buen estado y comienza a enviarle peticiones de nuevo. Esto garantiza que el servidor web esté siempre altamente disponible y se recupere de los errores con rapidez.

## Tools (Herramientas)
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-tools"></a>

**Servicios de AWS**
+ Los [Equilibradores de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuyen el tráfico entrante de aplicaciones entre varios destinos, tales como instancias EC2, en varias zonas de disponibilidad.
+ [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) proporciona volúmenes de almacenamiento por bloques para su uso con instancias de Amazon Elastic Compute Cloud (Amazon EC2).
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) proporciona capacidad de computación escalable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) le ayuda a crear y configurar sistemas de archivos compartidos en la nube de AWS.
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) le ayuda a configurar, utilizar y escalar una base de datos relacional en la nube de AWS.
+ [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.

## Prácticas recomendadas
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-best-practices"></a>

**Prácticas operativas recomendadas**
+ Cuando utilice AWS, utilice Route 53 para enrutar el tráfico desde Internet y de forma local. PeopleSoft Use la [opción de conmutación por error](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html) para redirigir el tráfico al sitio de recuperación de desastres (DR) si la instancia de base de datos principal no está disponible.
+ Utilice siempre un Application Load Balancer delante del PeopleSoft entorno. Esto garantiza que la carga del tráfico se equilibre en los servidores web de forma segura.
+ En la configuración del grupo de destino del equilibrador de carga de aplicación, asegúrese de que la [adherencia esté activada](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html) con una cookie generada por el equilibrador de carga.
**nota**  
Es posible que tenga que utilizar una cookie basada en aplicación si utiliza un inicio de sesión único (SSO) externo. Esto garantiza que las conexiones sean consistentes entre los servidores web y los servidores de aplicaciones.
+ En el caso de una aplicación de PeopleSoft producción, el tiempo de espera de inactividad de Application Load Balancer debe coincidir con el establecido en el perfil web que utilice. Esto evita que las sesiones de usuario caduquen en la capa del equilibrador de carga.
+ Para una aplicación PeopleSoft de producción, establezca el [recuento de reciclaje](https://docs.oracle.com/cd/F28299_01/pt857pbr3/eng/pt/tsvt/concept_PSAPPSRVOptions-c07f06.html?pli=ul_d96e90_tsvt) del servidor de aplicaciones en un valor que minimice las pérdidas de memoria.
+ Si utiliza una base de datos de Amazon RDS para su aplicación de PeopleSoft producción, tal y como se describe en este patrón, ejecútela en [formato Multi-AZ para obtener una alta disponibilidad](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html).
+ Si la base de datos se ejecuta en una instancia EC2 para la aplicación de PeopleSoft producción, asegúrese de que la [base de datos en espera se ejecute en otra zona de disponibilidad para garantizar una alta disponibilidad](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html#ec2-oracle-ha).
+ Para la DR, asegúrese de que la base de datos de Amazon RDS o la instancia de EC2 tengan un modo de espera configurado en una región de AWS independiente de la base de datos de producción. Esto garantiza que, en caso de que se produzca un desastre en la región, pueda cambiar la aplicación a otra región.
+ En cuanto a la RD, use [Amazon Elastic Disaster Recovery](https://aws.amazon.com/disaster-recovery/) para configurar los componentes de nivel de aplicación en una región distinta de los componentes de producción. Esto garantiza que, en caso de que se produzca un desastre en la región, pueda cambiar la aplicación a otra región.
+ Utilice Amazon EFS (para I/O requisitos moderados) o [Amazon FSx](https://aws.amazon.com/fsx/) (para I/O requisitos altos) para almacenar sus PeopleSoft informes, archivos adjuntos y archivos de datos. Esto garantiza que el contenido se almacene en una ubicación central y accesible desde cualquier lugar de la infraestructura.
+ Utilice [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) (básico y detallado) para supervisar los recursos de la nube de AWS que utiliza su PeopleSoft aplicación prácticamente en tiempo real. Esto garantiza que reciba alertas de los problemas al instante y pueda solucionarlos rápidamente antes de que afecten a la disponibilidad del entorno.
+ Si utiliza una base de datos de Amazon RDS como base de datos, utilice [Enhanced Monitoring](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.overview.html). PeopleSoft Esta función proporciona acceso a más de 50 métricas, incluidas la CPU, la memoria y el sistema I/O, and disk I/O de archivos.
+ Utilice [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) para supervisar las llamadas a la API en los recursos de AWS que utiliza su PeopleSoft aplicación. Esto permite realizar análisis de seguridad, seguimiento de los cambios en los recursos y auditorías de conformidad.

**Prácticas recomendadas de seguridad**
+ [Para proteger su PeopleSoft aplicación de vulnerabilidades habituales, como la inyección de SQL o el cross-site scripting (XSS), utilice AWS WAF.](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) Considere la posibilidad de usar [AWS Shield Avanzado](https://docs.aws.amazon.com/waf/latest/developerguide/shield-chapter.html) para obtener servicios de detección y mitigación personalizados.
+ Agrega una regla al Application Load Balancer para redirigir el tráfico de HTTP a HTTPS automáticamente y así proteger tu PeopleSoft aplicación.
+ Configure un grupo de seguridad independiente para el equilibrador de carga de aplicación. Este grupo de seguridad debe permitir solo el tráfico HTTPS/HTTP entrante y no el saliente. Esto garantiza que solo se permita el tráfico previsto y ayuda a proteger la aplicación.
+ Use subredes privadas para los servidores de aplicaciones, los servidores web y la base de datos, y use [puertas de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) para el tráfico de Internet saliente. Esto garantiza que no se pueda acceder públicamente a los servidores que respaldan la aplicación y, al mismo tiempo, proporciona acceso público solo a los servidores que lo necesitan.
+ Utilice diferentes VPCs para ejecutar sus entornos de PeopleSoft producción y de no producción. Utilice [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/), la interconexión de [VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html), la [red ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) y [los grupos de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) para controlar el flujo de tráfico entre las [VPC](https://aws.amazon.com/vpc/) y, si es necesario, su centro de datos local.
+ Siga el principio de privilegio mínimo Conceda acceso a los recursos de AWS que utiliza la PeopleSoft aplicación solo a los usuarios que lo necesiten absolutamente. Otorgue únicamente los privilegios mínimos obligatorios para realizar una tarea. Para obtener más información, consulte el [pilar de seguridad](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_permissions_least_privileges.html) del Marco de AWS Well-Architected.
+ Siempre que sea posible, utilice [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) para acceder a las instancias EC2 que utiliza la PeopleSoft aplicación.

**Prácticas recomendadas de fiabilidad**
+ Cuando utilice un equilibrador de carga de aplicación, registre un único destino para cada zona de disponibilidad habilitada. Esto aumenta la efectividad del equilibrador de carga.
+ Le recomendamos que tenga tres direcciones distintas URLs para cada entorno de PeopleSoft producción: una URL para acceder a la aplicación, otra para servir al agente de integración y otra para ver los informes. Si es posible, cada URL debe tener sus propios servidores web y servidores de aplicaciones dedicados. Este diseño ayuda a que PeopleSoft la aplicación sea más segura, ya que cada URL tiene una funcionalidad distinta y un acceso controlado. También minimiza el alcance del impacto en caso de que los servicios subyacentes fallen.
+ Te recomendamos que configures las [comprobaciones de estado de los grupos objetivo del balanceador de cargas](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html) de tu PeopleSoft aplicación. Las comprobaciones de estado deben realizarse en los servidores web, y no en las instancias EC2 que ejecutan esos servidores. Esto garantiza que si el servidor web se bloquea o la instancia EC2 que aloja el servidor web deja de funcionar, el equilibrador de carga de aplicación refleje esa información con precisión.
+ En el caso PeopleSoft de una aplicación de producción, le recomendamos que distribuya los servidores web en al menos tres zonas de disponibilidad. Esto garantiza que la PeopleSoft aplicación siempre tenga una alta disponibilidad, incluso si una de las zonas de disponibilidad deja de funcionar.
+ Para una aplicación PeopleSoft de producción, habilite la agrupación de sacudidas ()`joltPooling=true`. Esto garantiza que su aplicación se conmute por error a otro servidor de aplicaciones si un servidor está inactivo por motivos de aplicación de parches o debido a un fallo de la máquina virtual.
+ Para una aplicación de PeopleSoft producción, establézcalo en 1`DynamicConfigReload `. Esta configuración se admite en la PeopleTools versión 8.52 y versiones posteriores. Añade nuevos servidores de aplicaciones al servidor web de forma dinámica, sin necesidad de reiniciar los servidores.
+ Para minimizar el tiempo de inactividad al aplicar PeopleTools parches, utilice el método de blue/green despliegue para las configuraciones de lanzamiento grupal de Auto Scaling para los servidores web y de aplicaciones. Para obtener más información, consulte el documento técnico [Descripción general de las opciones de implementación en AWS](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html).
+ Utilice [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) para hacer copias de seguridad de su PeopleSoft aplicación en AWS. AWS Backup es un servicio rentable, totalmente gestionado y basado en políticas que simplifica la protección de datos a escala.

**Prácticas recomendadas de rendimiento**
+ Termine el SSL en el Application Load Balancer para obtener un rendimiento óptimo del PeopleSoft entorno, a menos que su empresa requiera tráfico cifrado en todo el entorno.
+ Cree puntos de enlace de [VPC de interfaz para](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) los servicios de AWS, como [Amazon Simple Notification Service (Amazon SNS) [CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html), de forma](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) que el tráfico sea siempre interno. Esto es rentable y ayuda a mantener la aplicación segura.

**Prácticas recomendadas de optimización de costos**
+ Etiquete todos los recursos que utiliza su PeopleSoft entorno y active las etiquetas de asignación de [costes](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html). Estas etiquetas le ayudan a ver y gestionar los costos de sus recursos.
+ Para una aplicación PeopleSoft de producción, configure grupos de Auto Scaling para los servidores web y los servidores de aplicaciones. De este modo, mantiene el número mínimo de servidores web y de aplicaciones para dar soporte a su aplicación. Puede usar [políticas de grupo de escalado automático](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html) para ampliar o reducir los servidores según sea necesario.
+ Use [alarmas de facturación](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html) para recibir alertas cuando los costos superen el umbral presupuestario que especifique.

**Prácticas recomendadas de sostenibilidad**
+ Utilice [la infraestructura como código](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html) (IaC) para mantener sus PeopleSoft entornos. Esto permite crear entornos coherentes y a mantener el control de los cambios.

## Epics
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-epics"></a>

### Migre su PeopleSoft base de datos a Amazon RDS
<a name="migrate-your-peoplesoft-database-to-amazon-rds"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de un grupo de subredes de base de datos. | En la [consola de Amazon RDS](https://console.aws.amazon.com/rds/), en el panel de navegación, elija **Grupos de subred** y, a continuación, cree un grupo de subredes de base de datos de Amazon RDS con subredes en varias zonas de disponibilidad. Esto es necesario para que la base de datos de Amazon RDS se ejecute en una configuración Multi-AZ. | Administrador de la nube | 
| Crear la base de datos de Amazon RDS. | Cree una base de datos de Amazon RDS en una zona de disponibilidad de la región de AWS que haya seleccionado para el entorno de PeopleSoft alta disponibilidad. Al crear la base de datos de Amazon RDS, asegúrese de seleccionar la opción Multi-AZ (**crear una instancia en espera**) y el grupo de subredes de la base de datos que creó en el paso anterior. Para obtener más información, consulte la [documentación de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html). | Administrador de la nube, administrador de bases de datos de Oracle | 
| Migre su PeopleSoft base de datos a Amazon RDS. | Migre su PeopleSoft base de datos existente a la base de datos de Amazon RDS mediante AWS Database Migration Service (AWS DMS). Para más información, consulte la [documentación de AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) y la publicación del blog de AWS [Migración de bases de datos de Oracle con un tiempo de inactividad casi nulo mediante AWS DMS](https://aws.amazon.com/blogs/database/migrating-oracle-databases-with-near-zero-downtime-using-aws-dms/). | Administrador de nube, administrador de bases de datos PeopleSoft  | 

### Configure su sistema de archivos Amazon EFS
<a name="set-up-your-amazon-efs-file-system"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un sistema de archivos. | En la [consola de Amazon EFS](https://console.aws.amazon.com/efs/), cree un sistema de archivos y monte los destinos para cada zona de disponibilidad. Para obtener instrucciones, consulte la [documentación de Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html#creating-using-fs-part1-console). Cuando haya creado el sistema de archivos, anote su nombre de DNS. Usará esta información cuando monte el sistema de archivos. | Administrador de la nube | 

### Configure su PeopleSoft aplicación y su sistema de archivos
<a name="set-up-your-peoplesoft-application-and-file-system"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Lanzar una instancia EC2. | Lance una instancia EC2 para su PeopleSoft aplicación. Para obtener instrucciones, consulte la [documentación de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html#liw-quickly-launch-instance).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de nube, PeopleSoft administrador | 
| Instálelo PeopleSoft en la instancia. | Instale PeopleSoft la aplicación y PeopleTools en la instancia EC2 que creó. Para obtener instrucciones, consulte la [documentación de Oracle](https://docs.oracle.com). | Administrador de nube, PeopleSoft administrador | 
| Crear el servidor de la aplicación. | Cree el servidor de aplicaciones para la plantilla de AMI y asegúrese de que se conecta correctamente a la base de datos de Amazon RDS. | Administrador de la nube, PeopleSoft administrador | 
| Monte el sistema de archivos de Amazon EFS. | Inicie sesión en la instancia EC2 como usuario raíz y ejecute los siguientes comandos para montar el sistema de archivos de Amazon EFS en una carpeta llamada `PSFTMNT` en el servidor.<pre>sudo su –<br />mkdir /psftmnt<br />cat /etc/fstab</pre>Añada la línea siguiente al archivo `/etc/fstab`. Use el nombre de DNS que anotó al crear el sistema de archivos.<pre>fs-09e064308f1145388.efs.us-east-1.amazonaws.com:/ /psftmnt nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0<br />mount -a</pre> | Administrador de la nube, PeopleSoft administrador | 
| Comprobar permisos. | Asegúrese de que la `PSFTMNT` carpeta tenga los permisos adecuados para que el PeopleSoft usuario pueda acceder a ella correctamente. | Administrador de la nube, PeopleSoft administrador | 
| Cree instancias adicionales. | Repita los pasos anteriores de esta épica para crear instancias de plantilla para el programador de procesos, el servidor web y el servidor Elasticsearch. Nombre estas instancias como `PRCS_TEMPLATE`, `WEB_TEMPLATE` y `SRCH_TEMPLATE`. En el servidor web, defina `joltPooling=true`** **y `DynamicConfigReload=1`. | Administrador de la nube, PeopleSoft administrador | 

### Cree scripts para configurar los servidores
<a name="create-scripts-to-set-up-servers"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un script para instalar el servidor de aplicaciones. | En la `APP_TEMPLATE` instancia de Amazon EC2, cree el siguiente script como PeopleSoft usuario. Asígnele el nombre `appstart.sh` y colóquelo en el directorio `PS_HOME`. Usará este script para abrir el servidor de aplicaciones y también para registrar el nombre del servidor en el soporte de Amazon EFS.<pre>#!/bin/ksh<br />. /usr/homes/hcmdemo/.profile.<br />psadmin -c configure -d HCMDEMO<br />psadmin -c parallelboot -d HCMDEMO<br />touch /psftmnt/`echo $HOSTNAME`</pre> | PeopleSoft administrador | 
| Cree un script para instalar el servidor de programador de procesos. | En la `PRCS_TEMPLATE` instancia de Amazon EC2, cree el siguiente script como PeopleSoft usuario. Asígnele el nombre `prcsstart.sh` y colóquelo en el directorio `PS_HOME`. Usará este script para abrir el servidor de programador de procesos.<pre>#!/bin/ksh<br />. /usr/homes/hcmdemo/. profile<br />/* The following line ensures that the process scheduler always has a unique name during replacement or scaling activity. */ <br />sed -i "s/.*PrcsServerName.*/`hostname -I | awk -F. '{print "PrcsServerName=PSUNX"$3$4}'`/" $HOME/appserv/prcs/*/psprcs.cfg<br />psadmin -p configure -d HCMDEMO<br />psadmin -p start -d HCMDEMO</pre> | PeopleSoft administrador | 
| Cree un script para instalar el servidor Elasticsearch. | En la instancia `SRCH_TEMPLATE` de Amazon EC2, como usuario de Elasticsearch, cree el siguiente script. Asígnele el nombre `srchstart.sh` y colóquelo en el directorio `HOME`.<pre>#!/bin/ksh<br />/* The following line ensures that the correct IP is indicated in the elasticsearch.yaml file. */<br />sed -i "s/.*network.host.*/`hostname  -I | awk '{print "host:"$0}'`/" $ES_HOME_DIR/config/elasticsearch.yaml<br />nohup $ES_HOME_DIR/bin/elasticsearch &</pre> | PeopleSoft administrador | 
| Cree un script para instalar el servidor web. | En la instancia `WEB_TEMPLATE` de Amazon EC2, como usuario del servidor web, cree los siguientes scripts en el directorio `HOME`.`renip.sh`: este script garantiza que el servidor web tenga la IP correcta cuando se clone desde la AMI.<pre>#!/bin/ksh<br />hn=`hostname`<br />/* On the following line, change the IP with the hostname with the hostname of the web template. */<br />for text_file in `find  *  -type f -exec grep -l '<hostname-of-the-web-template>' {} \;`<br />do<br />sed -e 's/<hostname-of-the-web-template>/'$hn'/g' $text_file > temp<br />mv -f temp $text_file<br />done</pre>`psstrsetup.sh`: Este script garantiza que el servidor web utilice el servidor de aplicaciones correcto IPs que se está ejecutando actualmente. Intenta conectarse a cada servidor de aplicaciones en el puerto de descarga y lo añade al archivo de configuración.<pre>#!/bin/ksh<br />c2=""<br />for ctr in `ls -1 /psftmnt/*.internal`<br />do<br />c1=`echo $ctr | awk -F "/" '{print $3}'`<br />/* In the following lines, 9000 is the jolt port. Change it if necessary. */<br />if nc -z $c1 9000 2> /dev/null; then<br />if [[ $c2 = "" ]]; then<br />c2="psserver="`echo $c1`":9000"<br />else<br />c2=`echo $c2`","`echo $c1`":9000"<br />fi<br />fi<br />done</pre>`webstart.sh`: este script ejecuta los dos scripts anteriores e inicia los servidores web.<pre>#!/bin/ksh<br />/* Change the path in the following if necessary. */<br />cd  /usr/homes/hcmdemo <br />./renip.sh<br />./psstrsetup.sh<br />webserv/peoplesoft/bin/startPIA.sh</pre> | PeopleSoft administrador | 
| Añada una entrada de crontab. | En la instancia de Amazon EC2 `WEB_TEMPLATE`, como usuario del servidor web, añada la siguiente línea a **crontab**. Cambie la hora y la ruta para reflejar los valores que necesita. Esta entrada garantiza que su servidor web siempre tenga las entradas correctas del servidor de aplicaciones en el archivo `configuration.properties`.<pre>* * * * * /usr/homes/hcmdemo/psstrsetup.sh</pre> | PeopleSoft administrador | 

### Plantillas de grupos de Creación AMIs y Auto Scaling
<a name="create-amis-and-auto-scaling-group-templates"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una AMI para la plantilla del servidor de aplicaciones. | En la consola de Amazon EC2, cree una imagen de AMI de la instancia `APP_TEMPLATE` de Amazon EC2. Ponga el nombre `PSAPPSRV-SCG-VER1` a la AMI. Para obtener instrucciones, consulte la [documentación de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html). | Administrador de la nube, PeopleSoft administrador | 
| Crea AMIs para los demás servidores. | Repita el paso anterior AMIs para crear el programador de procesos, el servidor Elasticsearch y el servidor web. | Administrador de la nube, administrador PeopleSoft  | 
| Cree una plantilla de lanzamiento para el grupo de escalado automático del servidor de aplicaciones. | Cree una plantilla de lanzamiento para el grupo de escalado automático del servidor de aplicaciones. Asigne el nombre `PSAPPSRV_TEMPLATE.` a la plantilla. En la plantilla, elija la AMI que creó para la instancia `APP_TEMPLATE`. Para obtener instrucciones, consulte la [documentación de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#create-launch-template-from-instance).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube, PeopleSoft administrador | 
| Cree una plantilla de lanzamiento para el grupo de escalado automático del servidor de programación de procesos. | Repita el paso anterior para crear una plantilla de lanzamiento para el grupo de escalado automático del servidor programador de procesos. Asigne un nombre a la plantilla `PSPRCS_TEMPLATE`. En la plantilla, elija la AMI que creó para el programador de procesos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube, PeopleSoft administrador | 
| Cree una plantilla de lanzamiento para el grupo de escalado automático del servidor de Elasticsearch. | Repita los pasos anteriores para crear una plantilla de lanzamiento para el grupo de escalado automático del servidor Elasticsearch. Asigne un nombre a la plantilla `SRCH_TEMPLATE`. En la plantilla, elija la AMI que creó para el servidor de búsqueda.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube, PeopleSoft administrador | 
| Cree una plantilla de lanzamiento para el grupo de escalado automático del servidor web. | Repita los pasos anteriores para crear una plantilla de lanzamiento para el grupo de escalado automático del servidor web. Asigne un nombre a la plantilla `WEB_TEMPLATE`. En la plantilla, elija la AMI que creó para el servidor web.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube, PeopleSoft administrador | 

### Crear grupos de escalado automático
<a name="create-auto-scaling-groups"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un grupo de escalado automático para el servidor de aplicaciones. | En la consola de Amazon EC2, cree un grupo de escalado automático llamado `PSAPPSRV_ASG` para el servidor de aplicaciones usando la plantilla `PSAPPSRV_TEMPLATE`. Para obtener instrucciones, consulte la [documentación de Amazon EC2](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-launch-template.html).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube, PeopleSoft administrador | 
| Cree grupos de escalado automático en el resto de servidores. | Repita el paso anterior para crear grupos de escalado automático para el programador de procesos, el servidor Elasticsearch y el servidor web. | Administrador de la nube, PeopleSoft administrador | 

### Cree y configure grupos de destino
<a name="create-and-configure-target-groups"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un grupo de destino para el servidor web. | En la consola de Amazon EC2, cree un grupo de destino para el servidor web. Para obtener más instrucciones, consulte la [documentación de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html). Establezca el puerto en el que escucha el servidor web. | Administrador de la nube | 
| Configurar comprobaciones de estado. | Confirme que las comprobaciones de estado tengan los valores correctos según los requisitos de su empresa. Para obtener más información, consulte la [Documentación de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html). | Administrador de la nube | 
| Cree un grupo de destino para el servidor Elasticsearch. | Repita los pasos anteriores para crear un grupo de destino llamado `PSFTSRCH` para el servidor de Elasticsearch, y configure el puerto de Elasticsearch correcto. | Administrador de la nube | 
| Añada grupos de destino a los grupos de escalado automático. | Abra el grupo de escalado automático `PSPIA_ASG` que creó anteriormente. En la pestaña **Equilibrador de carga**, elija **Editar** y, a continuación, añada el grupo de destino `PSFTWEB` al grupo de escalado automático.Repite este paso para el grupo de escalado automático de Elasticsearch `PSSRCH_ASG` y añada el grupo objetivo `PSFTSRCH` que creó anteriormente. | Administrador de la nube | 
| Establezca la adherencia de la sesión. | En el grupo de destino `PSFTWEB`, seleccione la pestaña **Atributos**, elija **Editar** y defina la adherencia de la sesión. En el tipo de adherencia, seleccione **Cookie generada por el equilibrador de carga**, y establezca la duración en 1. Para obtener más información, consulte la [Documentación de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html).Repita este paso para el grupo de destino `PSFTSRCH`. | Administrador de la nube | 

### Crear y configurar equilibradores de carga de aplicaciones
<a name="create-and-configure-application-load-balancers"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un equilibrador de carga para los servidores web. | Cree un equilibrador de carga de aplicación con el nombre `PSFTLB` para equilibrar la carga del tráfico a los servidores web. Para obtener más instrucciones, consulte la [documentación de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html#configure-load-balancer).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube | 
| Cree un equilibrador de carga para los servidores de Elasticsearch. | Cree un equilibrador de carga de aplicación con el nombre `PSFTSCH` para equilibrar la carga del tráfico a los servidores de Elasticsearch.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-a-highly-available-peoplesoft-architecture-on-aws.html) | Administrador de la nube | 
| Configure Route 53. | En la [consola Amazon Route 53](https://console.aws.amazon.com/route53/), cree un registro en la zona alojada que servirá a la PeopleSoft aplicación. Para obtener instrucciones, consulte la [documentación de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). Esto garantiza que todo el tráfico pase por el equilibrador de carga `PSFTLB`. | Administrador de la nube | 

## Recursos relacionados
<a name="set-up-a-highly-available-peoplesoft-architecture-on-aws-resources"></a>
+ [ PeopleSoft Sitio web de Oracle](https://www.oracle.com/applications/peoplesoft/)
+ [Documentación de AWS](https://docs.aws.amazon.com/)

# Configure la recuperación ante desastres para Oracle JD Edwards EnterpriseOne con AWS Elastic Disaster Recovery
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## Resumen
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-summary"></a>

Los desastres provocados por catástrofes naturales, fallos en las aplicaciones o interrupciones de servicios son perjudiciales para los ingresos y provocan tiempo de inactividad en las aplicaciones corporativas. Para reducir las repercusiones de este tipo de eventos, la planificación de la recuperación ante desastres (DR) es fundamental para las empresas que adoptan los sistemas de planificación de recursos EnterpriseOne empresariales (ERP) de JD Edwards y otros programas de software esenciales y empresariales de JD Edwards. 

Este patrón explica cómo las empresas pueden utilizar AWS Elastic Disaster Recovery como una opción de recuperación ante desastres para sus EnterpriseOne aplicaciones de JD Edwards. También describe los pasos para utilizar la conmutación por error y la recuperación ante fallos de Elastic Disaster Recovery a fin de crear una estrategia de recuperación ante desastres entre regiones para las bases de datos alojadas en una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en la nube de AWS.

**nota**  
Este patrón requiere que las regiones principal y secundaria para que la implementación de DR entre regiones se hospede en AWS.

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) es una solución de software ERP integrada para empresas medianas y grandes de una amplia gama de sectores.

AWS Elastic Disaster Recovery minimiza el tiempo de inactividad y la pérdida de datos con una recuperación rápida y fiable de aplicaciones locales y basadas en la nube mediante el uso de un almacenamiento asequible, un cálculo y point-in-time una recuperación mínimos.

AWS proporciona [cuatro patrones de arquitectura de DR principales](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html). Este documento se centra en la instalación, configuración y optimización mediante una [estrategia de prueba piloto](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html). Esta estrategia le ayuda a crear un entorno de DR de costo reducido, en el que inicialmente se aprovisiona un servidor de replicación para replicar los datos de la base de datos de origen. El servidor de base de datos propiamente dicho se aprovisiona solo cuando se inicia un proceso de recuperación de desastres. Esta estrategia elimina los gastos de mantenimiento de un servidor de base de datos en la región de DR. En su lugar, usted paga por una instancia EC2 más pequeña que actúa como servidor de replicación.

## Requisitos previos y limitaciones
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Una EnterpriseOne aplicación de JD Edwards que se ejecuta en Oracle Database o Microsoft SQL Server con una base de datos compatible en estado de ejecución en una instancia EC2 gestionada. Esta aplicación debe incluir todos los componentes EnterpriseOne básicos de JD Edwards (Enterprise Server, HTML Server y Database Server) instalados en una región de AWS.
+ Un rol de AWS Identity and Access Management (IAM) para configurar el servicio Elastic Disaster Recovery.
+ Una red para ejecutar Elastic Disaster Recovery, configurada de acuerdo con los [ajustes de conectividad](https://docs.aws.amazon.com/drs/latest/userguide/Network-Requirements.html) requeridos.

**Limitaciones**
+ Puede usar este patrón para replicar todos los niveles, a menos que la base de datos esté alojada en Amazon Relational Database Service (Amazon RDS). En este caso, le recomendamos que use la [funcionalidad de copia entre regiones](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html) de Amazon RDS.
+ Elastic Disaster Recovery no es compatible con CloudEndure Disaster Recovery, pero puede actualizarse desde CloudEndure Disaster Recovery. Para obtener más información, consulte las [preguntas frecuentes](https://docs.aws.amazon.com/drs/latest/userguide/cedr-to-drs.html) en la documentación de Elastic Disaster Recovery.
+ Amazon Elastic Block Store (Amazon EBS) limita la velocidad a la que puede tomar instantáneas. Puede replicar un número máximo de 300 servidores en una única cuenta de AWS mediante Elastic Disaster Recovery. Para replicar más servidores, puede usar varias cuentas de AWS o varias regiones de AWS de destino. (Deberá configurar Elastic Disaster Recovery por separado en cada cuenta y región). Para más información, consulte las [Prácticas recomendadas](https://docs.aws.amazon.com/drs/latest/userguide/best_practices_drs.html) en la documentación de Elastic Disaster Recovery.
+ Las cargas de trabajo de origen (la EnterpriseOne aplicación y la base de datos de JD Edwards) deben alojarse en instancias EC2. Este patrón no admite cargas de trabajo en las instalaciones o en otros entornos de nube.
+ Este patrón se centra en los componentes de JD Edwards EnterpriseOne . Un plan completo de DR y continuidad empresarial (BCP) debe incluir otros servicios básicos, como:
  + Redes (nube privada virtual, subredes y grupos de seguridad)
  + Active Directory
  + Amazon WorkSpaces
  + Elastic Load Balancing
  + Un servicio de base de datos administrado como Amazon Relational Database Service (Amazon RDS).

Para obtener información adicional sobre los requisitos previos, configuraciones y limitaciones, consulte la [documentación de Elastic Disaster Recovery](https://docs.aws.amazon.com/drs/latest/userguide/what-is-drs.html).

**Versiones de producto**
+ Oracle JD Edwards EnterpriseOne (versiones compatibles con Oracle y SQL Server basadas en los requisitos técnicos mínimos de Oracle)

## Arquitectura
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-architecture"></a>

**Pila de tecnología de destino**
+ Una sola región y una sola nube privada virtual (VPC) para producción y no producción, y una segunda región para DR
+ Zonas de disponibilidad únicas para asegurar una baja latencia entre los servidores
+ Un equilibrador de carga de aplicación que distribuya el tráfico de red para mejorar la escalabilidad y la disponibilidad de las aplicaciones en varias zonas de disponibilidad
+ Amazon Route 53, para proporcionar configuración de sistema de nombres de dominio (DNS)
+ Amazon proporcionará WorkSpaces a los usuarios una experiencia de escritorio en la nube
+ Amazon Simple Storage Service (Amazon S3) para almacenar copias de seguridad, archivos y objetos
+ Amazon CloudWatch para el registro, la supervisión y las alarmas de aplicaciones
+ Amazon Elastic Disaster Recovery, para la recuperación de desastres

**Arquitectura de destino**

El siguiente diagrama muestra la arquitectura de recuperación ante desastres interregional de JD Edwards EnterpriseOne mediante Elastic Disaster Recovery.

![\[Arquitectura para la recuperación ante desastres EnterpriseOne entre regiones de JD Edwards en AWS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9b0de5f0-f211-4086-a044-321d081604f9/images/978b7219-e54e-4e31-b3ff-4885784e2971.png)


**Procedimiento**

A continuación puede ver un resumen de alto nivel del proceso. Para más información, consulte la sección *Epics*.
+ La replicación de Elastic Disaster Recovery comienza con una sincronización inicial. Durante esta sincronización inicial, el agente de replicación de AWS replica todos los datos de los discos de origen en el recurso correspondiente de la subred del área transitoria.
+ La replicación continua sigue realizándose indefinidamente una vez finalizada la sincronización inicial.
+ Debe revisar los parámetros de lanzamiento, que incluyen las configuraciones específicas del servicio y una plantilla de lanzamiento de Amazon EC2, una vez que se haya instalado el agente y se haya iniciado la replicación. Cuando se indique que el servidor de origen está listo para la recuperación, podrá iniciar las instancias.
+ Cuando Elastic Disaster Recovery emite una serie de llamadas a la API para iniciar la operación de lanzamiento, la instancia de recuperación se lanza inmediatamente en AWS según la configuración de lanzamiento. El servicio activa automáticamente un servidor de conversión durante el inicio.
+ La nueva instancia se activa en AWS una vez finalizada la conversión y está lista para usarse. El estado del servidor de origen en el momento del lanzamiento se representa mediante los volúmenes asociados a la instancia lanzada. El proceso de conversión implica cambios en los controladores, la red y la licencia del sistema operativo para asegurar que la instancia se inicie de forma nativa en AWS.
+ Tras el lanzamiento, los volúmenes recién creados ya no se mantienen sincronizados con los servidores de origen. El agente de replicación de AWS sigue replicando de forma rutinaria los cambios realizados en los servidores de origen de los volúmenes del área transitoria, pero las instancias lanzadas no reflejan dichos cambios.
+ Al iniciar una nueva instancia de simulacro o recuperación, los datos siempre se reflejan en el estado más reciente que se ha replicado desde el servidor de origen a la subred del área transitoria.
+ Cuando el servidor de origen esté marcado como preparado para la recuperación, podrá iniciar las instancias.

**nota**  
El proceso funciona en ambos sentidos: para la conmutación por error de una región de AWS principal a una región de DR, y también para la conmutación por recuperación al sitio principal una vez que se ha recuperado. Puede preparar la conmutación por recuperación invirtiendo la dirección de replicación de los datos desde el equipo de destino al equipo de origen de forma totalmente orquestada.

Entre las ventajas del proceso descrito en este patrón se incluyen las siguientes:
+ Flexibilidad: los servidores de replicación escalan horizontal y verticalmente en función del conjunto de datos y del tiempo de replicación, por lo que puede realizar pruebas de DR sin interrumpir las cargas de trabajo de origen ni la replicación.
+ Fiabilidad: la replicación es sólida, no disruptiva y continua.
+ Automatización: esta solución proporciona un proceso unificado y automatizado para las pruebas, la recuperación y la conmutación por recuperación.
+ Optimización de costos: puede replicar y pagar solo por los volúmenes necesarios, y pagar por los recursos de cómputo en el sitio de DR solo cuando esos recursos estén activados. Puede usar una instancia de replicación con costos optimizados (le recomendamos que emplee un tipo de instancia optimizada para la computación) para varias fuentes o una sola fuente con un gran volumen de EBS.

**Automatización y escala**

Al realizar una recuperación ante desastres a escala, los EnterpriseOne servidores de JD Edwards dependerán de otros servidores del entorno. Por ejemplo:
+ Los servidores de EnterpriseOne aplicaciones de JD Edwards que se conectan a una base de datos EnterpriseOne compatible con JD Edwards durante el arranque dependen de esa base de datos.
+  EnterpriseOne Los servidores de JD Edwards que requieren autenticación y necesitan conectarse a un controlador de dominio durante el arranque para iniciar los servicios dependen del controlador de dominio.

Por este motivo, le recomendamos que automatice las tareas de conmutación por error. Por ejemplo, puede usar AWS Lambda o AWS Step Functions para automatizar los scripts de EnterpriseOne inicio de JD Edwards y los cambios en el balanceador de carga para automatizar el end-to-end proceso de conmutación por error. Para obtener más información, consulte la publicación del blog [Crear un plan de recuperación de desastres escalable con AWS Elastic Disaster Recovery](https://aws.amazon.com/blogs/storage/creating-a-scalable-disaster-recovery-plan-with-aws-elastic-disaster-recovery/).

## Tools (Herramientas)
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-tools"></a>

**Servicios de AWS**
+ [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) brinda volúmenes de almacenamiento por bloques para su uso con instancias de EC2.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://aws.amazon.com/products/compute/) proporciona capacidad de computación escalable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [AWS Elastic Disaster Recovery](https://aws.amazon.com/disaster-recovery/) minimiza el tiempo de inactividad y la pérdida de datos con una recuperación rápida y fiable de aplicaciones locales y basadas en la nube mediante un almacenamiento asequible, un cálculo y point-in-time una recuperación mínimos.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://aws.amazon.com/vpc/) le ofrece un control total sobre su entorno de redes virtuales, incluida la ubicación de los recursos, la conectividad y la seguridad.

## Prácticas recomendadas
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-best-practices"></a>

**Prácticas recomendadas generales**
+ Elabore con antelación un plan de acción en caso de que se produzca un evento de recuperación real.
+ Después de configurar Elastic Disaster Recovery correctamente, cree una CloudFormation plantilla de AWS que pueda crear la configuración bajo demanda, en caso de que sea necesario. Determine el orden en el que deben lanzarse los servidores y las aplicaciones, y regístrelo en el plan de recuperación.
+ Realice un simulacro regular (se aplican las tarifas estándar de Amazon EC2).
+ Supervise el estado de la replicación en curso mediante la consola de Elastic Disaster Recovery o mediante programación.
+ Proteja las point-in-time instantáneas y confirme antes de finalizar las instancias.
+ Cree un rol de IAM para la instalación del agente de replicación de AWS.
+ Habilite la protección de finalización de las instancias de recuperación en un escenario real de DR.
+ No use la acción **Desconectar de AWS** en la consola de Elastic Disaster Recovery en los servidores para los que lanzó instancias de recuperación, incluso en el caso de un evento de recuperación real. Al realizar una desconexión, se cancelan todos los recursos de replicación relacionados con estos servidores de origen, incluidos los puntos de recuperación point-in-time (PIT).
+ Modifique la política de PIT para cambiar el número de días de retención de las instantáneas.
+ Edite la plantilla de lanzamiento, en la configuración de lanzamiento de Elastic Disaster Recovery, para configurar la subred, el grupo de seguridad y el tipo de instancia correctos para su servidor de destino.
+ Automatice el proceso de end-to-end conmutación por error mediante Lambda o Step Functions para automatizar los scripts de inicio de JD EnterpriseOne Edwards y los cambios en el balanceador de carga.

**Optimización y consideraciones de JD Edwards EnterpriseOne **
+ Vaya **PrintQueue**a la base de datos.
+ Vaya **MediaObjects**a la base de datos.
+ Excluya los registros y la carpeta temporal de los servidores lógicos y por lotes.
+ Excluya la carpeta temporal de Oracle WebLogic.
+ Cree scripts para el inicio después de la conmutación por error.
+ Excluya la tempdb de SQL Server.
+ Excluya el archivo temporal de Oracle.

## Epics
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-epics"></a>

### Realice las tareas y configuración iniciales
<a name="perform-initial-tasks-and-configuration"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la red de replicación.  | Implemente su EnterpriseOne sistema JD Edwards en la región principal de AWS e identifique la región de AWS para DR. Siga los pasos de la sección de [requisitos de red de replicación](https://docs.aws.amazon.com/drs/latest/userguide/preparing-environments.html) de la documentación de Elastic Disaster Recovery para planificar y configurar su red de replicación y DR. | Administrador de AWS | 
| Determine el RPO y el RTO. | Identifique el objetivo de tiempo de recuperación (RTO) y el objetivo de punto de recuperación (RPO) para los servidores de aplicaciones y la base de datos. | Arquitecto de la nube, arquitecto de DR | 
| Habilite la replicación para Amazon EFS. | Si procede, habilite la replicación desde la región principal de AWS a la región DR para sistemas de archivos compartidos como Amazon Elastic File System (Amazon EFS) mediante AWS DataSync, **rsync** u otra herramienta adecuada. | Administrador de la nube | 
| Administre el DNS de DR. | Identifique el proceso para actualizar el sistema de nombres de dominio (DNS) durante el simulacro de DR o la recuperación real | Administrador de la nube | 
| Crear un rol de IAM para la configuración. | Siga las instrucciones de la sección [Inicialización y permisos de Elastic Disaster Recovery](https://docs.aws.amazon.com/drs/latest/userguide/getting-started-initializing.html), de la documentación de Elastic Disaster Recovery, para crear un rol de IAM para inicializar y administrar el servicio de AWS. | Administrador de la nube | 
| Configure las interconexiones con VPC. | Asegúrese de que el origen y el destino VPCs estén sincronizados y sean accesibles entre sí. Para obtener instrucciones sobre la configuración, consulte la [documentación de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html). | Administrador de AWS | 

### Configure los parámetros de replicación de Elastic Disaster Recovery
<a name="configure-elastic-disaster-recovery-replication-settings"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicialice Elastic Disaster Recovery. | Abra la [consola de Elastic Disaster Recovery](https://console.aws.amazon.com/drs/home), seleccione la región de AWS de destino (donde replicará los datos y lanzará las instancias de recuperación) y, a continuación, elija **Cómo establecer la configuración de replicación predeterminada**. | Administrador de AWS | 
| Configure los servidores de replicación | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html) | Administrador de AWS | 
| Configure los volúmenes y los grupos de seguridad. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html) | Administrador de AWS | 
| Configure los ajustes adicionales. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html) | Administrador de AWS | 

### Instale el agente de replicación de AWS
<a name="install-the-aws-replication-agent"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un rol de IAM. | Cree un rol de IAM que contenga la política `AWSElasticDisasterRecoveryAgentInstallationPolicy`. En la sección **Seleccionar tipo de acceso de AWS**, habilite el acceso programático. Apunte el ID de clave de acceso y la clave de acceso secreta. Necesitará esta información durante la instalación del agente de replicación de AWS. | Administrador de AWS | 
| Compruebe los requisitos. | Compruebe y complete los [requisitos previos](https://docs.aws.amazon.com/drs/latest/userguide/installation-requiremets.html) de la documentación de Elastic Disaster Recovery para instalar el agente de replicación de AWS. | Administrador de AWS | 
| Instale el agente de replicación de AWS. | Siga las [instrucciones de instalación](https://docs.aws.amazon.com/drs/latest/userguide/agent-installation-instructions.html) de su sistema operativo e instale el agente de replicación de AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html)Repita estos pasos en el servidor restante. | Administrador de AWS | 
| Supervisar la replicación | Regrese al panel **Servidores de origen** de Elastic Disaster Recovery para supervisar el estado de la replicación. La sincronización inicial tardará algún tiempo en función del tamaño de la transferencia de datos.Cuando el servidor de origen esté completamente sincronizado, el estado del servidor se actualizará a **Listo**. Esto significa que se ha creado un servidor de replicación en el área transitoria, y que los volúmenes de EBS se han replicado desde el servidor de origen al área de almacenamiento transitorio. | Administrador de AWS | 

### Configure los ajustes de lanzamiento
<a name="configure-launch-settings"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Edite la configuración de lanzamiento. | Para actualizar la configuración de lanzamiento de las instancias de simulacro y recuperación, en la [consola de Elastic Disaster Recovery](https://console.aws.amazon.com/drs/home), seleccione el servidor de origen y, a continuación, seleccione **Acciones** y **Editar configuración de lanzamiento**. También puede elegir las máquinas de origen que se van a replicar en la página **Servidores de origen** y, a continuación, elegir la pestaña **Configuración de lanzamiento**. Esta pestaña tiene dos secciones: **Configuración general de lanzamiento** y **plantilla de lanzamiento de EC2**. | Administrador de AWS | 
| Configure los ajustes generales de lanzamiento. | Revise la configuración general de lanzamiento según sus necesidades.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html)Para obtener más información, consulte la [Configuración general de lanzamiento](https://docs.aws.amazon.com/drs/latest/userguide/launch-general-settings.html) en la documentación de Elastic Disaster Recovery. | Administrador de AWS | 
| Configure la plantilla de lanzamiento de Amazon EC2. | Elastic Disaster Recovery emplea plantillas de lanzamiento de Amazon EC2 para lanzar instancias de simulacro y recuperación para cada servidor de origen. La plantilla de lanzamiento se crea automáticamente para cada servidor de origen que añada a Elastic Disaster Recovery tras instalar AWS Replication Agent.Debe configurar la plantilla de lanzamiento de Amazon EC2 como plantilla de lanzamiento predeterminada si desea usarla con Elastic Disaster Recovery.Para obtener más información, consulte la [Plantilla de lanzamiento de EC2](https://docs.aws.amazon.com/drs/latest/userguide/ec2-launch.html) en la documentación de Elastic Disaster Recovery. | Administrador de AWS | 

### Inicie el simulacro y la conmutación por error de DR
<a name="initiate-dr-drill-and-failover"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie el simulacro | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html)Para obtener más información, consulte las [Preparación para la conmutación por error](https://docs.aws.amazon.com/drs/latest/userguide/failback-preparing.html) en la documentación de Elastic Disaster Recovery. | Administrador de AWS | 
| Valide el simulacro. | En el paso anterior, lanzó nuevas instancias de destino en la región de DR. Las instancias de destino son réplicas de los servidores de origen basadas en la instantánea realizada al iniciar el lanzamiento.En este procedimiento, se conectará a las máquinas de destino de Amazon EC2 para confirmar que funcionan según lo previsto.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html) |  | 
| Iniciar la conmutación por error. | La conmutación por error es la redirección del tráfico de un sistema principal a un sistema secundario. Elastic Disaster Recovery le ayuda a realizar una conmutación por error al lanzar instancias de recuperación en AWS. Cuando se lanzan las instancias de recuperación, el tráfico de sus sistemas principales se redirige a estas instancias.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html)Para más información, consulte las [Efectuar una conmutación por error](https://docs.aws.amazon.com/drs/latest/userguide/failback-preparing-failover.html) en la documentación de Elastic Disaster Recovery. | Administrador de AWS | 
| Inicie la conmutación por recuperación. | El proceso para iniciar una conmutación por recuperación es similar al proceso para iniciar una conmutación por error.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html)Para más información, consulte las [Efectuar una conmutación por recuperación](https://docs.aws.amazon.com/drs/latest/userguide/failback-performing-main.html) en la documentación de Elastic Disaster Recovery. | Administrador de AWS | 
| Inicie los EnterpriseOne componentes de JD Edwards. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.html)Deberá incorporar los cambios en Route 53 y Application Load Balancer para que funcione el EnterpriseOne enlace de JD Edwards.Puede automatizar estos pasos mediante Lambda, Step Functions y Systems Manager (Run Command).Elastic Disaster Recovery realiza la replicación en cada bloque de los volúmenes de EBS de la instancia de EC2 de origen que alojan el sistema operativo y los sistemas de archivos. Los sistemas de archivos compartidos creados con Amazon EFS no forman parte de esta replicación. Puede replicar los sistemas de archivos compartidos en la región de DR mediante AWS DataSync, como se indica en la primera epopeya, y luego montar estos sistemas de archivos replicados en el sistema de DR. | JD Edwards CNC EnterpriseOne  | 

## Resolución de problemas
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El estado de la replicación de los datos del servidor de origen es **Estancado** y la replicación se retrasa. Si comprueba los detalles, el estado de la replicación de datos muestra **Agente no encontrado**. | Compruebe que el servidor de origen estancado está en funcionamiento.Si el servidor de origen deja de funcionar, el servidor de replicación finaliza automáticamente.Para obtener más información sobre problemas de retardo, consulte [Problemas de retardo en la replicación](https://docs.aws.amazon.com/drs/latest/userguide/Other-Troubleshooting-Topics.html#Replication-Lag-Issues) en la documentación de Elastic Disaster Recovery. | 
| La instalación de AWS Replication Agent en la instancia de EC2 de origen falla en RHEL 8.2 después de escanear los discos. `aws_replication_agent_installer.log` indica que faltan los encabezados del kernel. | Antes de instalar AWS Replication Agent en RHEL 8, CentOS 8 u Oracle Linux 8, ejecute:<pre>sudo yum install elfutils-libelf-devel</pre>Para más información, consulte las [Requisitos de instalación de Linux](https://docs.aws.amazon.com/mgn/latest/ug/installation-requirements.html#linux-requirements) en la documentación de Elastic Disaster Recovery. | 
| En la consola de Elastic Disaster Recovery, verá el servidor de origen como **Listo** con retardo, y el estado de replicación de datos como **Estancado**.En función del tiempo que AWS Replication Agent no esté disponible, el estado puede indicar un retardo elevado, pero el problema seguirá siendo el mismo. | Use un comando del sistema operativo para confirmar que AWS Replication Agent se está ejecutando en la instancia de EC2 de origen o confirme que la instancia se está ejecutando.Tras corregir los problemas, Elastic Disaster Recovery reiniciará el escaneo. Espere a que se hayan sincronizado todos los datos y el estado de la replicación sea **Correcto** antes de iniciar un simulacro de DR. | 
| Replicación inicial con retardo elevado. En la consola de Elastic Disaster Recovery, puede ver que el estado de sincronización inicial es extremadamente lento para un servidor de origen. | Compruebe los problemas de retardo en la replicación documentados en la sección [Problemas de retardo en la replicación](https://docs.aws.amazon.com/drs/latest/userguide/Other-Troubleshooting-Topics.html#Replication-Lag-Issues) de la documentación de Elastic Disaster Recovery.Es posible que el servidor de replicación no pueda gestionar la carga debido a las operaciones informáticas intrínsecas. En ese caso, intente actualizar el tipo de instancia tras consultar con el [equipo de soporte técnico de AWS](https://support.console.aws.amazon.com/support/). | 

## Recursos relacionados
<a name="set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery-resources"></a>
+ [Guía del usuario de AWS Elastic Disaster Recovery](https://docs.aws.amazon.com/drs/latest/userguide/what-is-drs.html)
+ [Crear un plan de recuperación de desastres escalable con AWS Elastic Disaster Recovery](https://aws.amazon.com/blogs/storage/creating-a-scalable-disaster-recovery-plan-with-aws-elastic-disaster-recovery/) (publicación del blog de AWS)
+ [AWS Elastic Disaster Recovery: introducción técnica](https://explore.skillbuilder.aws/learn/course/internal/view/elearning/11123/aws-elastic-disaster-recovery-a-technical-introduction) (curso de AWS Skill Builder; requiere iniciar sesión)
+ [Guía de inicio rápido de AWS Elastic Disaster Recovery](https://docs.aws.amazon.com/drs/latest/userguide/quick-start-guide-gs.html)

# Configure la detección de CloudFormation desviaciones en una organización multirregional y multicuenta
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-summary"></a>

Los usuarios de Amazon Web Services (AWS) suelen buscar una forma eficaz de detectar los desajustes en la configuración de los recursos, incluida la desviación en las AWS CloudFormation pilas, y solucionarlos lo antes posible. Este es especialmente el caso cuando se AWS Control Tower utiliza.

Este patrón proporciona una solución prescriptiva que resuelve el problema de manera eficiente mediante el uso de cambios consolidados en la configuración de los recursos y la adopción de medidas en función de esos cambios para generar resultados. La solución está diseñada para situaciones en las que se crean varias CloudFormation pilas en más de una Región de AWS, en más de una cuenta, o en una combinación de ambas. Los objetivos de la solución son los siguientes:
+ Simplificar el proceso de detección de desviaciones
+ Configurar las notificaciones y las alertas
+ Configurar los informes consolidados

## Requisitos previos y limitaciones
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-prereqs"></a>

**Requisitos previos **
+ AWS Config está habilitada en todas las regiones y cuentas que se deben monitorear

**Limitaciones**
+ El informe generado solo admite valores separados por comas (CSV) y JSON.

## Arquitectura
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-architecture"></a>

El siguiente diagrama muestra la AWS Organizations configuración con varias cuentas. AWS Config las reglas se comunican entre las cuentas.  

![\[Proceso de cinco pasos para supervisar las pilas de dos cuentas de AWS Organizations.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/735d0987-b953-47f8-a9bc-b02a88957ee5/images/340cee9a-5a4e-49ea-bd73-d37dcea5e098.png)


 En el flujo de trabajo se incluyen los pasos siguientes:

1. La AWS Config regla detecta la desviación.

1. Los resultados de la detección de desviaciones que se encuentran en otras cuentas se envían a la cuenta de administración.

1. La CloudWatch regla de Amazon llama a una AWS Lambda función.

1. La función Lambda consulta la AWS Config regla para obtener resultados agregados.

1. La función de Lambda notifica a Amazon Simple Notification Service (Amazon SNS), que notifica la desviación por correo electrónico.

**Automatización y escala**

La solución que se presenta aquí puede escalarse tanto para regiones como para cuentas adicionales.

## Tools (Herramientas)
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-tools"></a>

**Servicios de AWS**
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)proporciona una vista detallada de la configuración de AWS los recursos 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](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.
+ [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.

## Epics
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-epics"></a>

### Automatice la detección de desviaciones para CloudFormation
<a name="automate-drift-detection-for-cfn"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el agregador. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization.html) | Arquitecto de la nube | 
| Cree una regla AWS gestionada. | Añada la regla `cloudformation-stack-drift-detection-check` AWS**** gestionada. La regla necesita un valor de parámetro: `cloudformationArn`. Introduzca el nombre de recurso de Amazon (ARN) del rol de IAM que tiene los permisos de detectar la desviación de las pilas. El rol debe tener una política de confianza que AWS Config permita asumirlo. | Arquitecto de la nube | 
| Cree la sección de consultas avanzadas del agregador. | Para buscar pilas desviadas de varias fuentes, cree la siguiente consulta:<pre>SELECT resourceId, configuration.driftInformation.stackDriftStatus WHERE resourceType = 'AWS::CloudFormation::Stack'  AND configuration.driftInformation.stackDriftStatus IN ('DRIFTED')</pre> | Arquitecto de la nube, desarrollador | 
| Automatice la ejecución de la consulta y la publicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization.html) | Arquitecto de la nube, desarrollador | 
| Cree una CloudWatch regla. | Cree una CloudWatch regla basada en la programación para llamar a la función Lambda, que es responsable de las alertas. | Arquitecto de la nube | 

## Recursos relacionados
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-resources"></a>

**Recursos**
+ [¿Qué es? AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)
+ [Acumulación de datos de multicuentas y multiregiones](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)
+ [Detección de cambios de configuración no administrados en pilas y recursos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)
+ [IAM: Transferir una función de IAM a una función específica Servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam-passrole-service.html)
+ [¿Qué es Amazon SNS?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)

## Información adicional
<a name="set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization-additional"></a>

**Consideraciones**

Recomendamos utilizar la solución presentada en este patrón en lugar de utilizar soluciones personalizadas que impliquen llamadas a la API en intervalos específicos para iniciar la detección de desviaciones en cada CloudFormation pila o conjunto de pilas. Las soluciones personalizadas que utilizan llamadas a la API en intervalos específicos pueden provocar un gran número de llamadas a la API y afectar al rendimiento. Debido a la cantidad de llamadas a la API, se pueden producir limitaciones. Otro posible problema es el retraso en la detección si los cambios en los recursos se identifican únicamente en función de la programación.

Dado que los conjuntos de pilas se componen de pilas, puede utilizar esta solución. Los detalles de las instancias de pilas también están disponibles como parte de la solución.

## Conexiones
<a name="attachments-735d0987-b953-47f8-a9bc-b02a88957ee5"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/735d0987-b953-47f8-a9bc-b02a88957ee5/attachments/attachment.zip)

# Importación correcta de un bucket de S3 como CloudFormation pila de AWS
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-summary"></a>

Si utiliza los recursos de Amazon Web Services (AWS), como los buckets de Amazon Simple Storage Service (Amazon S3), y desea utilizar un enfoque de infraestructura como código (IaC), puede importar sus recursos a CloudFormation AWS y gestionarlos como una pila.

Este patrón proporciona los pasos para importar correctamente un bucket de S3 como una CloudFormation pila de AWS. Al utilizar este enfoque de patrón, puede evitar los posibles errores que podrían producirse si importa su bucket de S3 en una sola acción.

## Requisitos previos y limitaciones
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Un bucket de S3 y una política de bucket de S3 existentes. Para obtener más información al respecto, consulte [Qué política de bucket de S3 debo usar para cumplir con la regla s3- de AWS Config bucket-ssl-requests-only](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-policy-for-config-rule/) en el Centro de conocimiento de AWS.
+ Una clave de AWS Key Management Service (AWS KMS) existente y su alias. Para obtener más información, consulte [Trabajar con alias](https://docs.aws.amazon.com/kms/latest/developerguide/programming-aliases.html) en la documentación de AWS KMS.
+ La CloudFormation plantilla de `CloudFormation-template-S3-bucket` AWS de muestra (adjunta), descargada en su ordenador local.

## Arquitectura
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-architecture"></a>

![\[Flujo de trabajo para usar la CloudFormation plantilla a fin de crear una CloudFormation pila para importar un bucket de S3.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/aea7f6fe-8e67-46c4-8b90-1ab06b879111/images/ee143374-a0a4-42d9-b7ca-16593a597a84.png)


 

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

1. El usuario crea una plantilla de AWS CloudFormation con formato JSON o YAML.

1. La plantilla crea una CloudFormation pila de AWS para importar el bucket de S3.

1. La CloudFormation pila de AWS administra el depósito de S3 que especificó en la plantilla.

**Pila de tecnología**
+ AWS CloudFormation
+ AWS Identity y Access Management (IAM)
+ AWS KMS
+ Amazon S3

 

**Herramientas**
+ [AWS CloudFormation: AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a crear y aprovisionar despliegues de infraestructura de AWS de forma predecible y repetitiva.
+ [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 KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html): AWS Key Management Service (AWS KMS) es un servicio de cifrado y administración de claves adaptado a la nube.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento para Internet.

## Epics
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-epics"></a>

### Importe un bucket de S3 con cifrado AWS KMS key basado en una CloudFormation pila de AWS
<a name="import-an-s3-bucket-with-kms-key-long--based-encryption-as-an-aws-cloudformation-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una plantilla para importar el bucket de S3 y la clave de KMS. | En su equipo local, cree una plantilla para importar el bucket de S3 y la clave de KMS con la plantilla de muestra siguiente:<pre>AWSTemplateFormatVersion: 2010-09-09<br /><br />Parameters:<br /><br />  bucketName:<br /><br />    Type: String<br /><br />Resources:<br /><br />  S3Bucket:<br /><br />    Type: 'AWS::S3::Bucket'<br /><br />    DeletionPolicy: Retain<br /><br />    Properties:<br /><br />      BucketName: !Ref bucketName<br /><br />      BucketEncryption:<br /><br />        ServerSideEncryptionConfiguration:<br /><br />          - ServerSideEncryptionByDefault:<br /><br />              SSEAlgorithm: 'aws:kms'<br /><br />              KMSMasterKeyID: !GetAtt <br /><br />                - KMSS3Encryption<br /><br />                - Arn<br /><br />  KMSS3Encryption:<br /><br />    Type: 'AWS::KMS::Key'<br /><br />    DeletionPolicy: Retain<br /><br />    Properties:<br /><br />      Enabled: true<br /><br />      KeyPolicy: !Sub |-<br /><br />        {<br /><br />            "Id": "key-consolepolicy-3",<br /><br />            "Version": "2012-10-17",		 	 	 <br /><br />            "Statement": [<br /><br />                {<br /><br />                    "Sid": "Enable IAM User Permissions",<br /><br />                    "Effect": "Allow",<br /><br />                    "Principal": {<br /><br />                        "AWS": ["arn:aws:iam::${AWS::AccountId}:root"]<br /><br />                    },<br /><br />                    "Action": "kms:*",<br /><br />                    "Resource": "*"<br /><br />                }<br /><br />                }<br /><br />            ]<br /><br />        }<br /><br />      EnableKeyRotation: true</pre> | AWS DevOps | 
| Cree la pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html) | AWS DevOps | 
| Cree el alias de la clave KMS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)<pre>KMSS3EncryptionAlias:<br /><br />    Type: 'AWS::KMS::Alias'<br /><br />    DeletionPolicy: Retain<br /><br />    Properties: <br /><br />    AliasName: alias/S3BucketKey<br /><br />    TargetKeyId: !Ref KMSS3Encryption</pre>Para obtener más información al respecto, consulte [las actualizaciones de la CloudFormation pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html) de AWS en la CloudFormation documentación de AWS.  | AWS DevOps | 
| Actualice la pila para incluir 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/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)<pre>S3BucketPolicy:<br /><br />  Type: 'AWS::S3::BucketPolicy'<br /><br />  Properties:<br /><br />    Bucket: !Ref S3Bucket<br /><br />    PolicyDocument: !Sub |-<br /><br />      {<br /><br />                  "Version": "2008-10-17",		 	 	 <br /><br />                  "Id": "restricthttp",<br /><br />                  "Statement": [<br /><br />                      {<br /><br />                          "Sid": "denyhttp",<br /><br />                          "Effect": "Deny",<br /><br />                          "Principal": {<br /><br />                              "AWS": "*"<br /><br />                          },<br /><br />                          "Action": "s3:*",<br /><br />                          "Resource": ["arn:aws:s3:::${S3Bucket}","arn:aws:s3:::${S3Bucket}/*"],<br /><br />                          "Condition": {<br /><br />                              "Bool": {<br /><br />                                  "aws:SecureTransport": "false"<br /><br />                              }<br /><br />                          }<br /><br />                      }<br /><br />                  ]<br /><br />              }</pre>Esta política de bucket de S3 tiene una declaración de denegación que restringe las llamadas a la API que no son seguras.  | AWS DevOps | 
| Actualice la política de claves. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)Para más información, consulte [Políticas de claves en AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) en la documentación de AWS KMS. | Administrador de AWS | 
| Adición de etiquetas de nivel de recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack.html)<pre>Tags:<br /><br />  - Key: createdBy<br /><br />    Value: Cloudformation</pre> | AWS DevOps | 

## Recursos relacionados
<a name="successfully-import-an-s3-bucket-as-an-aws-cloudformation-stack-resources"></a>
+ [Incorporar los recursos existentes a la CloudFormation administración de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)
+ [AWS re:Invent 2017: información detallada sobre AWS CloudFormation (vídeo](https://www.youtube.com/watch?v=01hy48R9Kr8))

## Conexiones
<a name="attachments-aea7f6fe-8e67-46c4-8b90-1ab06b879111"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/aea7f6fe-8e67-46c4-8b90-1ab06b879111/attachments/attachment.zip)

# Sincronice los datos entre los sistemas de archivos de Amazon EFS en distintas regiones de AWS mediante AWS DataSync
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync"></a>

*Sarat Chandra Pothula y Aditya Ambati, Amazon Web Services*

## Resumen
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-summary"></a>

Esta solución proporciona un marco sólido para una sincronización de datos eficiente y segura entre instancias de Amazon Elastic File System (Amazon EFS) en regiones de AWS distintas. Este enfoque es escalable y proporciona una replicación de datos controlada entre regiones. Esta solución puede mejorar sus estrategias de recuperación ante desastres y redundancia de datos.

Al utilizar AWS Cloud Development Kit (AWS CDK), este patrón utiliza un enfoque de infraestructura como código (IaC) para implementar los recursos de la solución. La aplicación AWS CDK implementa los recursos esenciales de AWS, DataSync Amazon EFS, Amazon Virtual Private Cloud (Amazon VPC) y Amazon Elastic Compute Cloud (Amazon). EC2 Esta IaC proporciona un proceso de implementación repetible y controlado por versiones que está totalmente alineado con las prácticas recomendadas de AWS.

## Requisitos previos y limitaciones
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ La versión 2.9.11 o posterior de la Interfaz de la línea de comandos de AWS (AWS CLI) [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)
+ La versión 2.114.1 o posterior de AWS CDK [instalada](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install) y [arrancada](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)
+ La versión 20.8.0 o posterior de NodeJS [instalada](https://nodejs.org/en/download)

**Limitaciones**
+ La solución hereda las limitaciones de DataSync Amazon EFS, como las tasas de transferencia de datos, las limitaciones de tamaño y la disponibilidad regional. Para obtener más información, consulte Cuotas de [AWS y DataSync Cuotas](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html) de [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/limits.html).
+ Esta solución solo es compatible con Amazon EFS. DataSync es compatible con [otros servicios de AWS](https://docs.aws.amazon.com/datasync/latest/userguide/working-with-locations.html), como Amazon Simple Storage Service (Amazon S3) y FSx Amazon for Lustre. Sin embargo, esta solución requiere modificaciones para sincronizar los datos con estos otros servicios.

## Arquitectura
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-architecture"></a>

![\[Diagrama de arquitectura para replicar los datos en un sistema de archivos de EFS en una región diferente\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e28ba6c2-ab8b-4812-932e-f038106d5496/images/18b35ae9-a22e-43e7-b7a3-30e40321c44e.png)


Esta solución implementa las pilas siguientes de AWS CDK:
+ **Pila de Amazon VPC**: esta pila configura los recursos de la nube privada virtual (VPC), tal como las subredes, una puerta de enlace de Internet y una puerta de enlace NAT en las regiones de AWS principal y secundaria.
+ **Pila de Amazon EFS**: esta pila implementa los sistemas de archivos de Amazon EFS en las regiones principal y secundaria y los conecta a sus respectivas VPCs regiones.
+ **Amazon EC2 stack**: esta pila lanza EC2 instancias en las regiones principal y secundaria. Estas instancias están configuradas para montar el sistema de archivos de Amazon EFS, lo que les permite acceder al almacenamiento compartido.
+ **DataSync pila de ubicaciones**: esta pila utiliza una construcción personalizada llamada `DataSyncLocationConstruct` para crear recursos de DataSync ubicación en las regiones principal y secundaria. Estos recursos definen los puntos de conexión para la sincronización de datos.
+ **DataSync pila de tareas**: esta pila utiliza una construcción personalizada llamada `DataSyncTaskConstruct` para crear una DataSync tarea en la región principal. Esta tarea está configurada para sincronizar los datos entre las regiones principal y secundaria mediante las ubicaciones de DataSync origen y destino.

## Tools (Herramientas)
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-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 DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html) es un servicio de transferencia y descubrimiento de datos en línea que le ayuda a mover archivos o datos de objetos hacia, desde y entre los servicios de almacenamiento de AWS.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) proporciona capacidad informática escalable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) le ayuda a crear y configurar sistemas de archivos compartidos en la nube de AWS.
+ [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.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de [ DataSync proyectos multiregionales de GitHub Amazon EFS](https://github.com/aws-samples/aws-efs-crossregion-datasync/tree/main).

## Prácticas recomendadas
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-best-practices"></a>

Siga las prácticas recomendadas descritas en [Prácticas recomendadas para usar la CDK de AWS TypeScript para crear proyectos de IaC](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/introduction.html).

## Epics
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio del proyecto. | Introduzca el siguiente comando para clonar el repositorio del [ DataSync proyecto multiregional de Amazon EFS](https://github.com/aws-samples/aws-efs-crossregion-datasync/tree/main).<pre>git clone https://github.com/aws-samples/aws-efs-crossregion-datasync.git</pre> | AWS DevOps | 
| Instale las dependencias de npm. | Escriba el siguiente comando.<pre>npm ci</pre> | AWS DevOps | 
| Elija las regiones principal y secundaria. | En el repositorio clonado, vaya al directorio `src/infa`. En el archivo `Launcher.ts`, actualice los valores de `PRIMARY_AWS_REGION` y `SECONDARY_AWS_REGION`. Utilice los [códigos de región](https://docs.aws.amazon.com/general/latest/gr/datasync.html#datasync-region) correspondientes.<pre>const primaryRegion = { account: account, region: '<PRIMARY_AWS_REGION>' };<br />const secondaryRegion = { account: account, region: '<SECONDARY_AWS_REGION>' };</pre> | AWS DevOps | 
| Arranque el entorno de . | Introduzca el comando siguiente para iniciar la cuenta de AWS y región de AWS que quiere utilizar.<pre>cdk bootstrap <aws_account>/<aws_region></pre>Para obtener más información, consulte [Proceso de arranque](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) en la documentación de AWS CDK. | AWS DevOps | 
| Enumere las pilas de CDK de AWS. | Introduzca el comando siguiente para ver una lista de las pilas de AWS CDK de la aplicación.<pre>cdk ls</pre> | AWS DevOps | 
| Sincronice las pilas de AWS CDK. | Introduzca el siguiente comando para generar una CloudFormation plantilla de AWS para cada pila definida en la aplicación AWS CDK.<pre>cdk synth</pre> | AWS DevOps | 
| Implemente la aplicación de AWS CDK. | Introduzca el comando siguiente para implementar todas las pilas en su cuenta de AWS, sin necesidad de aprobación manual para hacer cambios.<pre>cdk deploy --all --require-approval never</pre> | AWS DevOps | 

### Validación de la implementación
<a name="validate-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie sesión en la EC2 instancia de la región principal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync.html) | AWS DevOps | 
| Cree un archivo temporal. | Introduzca el comando siguiente para crear un archivo temporal en la ruta de montaje de Amazon EFS.<pre>sudo dd if=/dev/zero \<br />of=tmptst.dat \<br />bs=1G \<br />seek=5 \<br />count=0<br /><br />ls -lrt tmptst.dat</pre> | AWS DevOps | 
| Inicie la DataSync tarea. | Introduzca el siguiente comando para replicar el archivo temporal de la región principal a la región secundaria, donde `<ARN-task>` se encuentra el nombre del recurso de Amazon (ARN) de la tarea. DataSync <pre>aws datasync start-task-execution \<br />    --task-arn <ARN-task></pre>El comando devuelve el ARN de la ejecución de la tarea con el formato siguiente:`arn:aws:datasync:<region>:<account-ID>:task/task-execution/<exec-ID>` | AWS DevOps | 
| Compruebe el estado de la transferencia de datos. | Introduzca el siguiente comando para describir la tarea de DataSync ejecución, donde `<ARN-task-execution>` está el ARN de la ejecución de la tarea.<pre>aws datasync describe-task-execution \<br />    --task-execution-arn <ARN-task-execution></pre>La DataSync tarea está completa cuando `PrepareStatus``TransferStatus`, y `VerifyStatus` todas tienen el valor`SUCCESS`. | AWS DevOps | 
| Inicie sesión en la EC2 instancia de la región secundaria. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync.html) | AWS DevOps | 
| Valide la replicación. | Introduzca el comando siguiente para verificar que el archivo temporal existe en el sistema de archivos de Amazon EFS.<pre>ls -lrt<br />tmptst.dat</pre> | AWS DevOps | 

## Recursos relacionados
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-resources"></a>

**Documentación de AWS**
+ [AWS CDK API Reference](https://docs.aws.amazon.com/cdk/api/v2/python/modules.html)
+ [Configuración de las DataSync transferencias de AWS con Amazon EFS](https://docs.aws.amazon.com/datasync/latest/userguide/create-efs-location.html)
+ [Solución de problemas con las DataSync transferencias de AWS](https://docs.aws.amazon.com/datasync/latest/userguide/troubleshooting-datasync-locations-tasks.html)

**Otros recursos de AWS**
+ [AWS DataSync FAQs](https://aws.amazon.com/datasync/faqs/)

# Pruebe AWS la infraestructura mediante LocalStack Terraform Tests
<a name="test-aws-infra-localstack-terraform"></a>

*Ivan Girardi y Ioannis Kalyvas, Amazon Web Services*

## Resumen
<a name="test-aws-infra-localstack-terraform-summary"></a>

Este patrón le ayuda a probar localmente la infraestructura como código (IaC) AWS en Terraform sin necesidad de aprovisionar la infraestructura en su entorno. AWS Integra el marco de [pruebas de Terraform](https://developer.hashicorp.com/terraform/language/tests) con. [LocalStack](https://github.com/localstack/localstack) El contenedor LocalStack Docker proporciona un entorno de desarrollo local que emula varios. Servicios de AWS Esto le permite probar e iterar las implementaciones de infraestructura sin generar costos en la Nube de AWS.

Esta solución proporciona los siguientes beneficios:
+ **Optimización de costos**: la ejecución de pruebas LocalStack elimina la necesidad de usarlo. Servicios de AWS Esto evita que incurra en los costos asociados con la creación, el funcionamiento y la modificación de esos AWS recursos.
+ **Velocidad y eficiencia**: las pruebas locales también suelen ser más rápidas que implementar los AWS recursos. Este rápido ciclo de retroalimentación acelera el desarrollo y la depuración. Como LocalStack se ejecuta de forma local, puede desarrollar y probar sus archivos de configuración de Terraform sin conexión a Internet. Puede depurar los archivos de configuración de Terraform de forma local y recibir comentarios de inmediato, lo que simplifica el proceso de desarrollo.
+ **Consistencia y reproducibilidad**: LocalStack proporciona un entorno coherente para las pruebas. Esta coherencia ayuda a garantizar que las pruebas arrojen los mismos resultados, independientemente de los AWS cambios externos o los problemas de la red.
+ **Aislamiento**: las pruebas permiten LocalStack evitar que se afecten accidentalmente a AWS los recursos activos o a los entornos de producción. Este aislamiento permite experimentar y probar varias configuraciones de manera segura.
+ **Automatización**: la integración con una canalización de integración y entrega continuas (CI/CD) le permite probar automáticamente los [archivos de configuración](https://developer.hashicorp.com/terraform/language/files) de Terraform. La canalización prueba minuciosamente la IaC antes de la implementación.
+ **Flexibilidad**: puede simular diferentes Regiones de AWS configuraciones y configuraciones de servicio para que se adapten mejor a sus entornos de producción. Cuentas de AWS

## Requisitos previos y limitaciones
<a name="test-aws-infra-localstack-terraform-prereqs"></a>

**Requisitos previos **
+ [Instalar Docker](https://docs.docker.com/get-started/get-docker/)
+ [Habilite el acceso](https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option) al socket de Docker predeterminado (`/var/run/docker.sock`). Para obtener más información, consulte la [Documentación de LocalStack ](https://docs.localstack.cloud/user-guide/aws/lambda/#migrating-to-lambda-v2).
+ [Instalación](https://docs.docker.com/compose/install/) de Docker Compose
+ [Instalación](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) de la versión 1.6.0 o posterior de Terraform
+ [Instalación](https://developer.hashicorp.com/terraform/cli) de la CLI de Terraform
+ [Configure](https://hashicorp.github.io/terraform-provider-aws/) el proveedor de Terraform AWS 
+ (Opcional) [Instale](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) el AWS Command Line Interface (AWS CLI). Para ver un ejemplo de cómo usar el AWS CLI with LocalStack, consulta el repositorio de GitHub [pruebas de AWS infraestructura LocalStack y Terraform Tests](https://github.com/aws-samples/localstack-terraform-test).

**Limitaciones**
+ Este patrón proporciona ejemplos explícitos para probar los recursos de Amazon Simple Storage Service (Amazon S3) AWS Lambda y AWS Step Functions Amazon DynamoDB. Sin embargo, puede ampliar esta solución para incluir recursos adicionales AWS .
+ Este patrón proporciona instrucciones para ejecutar las pruebas de Terraform de forma local, pero ¿se pueden integrar las pruebas en cualquier CI/CD proceso?
+ Este patrón proporciona instrucciones para usar la imagen de la LocalStack comunidad. Si utilizas la imagen LocalStack Pro, consulta la [documentación de LocalStack Pro](https://hub.docker.com/r/localstack/localstack-pro).
+ LocalStack proporciona servicios de emulación para diferentes. AWS APIs Para una lista completa, consulte [AWS Service Feature Coverage](https://docs.localstack.cloud/user-guide/aws/feature-coverage/). Es posible que algunas funciones avanzadas requieran una suscripción a LocalStack Pro.

## Arquitectura
<a name="test-aws-infra-localstack-terraform-architecture"></a>

En el siguiente diagrama se muestra la arquitectura para esta solución. Los componentes principales son un repositorio de código fuente, una CI/CD canalización y un contenedor de LocalStack Docker. El contenedor LocalStack Docker aloja lo siguiente de forma local: Servicios de AWS 
+ Un bucket de Amazon S3 para almacenar archivos
+ Amazon CloudWatch para la supervisión y el registro
+ Una AWS Lambda función para ejecutar código sin servidor
+ Una máquina de AWS Step Functions estados para organizar flujos de trabajo de varios pasos
+ Una tabla de Amazon DynamoDB para almacenar datos de NoSQL

![\[Una CI/CD canalización crea y prueba el contenedor de LocalStack Docker y los recursos de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/34bfbdbf-14e7-42a0-9022-c85a9c30cdcd/images/dc61fac9-b92c-4841-9132-ff8bb865eed9.png)


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

1. Agregue y confirme un archivo de configuración de Terraform en el repositorio de código fuente.

1. La CI/CD canalización detecta los cambios e inicia un proceso de compilación para el análisis estático del código de Terraform. La canalización crea y ejecuta el contenedor de LocalStack Docker. A continuación, la canalización inicia el proceso de prueba.

1. La canalización carga un objeto en un bucket de Amazon S3 que está alojado en el contenedor de LocalStack Docker.

1. Al cargar el objeto, se invoca una función. AWS Lambda 

1. La función Lambda almacena la notificación de eventos de Amazon S3 en un CloudWatch registro.

1. La función Lambda inicia una máquina de AWS Step Functions estados.

1. La máquina de estados escribe el nombre del objeto de Amazon S3 en una tabla de DynamoDB.

1. El proceso de prueba de la CI/CD canalización comprueba que el nombre del objeto cargado coincide con la entrada de la tabla de DynamoDB. También verifica que el bucket de S3 se haya implementado con el nombre especificado y que la AWS Lambda función se haya implementado correctamente.

## Tools (Herramientas)
<a name="test-aws-infra-localstack-terraform-tools"></a>

**Servicios 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 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 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.
+ [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**
+ [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.
+ [Docker Compose](https://docs.docker.com/compose/) es una herramienta para definir y ejecutar aplicaciones de varios contenedores.
+ [LocalStack](https://localstack.cloud)es un emulador de servicios en la nube que se ejecuta en un único contenedor. Al usarlo LocalStack, puede ejecutar cargas de trabajo en la máquina local que utilice Servicios de AWS, sin necesidad de conectarse al Nube de AWS.
+ [Terraform](https://www.terraform.io/) es una herramienta de iAC HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.
+ [Terraform Tests](https://developer.hashicorp.com/terraform/language/tests) le permite a validar las actualizaciones de configuración de los módulos de Terraform mediante pruebas análogas a las pruebas de integración o unitarias.

**Repositorio de código**

El código de este patrón está disponible en la [AWS infraestructura de GitHub pruebas mediante el repositorio de Terraform LocalStack Tests](https://github.com/aws-samples/localstack-terraform-test).

## Prácticas recomendadas
<a name="test-aws-infra-localstack-terraform-best-practices"></a>
+ Esta solución prueba la AWS infraestructura que se especifica en los archivos de configuración de Terraform y no implementa esos recursos en ellos. Nube de AWS Si quiere implementar los recursos, siga el [principio del mínimo privilegio](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentación de IAM) y, de manera correcta, [configure el backend de Terraform](https://developer.hashicorp.com/terraform/language/backend) (documentación de Terraform).
+ Al LocalStack integrarlo en una CI/CD canalización, le recomendamos que no ejecute el contenedor LocalStack Docker en modo privilegiado. Para obtener más información, consulte [Privilegios de tiempo de ejecución y capacidades de Linux](https://docs.docker.com/engine/containers/run/#runtime-privilege-and-linux-capabilities) (documentación de Docker) y [Seguridad para ejecutores autogestionados (GitLab documentación](https://docs.gitlab.com/runner/security/)).

## Epics
<a name="test-aws-infra-localstack-terraform-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | En un intérprete de comandos de bash, ingrese el siguiente comando. Esto clona la [AWS infraestructura de pruebas mediante LocalStack un repositorio de Terraform Tests](https://github.com/aws-samples/localstack-terraform-test) de: GitHub<pre>git clone https://github.com/aws-samples/localstack-terraform-test.git</pre> | DevOps ingeniero | 
| Ejecute el LocalStack contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | DevOps ingeniero | 
| Inicialice Terraform. | Introduzca el comando siguiente para inicializar Terraform:<pre>terraform init</pre> | DevOps ingeniero | 
| Ejecute Terraform Tests. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | DevOps ingeniero | 
| Eliminación de recursos. | Introduzca el siguiente comando para destruir el LocalStack contenedor:<pre>docker-compose down</pre> | DevOps ingeniero | 

## Resolución de problemas
<a name="test-aws-infra-localstack-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Resultado de `Error: reading DynamoDB Table Item (Files\|README.md): empty` al ejecutar el comando `terraform test`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | 

## Recursos relacionados
<a name="test-aws-infra-localstack-terraform-resources"></a>
+ [Cómo empezar con Terraform: orientación para AWS CDKAWS CloudFormation expertos](https://docs.aws.amazon.com/prescriptive-guidance/latest/getting-started-terraform/introduction.html) (orientación AWS prescriptiva)
+ [Mejores prácticas para usar el AWS proveedor de Terraform (guía prescriptiva](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/introduction.html))AWS 
+ [Terraform CI/CD y sus pruebas AWS con el nuevo Terraform Test Framework](https://aws.amazon.com/blogs/devops/terraform-ci-cd-and-testing-on-aws-with-the-new-terraform-test-framework/) (entrada del blog)AWS 
+ [Acelerar la entrega de software con LocalStack Cloud Emulator desde AWS Marketplace](https://aws.amazon.com/blogs/awsmarketplace/accelerating-software-delivery-localstack-cloud-emulator-aws-marketplace/) (AWS entrada del blog)

## Información adicional
<a name="test-aws-infra-localstack-terraform-additional"></a>

**Integración con GitHub acciones**

Puedes integrar LocalStack y terraformar las pruebas en una CI/CD canalización mediante GitHub Actions. Para obtener más información, consulta la [documentación de GitHub Actions](https://docs.github.com/en/actions). El siguiente es un ejemplo de archivo de configuración de GitHub Actions:

```
name: LocalStack Terraform Test

on:
  push:
    branches:
      - '**'

  workflow_dispatch: {}

jobs:
  localstack-terraform-test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Build and Start LocalStack Container
      run: |
        docker compose up -d

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v3
      with:
        terraform_version: latest

    - name: Run Terraform Init and Validation
      run: |
        terraform init
        terraform validate
        terraform fmt --recursive --check
        terraform plan
        terraform show

    - name: Run Terraform Test
      run: |
        terraform test

    - name: Stop and Delete LocalStack Container
      if: always()
      run: docker compose down
```

# Actualice los clústeres de SAP Pacemaker de a ENSA1 ENSA2
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2"></a>

*Gergely Cserdi y Balazs Sandor Skublics, Amazon Web Services*

## Resumen
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-summary"></a>

Este patrón explica los pasos y las consideraciones para actualizar un clúster de SAP Pacemaker basado en Standalone Enqueue Server () a. ENSA1 ENSA2 La información de este patrón se aplica a los sistemas operativos SUSE Linux Enterprise Server (SLES) y Red Hat Enterprise Linux (RHEL).

Los clústeres Pacemaker de SAP NetWeaver 7.52 o S/4HANA 1709 y versiones anteriores se ejecutan en una arquitectura y están configurados específicamente para ello. ENSA1 ENSA1 Si ejecuta sus cargas de trabajo de SAP en Amazon Web Services (AWS) y está interesado en pasarse a ellos ENSA2, es posible que la documentación de SAP, SUSE y RHEL no proporcione información completa. Este patrón describe los pasos técnicos necesarios para reconfigurar los parámetros de SAP y los clústeres de Pacemaker desde los que realizar la actualización. ENSA1 ENSA2 Proporciona ejemplos de sistemas SUSE, pero el concepto es el mismo para los clústeres RHEL.

**nota**  
ENSA1 y ENSA2 son conceptos que se refieren únicamente a las aplicaciones de SAP, por lo que la información de este patrón no se aplica a SAP HANA ni a otros tipos de clústeres.

**nota**  
Técnicamente, se ENSA2 puede utilizar con o sin Enqueue Replicator 2. Sin embargo, la alta disponibilidad (HA) y la automatización de la conmutación por error (mediante una solución de clúster) requieren Enqueue Replicator 2. Este patrón utiliza el término *ENSA2 clústeres para referirse a los clústeres* con Enqueue Server 2 y Enqueue Replicator 2 independientes.

## Requisitos previos y limitaciones
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-prereqs"></a>

**Requisitos previos**
+ Clúster funcional que utiliza Pacemaker y Corosync ENSA1 en SLES o RHEL.
+ Al menos dos instancias de Amazon Elastic Compute Cloud (Amazon EC2) en las que se estén ejecutando las instancias (ABAP) de SAP Central Services (ASCS/SCS) y Enqueue Replication Server (ERS).
+ Conocimientos sobre la gestión de clústeres y aplicaciones de SAP.
+ Acceso al entorno Linux como usuario raíz.

**Limitaciones**
+ ENSA1los clústeres basados solo admiten una arquitectura de dos nodos.
+ ENSA2los clústeres basados en SAP no se pueden implementar en NetWeaver versiones de SAP anteriores a la 7.52.
+ EC2 las instancias de los clústeres deben estar en distintas zonas de disponibilidad de AWS.

**Versiones de producto**
+ SAP NetWeaver versión 7.52 o posterior
+ A partir de S/4HANA 2020, solo ENSA2 se admiten clústeres
+ Kernel 7.53 o posterior, que admite Enqueue Replicator ENSA2 2
+ SLES para aplicaciones SAP, versión 12 o posterior
+ RHEL para SAP con alta disponibilidad (HA) versión 7.9 o posterior

## Arquitectura
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-architecture"></a>

**Pila de tecnología de origen**
+ SAP NetWeaver 7.52 con SAP Kernel 7.53 o posterior
+ Sistema operativo SLES o RHEL

**Pila de tecnología de destino**
+ SAP NetWeaver 7.52 con SAP Kernel 7.53 o posterior, incluido S/4HANA 2020 con plataforma ABAP
+ Sistema operativo SLES o RHEL

**Arquitectura de destino**

El siguiente diagrama muestra una configuración de alta disponibilidad de ASCS/SCS instancias ERS basadas en un clúster. ENSA2 

![\[Arquitectura de alta ASCS/SCS disponibilidad para instancias ERS en un ENSA2 clúster\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c32560de-901f-4796-a6b3-c08c109b22c8/images/19501713-0ddf-4242-9ea3-90478200a19e.png)


**Comparación de ENSA2 clústeres ENSA1 y clústeres**

Se presenta SAP ENSA2 como el sucesor de ENSA1. Un clúster ENSA1 basado admite una arquitectura de dos nodos en la que la ASCS/SCS instancia se conmuta por error al ERS cuando se produce un error. Esta limitación se debe a la forma en que la ASCS/SCS instancia recupera la información de la tabla de bloqueo de la memoria compartida del nodo ERS tras la conmutación por error. ENSA2Los clústeres basados en Enqueue Replicator 2 eliminan esta limitación, ya que la ASCS/SCS instancia puede recopilar la información de bloqueo de la instancia ERS a través de la red. ENSA2Los clústeres basados pueden tener más de dos nodos, ya que la ASCS/SCS instancia ya no es necesaria para realizar la conmutación por error al nodo ERS. (Sin embargo, en un entorno de ENSA2 clúster de dos nodos, la ASCS/SCS instancia seguirá realizando la conmutación por error al nodo ERS porque no hay otros nodos en el clúster a los que realizar la conmutación por error). ENSA2 se admite a partir del kernel 7.50 de SAP con algunas limitaciones. Para una configuración de alta disponibilidad compatible con Enqueue Replicator 2, el requisito mínimo es de NetWeaver 7.52 (consulte la nota 2630416 de [SAP](https://launchpad.support.sap.com/#/notes/2630416) OSS). El S/4HANA 1809 viene con la ENSA2 arquitectura recomendada de forma predeterminada, mientras que S/4HANA solo es compatible a partir de la versión 2020. ENSA2 

**Automatizar y escalar**

El clúster de alta disponibilidad de la arquitectura de destino hace que el ASCS realice automáticamente la conmutación por error a otros nodos.

**Escenarios para pasar a clústeres basados en clústeres ENSA2**

Existen dos escenarios principales para la actualización a clústeres ENSA2 basados: 
+ Escenario 1: elige realizar la actualización a SAP ENSA2 sin necesidad de realizar una actualización de SAP o una conversión a S/4HANA, suponiendo que su versión de SAP y su versión de kernel sean compatibles. ENSA2
+ Escenario 2: ENSA2 como parte de una actualización o conversión (por ejemplo, a S/4HANA 1809 o posterior), utiliza SUM.

La sección [Epics](#upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-epics) describe los pasos para estos dos escenarios. El primer escenario requiere que configure manualmente los parámetros relacionados con SAP antes de cambiar la configuración del clúster. ENSA2 En el segundo escenario, SUM implementa los binarios y los parámetros relacionados con SAP, y la única tarea restante es actualizar la configuración del clúster para HA. Aun así, le recomendamos que valide los parámetros de SAP después de usar SUM. En la mayoría de los casos, la conversión a S/4HANA es el motivo principal de la actualización de un clúster.

## Tools (Herramientas)
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-tools"></a>
+ Para los administradores de paquetes de sistemas operativos, recomendamos las herramientas Zypper (para SLES) o YUM (para RHEL).
+ Para la administración de clústeres, recomendamos los servidores **crm** (para SLES) o **pcs** (para RHEL).
+ Herramientas de administración de instancias de SAP, como SAPControl.
+ (Opcional) Herramienta SUM para la actualización de conversión a S/4HANA.

## Prácticas recomendadas
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-best-practices"></a>
+ Para conocer las prácticas recomendadas sobre el uso de cargas de trabajo de SAP en AWS, consulte [SAP Lens](https://docs.aws.amazon.com/wellarchitected/latest/sap-lens/sap-lens.html) para el Marco de AWS Well-Architected
+ Tenga en cuenta la cantidad de nodos del clúster (pares o impares) en su arquitectura de ENSA2 varios nodos.
+ Configure el ENSA2 clúster para el SLES 15 de acuerdo con el estándar de certificación SAP S/4-HA-CLU 1.0.
+ Guarde o haga una copia de seguridad del estado actual del clúster y de la aplicación antes de realizar la actualización a ellos. ENSA2

## Epics
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-epics"></a>

### Configure los parámetros de SAP manualmente para ENSA2 (solo en el escenario 1)
<a name="configure-sap-parameters-manually-for-ensa2-scenario-1-only"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure los parámetros en el perfil predeterminado. | Si desea actualizar a la misma versión de SAP ENSA2 mientras utiliza la misma versión o si la versión de destino es la predeterminada ENSA1, defina los parámetros del perfil predeterminado (archivo DEFAULT.PFL) en los siguientes valores.<pre>enq/enable=TRUE<br />enq/serverhost=sapascsvirt<br />enq/serverinst=10        (instance number of ASCS/SCS instance)<br />enque/process_location=REMOTESA<br />enq/replicatorhost=sapersvirt<br />enq/replicatorinst=11    (instance number of ERS instance)<br />  </pre>donde `sapascsvirt` es el nombre de host virtual de las instancias de ASCS y es `sapersvirt` el nombre de host virtual de las instancias de ERS. Puede cambiarlos para adaptarlos a su entorno de destino.Para utilizar esta opción de actualización, la versión de SAP y la versión del núcleo deben ser compatibles ENSA2 con Enqueue Replicator 2. | SAP | 
| Configure el perfil de la instancia ASCS/SCS . | Si desea actualizar a la misma versión de SAP sin ENSA2 dejar de utilizar o si la versión de destino es la predeterminada ENSA1, defina los siguientes parámetros en el perfil de la ASCS/SCS instancia. La sección del perfil en la que ENSA1 se define tiene un aspecto similar al siguiente.<pre>#--------------------------------------------------------------<br />Start SAP enqueue server<br />#-------------------------------------------------------------- <br />_EN = en.sap$(SAPSYSTEMNAME)$(INSTANCE_NAME) <br />Execute_04 = local rm -f $(_EN) <br />Execute_05 = local ln -s -f $(DIR_EXECUTABLE)/enserver$(FT_EXE) $(_EN) <br />Start_Program_01 = local $(_EN) pf=$(_PF)<br />  </pre>Para reconfigurar esta sección para ENSA2:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2.html)Esta sección de perfil tendrá un aspecto similar al siguiente después de los cambios.<pre>#--------------------------------------------------------------<br />Start SAP enqueue server<br />#-------------------------------------------------------------- <br />_ENQ = enq.sap$(SAPSYSTEMNAME)$(INSTANCE_NAME) <br />Execute_04 = local rm -f $(_ENQ) <br />Execute_05 = local ln -s -f $(DIR_EXECUTABLE)/enq_server$(FT_EXE) $(_ENQ) <br />Start_Program_01 = local $(_ENQ) pf=$(_PF) <br />... <br />enq/server/replication/enable = TRUE <br />Autostart = 0</pre>`_ENQ` no debe tener habilitada la opción de reinicio. Si `RestartProgram_01` está configurada para `_ENQ`, cámbiela a `StartProgram_01`. Esto evita que SAP reinicie el servicio o interfiera con los recursos gestionados por el clúster. | SAP | 
| Configurar el perfil ERS. | Si desea actualizar a la misma versión de SAP ENSA2 mientras utiliza la misma versión de SAP o si la versión de destino es la predeterminada ENSA1, defina los siguientes parámetros en el perfil de la instancia de ERS.Busque la sección en la que está definido el replicador de puesta en cola. Será similar al siguiente.<pre>#------------------------------------------------------<br />Start enqueue replication server<br />#------------------------------------------------------ <br />_ER = er.sap$(SAPSYSTEMNAME)$(INSTANCE_NAME) <br />Execute_03 = local rm -f $(_ER) <br />Execute_04 = local ln -s -f $(DIR_EXECUTABLE)/enrepserver$(FT_EXE) $(_ER) <br />Start_Program_00 = local $(_ER) pf=$(_PF) NR=$(SCSID)<br />  </pre>Para volver a configurar esta sección para el replicador de puesta en cola 2:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2.html)Esta sección de perfil tendrá un aspecto similar al siguiente después de los cambios.<pre>#------------------------------------------------------<br />Start enqueue replication server<br />#------------------------------------------------------ <br />_ENQR = enqr.sap$(SAPSYSTEMNAME)$(INSTANCE_NAME) <br />Execute_01 = local rm -f $(_ENQR) <br />Execute_02 = local ln -s -f $(DIR_EXECUTABLE)/enq_replicator$(FT_EXE) $(_ENQR) <br />Start_Program_00 = local $(_ENQR) pf=$(_PF) NR=$(SCSID) <br />… <br />Autostart = 0</pre>`_ENQR` no debe tener habilitada la opción de reinicio. Si `RestartProgram_01` está configurada para `_ENQR`, cámbiela a `StartProgram_01`. Esto evita que SAP reinicie el servicio o interfiera con los servicios gestionados por clústeres. | SAP | 
| Reinicie SAP Start Services. | Tras cambiar los perfiles descritos anteriormente en esta epopeya, reinicie SAP Start Services tanto para ERS como para ASCS/SCS él.`sapcontrol -nr 10 -function RestartService SCT``sapcontrol -nr 11 -function RestartService SCT`donde `SCT` se refiere al ID del sistema SAP y suponiendo que 10 y 11 son los números de instancia de ASCS/SCS las instancias ERS, respectivamente. | SAP | 

### Reconfigure el clúster para ENSA2 (obligatorio en ambos escenarios)
<a name="reconfigure-the-cluster-for-ensa2-required-for-both-scenarios"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique los números de versión en los agentes de recursos de SAP. | Cuando utiliza SUM para actualizar SAP a S/4HANA 1809 o posterior, SUM gestiona los cambios de parámetros en los perfiles de SAP. Solo el clúster requiere un ajuste manual. Sin embargo, le recomendamos que compruebe la configuración de los parámetros antes de realizar cualquier cambio en el clúster.En los ejemplos de esta epic, se supone que está utilizando el sistema operativo SUSE. Si está utilizando RHEL, necesitará utilizar herramientas como YUM y **pcs** shell en lugar de Zypper y **crm**.Compruebe ambos nodos de la arquitectura para confirmar que el paquete de `resource-agents`coincide con la versión mínima recomendada por SAP. Para el SLES, consulte la nota 2641019 de SAP OSS. Para RHEL, consulte la nota 2641322 de SAP OSS. (SAP Notes requiere una [cuenta de usuario de SAP ONE Support Launchpad](https://support.sap.com/en/my-support/knowledge-base.html)).<pre>sapers:sctadm 23> zypper search -s -i resource-agents<br />Loading repository data...<br />Reading installed packages...<br />S | Name | Type | Version | Arch | Repository<br />--+-----------------+---------+------------------------------------+--------+-----------------------------<br />i | resource-agents | package | 4.8.0+git30.d0077df0-150300.8.28.1 | x86_64 | SLE-Product-HA15-SP3-Updates</pre>Actualice la versión `resource-agents` si es necesario. | Administrador de sistemas de AWS | 
| Realice una copia de seguridad de la configuración del clúster. | Realice una copia de seguridad de la configuración del clúster de CRM de la siguiente manera.`crm configure show > /tmp/cluster_config_backup.txt` | Administrador de sistemas de AWS | 
| Establezca el modo de mantenimiento. | Configure el clúster en modo de mantenimiento.`crm configure property maintenance-mode="true"` | Administrador de sistemas de AWS | 
| Compruebe la configuración del clúster. | Compruebe la configuración actual del clúster.`crm configure show`He aquí un extracto del resultado completo:<pre>node 1: sapascs<br />node 2: sapers<br />...<br />primitive rsc_sap_SCT_ASCS10 SAPInstance \<br />operations $id=rsc_sap_SCT_ASCS10-operations \<br />op monitor interval=120 timeout=60 on-fail=restart \<br />params InstanceName=SCT_ASCS10_sapascsvirt START_PROFILE="/sapmnt/SCT/profile/SCT_ASCS10_sapascsvirt" \ <br />   AUTOMATIC_RECOVER=false \<br />meta resource-stickiness=5000 failure-timeout=60 migration-threshold=1 priority=10<br />primitive rsc_sap_SCT_ERS11 SAPInstance \<br />operations $id=rsc_sap_SCT_ERS11-operations \<br />op monitor interval=120 timeout=60 on-fail=restart \<br />params InstanceName=SCT_ERS11_sapersvirt START_PROFILE="/sapmnt/SCT/profile/SCT_ERS11_sapersvirt" \<br />   AUTOMATIC_RECOVER=false IS_ERS=true \<br />meta priority=1000<br />...<br />colocation col_sap_SCT_no_both -5000: grp_SCT_ERS11 grp_SCT_ASCS10<br />location loc_sap_SCT_failover_to_ers rsc_sap_SCT_ASCS10 \<br />rule 2000: runs_ers_SCT eq 1<br />order ord_sap_SCT_first_start_ascs Optional: rsc_sap_SCT_ASCS10:start rsc_sap_SCT_ERS11:stop symmetrical=false<br />...</pre>donde `sapascsvirt` se refiere al nombre de host virtual de las instancias de ASCS, `sapersvirt` se refiere al nombre de host virtual de las instancias de ERS y `SCT` se refiere al ID del sistema SAP. | Administrador de sistemas de AWS | 
| Elimine la restricción de colocación de la conmutación por error. | En el ejemplo anterior, la restricción de ubicación `loc_sap_SCT_failover_to_ers` especifica que la ENSA1 función de ASCS siempre debe seguir la instancia del ERS en caso de conmutación por error. Con ENSA2, ASCS debería poder realizar la conmutación por error libremente a todos los nodos participantes, de modo que pueda eliminar esta restricción.`crm configure delete loc_sap_SCT_failover_to_ers` | Administrador de sistemas de AWS | 
| Ajuste las primitivas. | También necesitará realizar cambios menores en las primitivas de ASCS y ERS. SAPInstance A continuación, se muestra un ejemplo de una SAPInstance primitiva de ASCS que está configurada para. ENSA1<pre>primitive rsc_sap_SCT_ASCS10 SAPInstance \<br />operations $id=rsc_sap_SCT_ASCS10-operations \<br />op monitor interval=120 timeout=60 on-fail=restart \<br />params InstanceName=SCT_ASCS10_sapascsvirt START_PROFILE="/sapmnt/SCT/profile/SCT_ASCS10_sapascsvirt" \<br />   AUTOMATIC_RECOVER=false \<br />meta resource-stickiness=5000 failure-timeout=60 migration-threshold=1 priority=10</pre>Para actualizar a ENSA2, cambie esta configuración por la siguiente.<pre>primitive rsc_sap_SCT_ASCS10 SAPInstance \<br />operations $id=rsc_sap_SCT_ASCS10-operations \<br />op monitor interval=120 timeout=60 on-fail=restart \<br />params InstanceName=SCT_ASCS10_sapascsvirt START_PROFILE="/sapmnt/SCT/profile/SCT_ASCS10_sapascsvirt" \<br />   AUTOMATIC_RECOVER=false \<br />meta resource-stickiness=3000 </pre>Este es un ejemplo de una SAPInstance primitiva ERS configurada para ENSA1.<pre>primitive rsc_sap_SCT_ERS11 SAPInstance \<br />operations $id=rsc_sap_SCT_ERS11-operations \<br />op monitor interval=120 timeout=60 on-fail=restart \<br />params InstanceName=SCT_ERS11_sapersvirt START_PROFILE="/sapmnt/SCT/profile/SCT_ERS11_sapersvirt" \<br />   AUTOMATIC_RECOVER=false IS_ERS=true \<br />meta priority=1000</pre>Para realizar la actualización a ENSA2, cambie esta configuración por la siguiente.<pre>primitive rsc_sap_SCT_ERS11 SAPInstance \<br />operations $id=rsc_sap_SCT_ERS11-operations \<br />op monitor interval=120 timeout=60 on-fail=restart \<br />params InstanceName=SCT_ERS11_sapersvirt START_PROFILE="/sapmnt/SCT/profile/SCT_ERS11_sapersvirt" \<br />   AUTOMATIC_RECOVER=false IS_ERS=true</pre>Puede cambiar las primitivas de varias formas. Por ejemplo, puede revisarlas en un editor como vi, como se muestra en el siguiente ejemplo.`crm configure edit rsc_sap_SCT_ERS11` | Administrador de sistemas de AWS | 
| Deshabilitar el modo de mantenimiento. | Deshabilitar el modo de mantenimiento en el clúster.`crm configure property maintenance-mode="false"`Cuando el clúster está fuera del modo de mantenimiento, intenta poner en línea las instancias de ASCS y ERS con la nueva ENSA2 configuración. | Administrador de sistemas de AWS | 

### (Opcional) Añada nodos de clúster
<a name="optional-add-cluster-nodes"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Consulte las prácticas recomendadas. | Antes de añadir más nodos, asegúrese de comprender las prácticas recomendadas, como por ejemplo si debe utilizar un número par o impar de nodos. | Administrador de sistemas de AWS | 
| Añada nodos. | Añadir más nodos implica una serie de tareas, como actualizar el sistema operativo, instalar paquetes de software que coincidan con los nodos existentes y hacer que los montajes estén disponibles. Puede utilizar la opción **Preparación de un host adicional** en el Administrador de aprovisionamiento de software de SAP (SWPM) para crear una línea base del host específica para SAP. Para obtener más información, consulte las guías de SAP que se muestran en la siguiente sección. | Administrador de sistemas de AWS | 

## Recursos relacionados
<a name="upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2-resources"></a>

**Referencias de SAP y SUSE**

Para acceder a SAP Notes, debe tener una cuenta de usuario de SAP ONE Support Launchpad. Para obtener más información, consulte el [sitio web de soporte de SAP](https://support.sap.com/en/my-support/knowledge-base.html).
+ [SAP Note 2501860 ‒ Documentación del servidor de NetWeaver aplicaciones SAP para ABAP 7.52](https://launchpad.support.sap.com/#/notes/2501860)
+ [SAP Note 2641019 ‒ Instalación ENSA2 y actualización desde o en un entorno de alta disponibilidad de SUSE ENSA1 ENSA2 ](https://launchpad.support.sap.com/#/notes/2641019)
+ [SAP Note 2641322 ‒ Instalación ENSA2 y actualización desde y ENSA2 cuando se utilizan las soluciones HA de Red Hat ENSA1 para SAP](https://launchpad.support.sap.com/#/notes/2641322)
+ [Nota de SAP 2711036: Uso del servidor Enqueue 2 independiente en un entorno de alta disponibilidad](https://launchpad.support.sap.com/#/notes/2711036)
+ Servidor [Enqueue 2 independiente](https://help.sap.com/docs/ABAP_PLATFORM/cff8531bc1d9416d91bb6781e628d4e0/902412f09e134f5bb875adb6db585c92.html) (documentación de SAP)
+ [SAP S/4 HANA: Clúster de alta disponibilidad de Enqueue Replication 2:](https://documentation.suse.com/sbp/all/html/SAP_S4HA10_SetupGuide-SLE12/index.html) guía de configuración (documentación de SUSE)

**Referencias de AWS**
+ [SAP HANA en AWS: guía de configuración de alta disponibilidad para SLES y RHEL](https://docs.aws.amazon.com/sap/latest/sap-hana/sap-hana-on-aws-ha-configuration.html)
+ [SAP Lens: Marco de AWS Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/sap-lens/sap-lens.html)

# Utilice zonas de disponibilidad coherentes en VPCs diferentes cuentas de AWS
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts"></a>

*Adam Spicer, Amazon Web Services*

## Resumen
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts-summary"></a>

En la nube de Amazon Web Services (AWS), una zona de disponibilidad tiene un nombre que puede variar entre sus cuentas de AWS y un [Identificador de zona de disponibilidad (AZ ID) ](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)que identifica su ubicación. Si utiliza AWS CloudFormation para crear nubes privadas virtuales (VPCs), debe especificar el nombre o el ID de la zona de disponibilidad al crear las subredes. Si crea VPCs en varias cuentas, el nombre de la zona de disponibilidad es aleatorio, lo que significa que las subredes utilizan distintas zonas de disponibilidad en cada cuenta. 

Para usar la misma zona de disponibilidad en todas sus cuentas, debe asignar el nombre de la zona de disponibilidad de cada cuenta al mismo Identificador de zona de disponibilidad. Por ejemplo, en el siguiente diagrama se muestra que el Identificador AZ de `use1-az6` se llama `us-east-1a` en la cuenta A de AWS y `us-east-1c` en la cuenta Z de AWS.

![\[El ID de la zona de disponibilidad use1-az6 se llama us-east-1a en la cuenta A de AWS y us-east-1c en la cuenta Z de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9954e7f9-d6ce-44bd-af99-0c6bb7cd3cb0/images/23c8a37b-2408-4534-a1e0-bccfa4d7fbe3.png)


 

Este patrón ayuda a garantizar la coherencia zonal al proporcionar una solución escalable y multicuenta para utilizar las mismas zonas de disponibilidad en sus subredes. La coherencia zonal garantiza que el tráfico de red entre cuentas evite las rutas de red entre zonas de disponibilidad, lo que ayuda a reducir los costos de transferencia de datos y a reducir la latencia de red entre las cargas de trabajo.

Este patrón es un enfoque alternativo a la CloudFormation [AvailabilityZoneId propiedad](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-availabilityzoneid) de AWS.

## Requisitos previos y limitaciones
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts-prereqs"></a>

**Requisitos previos **
+ Al menos dos cuentas de AWS activas en la misma región de AWS.
+ Evalúe cuántas zonas de disponibilidad se necesitan para cumplir con los requisitos de VPC en la región.
+ Identifique y registre el Identificador de zona de disponibilidad para cada zona de disponibilidad que necesite admitir. Para obtener más información al respecto, consulte [Availability Zone IDs para sus recursos de AWS](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html) en la documentación de AWS Resource Access Manager.  
+ Una lista ordenada y separada por comas de su zona de disponibilidad. IDs Por ejemplo, la primera zona de disponibilidad de la lista se mapea como `az1`, la segunda zona de disponibilidad se mapea como `az2` y esta estructura de mapeo continúa hasta que la lista separada por comas esté completamente mapeada. No hay un número máximo de AZ IDs que se puedan mapear. 
+ El `az-mapping.yaml` archivo del repositorio de [mapeo de zonas de disponibilidad de GitHub múltiples cuentas](https://github.com/aws-samples/multi-account-az-mapping/), copiado en su máquina local

## Arquitectura
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts-architecture"></a>

El siguiente diagrama muestra la arquitectura que se implementa en una cuenta y que crea los valores de Almacén de parámetros de AWS Systems Manager. Estos valores del almacén de parámetros se consumen al crear una VPC en la cuenta.

![\[Flujo de trabajo para crear los valores del Almacén de parámetros de Systems Manager para cada ID de AZ y nombre de AZ del almacén.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9954e7f9-d6ce-44bd-af99-0c6bb7cd3cb0/images/f1168464-55f8-4efc-9b28-6a0cda668b9e.png)


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

1. La solución de este patrón se implementa en todas las cuentas que requieren coherencia zonal para una VPC. 

1. La solución crea valores de almacén de parámetros para cada Identificador de zona de disponibilidad y almacena el nombre de la nueva zona de disponibilidad. 

1. La CloudFormation plantilla de AWS utiliza el nombre de la zona de disponibilidad almacenado en cada valor del almacén de parámetros, lo que garantiza la coherencia zonal.

En el siguiente diagrama, se muestra el flujo de trabajo para crear una VPC con la solución de este patrón.

 

![\[El flujo de trabajo envía una CloudFormation plantilla para crear una VPC con la AZ correcta. IDs\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/9954e7f9-d6ce-44bd-af99-0c6bb7cd3cb0/images/cd859430-ac25-479f-b56a-21da24cddf21.png)


 

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

1. Envíe una plantilla para crear una VPC a AWS. CloudFormation

1. AWS CloudFormation resuelve los valores del almacén de parámetros de cada zona de disponibilidad y devuelve el nombre de la zona de disponibilidad de cada ID de zona de disponibilidad.

1. Se crea una VPC con la AZ correcta IDs necesaria para garantizar la coherencia zonal.

Tras implementar la solución de este patrón, puede crear subredes que hagan referencia a los valores del almacén de parámetros. Si usa AWS CloudFormation, puede hacer referencia a los valores de los parámetros de mapeo de zonas de disponibilidad del siguiente código de ejemplo con formato YAML:

```
Resources:
    PrivateSubnet1AZ1: 
        Type: AWS::EC2::Subnet 
        Properties: 
            VpcId: !Ref VPC
            CidrBlock: !Ref PrivateSubnetAZ1CIDR
            AvailabilityZone: 
                !Join 
                    - ''
                    - - '{{resolve:ssm:/az-mapping/az1:1}}'
```

Este código de muestra se incluye en el `vpc-example.yaml ` archivo del repositorio de mapeo de zonas de [disponibilidad de GitHub varias cuentas.](https://github.com/aws-samples/multi-account-az-mapping/) Le muestra cómo crear una VPC y subredes que se alineen con los valores del almacén de parámetros para garantizar la coherencia zonal.

**Pila de tecnología**
+ AWS CloudFormation
+ AWS Lambda
+ Almacén de parámetros de AWS Systems Manager

**Automatización y escala**

Puede implementar este patrón en todas sus cuentas de AWS mediante AWS CloudFormation StackSets o la solución Customizations for AWS Control Tower. Para obtener más información, consulte [Trabajar con AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) en la documentación de AWS Cloudformation y [Personalizaciones para la Torre de Control de AWS en la biblioteca](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/) de soluciones de AWS. 

Después de implementar la CloudFormation plantilla de AWS, puede actualizarla para usar los valores del almacén de parámetros e implementarla VPCs en canalizaciones o según sus requisitos. 

## Tools (Herramientas)
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts-tools"></a>

**Servicios de AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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.
+ [Almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) es una funcionalidad de AWS Systems Manager. 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 se proporciona en el repositorio de [mapeo de zonas de disponibilidad de GitHub múltiples cuentas](https://github.com/aws-samples/multi-account-az-mapping/).

## Epics
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts-epics"></a>

### Implemente el archivo az-mapping.yaml
<a name="deploy-the-az-mapping-yaml-file"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Determine las zonas de disponibilidad requeridas para la región. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-consistent-availability-zones-in-vpcs-across-different-aws-accounts.html) | Arquitecto de la nube | 
| Implemente el archivo az-mapping.yaml. | Utilice el `az-mapping.yaml` archivo para crear una CloudFormation pila de AWS en todas las cuentas de AWS necesarias. En el parámetro `AZIds`, utilice la lista separada por comas que creó anteriormente. Le recomendamos que utilice [AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) o la [solución Customizations for AWS Control Tower](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/). | Arquitecto de la nube | 

### Impleméntelo VPCs en sus cuentas
<a name="deploy-the-vpcs-in-your-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Personalice las CloudFormation plantillas de AWS. | Cuando cree las subredes con AWS CloudFormation, personalice las plantillas para que usen los valores del almacén de parámetros que creó anteriormente.Para ver una plantilla de ejemplo, consulte el `vpc-example.yaml` archivo en el repositorio de [mapeo de zonas de disponibilidad de GitHub múltiples cuentas](https://github.com/aws-samples/multi-account-az-mapping/). | Arquitecto de la nube | 
| Implemente el VPCs. | Implemente las CloudFormation plantillas de AWS personalizadas en sus cuentas. Por lo tanto, cada VPC de la región tiene coherencia zonal en las zonas de disponibilidad utilizadas para las subredes | Arquitecto de la nube | 

## Recursos relacionados
<a name="use-consistent-availability-zones-in-vpcs-across-different-aws-accounts-resources"></a>
+ [Zona de disponibilidad IDs para sus recursos de AWS](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html) (documentación de AWS Resource Access Manager)
+ [AWS::EC2::Subnet](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html)( CloudFormation documentación de AWS)

# Utilice el usuario IDs en las políticas de IAM para el control de acceso y la automatización
<a name="use-user-ids-iam-policies-access-control-automation"></a>

*Srinivas Ananda Babu y Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="use-user-ids-iam-policies-access-control-automation-summary"></a>

Este patrón explica los posibles inconvenientes de usar políticas basadas en nombres de usuario en AWS Identity and Access Management la IAM, las ventajas de usar políticas basadas en el nombre de usuario y cómo integrar este IDs enfoque para la automatización. AWS CloudFormation 

En él Nube de AWS, el servicio de IAM le ayuda a gestionar las identidades de los usuarios y el control de acceso con precisión. Sin embargo, confiar en los nombres de usuario al crear las políticas de IAM puede provocar riesgos de seguridad imprevistos y problemas de control de acceso. Por ejemplo, considere este escenario: un empleado nuevo, John Doe, se une a su equipo y usted crea una cuenta de usuario de IAM con el nombre de usuario `j.doe`, lo que le concede permisos a través de las políticas de IAM que hacen referencia a los nombres de usuario. Cuando John deja la empresa, se elimina la cuenta. El problema comienza cuando una empleada nueva, Jane Doe, se une al equipo y se vuelve a crear el nombre de usuario `j.doe`. Las políticas existentes ahora conceden a Jane Doe los mismos permisos que a John Doe. Esto crea una pesadilla en materia de seguridad y cumplimiento.

La actualización manual de cada política para reflejar los detalles de los usuarios nuevos es un proceso lento y propenso a errores, especialmente a medida que la organización crece. La solución consiste en utilizar un ID de usuario único e inmutable. Al crear una cuenta de usuario de IAM, AWS asigna al usuario de IAM un ID de usuario único (o ID principal). Puede utilizar estos usuarios IDs en sus políticas de IAM para garantizar un control de acceso coherente y fiable que no se vea afectado por los cambios o la reutilización del nombre de usuario.

Por ejemplo, una política de IAM que utiliza un ID de usuario podría tener un aspecto similar al siguiente:

```
{ 
    "Version": "2012-10-17",		 	 	  
    "Statement": [ 
        { 
            "Effect": "Allow", 
            "Action": "s3:ListBucket", 
            "Resource": "arn:aws:s3:::example-bucket", 
            "Principal": { "AWS": "arn:aws:iam::123456789012:user/abcdef01234567890" } 
        } 
      ] 
}
```

Entre las ventajas de utilizar el usuario IDs en las políticas de IAM se incluyen las siguientes:
+ **Unicidad.** IDs Los usuarios son únicos en todos los ámbitos Cuentas de AWS, por lo que proporcionan una solicitud de permisos correcta y coherente.
+ **Inmutabilidad.** El usuario IDs no se puede cambiar, por lo que proporciona un identificador estable para hacer referencia a los usuarios en las políticas.
+ **Auditoría y conformidad.** Servicios de AWS suelen incluir al usuario IDs en los registros y registros de auditoría, lo que facilita el seguimiento de las acciones hasta usuarios específicos.
+ **Automatización e integración.** El uso de scripts IDs de AWS APIs automatización o de entrada de usuario garantiza que los procesos no se vean afectados por los cambios de nombre de usuario. SDKs
+ **Preparación para el futuro.** Utilizar el usuario IDs en las políticas desde el principio puede evitar posibles problemas de control de acceso o actualizaciones exhaustivas de las políticas.

**Automatización**

Cuando se utilizan herramientas de infraestructura como código (IaC) AWS CloudFormation, las dificultades de las políticas de IAM basadas en nombres de usuario pueden seguir causando problemas. El recurso de usuario de IAM devuelve el nombre de usuario cuando se llama a la función intrínseca `Ref`. A medida que la infraestructura de su organización evoluciona, el ciclo de creación y eliminación de recursos, tal como las cuentas de usuario de IAM, puede provocar problemas de control de acceso no deseados si se reutilizan los nombres de usuario.

Para solucionar este problema, te recomendamos que incorpores el usuario en tus plantillas. IDs CloudFormation Sin embargo, obtener IDs un usuario para este propósito puede resultar difícil. Aquí es donde los recursos personalizados pueden resultar útiles. Puede utilizar recursos CloudFormation personalizados para ampliar la funcionalidad del servicio mediante la integración con servicios externos AWS APIs o con otros. Al crear un recurso personalizado que obtenga el ID de usuario de un usuario de IAM determinado, puede hacer que el ID de usuario esté disponible en sus CloudFormation plantillas. Este enfoque agiliza el proceso de referencia al usuario IDs y garantiza que sus flujos de trabajo de automatización sigan siendo sólidos y estén preparados para el futuro.

## Requisitos previos y limitaciones
<a name="use-user-ids-iam-policies-access-control-automation-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Una función de IAM para que un administrador de la nube ejecute la plantilla CloudFormation 

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para conocer la disponibilidad de las regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para 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.

## Arquitectura
<a name="use-user-ids-iam-policies-access-control-automation-architecture"></a>

**Arquitectura de destino**

En el siguiente diagrama se muestra cómo se CloudFormation utiliza un recurso personalizado respaldado por AWS Lambda para recuperar el ID de usuario de IAM.

![\[Obtener el ID de usuario de IAM mediante un recurso CloudFormation personalizado.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/71698647-274e-4911-92f0-549e444b53f6/images/7e507df4-f597-499e-bd5b-6d7a55e64146.png)


**Automatización y escala**

Puedes usar la CloudFormation plantilla varias veces para diferentes Regiones de AWS cuentas. Debe ejecutarla solo una vez en cada región o cuenta.

## Tools (Herramientas)
<a name="use-user-ids-iam-policies-access-control-automation-tools"></a>

**Servicios de AWS**
+ [IAM](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 AWS recursos. Utilice IAM para controlar quién está autenticado (ha iniciado sesión) y autorizado (tiene permisos) para utilizar recursos.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)— le AWS CloudFormation ayuda a modelar y configurar sus AWS recursos para que pueda dedicar menos tiempo a gestionarlos y más tiempo a centrarse en las aplicaciones en las que se ejecutan. AWS Crea una plantilla que describe los AWS recursos que desea y CloudFormation se encarga de aprovisionar y configurar esos recursos por usted.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)— AWS Lambda es un servicio informático 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. 

## Prácticas recomendadas
<a name="use-user-ids-iam-policies-access-control-automation-best-practices"></a>

Si está empezando desde cero o tiene prevista una implementación totalmente nueva, le recomendamos que utilice [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) para la administración centralizada de usuarios. El Centro de Identidad de IAM se integra con sus proveedores de identidad existentes (como Active Directory u Okta) para federar las identidades de los usuarios AWS, lo que elimina la necesidad de crear y administrar los usuarios de IAM directamente. Este enfoque no solo garantiza un control de acceso uniforme, sino que también simplifica la administración del ciclo de vida de los usuarios y ayuda a mejorar la seguridad y el cumplimiento en todo el entorno. AWS 

## Epics
<a name="use-user-ids-iam-policies-access-control-automation-epics"></a>

### Validación de permisos
<a name="validate-permissions"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide su función Cuenta de AWS y la de IAM. | Confirme que tiene un rol de IAM con permisos para implementar CloudFormation plantillas en su. Cuenta de AWSSi piensa utilizar la consola AWS CLI en lugar de la CloudFormation consola para implementar la plantilla en el último paso de este procedimiento, también debe configurar credenciales temporales para ejecutar AWS CLI comandos. Para obtener instrucciones, consulte la [documentación de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli). | Arquitecto de la nube | 

### Cree una CloudFormation plantilla
<a name="build-a-cfnshort-template"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea una CloudFormation plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-user-ids-iam-policies-access-control-automation.html) | AWS DevOps, arquitecto de nube | 
| Agregue un parámetro de entrada para el nombre de usuario. | Añada el siguiente código a la `Parameters` sección de la CloudFormation plantilla:<pre>Parameters:<br />  NewIamUserName:<br />    Type: String<br />    Description: Unique username for the new IAM user<br /></pre>Este parámetro solicita al usuario el nombre de usuario. | AWS DevOps, arquitecto de nube | 
| Agregue un recurso personalizado para crear un usuario de IAM. | Añada el siguiente código a la `Resources` sección de la CloudFormation plantilla:<pre>Resources:<br />  rNewIamUser:<br />    Type: 'AWS::IAM::User'<br />    Properties:<br />      UserName: !Ref NewIamUserName<br /></pre>Este código añade un CloudFormation recurso que crea un usuario de IAM con el nombre proporcionado por el `NewIamUserName` parámetro. | AWS DevOps, arquitecto de nube | 
| Agregue un rol de ejecución para la función de Lambda. | En este paso, crea un rol de IAM que otorga un permiso a una AWS Lambda función para obtener el `UserId` IAM. Especifique los siguientes permisos mínimos necesarios para que Lambda se ejecute:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-user-ids-iam-policies-access-control-automation.html)Para obtener instrucciones sobre cómo crear un rol de ejecución, consulte la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). Hará referencia a este rol en el paso siguiente, cuando cree la función de Lambda. | Administrador de AWS, arquitecto de la nube | 
| Agregue una función de Lambda para obtener el `UserId` de IAM único. | En este paso, se define una función de Lambda con un tiempo de ejecución de Python para obtener el `UserId` de IAM único. Para ello, añada el siguiente código a la `Resources` sección de la CloudFormation plantilla. Sustituya `<<ROLENAME>>` por el nombre del rol de ejecución que creó en el paso anterior.<pre>  GetUserLambdaFunction:<br />    Type: 'AWS::Lambda::Function'<br />    Properties:<br />      Handler: index.handler<br />      Role: <<ROLENAME>><br />      Timeout: 30<br />      Runtime: python3.11<br />      Code:<br />        ZipFile: |<br />          import cfnresponse, boto3<br />          def handler(event, context):<br />            try:<br />              print(event)<br />              user = boto3.client('iam').get_user(UserName=event['ResourceProperties']['NewIamUserName'])['User']<br />              cfnresponse.send(event, context, cfnresponse.SUCCESS, {'NewIamUserId': user['UserId'], 'NewIamUserPath': user['Path'], 'NewIamUserArn': user['Arn']})<br />            except Exception as e:<br />              cfnresponse.send(event, context, cfnresponse.FAILED, {'NewIamUser': str(e)})<br /></pre> | AWS DevOps, arquitecto de nube | 
| Agregue un recurso personalizado. | Añada el siguiente código a la `Resources` sección de la CloudFormation plantilla:<pre>  rCustomGetUniqueUserId:<br />    Type: 'Custom::rCustomGetUniqueUserIdWithLambda'<br />    Properties:<br />      ServiceToken: !GetAtt GetUserLambdaFunction.Arn<br />      NewIamUserName: !Ref NewIamUserName<br /></pre>Este recurso personalizado llama a la función de Lambda para obtener el `UserID` de IAM. | AWS DevOps, arquitecto de nube | 
| Defina CloudFormation los resultados. | Añada el siguiente código a la `Outputs` sección de la CloudFormation plantilla:<pre>Outputs:<br />  NewIamUserId:<br />    Value: !GetAtt rCustomGetUniqueUserId.NewIamUserId<br /></pre>Muestra el `UserID` de IAM del nuevo usuario de IAM. | AWS DevOps, arquitecto de nube | 
| Guarde la plantilla. | Guarde los cambios en la CloudFormation plantilla. | AWS DevOps, arquitecto de nube | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la CloudFormation plantilla. | Para implementar la `get_unique_user_id.yaml` plantilla mediante la CloudFormation consola, siga las instrucciones de la [CloudFormation documentación](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html).Como alternativa, puede ejecutar el siguiente AWS CLI comando para implementar la plantilla:<pre>aws cloudformation create-stack \<br />--stack-name DemoNewUser \<br />--template-body file://get_unique_user_id.yaml \<br />--parameters ParameterKey=NewIamUserName,ParameterValue=demouser \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps, arquitecto de nube | 

## Recursos relacionados
<a name="use-user-ids-iam-policies-access-control-automation-resources"></a>
+ [Cree una pila desde la CloudFormation consola](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) (CloudFormation documentación)
+ [Recursos personalizados respaldados por Lambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html) (documentación) CloudFormation 
+ [Identificadores únicos](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) (documentación de IAM)
+ [Utilice credenciales temporales con los AWS recursos (documentación de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html))

# Validar Account Factory para el código Terraform (AFT) localmente
<a name="validate-account-factory-for-terraform-aft-code-locally"></a>

*Alexandru Pop y Michal Gorniak, Amazon Web Services*

## Resumen
<a name="validate-account-factory-for-terraform-aft-code-locally-summary"></a>

Este patrón muestra cómo probar localmente el código de HashiCorp Terraform administrado por AWS Control Tower Account Factory for Terraform (AFT). Terraform 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. AFT configura una canalización de Terraform que le ayuda a aprovisionar y personalizar múltiples entradas. Cuentas de AWS AWS Control Tower

Durante el desarrollo del código, puede resultar útil probar su infraestructura de Terraform como código (IaC) a nivel local, fuera de la canalización de AFT. Este ejemplo muestra cómo hacer lo siguiente:
+ Recupere una copia local del código de Terraform que está almacenado en los AWS CodeCommit repositorios de su cuenta de administración de AFT.
+ Simule la canalización de AFT de forma local con el código recuperado.

Este procedimiento también se puede utilizar para ejecutar comandos de Terraform que no forman parte de la canalización AFT normal. Por ejemplo, puede usar este método para ejecutar comandos como `terraform validate`, `terraform plan`, `terraform destroy`, y`terraform import`.

## Requisitos previos y limitaciones
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Requisitos previos **
+ Un entorno activo de AWS múltiples cuentas que utiliza [AWS Control Tower](https://aws.amazon.com/controltower)
+ Un [entorno AFT](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html) completamente implementado
+ 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)
+ [AWS CLI asistente de credenciales para AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), instalado y configurado
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), instalado y configurado en su equipo local
+ Utilidad de `git-remote-commit` [instalada and configurada](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install)
+ [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 (la versión local del paquete Terraform debe coincidir con la versión que se utiliza en la implementación de AFT)

**Limitaciones**
+ Este patrón no cubre los pasos de implementación necesarios para AWS Control Tower el AFT o cualquier módulo específico de Terraform.
+ El resultado que se genera localmente durante este procedimiento no se guarda en los registros de tiempo de ejecución de AFT Pipeline.

## Arquitectura
<a name="validate-account-factory-for-terraform-aft-code-locally-architecture"></a>

**Pila de tecnología de destino**
+ Infraestructura AFT implementada dentro de una AWS Control Tower implementación
+ Terraform
+ Git
+ AWS CLI versión 2

**Automatización y escala**

Este patrón muestra cómo invocar localmente el código de Terraform para las personalizaciones de cuentas globales de AFT en una sola cuenta administrada por AFT. Cuenta de AWS Una vez validado el código de Terraform, puede aplicarlo al resto de las cuentas de su entorno de múltiples cuentas. Para obtener más información, consulte [Volver](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) a invocar las personalizaciones en la documentación. AWS Control Tower 

También puede usar un proceso similar para ejecutar las personalizaciones de la cuenta AFT en una terminal local. Para invocar localmente el código de Terraform desde las personalizaciones de la cuenta AFT, clone el **aft-account-customizations**repositorio en lugar del **aft-global-account-customizations**repositorio desde CodeCommit su cuenta de administración de AFT.

## Tools (Herramientas)
<a name="validate-account-factory-for-terraform-aft-code-locally-tools"></a>

**Servicios de AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)le ayuda a configurar y gobernar un entorno de AWS cuentas múltiples, siguiendo las mejores prácticas prescriptivas.
+ [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 los comandos de tu shell de línea de comandos.

**Otros servicios**
+ [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.
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto.

**Código**

El siguiente es un ejemplo de un script bash que se puede usar para ejecutar localmente el código de Terraform administrado por AFT. Para usar el script, siga las instrucciones de la sección [Epics](#validate-account-factory-for-terraform-aft-code-locally-epics) de este patrón.

```
#! /bin/bash
# Version: 1.1 2022-06-24 Unsetting AWS_PROFILE since, when set, it interferes with script operation
#          1.0 2022-02-02 Initial Version
#
# Purpose: For use with AFT: This script runs the local copy of TF code as if it were running within AFT pipeline.
#        * Facilitates testing of what the AFT pipline will do 
#           * Provides the ability to run terraform with custom arguments (like 'plan' or 'move') which are currently not supported within the pipeline.
#
# © 2021 Amazon Web Services, Inc. or its affiliates. All Rights Reserved.
# This AWS Content is provided subject to the terms of the AWS Customer Agreement
# available at http://aws.amazon.com/agreement or other written agreement between
# Customer and either Amazon Web Services, Inc. or Amazon Web Services EMEA SARL or both.
#
# Note: Arguments to this script are passed directly to 'terraform' without parsing nor validation by this script.
#
# Prerequisites:
#    1. local copy of ct GIT repositories
#    2. local backend.tf and aft-providers.tf filled with data for the target account on which terraform is to be run
#       Hint: The contents of above files can be obtain from the logs of a previous execution of the AFT pipeline for the target account.
#    3. 'terraform' binary is available in local PATH
#    4. Recommended: .gitignore file containing 'backend.tf', 'aft_providers.tf' so the local copy of these files are not pushed back to git

readonly credentials=$(aws sts assume-role \
    --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text ):role/AWSAFTAdmin \
    --role-session-name AWSAFT-Session \
    --query Credentials )

unset AWS_PROFILE
export AWS_ACCESS_KEY_ID=$(echo $credentials | jq -r '.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo $credentials | jq -r '.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo $credentials | jq -r '.SessionToken')
terraform "$@"
```

## Epics
<a name="validate-account-factory-for-terraform-aft-code-locally-epics"></a>

### Guardar el código de ejemplo como un archivo local
<a name="save-the-example-code-as-a-local-file"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Guardar el código de ejemplo como un archivo local. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 
| Haga que el código de ejemplo sea ejecutable. | Abra una ventana de terminal y autentifíquese en su cuenta de administración de AWS AFT realizando una de las siguientes acciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Es posible que su organización también tenga una herramienta personalizada para proporcionar credenciales de autenticación a su AWS entorno. | Administrador de AWS | 
| Verifique el acceso a la cuenta de administración de AFT en la Región de AWS correcta. | Asegúrese de utilizar la misma sesión de terminal con la que se autenticó en su cuenta de administración de AFT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 
| Crear un nuevo directorio local para almacenar el código del repositorio de AFT. | En la misma sesión de terminal, ejecute los siguientes comandos:<pre>mkdir my_aft <br />cd my_aft</pre> | Administrador de AWS | 
| Clone el código del repositorio AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 

### Cree los archivos de configuración de Terraform necesarios para que la canalización AFT se ejecute localmente
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Abra una canalización AFT previamente ejecutada y copie los archivos de configuración de Terraform en una carpeta local. | Los archivos de configuración `backend.tf` y `aft-providers.tf` que se crean en esta epic son necesarios para que la canalización de AFT se ejecute localmente. Estos archivos se crean automáticamente dentro de la canalización de AFT basada en la nube, pero deben crearse manualmente para que la canalización se ejecute localmente. La ejecución local de la canalización de AFT requiere un conjunto de archivos que represente la ejecución de la canalización en una sola Cuenta de AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Ejemplo de instrucción backend.tf generada automáticamente**<pre>## Autogenerated backend.tf ##<br />## Updated on: 2022-05-31 16:27:45 ##<br />terraform {<br />  required_version = ">= 0.15.0"<br />  backend "s3" {<br />    region         = "us-east-2"<br />    bucket         = "aft-backend-############-primary-region"<br />    key            = "############-aft-global-customizations/terraform.tfstate"<br />    dynamodb_table = "aft-backend-############"<br />    encrypt        = "true"<br />    kms_key_id     = "########-####-####-####-############"<br />    role_arn       = "arn:aws:iam::#############:role/AWSAFTExecution"<br />  }<br />}</pre>****Los `aft-providers.tf` archivos `backend.tf` y están vinculados a una implementación y una carpeta específicas Cuenta de AWS de AFT. Estos archivos también son diferentes, dependiendo de si están en el **aft-account-customizations**repositorio **aft-global-customizations**y dentro de la misma implementación de AFT. Asegúrese de generar ambos archivos a partir de la misma lista de tiempo de ejecución. | Administrador de AWS | 

### Ejecute la canalización AFT localmente mediante el script bash de ejemplo
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente los cambios de configuración de Terraform que desee validar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 
| Ejecute el script `ct_terraform.sh` y revise el resultado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)** **[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 

### Devolución de los cambios de código local al repositorio de AFT
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue referencias a los archivos `backend.tf` y `aft-providers.tf` a un archivo `.gitignore`. | Añada los archivos `backend.tf`** **y `aft-providers.tf` que creó a un archivo `.gitignore` ejecutando los siguientes comandos:<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>Al mover los archivos al archivo `.gitignore`****, se garantiza que no se confirmen ni se devuelvan al repositorio de AFT remoto. | Administrador de AWS | 
| Confirme y envíe los cambios de código al repositorio AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Los cambios de código que introduzca siguiendo este procedimiento hasta ese momento se aplicarán Cuenta de AWS únicamente a uno de ellos. | Administrador de AWS | 

### Implementación de los cambios en varias cuentas
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente los cambios en todas sus cuentas administradas por AFT. | Para implementar los cambios en varios Cuentas de AWS gestionados por AFT, siga las instrucciones de la documentación sobre cómo [volver a invocar las personalizaciones](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations). AWS Control Tower  | Administrador de AWS | 

# Más patrones
<a name="infrastructure-more-patterns-pattern-list"></a>

**Topics**
+ [Agregue HA a Oracle PeopleSoft en Amazon RDS Custom mediante una réplica de lectura](add-ha-to-oracle-peoplesoft-on-amazon-rds-custom-by-using-a-read-replica.md)
+ [Audite automáticamente los grupos de AWS seguridad que permiten el acceso desde direcciones IP públicas](audit-security-groups-access-public-ip.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)
+ [Automatice la evaluación de recursos de AWS](automate-aws-resource-assessment.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)
+ [Automatización de la conmutación por error y la conmutación por recuperación entre regiones mediante DR Orchestrator Framework](automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.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)
+ [Automatizar la configuración de RabbitMQ en Amazon MQ](automate-rabbitmq-configuration-in-amazon-mq.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 replicación de las instancias de Amazon RDS en Cuentas de AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.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)
+ [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)
+ [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 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)
+ [Construye una AWS landing zone que incluya MongoDB Atlas](build-aws-landing-zone-that-includes-mongodb-atlas.md)
+ [Centralización de la administración de claves de acceso de IAM en AWS Organizations mediante Terraform](centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.md)
+ [Centralización de la distribución de paquetes de software en AWS Organizations mediante Terraform](centralize-software-package-distribution-in-aws-organizations-by-using-terraform.md)
+ [Configure el registro de invocación de modelos en Amazon Bedrock mediante AWS CloudFormation](configure-bedrock-invocation-logging-cloudformation.md)
+ [Configure el enrutamiento de solo lectura en un grupo de disponibilidad Always On en SQL Server en AWS](configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.md)
+ [Cree un portal para microinterfaces mediante Angular AWS Amplify y Module Federation](create-amplify-micro-frontend-portal.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)
+ [Crear una EventBridge conexión entre cuentas de Amazon en una organización](create-cross-account-amazon-eventbridge-connection-organization.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)
+ [Implemente una API de Amazon API Gateway en un sitio web interno mediante puntos de conexión privados y un Equilibrador de carga de aplicación](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Implemente y gestione AWS Control Tower los controles mediante el uso AWS CDK y CloudFormation](deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.md)
+ [Implemente y gestione AWS Control Tower controles mediante Terraform](deploy-and-manage-aws-control-tower-controls-by-using-terraform.md)
+ [Despliega canarios de CloudWatch Synthetics con Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Implemente un clúster de CockroachDB en Amazon EKS mediante Terraform](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Implementación de un sistema de archivos de Lustre para un procesamiento de datos de alto rendimiento mediante Terraform y DRA](deploy-lustre-file-system-for-high-performance-data-processing-with-terraform-dra.md)
+ [Implemente un caso de uso de RAG AWS mediante Terraform y Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Despliega recursos en una AWS Wavelength zona mediante Terraform](deploy-resources-wavelength-zone-using-terraform.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)
+ [Detección de las instancias de bases de datos de Amazon RDS y Aurora que tienen certificados CA vencidos](detect-rds-instances-expiring-certificates.md)
+ [Documentación del diseño de su AWS Landing Zone](document-your-aws-landing-zone-design.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)
+ [Genere recomendaciones personalizadas y reclasificadas con Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Control de los conjuntos de permisos para varias cuentas mediante Account Factory for Terraform](govern-permission-sets-aft.md)
+ [Identifique y avise cuando los recursos de Amazon Data Firehose no estén cifrados con una clave AWS KMS](identify-and-alert-when-amazon-data-firehose-resources-are-not-encrypted-with-an-aws-kms-key.md)
+ [Implementación del Generador de cuentas para Terraform (AFT) mediante una canalización de arranque](implement-account-factory-for-terraform-aft-by-using-a-bootstrap-pipeline.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)
+ [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)
+ [Instale el agente SSM y el CloudWatch agente en los nodos de trabajo de Amazon EKS mediante preBootstrapCommands](install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.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)
+ [Administre los productos de AWS Service Catalog en varias cuentas y regiones de AWS](manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions.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 Oracle PeopleSoft a Amazon RDS Custom](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [Migración de los sistemas BYOL de RHEL a instancias con licencia incluida de AWS mediante AWS MGN](migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.md)
+ [Configuración de un espacio de datos mínimo viable para compartir datos entre organizaciones](minimum-viable-data-space-share-data-organizations.md)
+ [Supervise ElastiCache los clústeres de Amazon para comprobar el cifrado en reposo](monitor-amazon-elasticache-clusters-for-at-rest-encryption.md)
+ [Supervise la actividad de las aplicaciones mediante CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.md)
+ [Supervisión de los clústeres de SAP RHEL Pacemaker mediante los servicios de AWS](monitor-sap-rhel-pacemaker-clusters-by-using-aws-services.md)
+ [Cree una arquitectura IPAM jerárquica y multirregional mediante Terraform AWS](multi-region-ipam-architecture.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)
+ [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)
+ [Proteja las transferencias de archivos mediante Transfer Family, Amazon Cognito y GuardDuty](secure-file-transfers.md)
+ [Enviar una notificación cuando se cree un usuario de IAM](send-a-notification-when-an-iam-user-is-created.md)
+ [Configuración de un router de celdas sin servidor para una arquitectura basada en celdas](serverless-cell-router-architecture.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 HA/DR arquitectura para Oracle E-Business Suite en Amazon RDS Custom con una base de datos en espera activa](set-up-an-ha-dr-architecture-for-oracle-e-business-suite-on-amazon-rds-custom-with-an-active-standby-database.md)
+ [Configurar la resolución de DNS para redes híbridas en un entorno de cuentas múltiples AWS](set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.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 la funcionalidad UTL\$1FILE de Oracle en Aurora compatible con PostgreSQL](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.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)
+ [Simplifique la administración de certificados privados mediante AWS Private CA y AWS RAM](simplify-private-certificate-management-by-using-aws-private-ca-and-aws-ram.md)
+ [Optimice los flujos de trabajo de aprendizaje automático desde el desarrollo local hasta los experimentos escalables mediante el uso de SageMaker IA e Hydra](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [Etiquete automáticamente las conexiones de puerta de enlace de tránsito con AWS Organizations](tag-transit-gateway-attachments-automatically-using-aws-organizations.md)
+ [Funciones de transición para una PeopleSoft aplicación de Oracle en Amazon RDS Custom for Oracle](transition-roles-for-an-oracle-peoplesoft-application-on-amazon-rds-custom-for-oracle.md)
+ [Uso de Amazon Q Developer como asistente de codificación para aumentar la productividad](use-q-developer-as-coding-assistant-to-increase-productivity.md)

# Aplicaciones web y móviles
<a name="websitesandwebapps-pattern-list"></a>

**Topics**
+ [Autentique a los usuarios de la aplicación React mediante las interfaces de usuario de Amazon Cognito y AWS Amplify](authenticate-react-app-users-cognito-amplify-ui.md)
+ [Crear una aplicación React con AWS Amplify y añadir autenticación con Amazon Cognito](create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito.md)
+ [Cree un portal para microinterfaces mediante Angular AWS Amplify y Module Federation](create-amplify-micro-frontend-portal.md)
+ [Implemente una aplicación de una sola página basada en React en Amazon S3 y CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Implemente una API de Amazon API Gateway en un sitio web interno mediante puntos de conexión privados y un Equilibrador de carga de aplicación](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Incorpore componentes visuales de Amazon Quick Sight en aplicaciones web mediante Amazon Cognito y la automatización iAC](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Explore el desarrollo completo de aplicaciones web nativas en la nube con Green Boost](explore-full-stack-cloud-native-web-application-development-with-green-boost.md)
+ [Ejecute pruebas unitarias para una aplicación GitHub de Node.js desde AWS CodeBuild](run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.md)
+ [Estructure un proyecto de Python en una arquitectura hexagonal con AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Más patrones](websitesandwebapps-more-patterns-pattern-list.md)

# Autentique a los usuarios de la aplicación React mediante las interfaces de usuario de Amazon Cognito y AWS Amplify
<a name="authenticate-react-app-users-cognito-amplify-ui"></a>

*Daniel Kozhemyako, Amazon Web Services*

## Resumen
<a name="authenticate-react-app-users-cognito-amplify-ui-summary"></a>

Este patrón muestra cómo añadir capacidades de autenticación a una aplicación React de frontend existente mediante una biblioteca de interfaz de usuario de AWS Amplify y un grupo de usuarios de Amazon Cognito.

El patrón emplea Amazon Cognito para proporcionar autenticación, autorización y administración de usuarios en la aplicación. También utiliza un componente de [Amplify UI](https://ui.docs.amplify.aws/react/getting-started/introduction), una biblioteca de código abierto que amplía las capacidades del desarrollo de la interfaz de AWS Amplify usuario (UI). El componente de [interfaz de usuario de Authenticator](https://ui.docs.amplify.aws/react/connected-components/authenticator/advanced) administra los inicios de sesión y ejecuta el flujo de trabajo conectado a la nube que autentica a los usuarios a través de Amazon Cognito.

Tras implementar este patrón, los usuarios pueden iniciar sesión con cualquiera de las siguientes credenciales:
+ Nombre de usuario y contraseña
+ Proveedores de identidad social, como Apple, Facebook, Google y Amazon
+ Proveedores de identidad empresarial compatibles con SAML 2.0 o con OpenID Connect (OIDC)

**nota**  
Para crear un componente de interfaz de usuario de autenticación personalizado, puede ejecutar el componente de interfaz de usuario de Authenticator en modo sin periféricos.

## Requisitos previos y limitaciones
<a name="authenticate-react-app-users-cognito-amplify-ui-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Una aplicación web de React 18.2.0 o posterior
+ Node.js y npm 6.14.4 o posterior, [instalados](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)

**Limitaciones**
+ Este patrón se aplica únicamente a aplicaciones web React.
+ Este patrón emplea un componente de Amplify UI prediseñado. La solución no abarca los pasos necesarios para implementar un componente de interfaz de usuario personalizado.

**Versiones de producto**
+ Amplify UI 6.1.3 o posterior (Gen 1)
+ Amplify 6.0.16 o posterior (Gen 1)

## Arquitectura
<a name="authenticate-react-app-users-cognito-amplify-ui-architecture"></a>

**Arquitectura de destino**

En el siguiente diagrama se muestra una arquitectura que emplea Amazon Cognito para autenticar usuarios en una aplicación web React.

![\[Amazon Cognito autentica a los usuarios de una aplicación web React.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b2cea053-6931-4404-8aa8-c623ce2024ac/images/b7f69f20-a39d-4a78-8605-7dab73c59052.png)


## Tools (Herramientas)
<a name="authenticate-react-app-users-cognito-amplify-ui-tools"></a>

**Servicios de AWS**
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.

**Otras herramientas**
+ [Amplify UI](https://ui.docs.amplify.aws/react/getting-started/introduction) es una biblioteca de interfaz de usuario de código abierto que proporciona componentes personalizables que se pueden conectar a la nube.
+ [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.
+ [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.

## Prácticas recomendadas
<a name="authenticate-react-app-users-cognito-amplify-ui-best-practices"></a>

Si está desarrollando una nueva aplicación, le recomendamos que use Amplify Gen 2.

## Epics
<a name="authenticate-react-app-users-cognito-amplify-ui-epics"></a>

### Crear un grupo de usuarios de Amazon Cognito
<a name="create-an-cog-user-pool"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un grupo de usuarios. | [Crear un grupo de usuarios de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-user-pool.html). Configure las opciones de inicio de sesión y los requisitos de seguridad del grupo de usuarios según su caso de uso. | Desarrollador de aplicaciones | 
| Agregar un cliente de aplicación. | [Configure un cliente de aplicación para un grupo de usuarios](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html). Este cliente es necesario para que la aplicación interactúe con el grupo de usuarios de Amazon Cognito. | Desarrollador de aplicaciones | 

### Integración del grupo de usuarios de Amazon Cognito con el componente de interfaz de usuario de Authenticator
<a name="integrate-your-cog-user-pool-with-the-authenticator-ui-component"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale las dependencias. | Para instalar los paquetes `aws-amplify` y `@aws-amplify/ui-react`, ejecute el comando siguiente desde el directorio raíz de la aplicación: <pre>npm i @aws-amplify/ui-react aws-amplify</pre> | Desarrollador de aplicaciones | 
| Configure el grupo de usuarios. | Según el siguiente ejemplo, cree un archivo `aws-exports.js` y guárdelo en la carpeta `src`. El archivo dene tener la información siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html)<pre>// replace the user pool region, id, and app client id details<br />const awsmobile = {<br />    "aws_project_region": "put_your_region_here",<br />    "aws_cognito_region": "put_your_region_here",<br />    "aws_user_pools_id": "put_your_user_pool_id_here",<br />    "aws_user_pools_web_client_id": "put_your_user_pool_app_id_here"<br />}<br /><br />export default awsmobile;</pre> | Desarrollador de aplicaciones | 
| Importe y configure el servicio Amplify. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html) | Desarrollador de aplicaciones | 
| Agregue el componente de interfaz de usuario de Authenticator. | Para mostrar el componente de interfaz de usuario de `Authenticator`, añada las siguientes líneas de código al archivo de punto de entrada de la aplicación (`App.js`):<pre>import { Authenticator } from '@aws-amplify/ui-react';<br />import '@aws-amplify/ui-react/styles.css';</pre>El fragmento de código de ejemplo importa el componente de interfaz de usuario `Authenticator` y el archivo de Amplify UI styles.css (obligatorio cuando se usan los temas prediseñados del componente).El componente de interfaz de usuario `Authenticator` proporciona dos valores de retorno:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html)Vea el siguiente ejemplo de componente:<pre>function App() {<br />    return (<br />        <Authenticator><br />            {({ signOut, user }) => (<br />                <div><br />                    <p>Welcome {user.username}</p><br />                    <button onClick={signOut}>Sign out</button><br />                </div><br />            )}<br />        </Authenticator><br />    );<br />}</pre>Para ver un ejemplo de un archivo `App.js`, consulte la sección de [información adicional](#authenticate-react-app-users-cognito-amplify-ui-additional) de este patrón. | Desarrollador de aplicaciones | 
| (Opcional) Recupere la información de la sesión. | Una vez autenticado un usuario, puede recuperar sus datos de sesión del cliente Amplify. Por ejemplo, puede recuperar el token web JSON (JWT) de la sesión de un usuario para autenticar las solicitudes de su sesión en una API de backend.Consulte el siguiente ejemplo de un encabezado de solicitud que incluye un JWT:<pre>import { fetchAuthSession } from 'aws-amplify/auth';<br />(await fetchAuthSession()).tokens?.idToken?.toString();</pre> | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="authenticate-react-app-users-cognito-amplify-ui-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los usuarios nuevos no pueden registrarse en la aplicación. | Asegúrese de que su grupo de usuarios de Amazon Cognito esté configurado para permitir que los usuarios puedan registrarse ellos mismos en el grupo de usuarios.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/authenticate-react-app-users-cognito-amplify-ui.html) | 
| El componente de autenticación dejó de funcionar después de actualizar de la v5 a la v6. | La categoría `Auth` ha pasado a un enfoque funcional y ha denominado parámetros en Amplify v6. Ahora debe importar la función APIs directamente desde la `aws-amplify/auth` ruta. Para más información, consulte [Migración de v5 a v6](https://docs.amplify.aws/gen1/react/build-a-backend/auth/auth-migration-guide/) en la documentación de Amplify. | 

## Recursos relacionados
<a name="authenticate-react-app-users-cognito-amplify-ui-resources"></a>
+ [Introducción a Amazon Cognito (sitio web](https://aws.amazon.com/cognito/getting-started/))AWS 
+ [Cree una nueva aplicación de React](https://reactjs.org/docs/create-a-new-react-app.html) (documentación de React)
+ [¿Qué es Amazon Cognito?](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) (Documentación de Amazon Cognito)
+ [Librería de Amplify UI](https://ui.docs.amplify.aws/) (documentación de Amplify)

## Información adicional
<a name="authenticate-react-app-users-cognito-amplify-ui-additional"></a>

El archivo `App.js` debe contener el siguiente código:

```
import './App.css';
import { Amplify } from 'aws-amplify';
import awsExports from './aws-exports';
import { fetchAuthSession } from 'aws-amplify/auth';
import { Authenticator } from '@aws-amplify/ui-react';
import '@aws-amplify/ui-react/styles.css';
Amplify.configure({ ...awsExports });
let token = (await fetchAuthSession()).tokens?.idToken?.toString();
function App() {
  return (
      <Authenticator>
        {({ signOut, user }) => (
            <div>
              <p>Welcome {user.username}</p>
                <p>Your token is: {token}</p>
              <button onClick={signOut}>Sign out</button>
            </div>
        )}
      </Authenticator>
  );
}

export default App;
```

# Crear una aplicación React con AWS Amplify y añadir autenticación con Amazon Cognito
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito"></a>

*Rishi Singla, Amazon Web Services*

## Resumen
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito-summary"></a>

Este patrón muestra cómo usar AWS Amplify para crear una aplicación basada en React y cómo añadir autenticación a frontend mediante Amazon Cognito. AWS Amplify consta de un conjunto de herramientas (marco de código abierto, entorno de desarrollo visual, consola) y servicios (alojamiento de aplicaciones web y sitios web estáticos) para acelerar el desarrollo de aplicaciones móviles y web en AWS. 

## Requisitos previos y limitaciones
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa
+ [Node.js](https://nodejs.org/en/download/) y [npm](https://www.npmjs.com/get-npm) instalados en su equipo

**Versiones de producto**
+ Node.js versión 10.x o posterior (para verificar su versión, ejecute `node -v` en una ventana de terminal)
+ npm versión 6.x o posterior (para verificar su versión, ejecute `npm -v` en una ventana de terminal)

## Arquitectura
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito-architecture"></a>

**Pila de tecnología de destino**
+ AWS Amplify
+ Amazon Cognito

## Tools (Herramientas)
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito-tools"></a>
+ [Amplificar la interfaz de la línea de comandos (CLI)](https://docs.amplify.aws/cli/)
+ [Bibliotecas Amplify](https://docs.amplify.aws/lib/q/platform/react-native/) (bibliotecas cliente de código abierto)
+ [Amplify Studio](https://docs.amplify.aws/console/) (interfaz visual)

## Epics
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito-epics"></a>

### Instalar la CLI de AWS Amplify
<a name="install-aws-amplify-cli"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar la CLI de Amplify | La CLI de Amplify es una cadena de herramientas unificada para crear servicios en la nube de AWS para su aplicación React. Para instalar la CLI de Amplify, ejecute:<pre>npm install -g @aws-amplify/cli</pre>npm le notificará si hay una nueva versión principal disponible. Si es así, utilice el siguiente comando para actualizar su versión de npm:<pre>npm install -g npm@9.8.0</pre>donde 9.8.0 se refiere a la versión que desea instalar. | Desarrollador de aplicaciones | 

### Crear una aplicación React
<a name="create-a-react-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una React App. | Para crear una nueva aplicación React, utilice el comando:<pre>npx create-react-app amplify-react-application</pre>donde `ampify-react-application` es el nombre de la aplicación.Cuando haya creado correctamente la aplicación, verá el siguiente mensaje:<pre>Success! Created amplify-react-application</pre>Se creará un directorio con varias subcarpetas para la aplicación React. | Desarrollador de aplicaciones | 
| Inicie la aplicación en el equipo local. | Vaya al directorio `amplify-react-application` que se creó en el paso anterior y ejecute el comando:<pre>amplify-react-application% npm start</pre>Esto inicia la aplicación React en la máquina local. | Desarrollador de aplicaciones | 

### Configurar la CLI de Amplify
<a name="configure-the-amplify-cli"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure Amplify para que se conecte a su cuenta de AWS. | Configure Amplify ejecutando el comando:<pre>amplify-react-application % amplify configure</pre>La CLI de Amplify le pide que siga estos pasos para configurar el acceso a su cuenta de AWS:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito.html)En este escenario, se requieren usuarios de IAM con acceso programático y credenciales de larga duración, lo que supone un riesgo de seguridad. Para ayudar a mitigar este riesgo, le recomendamos que brinde a estos usuarios únicamente los permisos que necesitan para realizar la tarea y que los elimine cuando ya no los necesiten. Las claves de acceso se pueden actualizar si es necesario. Para obtener más información, consulte [Actualización de claves de acceso](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey) en la *Guía de usuario de IAM*.Estos pasos se muestran en la terminal de la siguiente manera.<pre>Follow these steps to set up access to your AWS account:<br />Sign in to your AWS administrator account:<br />https://console.aws.amazon.com/<br />Press Enter to continue<br />Specify the AWS Region<br />? region:  us-east-1<br />Follow the instructions at<br />https://docs.amplify.aws/cli/start/install/#configure-the-amplify-cli<br />to complete the user creation in the AWS console<br />https://console.aws.amazon.com/iamv2/home#/users/create<br />Press Enter to continue<br />Enter the access key of the newly created user:<br />? accessKeyId:  ********************<br />? secretAccessKey:  ****************************************<br />This would update/create the AWS Profile in your local machine<br />? Profile Name:  new<br /><br />Successfully set up the new user.</pre>Para obtener más información sobre estos pasos, consulte la [documentación](https://docs.amplify.aws/cli/start/install/#configure-the-amplify-cli) del Amplify Dev Center. | AWS general, desarrollador de aplicaciones | 

### Inicializar Amplify
<a name="initialize-amplify"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicialice Amplify. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito.html) | Desarrollador de aplicaciones, AWS general | 

### Agregar la autenticación a frontend
<a name="add-authentication-to-the-frontend"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada la autenticación. | Puede usar el comando `amplify add <category>` para agregar característica como el inicio de sesión de un usuario o una API de backend. En este paso, utilizará el comando para añadir la autenticación.Amplify proporciona un servicio de autenticación de backend con Amazon Cognito, bibliotecas de frontend y un componente de Authenticator UI integrado. Las características incluyen el registro de usuarios, el inicio de sesión de los usuarios, la autenticación multifactorial, el cierre de sesión de los usuarios y el inicio de sesión sin contraseña. También puede autenticar a los usuarios mediante la integración con proveedores de identidad federados, como Amazon, Google y Facebook. La categoría de autenticación de Amplify se integra perfectamente con otras categorías de Amplify, como API, análisis y almacenamiento, para que pueda definir reglas de autorización para usuarios autenticados y no autenticados.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito.html) | Desarrollador de aplicaciones, AWS general | 

### Cómo cambiar el archivo App.js
<a name="change-the-app-js-file"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cambie el archivo App.js. | En la carpeta `src`, abra y revise el archivo `App.js`. El archivo modificado debe tener el siguiente aspecto:<pre>{  App.Js File after modifications:<br />import React from 'react';<br />import logo from './logo.svg';<br />import './App.css';<br />import { Amplify } from 'aws-amplify';<br />import { withAuthenticator, Button, Heading } from '@aws-amplify/ui-react';<br />import awsconfig from './aws-exports';<br />Amplify.configure(awsconfig);<br />function App({ signOut }) {<br />  return (<br />      <div><br />      <h1>Thankyou for doing verification</h1><br />      <h2>My Content</h2><br />       <button onClick={signOut}>Sign out</button><br />    </div><br />  );<br />}<br />export default withAuthenticator(App);</pre> | Desarrollador de aplicaciones | 
| Importe paquetes de React. | El archivo `App.js` importa dos paquetes de React. Instale estos paquete mediante el comando:<pre>amplify-react-application1 % npm install --save aws-amplify @aws-amplify/ui-react</pre> | Desarrollador de aplicaciones | 

### Inicie la aplicación React y compruebe la autenticación
<a name="launch-the-react-app-and-check-authentication"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie la aplicación. | Inicie la aplicación React en su máquina local:<pre>amplify-react-application1 % npm start</pre> | Desarrollador de aplicaciones, AWS general | 
| Compruebe la autenticación. | Compruebe si la aplicación solicita los parámetros de autenticación. (En nuestro ejemplo, configuramos el correo electrónico como método de inicio de sesión).La frontend UI debería pedirle las credenciales de inicio de sesión y ofrecerle la opción de crear una cuenta.También puede configurar el proceso de compilación de Amplify para añadir el backend como parte de un flujo de trabajo de implementación continua. Sin embargo, este patrón no aborda esa opción. | Desarrollador de aplicaciones, AWS general | 

## Recursos relacionados
<a name="create-a-react-app-by-using-aws-amplify-and-add-authentication-with-amazon-cognito-resources"></a>
+ [Introducción](https://docs.npmjs.com/getting-started) (documentación de npm)
+ [Crear una cuenta de AWS independiente](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html) (documentación de administración de cuentas de AWS) 
+ [Documentación de AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html)
+ [Documentación de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html)

# Cree un portal para microinterfaces mediante Angular AWS Amplify y Module Federation
<a name="create-amplify-micro-frontend-portal"></a>

*Milena Godau y Pedro Garcia, Amazon Web Services*

## Resumen
<a name="create-amplify-micro-frontend-portal-summary"></a>

Una arquitectura de micro-frontend permite a varios equipos trabajar en diferentes partes de una aplicación de frontend de forma independiente. Cada equipo puede desarrollar, crear e implementar un fragmento del frontend sin interferir con otras partes de la aplicación. Desde la perspectiva del usuario final, parece ser una aplicación única y cohesiva. Sin embargo, están interactuando con varias aplicaciones independientes publicadas por diferentes equipos.

En este documento se describe cómo crear una arquitectura de micro-frontend mediante el uso de [AWS Amplify](https://docs.amplify.aws/gen1/angular/), el marco de frontend de [Angular](https://angular.dev/overview) y [Module Federation](https://webpack.js.org/concepts/module-federation/). En este patrón, los micro-frontends se combinan en el lado del cliente mediante una aplicación de intérprete de comandos (o *principal*). La aplicación de intérprete de comandos actúa como un contenedor que recupera, muestra e integra los micro-frontends. La aplicación de intérprete de comandos gestiona el enrutamiento global, que carga diferentes micro-frontends. El complemento [@angular-architects/module-federation](https://www.npmjs.com/package/@angular-architects/module-federation) integra Module Federation con Angular. Para implementar la aplicación shell y las microinterfaces, utilice. AWS Amplify Los usuarios finales acceden a la aplicación a través de un portal web.

El portal está dividido verticalmente. Esto significa que los micro-frontends son vistas completas o grupos de vistas, en lugar de partes de la misma vista. Por lo tanto, la aplicación de intérprete de comandos carga solo un micro-frontend cada vez.

Los micro-frontends se implementan como módulos remotos. La aplicación de intérprete de comandos carga estos módulos remotos de forma lenta, lo que aplaza la inicialización del micro-frontend hasta que sea necesaria. Este enfoque optimiza el rendimiento de la aplicación al cargar solo los módulos necesarios. Esto reducirá el tiempo de carga inicial y mejorará la experiencia general del usuario. Además, comparte dependencias comunes entre los módulos a través del archivo de configuración del paquete web (**webpack.config.js**). Esta práctica promueve la reutilización del código, reduce la duplicación y agiliza el proceso de agrupación.

## Requisitos previos y limitaciones
<a name="create-amplify-micro-frontend-portal-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Node.js y npm [instalados](https://nodejs.org/en/download/).
+ CLI de Amplify [instalada](https://docs.amplify.aws/gen1/angular/tools/cli/)
+ CLI de Angular [instalada](https://angular.io/cli)
+ [Permisos](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsamplify.html) de uso AWS Amplify
+ Familiaridad con Angular

**Versiones de producto**
+ Versión 13.1.2 o posterior de la CLI de Angular
+ @angular-architects/module-federation versión 14.0.1 o posterior
+ webpack versión 5.4.0 o posterior
+ AWS Amplify Generación 1

**Limitaciones**

Una arquitectura de micro-frontend es un enfoque poderoso para crear aplicaciones web escalables y resilientes. Sin embargo, es fundamental comprender los siguientes desafíos potenciales antes de adoptar este enfoque:
+ **Integración**: uno de los principales desafíos es el posible aumento de la complejidad en comparación con los micro-frontends monolíticos. Organizar múltiples micro-frontends, gestionar la comunicación entre ellos y gestionar las dependencias compartidas puede resultar más complejo. Además, puede haber una sobrecarga de rendimiento asociada a la comunicación entre los micro-frontends. Esta comunicación puede aumentar la latencia y reducir el rendimiento. Esto debe abordarse mediante mecanismos de mensajería eficientes y estrategias de intercambio de datos.
+ **Duplicación de código**: dado que cada micro-frontend se desarrolla de forma independiente, existe el riesgo de duplicar el código para funciones comunes o bibliotecas compartidas. Esto puede aumentar el tamaño total de la aplicación e introducir problemas de mantenimiento.
+ **Coordinación y administración**: coordinar los procesos de desarrollo e implementación en múltiples micro-frontends puede ser un desafío. Garantizar un control de versiones uniforme, gestionar las dependencias y mantener la compatibilidad entre los componentes se vuelve más fundamental en una arquitectura distribuida. Establecer una gobernanza clara, directrices y procesos automatizados de pruebas e implementación es esencial para una colaboración y una entrega fluidas.
+ **Pruebas**: probar arquitecturas de micro-frontends puede ser más complejo que probar micro-frontends monolíticos. Se requieren esfuerzos adicionales y estrategias de prueba especializadas para realizar end-to-end pruebas y ensayos de integración entre componentes y para validar experiencias de usuario consistentes en múltiples microinterfaces.

Antes de decidirse por el enfoque de las microinterfaces, le recomendamos que consulte Cómo [entender](https://docs.aws.amazon.com/prescriptive-guidance/latest/micro-frontends-aws/introduction.html) e implementar las microinterfaces en. AWS

## Arquitectura
<a name="create-amplify-micro-frontend-portal-architecture"></a>

En una arquitectura de micro-frontend, cada equipo desarrolla e implementa las características de forma independiente. La siguiente imagen muestra cómo trabajan juntos varios DevOps equipos. El equipo del portal desarrolla la aplicación de intérprete de comandos. La aplicación de intérprete de comandos actúa como contenedor. Recupera, muestra e integra las aplicaciones de microinterfaz publicadas por otros equipos. DevOps Se utiliza AWS Amplify para publicar la aplicación shell y las aplicaciones de microinterfaz.

![\[Publicación de varios micro-frontends en una aplicación de intérprete de comandos a la que el usuario accede a través de un portal web.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/ddf82a69-bf1b-4ad1-8e60-3dd375699936/images/cf045bf1-11ea-46d9-93cb-3c603122450d.png)


El diagrama de la arquitectura muestra el flujo de trabajo siguiente:

1. El equipo del portal desarrolla y mantiene la aplicación de intérprete de comandos. La aplicación de intérprete de comandos organiza la integración y el renderizado de los micro-frontends para componer todo el portal.

1. Los equipos A y B desarrollan y mantienen uno o más micro-frontends o características que se integran en el portal. Cada equipo puede trabajar de forma independiente en sus respectivos micro-frontends.

1. El usuario final se autentica mediante Amazon Cognito.

1. El usuario final accede al portal y se carga la aplicación de intérprete de comandos. A medida que el usuario navega, la aplicación de intérprete de comandos se encarga del enrutamiento y recupera el micro-frontend solicitado y carga su paquete.

## Tools (Herramientas)
<a name="create-amplify-micro-frontend-portal-tools"></a>

**Servicios de AWS**
+ [AWS Amplify](https://docs.amplify.aws/angular/start/)es un conjunto de herramientas y funciones especialmente diseñadas que ayudan a los desarrolladores frontend, web y móvil a crear rápidamente aplicaciones completas. AWS En este patrón, se utiliza la CLI de Amplify para implementar las aplicaciones de micro-frontend de Amplify.
+ [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 los comandos de tu consola de línea de comandos.

**Otras herramientas**
+ [@angular-architects/module-federation](https://github.com/angular-architects/module-federation-plugin) es un complemento que integra Angular con Module Federation.
+ [Angular](https://angular.dev/overview) es un marco de aplicaciones web de código abierto para crear aplicaciones de una sola página modernas, escalables y comprobables. Sigue una arquitectura modular y basada en componentes que promueve la reutilización y el mantenimiento del código.
+ [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.
+ [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.
+ [Webpack Module Federation](https://webpack.js.org/concepts/module-federation/) lo ayuda a cargar código que se compila e implementa de forma independiente, como micro-frontends o complementos, en una aplicación.

**Repositorio de código**

El código de este patrón está disponible en el [portal Microfrontend utilizando Angular y](https://github.com/aws-samples/angular-module-federation-mfe) los repositorios Module Federation. GitHub Este repositorio contiene las dos carpetas siguientes:
+ `shell-app` contiene el código de la aplicación de intérprete de comandos.
+ `feature1-app` contiene un ejemplo de micro-frontend. La aplicación de intérprete de comandos busca este micro-frontend y lo muestra como una página dentro de la aplicación del portal.

## Prácticas recomendadas
<a name="create-amplify-micro-frontend-portal-best-practices"></a>

Las arquitecturas de micro-frontend ofrecen numerosas ventajas, pero también introducen complejidad. Las siguientes son algunas de las prácticas recomendadas para un desarrollo fluido, un código de alta calidad y una excelente experiencia de usuario:
+ **Planificación y comunicación**: para agilizar la colaboración, invierta en planificación, diseño y canales de comunicación claros desde el principio.
+ **Coherencia en el diseño**: aplique un estilo visual coherente en todos los micro-frontends mediante el uso de sistemas de diseño, guías de estilo y bibliotecas de componentes. Esto proporciona una experiencia de usuario coherente y acelera el desarrollo.
+ **Gestión de las dependencias**: dado que los micro-frontends evolucionan de forma independiente, adopte contratos y estrategias de control de versiones estandarizados para administrar las dependencias de forma eficaz y evitar problemas de compatibilidad.
+ **Arquitectura de micro-frontend**: para permitir el desarrollo y la implementación independientes, cada micro-frontend debe tener una responsabilidad clara y bien definida en relación con una funcionalidad encapsulada.
+ **Integración y comunicación**: para facilitar una integración fluida y minimizar los conflictos, defina contratos y protocolos de comunicación claros entre las microinterfaces APIs, incluidos los eventos y los modelos de datos compartidos.
+ **Pruebas y control de calidad**: implemente la automatización de las pruebas y los procesos de integración continua para los micro-frontends. Esto mejora la calidad general, reduce el esfuerzo de realizar pruebas manuales y valida la funcionalidad entre las interacciones de los micro-frontends.
+ **Optimización del rendimiento**:** **supervise continuamente las métricas de rendimiento y realice un seguimiento de las dependencias entre los micro-frontends. Esto lo ayuda a identificar los cuellos de botella y a mantener un rendimiento óptimo de las aplicaciones. Para ello, utilice herramientas de supervisión del rendimiento y análisis de dependencias.
+ **Experiencia de desarrollador**: para centrarse en la experiencia del desarrollador, proporcione documentación, herramientas y ejemplos claros. Esto lo ayuda a agilizar el desarrollo e incorporar nuevos miembros al equipo.

## Epics
<a name="create-amplify-micro-frontend-portal-epics"></a>

### Creación de la aplicación de intérprete de comandos
<a name="create-the-shell-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la aplicación de intérprete de comandos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Instale el complemento. | En la CLI de Angular, introduzca el siguiente comando para instalar el complemento [@angular-architects/module-federation](https://www.npmjs.com/package/@angular-architects/module-federation):<pre>ng add @angular-architects/module-federation --project shell --port 4200</pre> | Desarrollador de aplicaciones | 
| Añada la URL del micro-frontend como variable de entorno. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Defina el enrutamiento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Declare el módulo `mfe1`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Prepare la precarga para el micro-frontend. | La precarga del micro-frontend ayuda al paquete web a negociar adecuadamente las bibliotecas y paquetes compartidos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Ajuste el contenido HTML. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 

### Creación de la aplicación de micro-frontend
<a name="create-the-micro-frontend-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el micro-frontend. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Instale el complemento. | Introduzca el siguiente comando para instalar el complemento @angular-architects/module-federation:<pre>ng add @angular-architects/module-federation --project mfe1 --port 5000</pre> | Desarrollador de aplicaciones | 
| Cree un módulo y un componente. | Introduzca los siguientes comandos para crear un módulo y un componente y exportarlos como módulo de entrada remota:<pre>ng g module mfe1 --routing<br />ng g c mfe1</pre> | Desarrollador de aplicaciones | 
| Defina la ruta de enrutamiento predeterminada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Añada la ruta `mfe1`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Edite el archivo **webpack.config.js**. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Ajuste el contenido HTML. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 

### Ejecución local de las aplicaciones
<a name="run-the-applications-locally"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la aplicación `mfe1`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Ejecute la aplicación de intérprete de comandos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 

### Refactorice la aplicación de intérprete de comandos para gestionar un error de carga en el micro-frontend.
<a name="refactor-the-shell-application-to-handle-a-micro-frontend-loading-error"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un módulo y un componente. | En la carpeta raíz de la aplicación de intérprete de comandos, introduzca los siguientes comandos para crear un módulo y un componente para una página de errores:<pre>ng g module error-page --routing<br />ng g c error-page</pre> | Desarrollador de aplicaciones | 
| Ajuste el contenido HTML. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Defina la ruta de enrutamiento predeterminada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Cree una función para cargar micro-frontends. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 
| Pruebe la gestión de errores. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 

### Implemente las aplicaciones mediante AWS Amplify
<a name="deploy-the-applications-by-using-amplifylong"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente el micro-frontend. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Implemente la aplicación de intérprete de comandos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones, propietario de la aplicación | 
| Habilite CORS. | Como las aplicaciones de intérprete de comandos y micro-frontend se alojan de forma independiente en dominios diferentes, debe habilitar el uso compartido de recursos entre orígenes (CORS) en el micro-frontend. Esto permite que la aplicación de intérprete de comandos cargue el contenido desde un origen diferente. Para habilitar CORS, añada encabezados personalizados.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Cree una regla de reescritura en la aplicación de intérprete de comandos. | La aplicación Angular shell está configurada para usar el HTML5 enrutamiento. Si el usuario realiza una actualización exhaustiva, Amplify intenta cargar una página desde la URL actual. Esto genera un error 403. Para evitarlo, añada una regla de reescritura en la consola de Amplify.Para crear la regla de reescritura, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Pruebe el portal web. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | Desarrollador de aplicaciones | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine las aplicaciones. | Si ya no necesita las aplicaciones de intérprete de comandos y micro-frontend, elimínelas. Esto ayudará a evitar cargos por recursos que no utiliza.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | AWS general | 

## Resolución de problemas
<a name="create-amplify-micro-frontend-portal-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No hay ningún AWS perfil disponible al ejecutar el comando `amplify init` | Si no tiene un AWS perfil configurado, puede continuar con el `amplify init` comando. Sin embargo, debe seleccionar la opción `AWS access keys` cuando se le pida el método de autenticación. Tenga AWS a mano su clave de acceso y su clave secreta.Como alternativa, puede configurar un perfil con nombre para AWS CLI. Para obtener instrucciones, consulte los [ajustes de configuración y del archivo de credenciales](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) en la AWS CLI documentación. | 
| Error al cargar las entradas remotas | Si se produce un error al cargar las entradas remotas en el archivo **main.ts** de la aplicación de intérprete de comandos, asegúrese de que la variable `environment.mfe1URL` esté configurada correctamente. El valor de esta variable debe ser la URL del micro-frontend. | 
| Error 404 al acceder al micro-frontend. | Si recibe un error 404 al intentar acceder al micro-frontend local, por ejemplo, en `http://localhost:4200/mfe1`, compruebe lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-amplify-micro-frontend-portal.html) | 

## Información adicional
<a name="create-amplify-micro-frontend-portal-additional"></a>

**AWS documentación**
+ [Comprensión e implementación de las microinterfaces en AWS(orientación](https://docs.aws.amazon.com/prescriptive-guidance/latest/micro-frontends-aws/introduction.html)AWS prescriptiva)
+ [CLI de Amplify](https://docs.amplify.aws/gen1/angular/tools/cli/) (documentación de Amplify)
+ [Alojamiento de Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) (documentación de Amplify)

**Otras referencias**
+ [Module Federation](https://webpack.js.org/concepts/module-federation/)
+ [Node.js](https://nodejs.org/en/)
+ [Angular](https://angular.io/)
+ [@angular-architects/module-federation](https://www.npmjs.com/package/@angular-architects/module-federation)

# Implemente una aplicación de una sola página basada en React en Amazon S3 y CloudFront
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront"></a>

*Jean-Baptiste Guillois, Amazon Web Services*

## Resumen
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-summary"></a>

Una aplicación de una sola página (SPA) es un sitio web o una aplicación web que actualiza dinámicamente el contenido de una página web mostrada mediante el uso de. JavaScript APIs Este enfoque mejora la experiencia del usuario y el rendimiento de un sitio web porque solo actualiza los datos nuevos en lugar de volver a cargar toda la página web desde el servidor.

Este patrón proporciona un step-by-step enfoque para codificar y alojar un SPA escrito en React en Amazon Simple Storage Service (Amazon S3) y Amazon. CloudFront El SPA de este patrón usa una API REST que está configurada en Amazon API Gateway y expuesta a través de una CloudFront distribución de Amazon para simplificar la administración del [intercambio de recursos entre orígenes (CORS).](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html)

## Requisitos previos y limitaciones
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ Node.js y `npm`, instalados y configurados. Para obtener más información, consulte la sección [Descargas](https://nodejs.org/en/download/) de la documentación de Node.js.
+ Yarm, instalado y configurado. Para obtener más información, consulte la [documentación de Yarn](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable).
+ Git, instalado y configurado. Para obtener más información, consulte la [documentation de Git](https://github.com/git-guides/install-git).

## Arquitectura
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-architecture"></a>

![\[Arquitectura para implementar un SPA basado en React en Amazon S3 y CloudFront\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/970a9d13-e8a2-44ac-aca5-a066e4be60e8/images/96061e05-8ac8-446e-b1da-baa6fc1cc7b6.png)


Esta arquitectura se implementa automáticamente mediante el uso de AWS CloudFormation (infraestructura como código). Utiliza servicios regionales como Amazon S3 para almacenar los activos estáticos y Amazon CloudFront con Amazon API Gateway para exponer los puntos de enlace de la API regional (REST). Los registros de la aplicación se recopilan a través de Amazon CloudWatch. Todas las llamadas a la AWS API se auditan. AWS CloudTrail Toda la configuración de seguridad (por ejemplo, las identidades y los permisos) se gestiona en AWS Identity and Access Management (IAM). El contenido estático se entrega a través de la red de entrega de CloudFront contenido (CDN) de Amazon y Amazon Route 53 gestiona las consultas de DNS.

## Tools (Herramientas)
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-tools"></a>

**Servicios de AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [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 durante todo su ciclo de vida en todas Cuentas de AWS las regiones.
+ [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.
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)le ayuda a auditar la gobernanza, el cumplimiento y el riesgo operativo de su empresa Cuenta 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.
+ [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 Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/) es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) 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 aplicación de muestra de este patrón está disponible en el repositorio de aplicaciones de una sola página GitHub [CORS basado en React](https://github.com/aws-samples/react-cors-spa).

## Prácticas recomendadas
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-best-practices"></a>

Al utilizar el almacenamiento de objetos Amazon S3, puede almacenar los activos estáticos de su aplicación de forma segura, altamente resiliente, eficaz y rentable. No es necesario utilizar un contenedor dedicado ni una instancia de Amazon Elastic Compute Cloud (Amazon EC2) para esta tarea.

Al utilizar la red de entrega de CloudFront contenido de Amazon, puedes reducir la latencia que pueden experimentar los usuarios cuando acceden a tu aplicación. También puede conectar un firewall de aplicaciones web ([AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/cloudfront-features.html)) para proteger sus activos de ataques malintencionados.

## Epics
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-epics"></a>

### Cree e implemente la aplicación de forma local
<a name="locally-build-and-deploy-your-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Ejecute el siguiente comando para clonar el repositorio de la aplicación de ejemplo:<pre>git clone https://github.com/aws-samples/react-cors-spa react-cors-spa && cd react-cors-spa</pre> | Desarrollador de aplicaciones, AWS DevOps | 
| Implemente la aplicación de forma local. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.html) | Desarrollador de aplicaciones, AWS DevOps | 
|  Acceda a la aplicación de forma local. | Abra una ventana del navegador e introduzca la URL `http://localhost:3000` para acceder a la aplicación. | Desarrollador de aplicaciones, AWS DevOps | 

### Implemente de la aplicación
<a name="deploy-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la AWS CloudFormation plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Personalice los archivos de origen de su aplicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.html) | Desarrollador de aplicaciones | 
| Cree el paquete de aplicación. | En el directorio del proyecto, ejecute el comando `yarn build` para crear el paquete de aplicación. | Desarrollador de aplicaciones | 
| Implemente el paquete de aplicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.html) | Desarrollador de aplicaciones, AWS DevOps | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Acceda y pruebe la aplicación. | Abra una ventana del navegador y, a continuación, pegue el dominio de CloudFront distribución (el `SPADomain` resultado de la CloudFormation pila que implementó anteriormente) para acceder a la aplicación. | Desarrollador de aplicaciones, AWS DevOps | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine el contenido del bucket de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.html) | AWS DevOps, desarrollador de aplicaciones | 
| Elimine la CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.html) | AWS DevOps, desarrollador de aplicaciones | 

## Recursos relacionados
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-resources"></a>

Para implementar y alojar su aplicación web, también puede utilizar [AWS Amplify Hosting](https://docs.aws.amazon.com/amplify/latest/userguide/getting-started.html), que proporciona un flujo de trabajo basado en Git para alojar aplicaciones web sin servidor y full stack con implementación continua. Amplify Hosting forma parte de [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html), que proporciona un conjunto de herramientas y funciones especialmente diseñadas que permiten a los desarrolladores frontend, web y móvil crear aplicaciones completas de forma rápida y sencilla. AWS

## Información adicional
<a name="deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront-additional"></a>

Para gestionar las solicitudes URLs no válidas del usuario que puedan generar 403 errores, una página de errores personalizada configurada en la CloudFront distribución detecta 403 errores y los redirige al punto de entrada de la aplicación (). `index.html`

Para simplificar la administración de CORS, la API REST se expone a través de una CloudFront distribución.

# Implemente una API de Amazon API Gateway en un sitio web interno mediante puntos de conexión privados y un Equilibrador de carga de aplicación
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer"></a>

*Saurabh Kothari, Amazon Web Services*

## Resumen
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer-summary"></a>

Este patrón muestra cómo implementar una API de Amazon API Gateway en un sitio web interno al que se puede acceder desde una red en las instalaciones. Aprenderá a crear un nombre de dominio personalizado para una API privada mediante una arquitectura diseñada con puntos de enlace privados, un Application Load Balancer, PrivateLink AWS y Amazon Route 53. Esta arquitectura evita las consecuencias imprevistas del uso de un nombre de dominio y un servidor proxy personalizados para facilitar el enrutamiento basado en el dominio en una API. Por ejemplo, si despliega un punto de conexión de nube privada virtual (VPC) en una subred no enrutable, su red no podrá acceder a API Gateway. Una solución habitual consiste en utilizar un nombre de dominio personalizado y, a continuación, implementar la API en una subred enrutable, pero esto puede dañar otros sitios internos cuando la configuración del proxy transfiere el tráfico (`execute-api.{region}.vpce.amazonaws.com`) a AWS Direct Connect. Por último, este patrón puede ayudarle a cumplir los requisitos organizativos relacionados con el uso de una API privada a la que no se pueda acceder desde Internet y un nombre de dominio personalizado.

## Requisitos previos y limitaciones
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un certificado de indicación de nombre de servidor (SNI) para su sitio web y API
+ Una conexión desde un entorno local a una cuenta de AWS configurada mediante AWS Direct Connect o AWS VPN Site-to-Site
+ Una [zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) con el dominio correspondiente (por ejemplo, domain.com) que se resuelve desde una red en las instalaciones y reenvía las consultas de DNS a Route 53
+ Una subred privada enrutable a la que se puede acceder desde una red en las instalaciones

**Limitaciones**

Para obtener más información sobre las cuotas (antes denominadas límites) para los equilibradores de carga, las reglas y otros recursos, consulte [Cuotas para los Equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html) en la documentación de Elastic Load Balancing.

## Arquitectura
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer-architecture"></a>

**Pila de tecnología**
+ Amazon API Gateway
+ Amazon Route 53
+ Equilibrador de carga de aplicación
+ AWS Certificate Manager
+ AWS PrivateLink

**Arquitectura de destino**

En el siguiente diagrama, se muestra cómo se implementa un Equilibrador de carga de aplicación en una VPC que dirige el tráfico web a un grupo objetivo de un sitio web o a un grupo objetivo de la API Gateway en función de las reglas de oyenete de Equilibrador de carga de aplicación. El grupo objetivo de API Gateway es una lista de direcciones IP para el punto de conexión de VPC en la API Gateway. Puerta de enlace de API está configurado para hacer que la API sea privada con su política de recursos. La política deniega todas las llamadas que no procedan de un punto de conexión de VPC específico. Los nombres de dominio personalizados de la API Gateway se actualizan para usar api.domain.com para la API y su fase. Las reglas de Equilibrador de carga de aplicación se agregan para enrutar el tráfico en función del nombre del host.

![\[Arquitectura que utiliza las reglas de oyente del equilibrador de carga de aplicación para dirigir el tráfico web.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/83145062-4535-4ad0-8947-4ea8950cd174/images/12715186-26ea-4123-b9ef-e3105a934ff3.png)


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

1. Un usuario de una red en las instalaciones intenta acceder a un sitio web interno. La solicitud se envía a ui.domain.com y api.domain.com. A continuación, la solicitud se resuelve en el Equilibrador de carga de aplicación interno de la subred privada enrutable. El SSL finaliza en el Equilibrador de carga de aplicación de ui.domain.com y api.domain.com.

1. Las reglas de oyente, configuradas en Equilibrador de carga de aplicación, comprueban el encabezado del host.

   a. Si el encabezado del host es api.domain.com, la solicitud se reenvía al grupo objetivo de la API Gateway. El Equilibrador de carga de aplicación inicia una nueva conexión a la API Gateway a través del puerto 443.

   b. Si el encabezado del host es ui.domain.com, la solicitud se reenvía al grupo objetivo del sitio web.

1. Cuando la solicitud llega a la API Gateway, la asignación de dominios personalizada configurada en la API Gateway determina el nombre de host y la API que se debe ejecutar.

**Automatizar y escalar**

Los pasos de este patrón se pueden automatizar mediante AWS CloudFormation o el AWS Cloud Development Kit (AWS CDK). Para configurar el grupo objetivo de las llamadas a la API Gateway, debe usar un recurso personalizado para recuperar la dirección IP del punto de conexión de VPC. Las llamadas a la API [describe-network-interfaces](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-network-interfaces.html)envían [describe-vpc-endpoints](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-vpc-endpoints.html)y devuelven las direcciones IP y el grupo de seguridad, que se pueden utilizar para crear el grupo de direcciones IP objetivo de la API.

## Tools (Herramientas)
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer-tools"></a>
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [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.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) le ayuda a crear, almacenar y renovar claves y certificados SSL/TLS X.509 públicos y privados que protegen sus sitios web y aplicaciones 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 lo ayuda a definir y aprovisionar la infraestructura de la nube de AWS en código.
+ [AWS](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) le PrivateLink ayuda a crear conexiones unidireccionales y privadas entre sus servicios externos VPCs a la VPC.

## Epics
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer-epics"></a>

### Crear un certificado SNI
<a name="create-an-sni-certificate"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un certificado SNI e impórtelo a ACM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Administrador de red | 

### Implemente un punto de conexión de VPC en una subred privada no enrutable
<a name="deploy-a-vpc-endpoint-in-a-non-routable-private-subnet"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de un punto de conexión de VPC de la interfaz para API Gateway. | Para crear un punto de conexión de VPC de interfaz, siga las instrucciones de [Acceder a un servicio de AWS mediante un punto de conexión de VPC de interfaz](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) en la documentación de Amazon Virtual Private Cloud (Amazon VPC). | Administrador de la nube | 

### Configure el Equilibrador de carga de aplicación
<a name="configure-the-application-load-balancer"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de un grupo de destino para la aplicación. | [Creación de un grupo de destino](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) para los recursos de interfaz de usuario de su aplicación. | Administrador de la nube | 
| Cree un grupo objetivo para el punto de conexión de la API Gateway. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Administrador de la nube | 
| Cree un Equilibrador de carga de aplicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Administrador de la nube | 
| Cree reglas de oyentes. | Cree [reglas de oyente](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules) para hacer lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Administrador de la nube | 

### Configure Route 53
<a name="configure-route-53"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una zona alojada privada. | [Cree una zona alojada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) para domain.com. | Administrador de la nube | 
| Cree registros de dominio. | [Cree registros CNAME](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) para lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Administrador de la nube | 

### Cree un punto de conexión de API privado en la API Gateway
<a name="create-a-private-api-endpoint-in-api-gateway"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree y configure un punto de conexión de API privado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Desarrollador de aplicaciones, administrador de la nube | 
| Cree un nombre de dominio personalizado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.html) | Administrador de la nube | 

## Recursos relacionados
<a name="deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer-resources"></a>
+ [Amazon API Gateway](https://aws.amazon.com/api-gateway/)
+ [Amazon Route 53](https://aws.amazon.com/route53/)
+ [Equilibrador de carga de aplicación](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/)
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)
+ [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/)

# Incorpore componentes visuales de Amazon Quick Sight en aplicaciones web mediante Amazon Cognito y la automatización iAC
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac"></a>

*Ishita Gupta, Saurabh Singh y Srishti Wadhwa, de Amazon Web Services*

## Resumen
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-summary"></a>

Este patrón ofrece un enfoque especializado para integrar los componentes visuales de Amazon Quick Sight en las aplicaciones de React mediante la incorporación de usuarios registrados con la autenticación simplificada de Amazon Cognito. Luego, estos recursos se implementan a través de una plantilla de infraestructura como código (IaC). A diferencia de la integración tradicional de cuadros de mando, esta solución aísla cuadros y gráficos específicos para integrarlos directamente en las aplicaciones de React, lo que mejora drásticamente tanto el rendimiento como la experiencia del usuario.

La arquitectura establece un flujo de autenticación eficiente entre la administración de usuarios de Amazon Cognito y los permisos de Quick Sight: los usuarios se autentican a través de Amazon Cognito y acceden a sus visualizaciones autorizadas según las reglas de uso compartido de paneles de Quick Sight. Este enfoque simplificado elimina la necesidad de acceder directamente a la consola Quick Sight y, al mismo tiempo, mantiene sólidos controles de seguridad.

El entorno completo se implementa a través de una AWS CloudFormation plantilla única que aprovisiona todos los componentes de infraestructura necesarios, incluidos:
+ Un backend sin servidor que utiliza Amazon API AWS Lambda Gateway
+ Alojamiento frontend seguro a través de Amazon CloudFront, Amazon Simple Storage Service (Amazon S3) y AWS WAF
+ Administración de identidades mediante Amazon Cognito

Todos los componentes se configuran siguiendo las prácticas recomendadas de seguridad con políticas de privilegios mínimos AWS Identity and Access Management (IAM), AWS WAF protección y cifrado. end-to-end

Esta solución es ideal para los equipos de desarrollo y las organizaciones que desean integrar análisis interactivos y seguros en sus aplicaciones y, al mismo tiempo, mantener un control detallado del acceso de los usuarios. La solución utiliza servicios AWS gestionados y automatización para simplificar el proceso de integración, mejorar la seguridad y garantizar la escalabilidad para satisfacer las cambiantes necesidades empresariales.

Público objetivo y casos de uso:
+ **Desarrolladores front-end** que desean integrar análisis en las aplicaciones de React
+ **Equipos de productos de software como servicio (SaaS)** que desean ofrecer visualizaciones de datos por usuario o basadas en roles
+ **Arquitectos de soluciones** que estén interesados en integrar la analítica en portales personalizados AWS 
+ **Desarrolladores de inteligencia empresarial (BI)** que desean exponer imágenes a usuarios autenticados sin necesidad de acceder por completo al panel
+ **Equipos empresariales** que desean integrar gráficos interactivos de Quick Sight en las herramientas internas

## Requisitos previos y limitaciones
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-prereqs"></a>

**Requisitos previos **

Para implementar correctamente este patrón, asegúrese de contar con lo siguiente:
+ **Activo Cuenta de AWS**: y Cuenta de AWS con permisos para implementar CloudFormation pilas y crear recursos de Lambda, API Gateway, Amazon Cognito CloudFront y Amazon S3.
+ Cuenta **Amazon Quick Sight: una cuenta** Quick Sight activa con al menos un panel de control que contiene imágenes. Para obtener instrucciones de configuración, consulte el [tutorial: Creación de un panel de Amazon Quick Sight con datos de ejemplo](https://docs.aws.amazon.com/quicksuite/latest/userguide/example-analysis.html) en la documentación de Amazon Quick.
+ **Un entorno de desarrollo** que consiste en:
  + Node.js (versión 16 o posterior)
  + npm o yarn instalados
  + Vite como herramienta de compilación de React
  + React (versión 19.1.1)
+ **Uso compartido** de paneles: los paneles deben compartirse en Quick Sight y el implementador debe iniciar sesión para acceder a las imágenes o paneles integrados.

**Limitaciones**
+ Este patrón utiliza el método de incrustación de usuarios registrados, que requiere que los implementadores tengan una cuenta de Quick Sight activa.
+ El acceso está restringido a los paneles e imágenes que se comparten explícitamente con el usuario autenticado de Quick Sight que está implementando este patrón. Si el implementador no tiene los derechos de acceso correctos, la generación de la URL incrustada fallará y las imágenes no se cargarán.
+ La CloudFormation pila debe implementarse en un entorno en el que Región de AWS se admitan Quick Sight, API Gateway y Amazon Cognito. 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/).

**Versiones de producto**
+ [SDK de incrustación de Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk), versión 2.10.1
+ [React](https://www.npmjs.com/package/react), versión 19.1.1
+ [Node.js](https://nodejs.org/en/download) versión 16 o posterior para garantizar la compatibilidad con las últimas versiones de React y Vite utilizadas en esta solución

## Arquitectura
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-architecture"></a>

**Arquitectura de destino**

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

![\[Arquitectura y flujo de trabajo para incrustar imágenes de Quick Sight en una aplicación de React.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/75ad12b1-caaa-4532-b709-8f3eaf3f9cc0/images/d0905f61-9055-49cf-887d-f46f5ca6c871.png)


En este flujo de trabajo:

1. **El usuario accede a la aplicación.** El usuario abre la aplicación web React mediante un navegador. La solicitud se enruta a una CloudFront distribución, que actúa como una red de entrega de contenido para la aplicación.

1. **AWS WAF filtra las solicitudes maliciosas**. ****Antes de que llegue la solicitud CloudFront, se tramita AWS WAF. AWS WAF inspecciona el tráfico y bloquea cualquier solicitud maliciosa o sospechosa según las normas de seguridad.

1. **Amazon S3 sirve archivos estáticos**. Si la solicitud está limpia, CloudFront recupera los recursos estáticos de la interfaz (HTML, JS, CSS) de un bucket privado de S3 mediante el control de acceso de origen (OAC) y los envía al navegador.

1. **El usuario inicia sesión**. Una vez cargada la aplicación, el usuario inicia sesión a través de Amazon Cognito, que autentica al usuario y devuelve un token web JSON (JWT) seguro para el acceso autorizado a la API.

1. **La aplicación realiza una solicitud** a la API. Tras iniciar sesión, la aplicación React realiza una llamada segura al `/get-embed-url` punto final de API Gateway y pasa el token JWT al encabezado de la solicitud para su autenticación.

1. **El token está validado**. API Gateway valida el token mediante un autorizador de Amazon Cognito. Si el token es válido, la solicitud continúa; de lo contrario, se deniega con una respuesta 401 (no autorizada).

1. **La solicitud se dirige a Lambda para su procesamiento**. A continuación, la solicitud validada se reenvía a una función Lambda de backend. Esta función se encarga de generar la URL de inserción del elemento visual de Quick Sight solicitado.

1. **Lambda genera la URL de inserción desde Quick** Sight. IAM utiliza una función de IAM con los permisos adecuados para llamar a la `GenerateEmbedUrlForRegisteredUser` API Quick Sight y generar una URL visual segura y orientada al usuario.

1. **Lambda devuelve la URL de inserción a API Gateway**. Lambda devuelve la URL de inserción generada a API Gateway como parte de una respuesta de JSON. Luego, esta respuesta se prepara para su entrega a la interfaz.

1. **La URL de inserción se envía al navegador.** La URL de inserción se devuelve al navegador como respuesta de la API.

1. **La imagen se muestra al usuario**. ****La aplicación React recibe la respuesta y utiliza el SDK de incrustación Quick Sight para renderizar la imagen específica para el usuario.

**Automatización y escala**

Las implementaciones de backend y frontend se automatizan por completo mediante el uso de CloudFormation, lo que aprovisiona todos AWS los recursos necesarios, incluidos Amazon Cognito, Lambda, API Gateway, Amazon S3,,, funciones de IAM y Amazon en una sola implementación. CloudFront AWS WAF CloudWatch 

Esta automatización garantiza una infraestructura uniforme y repetible en todos los entornos. Todos los componentes se escalan automáticamente: Lambda se ajusta a las invocaciones de funciones, entrega contenido en caché a nivel CloudFront mundial y API Gateway se escala en función de las solicitudes entrantes.

## Tools (Herramientas)
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-tools"></a>

**Servicios de AWS**
+ [Amazon Quick Sight](https://aws.amazon.com/quicksuite/quicksight/) es un servicio de inteligencia empresarial nativo de la nube que le ayuda a crear, administrar e integrar cuadros de mando y elementos visuales interactivos.
+ [Amazon API Gateway](https://aws.amazon.com/api-gateway/) gestiona APIs la función de puente entre la aplicación React y los servicios de backend.
+ [AWS Lambda](https://aws.amazon.com/lambda/)es un servicio de cómputo sin servidor que este patrón utiliza para generar una integración segura de Quick Sight de forma URLs dinámica y escalable automáticamente en función de las solicitudes.
+ [Amazon Cognito proporciona autenticación y autorización a](https://aws.amazon.com/cognito/) los usuarios y emite tokens seguros para el acceso a la API.
+ [Amazon S3](https://aws.amazon.com/s3/) aloja activos de frontend estáticos para este patrón y los proporciona de forma segura. CloudFront
+ [Amazon CloudFront ](https://aws.amazon.com/cloudfront/getting-started/) ofrece contenido front-end a nivel mundial con baja latencia y se integra con él AWS WAF para filtrar el tráfico.
+ [AWS WAF](https://aws.amazon.com/waf/)protege la aplicación web del tráfico malicioso mediante la aplicación de reglas de seguridad y la limitación de velocidad.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)automatiza el aprovisionamiento y la configuración de todos los recursos de la aplicación en una sola implementación.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) recopila registros y métricas de Lambda, API Gateway y AWS WAF para la supervisión y la solución de problemas.

**Herramientas de desarrollo**
+ [React JS](https://react.dev/) es un marco de interfaz que este patrón utiliza para crear la aplicación web e integrar imágenes de Quick Sight integradas.
+ [Vite](https://vite.dev/) es una herramienta de compilación que se utiliza para desarrollar rápidamente y optimizar las compilaciones de producción de la aplicación React.
+ El [SDK de incrustación de Quick Sight](https://www.npmjs.com/package/amazon-quicksight-embedding-sdk/v/2.10.1) facilita la integración de imágenes de Quick Sight en la aplicación React y permite una interacción perfecta entre la aplicación y las imágenes.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [Amazon Quick Sight Visual Embedding in React](https://github.com/aws-samples/sample-quicksight-visual-embedding).

## Prácticas recomendadas
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-best-practices"></a>

Este patrón implementa automáticamente las siguientes mejores prácticas de seguridad:
+ Utiliza grupos de usuarios de Amazon Cognito para la autenticación basada en JWT, con autenticación multifactor (MFA) opcional.
+ Se protege APIs con los autorizadores de Amazon Cognito y aplica políticas de IAM con privilegios mínimos en todos los servicios.
+ Implementa la incrustación de usuarios registrados de Quick Sight y aprovisiona automáticamente a los usuarios con la función de lector.
+ Aplica un cifrado en tránsito compatible con TLS 1.2 y versiones posteriores hasta HTTPS. CloudFront 
+ Cifra los datos en reposo mediante AES-256 para Amazon S3 con control de versiones y OAC.
+ Configura los planes de uso de API Gateway con limitaciones y cuotas.
+ Protege Lambda con concurrencia reservada y protección de variables de entorno.
+ Permite el registro para Amazon S3 CloudFront, Lambda y API Gateway; monitorea los servicios mediante el uso. CloudWatch
+ Cifra los registros, aplica controles de acceso y aplica políticas de denegación para las subidas sin HTTPS o sin cifrar.

Además, recomendamos lo siguiente:
+  CloudFormation Utilícelo para automatizar las implementaciones y mantener configuraciones consistentes en todos los entornos.
+ Asegúrese de que cada usuario tenga los permisos de Quick Sight correctos para acceder a las imágenes integradas.
+ Proteja los puntos de enlace de API Gateway con los autorizadores de Amazon Cognito y aplique el principio de privilegios mínimos para todas las funciones de IAM.
+ Guarde información confidencial, como los nombres de los recursos de Amazon (ARNs) y las variables de entorno, IDs en lugar de codificarla de forma rígida.
+ Optimice las funciones Lambda reduciendo las dependencias y mejorando el rendimiento del arranque en frío. Para obtener más información, consulte la AWS entrada del blog Cómo [optimizar el rendimiento del arranque en frío AWS Lambda mediante el uso de estrategias de cebado avanzadas con](https://aws.amazon.com/blogs/compute/optimizing-cold-start-performance-of-aws-lambda-using-advanced-priming-strategies-with-snapstart/). SnapStart
+ Añada su CloudFront dominio a la lista de dominios permitidos de Quick Sight para permitir una incrustación visual segura.
+ Supervise el rendimiento y la seguridad mediante CloudWatch el uso AWS WAF de registros, alertas y protección del tráfico.

**Otras prácticas recomendadas**
+ Utilice dominios personalizados con certificados SSL de AWS Certificate Manager para ofrecer una experiencia de usuario segura y personalizada.
+ Cifre los datos y CloudWatch registros de Amazon S3 mediante claves administradas por el cliente AWS Key Management Service (AWS KMS) para tener un mayor control del cifrado.
+ Amplíe AWS WAF las reglas con el bloqueo geográfico, la protección por inyección de SQL (SQLi), la protección contra secuencias de comandos entre sitios (XSS) y filtros personalizados para mejorar la prevención de amenazas.
+ Active CloudWatch las alarmas y supervise AWS Config, audite y AWS CloudTrail cumpla con la configuración en tiempo real.
+ Aplique políticas de IAM detalladas, refuerce la rotación de claves de API y permita el acceso entre cuentas solo cuando sea absolutamente necesario.
+ Realice evaluaciones de seguridad periódicas para garantizar la alineación con los marcos de cumplimiento, como los Controles de Sistemas y Organizaciones 2 (SOC 2), el Reglamento General de Protección de Datos (GDPR) y la Ley de Portabilidad y Responsabilidad de los Seguros de Salud (HIPAA).

## Epics
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-epics"></a>

### Prepare el entorno
<a name="prepare-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Clone el GitHub repositorio de esta solución en su sistema local y navegue hasta el directorio del proyecto:<pre>git clone https://github.com/aws-samples/sample-quicksight-visual-embedding.git<br /><br />cd sample-quicksight-visual-embedding</pre>Este repositorio contiene la CloudFormation plantilla y el código fuente de React necesarios para implementar la solución. | Desarrollador de aplicaciones | 

### Despliega la CloudFormation pila
<a name="deploy-the-cfn-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) Para obtener más información, consulte [Creación y administración de pilas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html) en la CloudFormation documentación. | Administrador de AWS | 
| Supervise la creación de pilas. | Supervisa la pila en la pestaña **Eventos** hasta que su estado sea **CREATE\$1COMPLETE**. | Administrador de AWS | 
| Recupera los resultados de la pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | Administrador de AWS | 

### Configure el entorno de interfaz
<a name="configure-the-frontend-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Recupere los identificadores visuales de Quick Sight. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | Administrador de Quick Sight | 
| Configura tu entorno local de React. | Para configurar tu entorno local de React y vincularlo a AWS los recursos, crea un `.env` archivo en la `my-app/` carpeta de tu GitHub repositorio local. Rellena el archivo con:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html)Este es un `.env` archivo de ejemplo:<pre>VITE_AWS_REGION=us-east-1<br /><br /># Cognito Configuration (from CloudFormation outputs)<br />VITE_USER_POOL_ID=us-east-1_xxxxxxxxx VITE_USER_POOL_WEB_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx<br /><br /># API Configuration (from CloudFormation outputs)<br />VITE_API_URL=https:/your-api-id.execute-api.us-east-1.amazonaws.com/prod<br /><br /># QuickSight Visual Configuration<br />VITE_DASHBOARD_ID=your-dashboard-id <br />VITE_SHEET_ID=your-sheet-id <br />VITE_VISUAL_ID=your-visual-id</pre> | Desarrollador de aplicaciones | 

### Configura la autenticación de usuarios
<a name="set-up-user-authentication"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear o administrar usuarios en Cognito | Para permitir el acceso de los usuarios autenticados a las imágenes de Quick Sight integradas, primero debe crear los usuarios en Amazon Cognito:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | Administrador de AWS | 
| Proporcione acceso al panel de control de Quick Sight | Para permitir el acceso a las imágenes de Quick Sight, conceda permiso de Visor a los usuarios autenticados:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html)Cada usuario recibirá un correo electrónico con un enlace al panel de control. Puede modificar los permisos en cualquier momento a través del menú **Compartir**.Para obtener más información, consulte [Conceder acceso a usuarios y grupos individuales de Amazon Quick Sight a un panel de Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/share-a-dashboard-grant-access-users.html) en la documentación de Amazon Quick. | Administrador de Quick Sight | 

### Cree e implemente la interfaz de React
<a name="build-and-deploy-the-react-frontend"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instala las dependencias y crea el proyecto. | En el directorio de aplicaciones de React, ejecuta los siguientes comandos para generar archivos de producción optimizados:<pre>cd my-app<br />npm install<br />npm run build</pre> | Desarrollador de aplicaciones | 
| Cargue los archivos de compilación en Amazon S3. | Cargue todos los archivos del `my-app/dist/` directorio al bucket de S3 aprovisionado por CloudFormation (no cargue la carpeta propiamente dicha). | Desarrollador de aplicaciones | 
| Cree una CloudFront invalidación. | En la [CloudFront consola](https://console.aws.amazon.com/cloudfront/v4/home), cree una invalidación para que Path `/*` actualice el contenido en caché tras la implementación. Para obtener instrucciones, consulte [Invalidar archivos](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation_Requests.html) en la documentación. CloudFront  | Administrador de AWS | 

### Configure la lista de permitidos de Quick Sight
<a name="configure-the-qsight-allowlist"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue el CloudFront dominio a la lista permitida de Quick Sight. | Para permitir que su CloudFront dominio incorpore imágenes de Quick Sight de forma segura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | Administrador de Quick Sight | 

### Acceda a la aplicación y verifique su funcionalidad
<a name="access-the-application-and-verify-functionality"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Abre la aplicación React. | Usa el **CloudFront dominio** (de CloudFormation las salidas) para abrir la aplicación web React implementada en un navegador. | Propietario de la aplicación | 
| Verifica la autenticación. | Inicie sesión en la aplicación con las credenciales de Amazon Cognito para verificar el flujo de autenticación y la validación de JWT a través de API Gateway. | Propietario de la aplicación | 
| Verifique las imágenes incrustadas. | Confirme que las imágenes de Quick Sight se carguen correctamente en la aplicación en función de los permisos de acceso específicos del usuario. | Propietario de la aplicación | 
| Valide la conectividad API y Lambda. | Confirme que la aplicación puede llamar correctamente a la `/get-embed-url` API y recuperar una inserción de Quick Sight válida URLs sin errores. | Propietario de la aplicación | 

### Supervise y mantenga la aplicación
<a name="monitor-and-maintain-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Supervise mediante el uso de CloudWatch. | Puede usar herramientas de AWS observabilidad para monitorear la aplicación y mantener un rendimiento seguro y escalable en la producción.Revise los registros de Lambda, las métricas de API Gateway y los eventos de autenticación de Amazon Cognito para garantizar CloudWatch el estado de las aplicaciones y detectar anomalías. | Administrador de AWS | 
| Realice un seguimiento y registre. AWS WAF CloudFront  | Inspeccione AWS WAF los registros para detectar solicitudes bloqueadas o sospechosas y CloudFront acceda a los registros para ver las métricas de rendimiento y almacenamiento en caché. | Administrador de AWS | 

## Resolución de problemas
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Error «Dominio no permitido» | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | 
| Errores de autenticación | Causas posibles:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html)Soluciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | 
| Errores de API Gateway | Causas posibles:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html)Soluciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | 
| Las imágenes de Quick Sight no se cargan | Causas posibles:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html)Soluciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | 
| Error «El usuario no tiene acceso» | Causas posibles:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html)Solución:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/embed-quick-sight-visual-components-into-web-apps-cognito-iac.html) | 

## Recursos relacionados
<a name="embed-quick-sight-visual-components-into-web-apps-cognito-iac-resources"></a>

** AWS documentación**
+ [Registrarse para obtener una suscripción a Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html)
+ [Análisis integrados para Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/embedded-analytics.html)
+ [Referencia de la API Quick Sight: GenerateEmbedUrlForRegisteredUser](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html)
+ [Grupos de usuarios de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools.html)
+ [AWS Lambda Guía para desarrolladores](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Guía para desarrolladores de Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)
+ [Monitorización básica y monitorización detallada en CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html)
+ [AWS CloudFormation Guía del usuario](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [Guía para CloudFront desarrolladores de Amazon](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)
+ [AWS WAF Guía para desarrolladores](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html)

**Tutoriales y videos**
+ [Análisis integrados para Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html)
+ [ YouTube Tutoriales de Amazon Quick Sight](https://www.youtube.com/results?search_query=amazon+quicksight+embedding)

# Explore el desarrollo completo de aplicaciones web nativas en la nube con Green Boost
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost"></a>

*Ben Stickley y Amiin Samatar, Amazon Web Services*

## Resumen
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-summary"></a>

En respuesta a las necesidades cambiantes de los desarrolladores, Amazon Web Services (AWS) reconoce la demanda crítica de un enfoque eficiente para desarrollar aplicaciones web nativas en la nube. El objetivo de AWS es ayudarlo a superar los obstáculos comunes asociados con la implementación de aplicaciones web en la nube de AWS. Al aprovechar las capacidades de las tecnologías modernas, como el TypeScript AWS Cloud Development Kit (AWS CDK), React y Node.js, este patrón tiene como objetivo agilizar y acelerar el proceso de desarrollo.

Basado en el kit de herramientas Green Boost (GB), el patrón ofrece una guía práctica para crear aplicaciones web que utilicen al máximo las amplias capacidades de AWS. Actúa como una hoja de ruta integral que lo guía a través del proceso de implementación de una aplicación web CRUD (creación, lectura, actualización, eliminación) fundamental integrada con la edición compatible con Amazon Aurora PostgreSQL. Esto se logra mediante el uso de la interfaz de la línea de comandos de Green Boost (CLI de Green Boost) y el establecimiento de un entorno de desarrollo en las instalaciones.

Tras la implementación exitoso de la aplicación, el patrón profundiza en los componentes clave de la aplicación web, como el diseño de la infraestructura, el desarrollo del backend y el frontend, y en herramientas esenciales como cdk-dia para la visualización, lo que facilita la gestión eficiente de los proyectos.

## Requisitos previos y limitaciones
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-prereqs"></a>

**Requisitos previos **
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) instalado
+ [Visual Studio Code (VS Code)](https://code.visualstudio.com/download) instalado
+ [Interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) instalada
+ [Kit de herramientas de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) instalado
+ [Node.js 18](https://nodejs.org/en/download) instalado o [Node.js 18 con pnpm](https://pnpm.io/cli/env) activado
+ [pnpm](https://pnpm.io/installation) está instalado, si no forma parte de la instalación de Node.js
+ Familiaridad básica con TypeScript AWS CDK, Node.js y React
+ Una [cuenta de AWS activa](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html)
+ [Una cuenta de AWS iniciada](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) mediante AWS CDK en `us-east-1`. La región de `us-east-1` AWS**** es necesaria para admitir las funciones de Amazon CloudFront Lambda @Edge.
+ [Credenciales de seguridad de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html), incluida `AWS_ACCESS_KEY_ID`, correctamente configuradas en su entorno de terminal
+ Para los usuarios de Windows, un terminal en modo administrador (para adaptarse a la forma en que pnpm gestiona los módulos de nodos)

**Versiones de producto**
+ AWS SDK para la JavaScript versión 3
+ AWS CDK versión 2
+ CLI de AWS versión 2.2
+ Node.js versión 18
+ React versión 18

## Arquitectura
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-architecture"></a>

**Pila de tecnología de destino**
+ Edición de Amazon Aurora compatible con PostgreSQL
+ Amazon CloudFront
+ Amazon CloudWatch
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ AWS Lambda
+ AWS Secrets Manager
+ Amazon Simple Notification Service (Amazon SNS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS WAF

**Arquitectura de destino**

El siguiente diagrama muestra que las solicitudes de los usuarios pasan por Amazon CloudFront, AWS WAF y AWS Lambda antes de interactuar con un bucket de S3, una base de datos de Aurora o EC2 una instancia y, finalmente, llegar a los desarrolladores. Los administradores, por otro lado, utilizan Amazon SNS y Amazon con CloudWatch fines de notificación y supervisión.

![\[Proceso de implementación de una aplicación web CRUD integrada con Amazon Aurora PostgreSQL mediante la CLI de Green Boost.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bacafc47-07c0-494b-8bbf-24bdc9b54f6a/images/129691e9-7fd3-4208-ab8c-05b9f40a5c4c.png)


Para obtener una visión más profunda de la aplicación tras su implementación, puede crear un diagrama con [cdk-dia](https://github.com/pistazie/cdk-dia), como se muestra en el siguiente ejemplo.

![\[El primer diagrama muestra una vista centrada en el usuario; el diagrama cdk-dia muestra una vista de la infraestructura técnica.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bacafc47-07c0-494b-8bbf-24bdc9b54f6a/images/5e4c3321-47bd-44e7-bf14-f470eed984c1.png)


Estos diagramas muestran la arquitectura de la aplicación web desde dos ángulos distintos. El diagrama cdk-dia ofrece una vista técnica detallada de la infraestructura de CDK de AWS y destaca servicios específicos de AWS, como Amazon Aurora, compatible con PostgreSQL, y AWS Lambda. Por el contrario, el otro diagrama adopta una perspectiva más amplia y hace hincapié en el flujo lógico de los datos y las interacciones de los usuarios. La diferencia clave reside en el nivel de detalle: el cdk-dia profundiza en las complejidades técnicas, mientras que el primer diagrama ofrece una visión más centrada en el usuario.

La creación del diagrama cdk-dia se describe en la epopeya *Comprenda la infraestructura de aplicaciones mediante AWS CDK*.

## Tools (Herramientas)
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-tools"></a>

**Servicios de AWS**
+ La [edición de Amazon Aurora compatible con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) es un motor de base de datos relacional compatible con ACID, completamente administrado que le permite configurar, utilizar y escalar implementaciones de PostgreSQL.
+ [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.
+ 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.
+ [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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) le CloudWatch ayuda a supervisar las métricas de sus recursos de AWS y las aplicaciones que ejecuta en AWS en tiempo real.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) proporciona capacidad informática escalable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [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) le permite reemplazar las credenciales codificadas en el código, incluidas las contraseñas, con una llamada a la API de Secrets Manager para recuperar el secreto mediante programación.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) le permite 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 requerido para detectar y resolver problemas operativos y ayuda a utilizar y administrar los recursos de AWS a escala de manera segura. Este patrón utiliza el administrador de sesiones de AWS Systems Manager.
+ [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 permite almacenar, proteger y recuperar cualquier cantidad de datos. [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.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) es un firewall de aplicación web que le permite monitorizar las solicitudes HTTP y HTTPS que se reenvíen a los recursos de su aplicación web protegida

**Otras herramientas**
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto.
+ [Green Boost](https://awslabs.github.io/green-boost/overview/intro) es un conjunto de herramientas para crear aplicaciones web en AWS.
+ [Next.js](https://nextjs.org/docs) es un marco de React para añadir funciones y optimizaciones.
+ [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.
+ [pgAdmin](https://www.pgadmin.org/) es una herramienta de gestión de código abierto para PostgreSQL. Proporciona una interfaz gráfica que permite crear, mantener y utilizar objetos de bases de datos.
+ [pnpm](https://pnpm.io/motivation) es un administrador de paquetes para las dependencias del proyecto Node.js.

## Prácticas recomendadas
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-best-practices"></a>

Consulte la sección [Epics](#explore-full-stack-cloud-native-web-application-development-with-green-boost-epics) para obtener más información sobre las siguientes recomendaciones:
+ Supervise la infraestructura mediante Amazon CloudWatch Dashboards y alarmas.
+ Aplique las prácticas recomendadas de AWS mediante cdk-nag para ejecutar análisis estáticos de infraestructura como código (IaC).
+ Establezca el reenvío de puertos de base de datos a través de túneles SSH (Secure Shell) con Systems Manager Session Manager, que es más seguro que tener una dirección IP expuesta públicamente.
+ Gestione las vulnerabilidades ejecutando `pnpm audit`.
+ Aplique las mejores prácticas utilizando [Prettier [ESLint](https://eslint.org/)](https://prettier.io/)para realizar análisis estáticos del TypeScript código y estandarizar el formato del código.

## Epics
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-epics"></a>

### Implemente una aplicación web CRUD con Aurora compatible con PostgreSQL
<a name="deploy-a-crud-web-app-with-aurora-postgresql-compatible"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale la CLI de Green Boost. | Para instalar Green Boost CLI, ejecute el siguiente comando.<pre>pnpm add -g gboost</pre> | Desarrollador de aplicaciones | 
| Cree una aplicación GB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Instale las dependencias e implemente la aplicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html)Espere a que finalice la implementación (aproximadamente 20 minutos). Mientras espera, supervise las CloudFormation pilas de AWS en la CloudFormation consola. Observe cómo las estructuras definidas en el código se corresponden con el recurso implementado. Revise la [vista en árbol de CDK Construct](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html) en la CloudFormation consola. | Desarrollador de aplicaciones | 
| Accede a la aplicación. | Tras implementar su aplicación GB de forma local, puede acceder a ella mediante la CloudFront URL. La URL se imprime en la salida del terminal, pero encontrarla puede resultar un poco abrumador. Siga los pasos siguientes para encontrarlo rápidamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html)Como alternativa, puedes encontrar la CloudFront URL accediendo a la CloudFront consola de Amazon:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html)Copie el **nombre de dominio** asociado a la distribución. Tendrá un aspecto similar a `your-unique-id.cloudfront.net`. | Desarrollador de aplicaciones | 

### Supervisa con Amazon CloudWatch
<a name="monitor-by-using-amazon-cloudwatch"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ver el CloudWatch panel de control. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Habilitar de alertas. | Un CloudWatch panel de control le ayuda a monitorear activamente su aplicación web. Para supervisar de forma pasiva su aplicación web, puede activar las alertas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 

### Comprenda la infraestructura de aplicaciones mediante AWS CDK
<a name="understand-the-app-infrastructure-by-using-aws-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un diagrama de arquitectura. | Genere un diagrama de arquitectura de su aplicación web mediante [cdk-dia](https://github.com/pistazie/cdk-dia). La visualización de la arquitectura ayuda a mejorar la comprensión y la comunicación entre los miembros del equipo. Proporciona una visión general clara de los componentes del sistema y sus relaciones.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Use cdk-nag para aplicar las prácticas recomendadas. | Utilice [cdk-nag](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html) para ayudarle a mantener una infraestructura segura y que cumpla con las normas, aplicando las prácticas recomendadas y reduciendo el riesgo de vulnerabilidades de seguridad y errores de configuración.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 

### Evalúe la configuración y el esquema de la base de datos
<a name="evaluate-the-database-configuration-and-schema"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Adquiera variables de entorno. | Para obtener las variables de entorno requeridas, siga los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Establezca el reenvío de puertos. | Para establecer el reenvío de puertos, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Ajuste el tiempo de espera del Administrador de sesiones de Systems Manager. | (Opcional) Si el tiempo de espera predeterminado de la sesión de 20 minutos es demasiado corto, puede aumentarlo hasta 60 minutos en la consola de Systems Manager seleccionando **Administrador de sesiones**, **Preferencias**, **Editar**, **Tiempo de espera de sesión inactiva**. | Desarrollador de aplicaciones | 
| Visualice la base de datos. | pgAdmin es una herramienta de código abierto fácil de usar para administrar bases de datos PostgreSQL. Simplifica las tareas de las bases de datos, lo que le permite crear, administrar y optimizar las bases de datos de manera eficiente. Esta sección le guía a través de la [instalación de pgAdmin](https://www.pgadmin.org/download/) y el uso de sus funciones para la administración de bases de datos PostgreSQL.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 

### Depuración con Node.js
<a name="debug-with-node-js"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Depura el caso práctico de creación de objetos. | Para depuración del caso práctico de creación de elementos, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 

### Desarrolle el frontend
<a name="develop-the-frontend"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el servidor de desarrollo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 

### Trabajando con Green Boost
<a name="tooling-with-green-boost"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure monorepo y el administrador de paquetes pnpm. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Ejecute scripts pnpm. | Ejecute los siguientes comandos en la raíz de su repositorio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html)Observe cómo se ejecutan estos comandos en todos los espacios de trabajo. Los comandos se definen en el campo `package.json#scripts` de cada espacio de trabajo. | Desarrollador de aplicaciones | 
| Se utiliza ESLint para el análisis de código estático. | Para probar la capacidad de análisis de código estático de ESLint, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Gestione las dependencias y vulnerabilidades. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 
| Precomete los enlaces con Husky. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html)Estas herramientas son mecanismos que ayudan a evitar que el código incorrecto llegue a su aplicación. | Desarrollador de aplicaciones | 

### Derribe la infraestructura
<a name="tear-down-the-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine la implementación de su cuenta. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/explore-full-stack-cloud-native-web-application-development-with-green-boost.html) | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se pudo establecer el reenvío de puertos | Asegúrese de que sus credenciales de AWS estén configuradas correctamente y tengan los permisos necesarios.Compruebe que las variables de entorno del identificador de host bastión (`DB_BASTION_ID`) y del punto de conexión de la base de datos (`DB_ENDPOINT`) estén configuradas correctamente.Si sigue teniendo problemas, consulte la documentación de AWS para [solucionar problemas de conexiones SSH y Administrador de sesiones](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html). | 
| Sitio web no está cargando en `localhost:3000` | Confirme que la salida del terminal indica que el reenvío de puertos se ha realizado correctamente, incluida la dirección de reenvío.Asegúrese de que no haya procesos conflictivos al utilizar el puerto 3000 de su máquina en las instalaciones.Compruebe que la aplicación Green Boost esté correctamente configurada y ejecutándose en el puerto esperado (3000).Compruebe en su navegador web si hay extensiones o ajustes de seguridad que puedan bloquear las conexiones en las instalacioneses. | 
| Mensajes de error durante la implementación local (`pnpm deploy:local`) | Revise los mensajes de error detenidamente para identificar la causa del problema.Compruebe que las variables de entorno y los archivos de configuración necesarios estén configurados correctamente. | 

## Recursos relacionados
<a name="explore-full-stack-cloud-native-web-application-development-with-green-boost-resources"></a>
+ [Documentación de AWS SDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ [Documentación de Green Boost](https://awslabs.github.io/green-boost/learn/m1-deploy-gb-app)
+ [Documentación de Next.js](https://nextjs.org/docs)
+ [Documentación de Node.js](https://nodejs.org/en/docs/)
+ [Documentación de React](https://reactjs.org/docs/getting-started.html)
+ [TypeScript documentación](https://www.typescriptlang.org/docs/)

 

# Ejecute pruebas unitarias para una aplicación GitHub de Node.js desde AWS CodeBuild
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild"></a>

*Thomas Scott y Jean-Baptiste Guillois, Amazon Web Services*

## Resumen
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-summary"></a>

Este patrón proporciona un ejemplo de código fuente y componentes clave de pruebas unitarias para una API de juegos de Node.js. También incluye instrucciones para ejecutar estas pruebas unitarias desde un GitHub repositorio mediante AWS CodeBuild, como parte de su flujo de trabajo de integración y entrega continuas (CI/CD).

Las pruebas unitarias son un proceso de desarrollo de software en el que diferentes partes de una aplicación, llamadas *unidades*, se prueban de forma individual e independiente para comprobar su correcto funcionamiento. Las pruebas validan la calidad del código y confirman que funciona según lo esperado. Otros desarrolladores también pueden familiarizarse fácilmente con su base de código consultando las pruebas. Las pruebas unitarias reducen el tiempo de refactorización en el futuro, ayudan a los ingenieros a ponerse al día con su base de código con mayor rapidez y proporcionan confianza en el comportamiento esperado.

Las pruebas unitarias implican probar funciones individuales, incluidas las funciones de AWS Lambda. Para crear pruebas unitarias, necesita un marco de pruebas y una forma de validar las pruebas (aserciones). Los ejemplos de código de este patrón utilizan el marco de pruebas [Mocha](https://mochajs.org/) y la biblioteca de aserciones [Chai](https://www.chaijs.com/). 

Para obtener más información sobre las pruebas unitarias y ejemplos de componentes de las pruebas, consulte la sección de [Información adicional](#run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-additional).

## Requisitos previos y limitaciones
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-prereqs"></a>
+ Una cuenta de AWS activa con CodeBuild los permisos correctos
+ Una GitHub cuenta (consulte [las instrucciones para registrarse](https://docs.github.com/en/get-started/signing-up-for-github/signing-up-for-a-new-github-account))
+ Git (consulte las [instrucciones de instalación](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git))
+ Un editor de código para hacer cambios y enviar el código GitHub

## Arquitectura
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-architecture"></a>

Este patrón implementa la arquitectura que se muestra en el siguiente diagrama.

![\[Arquitectura en la nube de AWS para ejecutar pruebas CodeBuild unitarias con un GitHub repositorio\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e18428ce-9ecf-4204-9f1f-5a6683a720b2/images/4f4a3d1a-705a-45a6-b937-9212b188d226.png)


## Tools (Herramientas)
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-tools"></a>

**Herramientas**
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) es un sistema de control de versiones que puede utilizar para el desarrollo de código.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/) es un servicio de integración continua totalmente gestionado que compila el código fuente, ejecuta pruebas y produce paquetes de software listos para su implementación. Con CodeBuild esto, 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. Con CodeBuild, se le cobra por minuto por los recursos informáticos que utilice.

**Código**

El código fuente de este patrón está disponible en el GitHub repositorio de [aplicaciones de prueba de unidades de juego de muestra](https://github.com/aws-samples/node-js-tests-sample). Puedes crear tu propio GitHub repositorio a partir de esta muestra (opción 1) o utilizar el repositorio de muestras directamente (opción 2) para este patrón. Siga las instrucciones para cada opción que se indican en la siguiente sección. La opción que siga dependerá de su caso de uso.

## Epics
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-epics"></a>

### Opción 1: Ejecute pruebas unitarias en su GitHub repositorio personal con CodeBuild
<a name="option-1---run-unit-tests-on-your-personal-github-repository-with-codebuild"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree su propio GitHub repositorio a partir del proyecto de muestra. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Cree un CodeBuild proyecto nuevo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Comience la compilación. | En la página **Review (Revisar)**, elija **Start build (Comenzar compilación)** para ejecutar la compilación. | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

### Opción 2: Ejecute pruebas unitarias en un repositorio público con CodeBuild
<a name="option-2---run-unit-tests-on-a-public-repository-with-codebuild"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea un nuevo proyecto de CodeBuild compilación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Comience la compilación. | En la página **Review (Revisar)**, elija **Start build (Comenzar compilación)** para ejecutar la compilación. | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

### Analice las pruebas unitarias
<a name="analyze-the-unit-tests"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ver resultados de la prueba. | En la CodeBuild consola, revise los resultados de las pruebas unitarias del CodeBuild trabajo. Deben coincidir con los resultados que se muestran en la sección de [Additional information](#run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-additional) (Información adicional).Estos resultados validan la integración del GitHub repositorio con CodeBuild.  | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Aplique un webhook. | Ahora puede aplicar un webhook para iniciar automáticamente una compilación cada vez que introduzca cambios de código en la rama principal de su repositorio. Para obtener instrucciones, consulte la [documentación de CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/github-webhook.html). | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

## Recursos relacionados
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-resources"></a>
+ [Ejemplo de aplicación de prueba de unidades de juego](https://github.com/aws-samples/node-js-tests-sample) (GitHub repositorio con código de muestra)
+ [ CodeBuild Documentación de AWS](https://docs.aws.amazon.com/codebuild/)
+ [GitHub eventos de webhook](https://docs.aws.amazon.com/codebuild/latest/userguide/github-webhook.html) (CodeBuild documentación)
+ [Crear un repositorio nuevo](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository) (GitHub documentación)

## Información adicional
<a name="run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild-additional"></a>

**Ver resultados de la prueba unitaria**

En la CodeBuild consola, debería ver los siguientes resultados de las pruebas una vez que el proyecto se haya creado correctamente. 

![\[Resultados esperados de la prueba unitaria\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e18428ce-9ecf-4204-9f1f-5a6683a720b2/images/db861831-cfed-4e87-a498-0216606941f8.png)


**Ejemplo de componentes de una prueba unitaria**

Esta sección describe los cuatro tipos de componentes de prueba que se utilizan en las pruebas unitarias: aserciones, espías, stubs y mocks. Incluye una breve explicación y un ejemplo de código de cada componente. 

**Aserciones**

Se utiliza una aserción para verificar un resultado esperado. Este es un componente de prueba importante porque valida la respuesta esperada de una función determinada. El siguiente ejemplo de aserción valida que el identificador devuelto esté entre 0 y 1000 al inicializar un juego nuevo.

```
const { expect }  = require('chai');
const { Game } = require('../src/index');

describe('Game Function Group', () => {
 it('Check that the Game ID is between 0 and 1000', function() {
      const game = new Game();
      expect(game.id).is.above(0).but.below(1000)
 });
});
```

**Espías**

Un espía se utiliza para observar lo que sucede cuando se ejecuta una función. Por ejemplo, es posible que quiera comprobar que se ha llamado a la función correctamente. El siguiente ejemplo muestra que los métodos de inicio y parada se llaman en un objeto de la clase **Juego**.

```
const { expect }  = require('chai');
const { spy } = require('sinon');

const { Game } = require('../src/index');

describe('Game Function Group', () => {
   it('should verify that the correct function is called', () => {
      const spyStart = spy(Game.prototype, "start");
      const spyStop = spy(Game.prototype, "stop");
     
      const game = new Game();
      game.start();
      game.stop();
     
      expect(spyStart.called).to.be.true
      expect(spyStop.called).to.be.true
    });
});
```

**Stubs**

Un stub se utiliza para anular la respuesta predeterminada de una función. Esto resulta especialmente útil cuando la función realiza una solicitud externa, ya que se quiere evitar realizar solicitudes externas a partir de pruebas unitarias. (Las solicitudes externas son más adecuadas para las pruebas de integración, que pueden probar físicamente las solicitudes entre diferentes componentes). En el siguiente ejemplo, un stub fuerza un ID de retorno de la función **getId**.

```
const { expect }  = require('chai');
const {.stub } = require('sinon');

const { Game } = require('../src/index');

describe('Game Function Group', () =>  {
   it('Check that the Game ID is between 0 and 1000', function() {
      let generateIdStub = stub(Game.prototype, 'getId').returns(999999);

      const game = new Game();

      expect(game.getId).is.equal(999999);

      generateIdStub.restore();
    });
});
```

**Mocks**

Un mock es un método falso que tiene un comportamiento preprogramado para probar diferentes escenarios. Un mock puede considerarse una forma extendida de un stub y puede llevar a cabo múltiples tareas simultáneamente. En el siguiente ejemplo, se utiliza un mock para validar tres escenarios:
+ Se llama a la función 
+ La función se llama con argumentos
+ La función devuelve el entero 9

```
const { expect }  = require('chai');
const {.mock } = require('sinon');

const { Game } = require('../src/index');

describe('Game Function Group', () =>  {
   it('Check that the Game ID is between 0 and 1000', function() {
      let mock = mock(Game.prototype).expects('getId').withArgs().returns(9);

      const game = new Game();
      const id = get.getId();

      mock.verify();
      expect(id).is.equal(9);
    });
});
```

# Estructure un proyecto de Python en una arquitectura hexagonal con AWS Lambda
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda"></a>

*Furkan Oruc, Dominik Goby, Darius Kunce y Michal Ploski, Amazon Web Services*

## Resumen
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-summary"></a>

Este patrón muestra cómo estructurar un proyecto de Python en una arquitectura hexagonal mediante AWS Lambda. El patrón utiliza el AWS Cloud Development Kit (AWS CDK) como herramienta de infraestructura como código (IaC), Amazon API Gateway como REST API y Amazon DynamoDB como capa de persistencia. La arquitectura hexagonal sigue los principios de diseño basados en el dominio. En la arquitectura hexagonal, el software consta de tres componentes: dominio, puertos y adaptadores. Para obtener información detallada sobre las arquitecturas hexagonales y sus ventajas, consulte la guía [Creación de arquitecturas hexagonales en AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/hexagonal-architectures/)*.*

## Requisitos previos y limitaciones
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Experiencia en Python
+ Familiaridad con AWS Lambda, AWS CDK, Amazon API Gateway y DynamoDB
+ Una GitHub cuenta (consulte [las instrucciones para registrarse](https://docs.github.com/en/get-started/signing-up-for-github/signing-up-for-a-new-github-account))
+ Git (consulte las [instrucciones de instalación](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git))
+ Un editor de código para realizar cambios e insertar el código GitHub (por ejemplo, [Visual Studio Code](https://code.visualstudio.com/) o [JetBrains PyCharm](https://www.jetbrains.com/pycharm/))
+ Docker instalado y el daemon de Docker en funcionamiento

**Versiones de producto**
+ Git versión 2.24.3 o posterior
+ Python versión 3.7 o posterior
+ AWS CDK v2
+ Poetry versión 1.1.13 o posterior
+ AWS Lambda Powertools para Python, versión 1.25.6 o posterior
+ pytest versión 7.1.1 o posterior
+ Moto versión 3.1.9 o posterior
+ versión 1.9.0 o posterior de pydantic
+ Boto3 versión 1.22.4 o posterior
+ mypy-boto3-dynamodb versión 1.24.0 o posterior

## Arquitectura
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-architecture"></a>

**Pila de tecnología de destino**

La pila de tecnología de destino consiste en un servicio de Python que utiliza API Gateway, Lambda y DynamoDB. El servicio utiliza un adaptador de DynamoDB para conservar los datos. Proporciona una función que utiliza Lambda como punto de entrada. El servicio usa Amazon API Gateway para exponer una REST API. La API utiliza AWS Identity and Access Management (IAM) para la [autenticación de clientes](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html).

**Arquitectura de destino**

Para ilustrar la implementación, este patrón despliega una arquitectura de destino sin servidor. Los clientes pueden enviar solicitudes a un punto de conexión final de API Gateway. API Gateway reenvía la solicitud a la función de Lambda de destino que implementa el patrón de arquitectura hexagonal. La función de Lambda realiza operaciones de creación, lectura, actualización y eliminación (CRUD) en una tabla de DynamoDB.


| 
| 
| Este patrón se probó en un entorno de PoC. Debe realizar una revisión de seguridad para identificar el modelo de amenaza y crear una base de código segura antes de implementar cualquier arquitectura en un entorno de producción.  | 
| --- |

![\[Arquitectura objetivo para estructurar un proyecto de Python en arquitectura hexagonal\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/25bd7169-ea5e-4a21-a865-c91c30a3c0da/images/de0d4f0d-ad19-43ec-bd10-676b25477b64.png)


La API admite cinco operaciones en una entidad de producto:
+ `GET /products` devuelve todos los productos. 
+ `POST /products` crea un nuevo producto. 
+ `GET /products/{id}` devuelve un producto específico.
+ `PUT /products/{id}` actualiza un producto específico. 
+ `DELETE /products/{id}` elimina un producto específico.

Puede utilizar la siguiente estructura de carpetas para organizar el proyecto de forma que siga el patrón de arquitectura hexagonal:  

```
app/  # application code
|--- adapters/  # implementation of the ports defined in the domain
     |--- tests/  # adapter unit tests
|--- entrypoints/  # primary adapters, entry points
     |--- api/  # api entry point
          |--- model/  # api model
          |--- tests/  # end to end api tests
|--- domain/  # domain to implement business logic using hexagonal architecture
     |--- command_handlers/  # handlers used to execute commands on the domain
     |--- commands/  # commands on the domain
     |--- events/  # events triggered via the domain
     |--- exceptions/  # exceptions defined on the domain
     |--- model/  # domain model
     |--- ports/  # abstractions used for external communication
     |--- tests/  # domain tests
|--- libraries/  # List of 3rd party libraries used by the Lambda function
infra/  # infrastructure code
simple-crud-app.py  # AWS CDK v2 app
```

## Tools (Herramientas)
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-tools"></a>

**Servicios de AWS**
+ [Amazon API Gateway](https://aws.amazon.com/api-gateway/) es un servicio totalmente gestionado que facilita a los desarrolladores la creación, publicación, mantenimiento, supervisión y protección APIs a cualquier escala.
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) es una base de datos NoSQL de valor clave, sin servidor y totalmente gestionada que está diseñada para ejecutar aplicaciones de alto rendimiento a cualquier escala.
+ [AWS Lambda](https://aws.amazon.com/lambda/) es un servicio de computación controlado por eventos sin servidor que permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend, sin aprovisionar ni administrar servidores. Puede lanzar funciones de Lambda desde más de 200 aplicaciones de software como servicio (SaaS) y pagar solo por lo que utilice.

**Herramientas**
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) se utiliza como sistema de control de versiones para el desarrollo de código en este patrón.
+ [Python](https://www.python.org/) se utiliza como lenguaje de programación para este patrón. Python proporciona estructuras de datos de alto nivel y un enfoque de la programación orientada a objetos. AWS Lambda proporciona un tiempo de ejecución de Python integrado que simplifica el funcionamiento de los servicios de Python.
+ [Visual Studio Code](https://code.visualstudio.com/) se utiliza como IDE para desarrollar y probar este patrón. Puede usar cualquier IDE que soporte el desarrollo de Python (por ejemplo, [PyCharm](https://www.jetbrains.com/pycharm/)).
+ [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/) es un marco de desarrollo de software de código abierto que le permite definir los recursos de su aplicación en la nube utilizando lenguajes de programación conocidos. Este patrón utiliza la CDK para escribir e implementar la infraestructura de la nube como código.
+ [Poetry](https://python-poetry.org/) se utiliza para gestionar las dependencias del patrón.
+ AWS CDK utiliza [Docker](https://www.docker.com/) para crear el paquete y la capa de Lambda.

**Código**

El código de este patrón está disponible en el repositorio de ejemplos de [arquitectura hexagonal GitHub Lambda](https://github.com/aws-samples/lambda-hexagonal-architecture-sample).

## Prácticas recomendadas
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-best-practices"></a>

Para usar este patrón en un entorno de producción, siga estas prácticas recomendadas:
+ Utilice las claves administradas por el cliente en AWS Key Management Service (AWS KMS) para cifrar los [grupos de CloudWatch registros de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) y las tablas de [Amazon DynamoDB](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html).
+ Configure [AWS WAF para Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) para permitir el acceso únicamente desde la red de su organización.
+ Considere otras opciones para la autorización de API Gateway si IAM no satisface sus necesidades. Por ejemplo, puede usar [grupos de usuarios de Amazon Cognito](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) o [autorizadores de Lambda de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html).
+ Utilice [Copias de seguridad de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BackupRestore.html).
+ Configure las funciones de Lambda con una [implementación de nube privada virtual (VPC)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) para mantener el tráfico de red dentro de la nube.
+ Actualice la configuración de origen permitida para la [verificación previa del intercambio de recursos entre orígenes (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) para restringir el acceso únicamente al dominio de origen solicitante.
+ Utilice [cdk-nag](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html) para comprobar las prácticas recomendadas de seguridad en el código de AWS CDK.
+ Considere la posibilidad de utilizar herramientas de escaneo de código para detectar problemas de seguridad comunes en el código. Por ejemplo, [Bandit](https://bandit.readthedocs.io/en/latest/) es una herramienta diseñada para detectar problemas de seguridad comunes en el código Python. [PIP-audit](https://pypi.org/project/pip-audit/) escanea los entornos de Python en busca de paquetes que tengan vulnerabilidades conocidas.

Este patrón utiliza [AWS X-Ray](https://aws.amazon.com/xray/?nc1=h_ls) para rastrear las solicitudes a través del punto de entrada, el dominio y los adaptadores de la aplicación. AWS X-Ray ayuda a los desarrolladores a identificar los cuellos de botella y determinar las latencias altas para mejorar el rendimiento de las aplicaciones.

## Epics
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-epics"></a>

### Inicializar el proyecto
<a name="initialize-the-project"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree su propio repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Instale las dependencias. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Configure su IDE. | Recomendamos Visual Studio Code, pero puede usar cualquier IDE de su elección que sea compatible con Python. Los siguientes pasos son para Visual Studio Code.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
|  Ejecute pruebas unitarias, opción 1: utilice Visual Studio Code. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Ejecute pruebas unitarias, opción 2: utilice comandos del intérprete de comandos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 

### Implementar y probar la aplicación
<a name="deploy-and-test-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Solicite credenciales temporales. | Para tener credenciales de AWS en el intérprete de comandos cuando ejecute `cdk deploy`, cree credenciales temporales mediante AWS IAM Identity Center (sucesor de AWS Single Sign-On). Para obtener instrucciones, consulte la entrada del blog [How to retrieve short-term credentials for CLI use with AWS IAM Identity Center](https://aws.amazon.com/blogs/security/aws-single-sign-on-now-enables-command-line-interface-access-for-aws-accounts-using-corporate-credentials/). | Desarrollador de aplicaciones, AWS DevOps | 
| Implemente la aplicación . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones, AWS DevOps | 
| Pruebe la API, opción 1: utilice la consola. | Utilice la [consola de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-test-method.html) para probar la API. Para obtener más información sobre las operaciones y request/response los mensajes de la [API, consulte la sección de uso de la API del archivo readme](https://github.com/aws-samples/lambda-hexagonal-architecture-sample/blob/main/README.md#api-usage) del GitHub repositorio. | Desarrollador de aplicaciones, AWS DevOps | 
| Pruebe la API, opción 2: utilice Postman. | Si quiere utilizar una herramienta como [Postman](https://www.postman.com/):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones, AWS DevOps | 

### Desarrolle el servicio
<a name="develop-the-service"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Redacte pruebas unitarias para el dominio empresarial. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Implemente comandos y controladores de comandos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Escriba pruebas de integración para los adaptadores secundarios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Implemente adaptadores secundarios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Escribe end-to-end pruebas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 
| Implemente los adaptadores principales. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.html) | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="structure-a-python-project-in-hexagonal-architecture-using-aws-lambda-resources"></a>

**Guía de APG**
+ [Creación de arquitecturas hexagonales en AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/hexagonal-architectures/)

**Referencias de AWS**
+ [Documentación de AWS Lambda](https://docs.aws.amazon.com/lambda/)
+ [Documentación de AWS SDK](https://docs.aws.amazon.com/cdk/)
  + [Su primera aplicación de AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/hello_world.html)
+ [Documentación de API Gateway](https://docs.aws.amazon.com/apigateway/)
  + [Control del acceso a una API con permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html)
  + [Uso de la consola de API Gateway para probar un método de la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-test-method.html)
+ [Documentación de Amazon DynamoDB](https://docs.aws.amazon.com/dynamodb/)

**Herramientas**
+ [Sitio web git-scm.com](https://git-scm.com/)
+ [Instalación de Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ [Crear un GitHub repositorio nuevo](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository)
+ [Sitio web de Python](https://www.python.org/)
+ [AWS Lambda Powertools para Python](https://docs.powertools.aws.dev/lambda/python/latest/)
+ [Sitio web de Postman](https://www.postman.com/)
+ [Biblioteca de objetos simulados de Python](https://docs.python.org/3/library/unittest.mock.html)
+ [Sitio web de Poetry](https://python-poetry.org/)

**IDEs**
+ [Sitio web de Visual Studio Code](https://code.visualstudio.com/)
+ [PyCharm sitio web](https://www.jetbrains.com/pycharm/)

# Más patrones
<a name="websitesandwebapps-more-patterns-pattern-list"></a>

**Topics**
+ [Acceda a las aplicaciones de contenedores de forma privada en Amazon ECS mediante AWS Fargate PrivateLink, AWS y un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Acceda a las aplicaciones de contenedores de forma privada en Amazon ECS mediante AWS PrivateLink y un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-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 eliminación de AWS CloudFormation pilas y recursos asociados](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Restrinja el acceso en función de la dirección IP o la geolocalización mediante AWS WAF](aws-waf-restrict-access-geolocation.md)
+ [Cree una aplicación móvil React Native sin servidor con AWS Amplify](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.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 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)
+ [Consolidación de la generación de URL prefirmadas y las descargas de objetos de Amazon S3 mediante un punto de conexión asociado a direcciones IP estáticas](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Cree una definición de tareas de Amazon ECS y monte un sistema de archivos en EC2 las instancias mediante Amazon EFS](create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.md)
+ [Implemente una aplicación basada en gRPC en un clúster de Amazon EKS y acceda a ella con un Equilibrador de carga de aplicación](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.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)
+ [Despliega canarios de CloudWatch Synthetics con Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Implementar microservicios de Java en Amazon ECS con AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.md)
+ [Implemente un caso de uso de RAG AWS mediante Terraform y Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Despliega recursos en una AWS Wavelength zona mediante Terraform](deploy-resources-wavelength-zone-using-terraform.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)
+ [Migración de una cola de mensajes de Microsoft Azure Service Bus a Amazon SQS](migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs.md)
+ [Migración de una aplicación .NET de Microsoft Azure App Service a AWS Elastic Beanstalk](migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk.md)
+ [Migración de una aplicación web Go en las instalaciones a AWS Elastic Beanstalk mediante el método binario](migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.md)
+ [Migre un servidor SFTP local para utilizar AWS AWS Transfer for SFTP](migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp.md)
+ [Migre de IBM WebSphere Application Server a Apache Tomcat en Amazon EC2](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2.md)
+ [Migre de IBM WebSphere Application Server a Apache Tomcat en Amazon EC2 con Auto Scaling](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling.md)
+ [Migración de aplicaciones Java locales en las instalaciones a AWS mediante AWS App2Container](migrate-on-premises-java-applications-to-aws-using-aws-app2container.md)
+ [Migración de los certificados SSL de Windows a un equilibrador de carga de aplicación mediante ACM](migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.md)
+ [Modernizar las aplicaciones de ASP.NET Web Forms en AWS](modernize-asp-net-web-forms-applications-on-aws.md)
+ [Supervise la actividad de las aplicaciones mediante CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.md)
+ [Ejecute un contenedor Docker de la API web de ASP.NET Core en una instancia de Amazon Linux EC2](run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.md)
+ [Envío de atributos personalizados a Amazon Cognito e ingesta en los tokens](send-custom-attributes-cognito.md)
+ [Sirva contenido estático en un bucket de Amazon S3 a través de una VPC mediante Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Configure una PeopleSoft arquitectura de alta disponibilidad en AWS](set-up-a-highly-available-peoplesoft-architecture-on-aws.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)
+ [Solucione problemas de estados AWS Step Functions mediante Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Uso de Network Firewall para capturar los nombres de dominio de DNS de la indicación del nombre del servidor para el tráfico saliente](use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.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)