

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.

# Computación
<a name="compute-pattern-list"></a>

**Topics**
+ [Contenedores y microservicios](containersandmicroservices-pattern-list.md)
+ [Sin servidor](serverless-pattern-list.md)
+ [Red](networking-pattern-list.md)
+ [Entrega de contenido](contentdelivery-pattern-list.md)

# Contenedores y microservicios
<a name="containersandmicroservices-pattern-list"></a>

**Topics**
+ [Acceso a una base de datos de Amazon Neptune desde un contenedor de Amazon EKS](access-amazon-neptune-database-from-amazon-eks-container.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)
+ [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 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)
+ [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 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)
+ [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)
+ [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 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)
+ [Implementar funciones de Lambda con imágenes de contenedor](deploy-lambda-functions-with-container-images.md)
+ [Implementar microservicios de Java en Amazon ECS con AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.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 un clúster de CockroachDB en Amazon EKS mediante Terraform](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Implemente un microservicio Java de muestra en Amazon EKS y exponga el microservicio mediante un Equilibrador de carga de aplicación](deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.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 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 contenedores mediante Elastic Beanstalk](deploy-containers-by-using-elastic-beanstalk.md)
+ [Genere una dirección IP saliente estática mediante una función de Lambda, Amazon VPC y una arquitectura sin servidor](generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.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)
+ [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)
+ [Migración de los controladores de entrada NGINX al activar el Modo automático de Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Migre sus cargas de trabajo de contenedores de Azure Red Hat OpenShift (ARO) a Red Hat OpenShift Service en AWS (ROSA)](migrate-container-workloads-from-aro-to-rosa.md)
+ [Ejecute tareas de Amazon ECS en Amazon WorkSpaces con Amazon ECS Anywhere](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.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)
+ [Ejecutar cargas de trabajo con estado y almacenamiento de datos persistente mediante Amazon EFS en Amazon EKS con AWS Fargate](run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.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)
+ [Simplificación de las implementaciones de PostgreSQL en Amazon EKS mediante PGO](streamline-postgresql-deployments-amazon-eks-pgo.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)
+ [Más patrones](containersandmicroservices-more-patterns-pattern-list.md)

# Acceso a una base de datos de Amazon Neptune desde un contenedor de Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Resumen
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Este patrón establece una conexión entre Amazon Neptune, que es una base de datos de gráficos totalmente gestionada, y Amazon Elastic Kubernetes Service (Amazon EKS), un servicio de orquestación de contenedores, para acceder a una base de datos de Neptune. Los clústeres de la base de datos de Neptune están confinados dentro de una nube privada virtual (VPC) en AWS. Por este motivo, el acceso a Neptune requiere una configuración cuidadosa de la VPC para permitir la conectividad.

A diferencia de Amazon Relational Database Service (Amazon RDS) para PostgreSQL, Neptune no depende de las credenciales de acceso a bases de datos típicas. En su lugar, utiliza funciones AWS Identity and Access Management (IAM) para la autenticación. Por lo tanto, conectarse a Neptune desde Amazon EKS implica configurar un rol de IAM con los permisos necesarios para acceder a Neptune.

Además, solo se puede acceder a los puntos de conexión de Neptune dentro de la VPC en la que se encuentra el clúster. Esto significa que debe configurar los ajustes de red para facilitar la comunicación entre Amazon EKS y Neptune. Según sus requisitos específicos y sus preferencias de red, existen [varios enfoques para configurar la VPC](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) a fin de permitir una conectividad fluida entre Neptune y Amazon EKS. Cada método ofrece ventajas y opciones distintas, que proporcionan flexibilidad a la hora de diseñar la arquitectura de la base de datos para adaptarla a las necesidades de la aplicación.

## Requisitos previos y limitaciones
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Requisitos previos**
+ Instale la última versión de **kubectl** (consulte las [instrucciones](https://kubernetes.io/docs/tasks/tools/#kubectl)). Para comprobar la versión, ejecute: 

  ```
  kubectl version --short
  ```
+ Instale la última versión de **eksctl** (consulte las [instrucciones](https://eksctl.io/installation/)). Para comprobar la versión, ejecute: 

  ```
  eksctl info
  ```
+ Instale la última versión de la AWS Command Line Interface (AWS CLI) versión 2 (consulte [las instrucciones](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Para comprobar la versión, ejecute: 

  ```
  aws --version
  ```
+ Cree un clúster de base de datos de Neptune (consulte las [instrucciones](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html)). Asegúrese de establecer las comunicaciones entre la VPC del clúster y Amazon EKS mediante el [emparejamiento de VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html), [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html), u otro método. Asegúrese también de que el estado del clúster esté como Disponible y de que tenga una regla de entrada en el puerto 8182 para el grupo de seguridad.
+ Configure un proveedor de IAM OpenID Connect (OIDC) en un clúster de Amazon EKS existente (consulte las [instrucciones](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)).

**Versiones de producto**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Versión 1.3.0.0 del motor de Amazon Neptune (2023-11-15)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Arquitectura
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

En el siguiente diagrama se muestra la conexión entre los pods de Kubernetes de un clúster de Amazon EKS y Neptuno para proporcionar acceso a una base de datos de Neptune.

![\[Conexión de pods en un nodo de Kubernetes con Amazon Neptune.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automatización y escala**

Puede usar el [escalador automático de pods horizontales](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) para escalar esta solución.

## Tools (Herramientas)
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Servicios**
+ [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 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 Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) es un servicio de base de datos de gráficos que le permite crear y ejecutar aplicaciones que funcionen con conjuntos de datos altamente conectados.

## Prácticas recomendadas
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Para obtener información sobre las prácticas recomendadas, consulte [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) en las *guías de prácticas recomendadas de Amazon EKS*.

## Epics
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Configuración de las variables de entorno
<a name="set-environment-variables"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique el contexto del clúster. | Antes de interactuar con su clúster de Amazon EKS mediante Helm u otras herramientas de línea de comandos, debe definir las variables de entorno que encapsulen los detalles del clúster. Estas variables se utilizan en los comandos posteriores para garantizar que se dirijan al clúster y los recursos correctos.En primer lugar, confirme que está trabajando en el contexto de clúster correcto. Esto garantiza que cualquier comando posterior se envíe al clúster de Kubernetes deseado. Para comprobar el contexto actual, ejecute el siguiente comando.<pre>kubectl config current-context</pre> | Administrador de la nube, administrador de AWS | 
| Defina la variable `CLUSTER_NAME`. | Establezca la variable de entorno `CLUSTER_NAME` para el clúster de Amazon EKS. En el siguiente comando, sustituya el valor `us-west-2` de muestra por el correcto Región de AWS para su clúster. Reemplace el valor de muestra `eks-workshop` por el nombre de su clúster existente.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrador de la nube, administrador de AWS | 
| Valide la salida. | Para comprobar que las variables se hayan configurado correctamente, ejecute el siguiente comando.<pre>echo $CLUSTER_NAME</pre>Compruebe que el resultado de este comando coincida con la entrada que especificó en el paso anterior. | Administrador de la nube, administrador de AWS | 

### Cree un rol de IAM y asócielo con Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una cuenta de servicio de . | Utilice [roles de IAM para cuentas de servicio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) y así poder asignar sus cuentas de servicio de Kubernetes a roles de IAM para habilitar una administración de permisos detallada en las aplicaciones que se ejecutan en Amazon EKS. Puede usar [eksctl](https://eksctl.io/) para crear y asociar un rol de IAM a una cuenta de servicio de Kubernetes específica dentro de su clúster de Amazon EKS. La política AWS administrada `NeptuneFullAccess` permite el acceso de escritura y lectura al clúster de Neptune especificado.Debe tener un [punto de conexión OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) asociado a su clúster antes de ejecutar estos comandos.Cree una cuenta de servicio que desee asociar a una política AWS administrada denominada`NeptuneFullAccess`.<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre>`eks-neptune-sa ` será el nombre de la cuenta de servicio que quiera crear.Al finalizar, el comando muestra la siguiente respuesta:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrador de la nube, administrador de AWS | 
| Compruebe que la cuenta esté configurada correctamente. | Asegúrese de que la cuenta de servicio de `eks-neptune-sa` esté configurada correctamente en el espacio de nombres predeterminado del clúster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>La salida debe tener el siguiente aspecto:<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | Administrador de la nube, administrador de AWS | 
| Compruebe la conectividad. | Implemente un pod de muestra llamado `pod-util` y compruebe la conectividad con Neptune.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | Administrador de la nube, administrador de AWS | 

### Comprobar la actividad de la conexión
<a name="validate-connection-activity"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Habilite la autenticación de bases de datos de IAM | De forma predeterminada, la autenticación de bases de datos de IAM está deshabilitada al crear un clúster de Neptune DB. Puede habilitar o deshabilitar la autenticación de la base de datos IAM mediante Consola de administración de AWS.Siga los pasos de la AWS documentación para [habilitar la autenticación de bases de datos de IAM en Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrador de la nube, administrador de AWS | 
| Compruebe las conexiones. | En este paso, interactuará con el contenedor de `pod-util`, que ya está en ejecución, para instalar **awscurl** y comprobar la conexión.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrador de la nube, administrador de AWS | 

## Resolución de problemas
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se puede acceder a la base de datos de Neptune. | Revise la política de IAM adjunta a la cuenta de servicio. Asegúrese de que permite realizar las acciones necesarias (por ejemplo, `neptune:Connec,neptune:DescribeDBInstances`) para las operaciones que desee ejecutar. | 

## Recursos relacionados
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Otorgue a las cargas de trabajo de Kubernetes acceso al AWS uso de cuentas de servicio de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentación de Amazon EKS)
+ [Roles de IAM para cuentas de servicio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentación de Amazon EKS)
+ [Creación de un nuevo clúster de base de datos de Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) (documentación de Amazon Neptune)

# Acceda a las aplicaciones de contenedores de forma privada en Amazon ECS mediante AWS PrivateLink y un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Este patrón describe cómo alojar de forma privada una aplicación contenedora de Docker en Amazon Elastic Container Service (Amazon ECS) detrás de un Network Load Balancer y cómo acceder a la aplicación mediante AWS. PrivateLink A continuación, puede utilizar una red privada para acceder de forma segura a los servicios de la nube de Amazon Web Services (AWS). Amazon Relational Database Service (Amazon RDS) aloja la base de datos relacional para la aplicación que se ejecuta en Amazon ECS con alta disponibilidad (HA). Se usa Amazon Elastic File System (Amazon EFS) si la aplicación necesita almacenamiento persistente.

El servicio Amazon ECS que ejecuta las aplicaciones de Docker, con un Network Load Balancer en la interfaz, se puede asociar a un punto final de nube privada virtual (VPC) para acceder a él a través de AWS. PrivateLink Luego, este servicio de punto final de VPC se puede compartir con otros VPCs mediante sus puntos de enlace de VPC.

También puede usar [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) en lugar de un grupo de Amazon EC2 Auto Scaling. Para obtener más información, consulte [Acceda a aplicaciones de contenedores de forma privada en Amazon ECS mediante AWS Fargate PrivateLink, AWS y un Network](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html?did=pg_card) Load Balancer.

## Requisitos previos y limitaciones
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Interfaz de la línea de comandos de AWS (AWS CLI) versión 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), instalada y configurada en Linux, macOS o Windows
+ [Docker](https://www.docker.com/), instalado y configurado en Linux, macOS o Windows
+ Una aplicación que se ejecuta en Docker

## Arquitectura
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Uso de AWS PrivateLink para acceder a una aplicación contenedora en Amazon ECS mediante un Network Load Balancer.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a316bf46-24db-4514-957d-abc60f8f6962/images/573951ed-74bb-4023-9d9c-43e77e4f8eda.png)


 

**Pila de tecnología**
+ Amazon CloudWatch
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ Amazon EC2 Auto Scaling
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Lambda
+ AWS PrivateLink
+ AWS Secrets Manager
+ Equilibrador de carga de aplicación
+ Equilibrador de carga de red
+ VPC

*Automatización y escala*
+ Puede usar [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) para crear este patrón mediante [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Tools (Herramientas)
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html): Amazon Elastic Compute Cloud (Amazon EC2) proporciona capacidad informática escalable en la nube de AWS.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html): Amazon EC2 Auto Scaling le ayuda a garantizar que dispone del número correcto de EC2 instancias de Amazon disponibles para gestionar la carga de su aplicación.
+ [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.
+ [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 de AWS administrado que es seguro, escalable y fiable.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html): Amazon Elastic File System (Amazon EFS) ofrece un sistema de archivos NFS sencillo, escalable, elástico y completamente administrado que se utiliza con servicios de nube de AWS y recursos en las instalaciones.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): AWS Lambda es un servicio informático para ejecutar código sin aprovisionar ni administrar servidores.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/): Amazon Relational Database Service (Amazon RDS) es un servicio web que facilita la configuración, el funcionamiento y el escalado de una base de datos relacional en la nube de AWS.
+ [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. Está diseñado para facilitar a los desarrolladores recursos de computación escalables basados en Web.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html): Secrets Manager permite reemplazar las credenciales codificadas en el código, incluidas las contraseñas, proponiendo una llamada a la API de Secrets Manager para recuperar el secreto mediante programación.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): Amazon Virtual Private Cloud (Amazon VPC) permite lanzar recursos de AWS en una red virtual previamente definida.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html): Elastic Load Balancing distribuye el tráfico entrante de aplicaciones o redes entre varios destinos, como EC2 instancias de Amazon, contenedores y direcciones IP, en varias zonas de disponibilidad.
+ [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.

## Epics
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Creación de componentes de redes
<a name="create-networking-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Crear el equilibrador de carga
<a name="create-the-load-balancers"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un equilibrador de carga de red.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-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/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Crear un sistema de archivos de Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un sistema de archivos de Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Defina el montaje de los destinos para las subredes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Compruebe que las subredes estén montadas como destinos.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Creación de un bucket de S3
<a name="create-an-s3-bucket"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un bucket de S3.  | Si es necesario, abra la consola de Amazon S3 y cree un bucket de S3 para almacenar los activos estáticos de la aplicación. | Administrador de la nube | 

### Crear un secreto en Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Para cifrar el secreto de Secrets Manager, cree una clave de AWS KMS. | Abra la consola de AWS Key Management Service (AWS KMS) y cree una clave KMS. | Administrador de la nube | 
|  Cree un secreto de Secrets Manager para almacenar la contraseña de Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube  | 

### Crear una instancia de Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de un grupo de subredes de base de datos.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Cree una instancia de Amazon RDS. | Cree y configure una instancia de Amazon RDS dentro de las subredes privadas. Asegúrese de que **Multi-AZ** esté activado para una alta disponibilidad. | Administrador de la nube | 
| Cargue los datos en la instancia de Amazon RDS.  | Cargue los datos relacionales que necesita la aplicación en la instancia de Amazon RDS. Este proceso variará según las necesidades de la aplicación y la forma en que se defina y diseñe el esquema de la base de datos. | Administrador de la nube, administrador de bases de datos | 

### Crear los componentes de Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un clúster de ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Cree las imágenes de Docker.  | Cree las imágenes de Docker según las instrucciones de la sección *Recursos relacionados*. | Administrador de la nube | 
| Crear repositorios de Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nube, ingeniero DevOps  | 
| Autenticar su cliente Docker para el repositorio de Amazon ECR.  | Para autenticar su cliente de Docker para el repositorio de Amazon ECR, ejecute el comando `aws ecr get-login-password` en la CLI de AWS. | Administrador de la nube | 
| Pase las imágenes de Docker al repositorio de Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Cree una definición de tarea de Amazon ECS.  | Para ejecutar contenedores Docker en Amazon ECS, se requiere una definición de tareas. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Para obtener ayuda sobre la configuración de la definición de la tarea, consulte “Creación de una definición de tarea” en la sección *Recursos relacionados*. Asegúrese de proporcionar las imágenes de Docker que envió a Amazon ECR. | Administrador de la nube | 
| Creación de un servicio de Amazon ECS.  | Cree un servicio de Amazon ECS mediante el clúster de ECS que creó anteriormente. Asegúrese de elegir Amazon EC2 como tipo de lanzamiento y de elegir la definición de tarea creada en el paso anterior, así como el grupo objetivo del Application Load Balancer. | Administrador de la nube | 

### Crear un grupo de Amazon EC2 Auto Scaling
<a name="create-an-amazon-ec2-auto-scaling-group"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una configuración de lanzamiento. | Abre la EC2 consola de Amazon y crea una configuración de lanzamiento. Asegúrese de que los datos del usuario tengan el código que permita que las EC2 instancias se unan al clúster de ECS deseado. Para ver un ejemplo del código necesario, consulte la sección *Recursos relacionados*. | Administrador de la nube | 
| Cree un grupo de Amazon EC2 Auto Scaling.  | Regrese a la EC2 consola de Amazon y, en **Auto Scaling**, elija **grupos de Auto Scaling**. Configure un grupo de Amazon EC2 Auto Scaling. Asegúrese de elegir las subredes privadas y la configuración de lanzamiento que creó anteriormente. | Administrador de la nube | 

### Configurar AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el PrivateLink punto de conexión de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Para obtener más información, consulte la sección *Recursos relacionados*. | Administrador de la nube | 

### Crear un punto de conexión de VPC
<a name="create-a-vpc-endpoint"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un punto de conexión de VPC. | Cree un punto de enlace de VPC para el punto de PrivateLink enlace de AWS que creó anteriormente. El nombre de dominio completo (FQDN) del punto final de la VPC apuntará al FQDN del punto final de AWS PrivateLink . Esto crea una interfaz de red elástica para el servicio de puntos de conexión de VPC a la que pueden acceder los puntos de conexión de DNS. | Administrador de la nube | 

### Crear la función de Lambda
<a name="create-the-lambda-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear la función de Lambda. | En la consola de AWS Lambda, cree una función de Lambda para actualizar las direcciones IP del equilibrador de carga de aplicación como destinos del equilibrador de carga de red. Para más información sobre este tema, consulte la entrada en el blog [Using AWS Lambda to enable static IP addresses for Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-lambda-to-enable-static-ip-addresses-for-application-load-balancers/). | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Crear los equilibradores de carga:**
+ [Utilice un Network Load Balancer para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Crear un equilibrador de carga de red](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Utilice un balanceador de carga de aplicaciones para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Creación de un equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Crear un sistema de archivos de Amazon EFS:**
+ [Crear un sistema de archivos de Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Crear destinos de montaje en Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Creación de un bucket de S3:**
+ [Creación de un bucket de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)

**Crear un secreto en Secrets Manager:**
+ [Crear claves en AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Crear un secreto en AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

**Crear una instancia de Amazon RDS:**
+ [Crear una instancia de base de datos de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Crear los componentes de Amazon ECS:**
+ [Crear un clúster de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html)
+ [Crear una imagen de Docker](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Crear un repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Autenticar Docker con el repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Pasar una imagen a un repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Crear una definición de tarea de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Creación de un servicio de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Cree un grupo de Amazon EC2 Auto Scaling:**
+ [Crear una configuración de lanzamiento](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html)
+ [Crear un grupo de escalado automático mediante una configuración de lanzamiento](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html)
+ [Instancias de contenedores Bootstrap con datos de EC2 usuario de Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html)

**Configure AWS PrivateLink:**
+ [Servicios de puntos finales de VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)

**Crear un punto de conexión de VPC:**
+ [Puntos de enlace de interfaz de VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)

**Crear la función de Lambda:**
+ [Crear una función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)

**Otros recursos:**
+ [Uso de direcciones IP estáticas para los equilibradores de carga de aplicación](https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/)
+ [Acceso seguro a los servicios a través de AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Acceda a las aplicaciones de contenedores de forma privada en Amazon ECS mediante AWS Fargate PrivateLink, AWS y un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumen
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

Este patrón describe cómo alojar de forma privada una aplicación contenedora de Docker en la nube de Amazon Web Services (AWS) mediante Amazon Elastic Container Service (Amazon ECS) con un tipo de lanzamiento de AWS Fargate, detrás de un Network Load Balancer, y cómo acceder a la aplicación mediante AWS. PrivateLink Amazon Relational Database Service (Amazon RDS) aloja la base de datos relacional para la aplicación que se ejecuta en Amazon ECS con alta disponibilidad (HA). Puede utilizar Amazon Elastic File System (Amazon EFS) si la aplicación requiere almacenamiento permanente.

Este patrón utiliza un [tipo de lanzamiento de Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html) para el servicio de Amazon ECS que ejecuta las aplicaciones de Docker, con un equilibrador de carga de red en el frontend. Luego, se puede asociar a un punto final de nube privada virtual (VPC) para acceder a través de AWS. PrivateLink Luego, este servicio de punto final de VPC se puede compartir con otros VPCs mediante sus puntos de enlace de VPC.

Puede usar Fargate con Amazon ECS para ejecutar contenedores sin tener que administrar servidores o clústeres de instancias de Amazon Elastic Compute Cloud EC2 (Amazon). También puede usar un grupo de Amazon EC2 Auto Scaling en lugar de Fargate. Para obtener más información, consulte [Acceda a aplicaciones de contenedores de forma privada en Amazon ECS mediante AWS PrivateLink y un Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card).

## Requisitos previos y limitaciones
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Interfaz de la línea de comandos de AWS (AWS CLI) versión 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), instalada y configurada en Linux, macOS o Windows
+ [Docker](https://www.docker.com/), instalado y configurado en Linux, macOS o Windows
+ Una aplicación que se ejecuta en Docker

## Arquitectura
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Se usa PrivateLink para acceder a una aplicación contenedora en Amazon ECS con un tipo de lanzamiento de AWS Fargate.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**Pila de tecnología**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ Equilibrador de carga de aplicación
+ Equilibrador de carga de red
+ VPC

**Automatización y escala**
+ Puede usar [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) para crear este patrón mediante [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Tools (Herramientas)
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**Servicios de AWS**
+ [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 de AWS 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 altamente escalable y rápido que facilita la tarea de ejecutar, detener y administrar contenedores de Docker en un clúster.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) ofrece un sistema de archivos NFS sencillo, escalable, elástico y completamente administrado que se utiliza con servicios de nube de AWS y recursos en las instalaciones.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)es una tecnología que puede utilizar con Amazon ECS para ejecutar contenedores sin tener que gestionar servidores o clústeres de EC2 instancias de Amazon.
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/rds/index.html) es un servicio web que facilita la configuración, la operación y la escala de una base de datos relacional en Nube de AWS.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento para Internet. Está diseñado para facilitar a los desarrolladores recursos de computación escalables basados en Web.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/) 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 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.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuye el tráfico entrante de aplicaciones o redes entre varios destinos, como EC2 instancias, contenedores y direcciones IP, en varias zonas de disponibilidad.

**Otras herramientas**
+ [Docker](https://www.docker.com/) facilita a los desarrolladores el proceso de empaquetar, enviar y ejecutar cualquier aplicación como un contenedor ligero, portátil y autosuficiente.

## Epics
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Creación de componentes de redes
<a name="create-networking-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Crear el equilibrador de carga
<a name="create-the-load-balancers"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un equilibrador de carga de red.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Para obtener ayuda con esta y otras explicaciones, consulte la sección *Recursos relacionados*. | 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/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Crear un sistema de archivos de Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un sistema de archivos de Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Defina el montaje de los destinos para las subredes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Compruebe que las subredes estén montadas como destinos.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Creación de un bucket de S3
<a name="create-an-s3-bucket"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un bucket de S3. | Si es necesario, abra la consola de Amazon S3 y [cree un bucket de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket) para almacenar los activos estáticos de la aplicación. | Administrador de la nube | 

### Crear un secreto en Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Para cifrar el secreto de Secrets Manager, cree una clave de AWS KMS. | Abra la consola de AWS Key Management Service (AWS KMS) y cree una clave KMS. | Administrador de la nube | 
|  Cree un secreto de Secrets Manager para almacenar la contraseña de Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Crear una instancia de Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de un grupo de subredes de base de datos.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Cree una instancia de Amazon RDS. | Cree y configure una instancia de Amazon RDS dentro de las subredes privadas. Asegúrese de que **Multi-AZ** esté activado, para una alta disponibilidad (HA). | Administrador de la nube | 
| Cargue los datos en la instancia de Amazon RDS.  | Cargue los datos relacionales que necesita la aplicación en la instancia de Amazon RDS. Este proceso variará según las necesidades de la aplicación y la forma en que se defina y diseñe el esquema de la base de datos. | Administrador de base de datos | 

### Crear los componentes de Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un clúster de ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Cree las imágenes de Docker. | Cree las imágenes de Docker siguiendo las instrucciones de la [documentación de AWS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html). | Administrador de la nube | 
| Cree un repositorio de Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nube, ingeniero DevOps  | 
| Pase las imágenes de Docker al repositorio de Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 
| Cree una definición de tarea de Amazon ECS.  | Para ejecutar contenedores Docker en Amazon ECS, se requiere una definición de tareas. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Para obtener ayuda sobre la configuración de la definición de la tarea, consulte “Creación de una definición de tarea” en la sección *Recursos relacionados*. Asegúrese de proporcionar las imágenes de Docker que envió a Amazon ECR. | Administrador de la nube | 
| Cree un servicio ECS y seleccione Fargate como tipo de lanzamiento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Configuración de AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el PrivateLink punto de conexión de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de la nube | 

### Crear un punto de conexión de VPC
<a name="create-a-vpc-endpoint"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un punto de conexión de VPC. | [Cree un punto de enlace de VPC para el punto](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) de PrivateLink enlace de AWS que creó anteriormente. El nombre de dominio completo (FQDN) del punto final de la VPC apuntará al FQDN del punto final de AWS PrivateLink . Esto crea una interfaz de red elástica para el servicio de punto de conexión de VPC a la que pueden acceder los puntos de conexión del servicio de nombres de dominio. | Administrador de la nube | 

### Establecimiento del destino
<a name="set-the-target"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue el equilibrador de carga de aplicación como destino. | Para agregar el equilibrador de carga de aplicación como destino para el equilibrador de carga de red, siga las instrucciones de la [documentación de AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html). | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Crear los equilibradores de carga:**
+ [Utilice un Network Load Balancer para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Crear un equilibrador de carga de red](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Utilice un balanceador de carga de aplicaciones para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Creación de un equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Crear un sistema de archivos de Amazon EFS:**
+ [Crear un sistema de archivos de Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Crear destinos de montaje en Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Crear un secreto en Secrets Manager:**
+ [Crear claves en AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Crear un secreto en AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**Crear una instancia de Amazon RDS:**
+ [Crear una instancia de base de datos de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Crear los componentes de Amazon ECS**
+ [Crear un repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Autenticar Docker con el repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Pasar una imagen a un repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Crear una definición de tarea de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Creación de un servicio de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Otros recursos:**
+ [Acceso seguro a los servicios a través de AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Acceda a aplicaciones de contenedores de forma privada en Amazon EKS mediante AWS PrivateLink y un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumen
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Este patrón describe cómo alojar de forma privada una aplicación contenedora de Docker en Amazon Elastic Kubernetes Service (Amazon EKS) detrás de un Network Load Balancer y cómo acceder a la aplicación mediante AWS. PrivateLink A continuación, puede utilizar una red privada para acceder de forma segura a los servicios de la nube de Amazon Web Services (AWS). 

El clúster de Amazon EKS que ejecuta las aplicaciones de Docker, con un Network Load Balancer en la interfaz, se puede asociar a un punto final de nube privada virtual (VPC) para acceder a él a través de AWS. PrivateLink Luego, este servicio de punto final de VPC se puede compartir con otros VPCs mediante sus puntos de enlace de VPC.

La configuración descrita en este patrón es una forma segura de compartir el acceso a las aplicaciones entre VPCs cuentas de AWS. No requiere configuraciones de enrutamiento ni conectividad especiales, ya que la conexión entre las cuentas del consumidor y del proveedor se encuentra en la red troncal global de AWS y no atraviesa la Internet pública.

## Requisitos previos y limitaciones
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Requisitos previos **
+ [Docker](https://www.docker.com/), instalado y configurado en Linux, macOS o Windows.
+ Una aplicación que se ejecuta en Docker.
+ Una cuenta de AWS activa.
+ [Interfaz de la línea de comandos de AWS (AWS CLI) versión 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalada y configurada en Linux, macOS o Windows.
+ Un clúster de Amazon EKS existente con subredes privadas etiquetadas y configurado para alojar aplicaciones. Para obtener más información, consulte [Etiquetado de subredes](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging) en la documentación de Amazon EKS. 
+ Kubectl, instalado y configurado para acceder a los recursos de su clúster de Amazon EKS. Para más información, consulte [Instalar kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la documentación de Amazon EKS. 

## Arquitectura
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Utilice PrivateLink un Network Load Balancer para acceder a una aplicación en un contenedor Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**Pila de tecnología **
+ Amazon EKS
+ AWS PrivateLink
+ Equilibrador de carga de red

**Automatización y escala**
+ Los manifiestos de Kubernetes se pueden rastrear y administrar en un repositorio basado en Git, y se pueden implementar mediante la integración y entrega continuas (CI/CD) en AWS. CodePipeline 
+ Puede usar AWS CloudFormation para crear este patrón mediante la infraestructura como código (IaC).

## Tools (Herramientas)
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html): Elastic Load Balancing distribuye el tráfico entrante de aplicaciones o redes entre varios destinos, como instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2), en una o más zonas de disponibilidad.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html): Amazon Elastic Kubernetes Service (Amazon EKS) 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.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): Amazon Virtual Private Cloud (Amazon VPC) permite lanzar recursos de AWS en una red virtual previamente definida.
+ [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) – Kubectl es una utilidad de línea de comandos para ejecutar comandos en clústeres de Kubernetes.

## Epics
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Implementar los archivos de manifiesto de implementación y servicio de Kubernetes
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Cree el archivo de manifiesto de implementación de Kubernetes. | Cree un archivo de manifiesto de implementación modificando el siguiente archivo de muestra según sus necesidades.<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>Esta es una muestra de archivo de configuración de NGINX que se implementa mediante la imagen de Docker de NGINX. Para obtener más información, consulte [Cómo usar la imagen de Docker de NGINX](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/) en la documentación de Docker. | DevOps ingeniero | 
| Implemente el archivo de manifiesto de implementación de Kubernetes. | Ejecute el siguiente comando para aplicar el archivo de manifiesto de implementación a su clúster de Amazon EKS:`kubectl apply –f <your_deployment_file_name> ` | DevOps ingeniero | 
|  Cree el archivo de manifiesto del servicio de Kubernetes.  | Cree un archivo de manifiesto de servicio modificando el siguiente archivo de muestra según sus necesidades.<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>Asegúrese de incluir las siguientes `annotations` para definir un equilibrador de carga de red interno:<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps ingeniero | 
| Implemente el archivo de manifiesto del servicio de Kubernetes. | Ejecute el siguiente comando para aplicar el archivo de manifiesto de servicio a su clúster de Amazon EKS:`kubectl apply -f <your_service_file_name>` | DevOps ingeniero | 

### Creación de los puntos de conexión
<a name="create-the-endpoints"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Registre el nombre del equilibrador de carga de red.  | Ejecute el siguiente comando para recuperar el nombre del equilibrador de carga de red:`kubectl get svc sample-service -o wide`Registre el nombre del balanceador de carga de red, que es necesario para crear un PrivateLink punto de conexión de AWS. | DevOps ingeniero | 
| Cree un PrivateLink punto de conexión de AWS. | Inicie sesión en la consola de administración de AWS, abra la consola de Amazon VPC y, a continuación, cree un punto de conexión de AWS PrivateLink . Al asociar este punto de conexión al equilibrador de carga de red, la aplicación estará disponible de forma privada para los clientes. Para obtener más información, consulte los [servicios de punto final de VPC PrivateLink (AWS)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) en la documentación de Amazon VPC.Si la cuenta del consumidor requiere acceso a la aplicación, el [ID de cuenta de AWS de la cuenta](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) del consumidor debe añadirse a la lista de principales permitidos para la configuración del PrivateLink punto de conexión de AWS. Para obtener más información, consulte [Cómo añadir y eliminar permisos para el servicio de puntos de conexión](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html) en la documentación de Amazon VPC. | Administrador de la nube  | 
| Cree un punto de conexión de VPC. | En la consola de Amazon VPC, elija **Endpoint Services** y, a continuación, elija **Create Endpoint Service**. Cree un punto de enlace de VPC para el punto de enlace de AWS PrivateLink .El nombre de dominio completo (FQDN) del punto de enlace de VPC apunta al FQDN del punto de enlace de AWS. PrivateLink Esto crea una interfaz de red elástica para el servicio de puntos de conexión de VPC a la que pueden acceder los puntos de conexión de DNS.  | Administrador de la nube | 

## Recursos relacionados
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ [Uso de la imagen de Docker NGINX oficial](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/)
+ [Equilibrio de carga de red en Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html) 
+ [Creación de servicios de punto final de VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) 
+ [Cómo agregar y eliminar permisos para el servicio de punto de conexión](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)

# Automatizar las copias de seguridad de las instancias de base de datos de Amazon RDS para PostgreSQL mediante AWS Batch
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumen
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-summary"></a>

Realizar copias de seguridad de las bases de datos de PostgreSQL es una tarea importante que, por lo general, se puede obtener mediante el [programa de utilidad pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html), que usa el comando COPY de forma predeterminada para crear un esquema y un volcado de datos de una base de datos de PostgreSQL. Sin embargo, este proceso puede resultar repetitivo si necesita copias de seguridad periódicas de varias bases de datos de PostgreSQL. Si las bases de datos PostgreSQL están alojadas en la nube, también puede aprovechar la función [automated backup](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) de copia de seguridad automática que ofrece Amazon Relational Database Service (Amazon RDS) para PostgreSQL. Este patrón describe cómo automatizar las copias de seguridad periódicas de las instancias de base de datos de Amazon RDS para PostgreSQL mediante el programa de utilidad pg\$1dump.

Nota: En las instrucciones se parte del supuesto de que utiliza Amazon RDS. Sin embargo, también puede utilizar este enfoque para bases de datos PostgreSQL alojadas fuera de Amazon RDS. Para realizar copias de seguridad, la función de AWS Lambda debe poder acceder a las bases de datos.

Un evento de Amazon CloudWatch Events basado en el tiempo inicia una función Lambda que busca [etiquetas de respaldo específicas aplicadas a los metadatos de las instancias de base de datos de](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) PostgreSQL en Amazon RDS. Si las instancias de base de datos PostgreSQL tienen **la etiqueta DBDump bkp:Automated =** Active y otras etiquetas de backup obligatorias, la función Lambda envía los trabajos individuales para cada copia de seguridad de la base de datos a AWS Batch. 

AWS Batch procesa estos trabajos y carga los datos de copia de seguridad en un bucket de Amazon Simple Storage Service (Amazon S3). En este patrón se utiliza un Dockerfile y un archivo entrypoint.sh para crear una imagen de contenedor de Docker que se usa para realizar copias de seguridad en el trabajo de AWS Batch. Una vez finalizado el proceso de copia de seguridad, AWS Batch registra los detalles de la copia de seguridad en una tabla de inventario de Amazon DynamoDB. Como medida de seguridad adicional, un evento de CloudWatch eventos inicia una notificación de Amazon Simple Notification Service (Amazon SNS) si un trabajo falla en AWS Batch. 

## Requisitos previos y limitaciones
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Un entorno informático existente, administrado o no administrado. Para obtener más información, consulte [Entornos informáticos administrados y no administrados](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) en la documentación de AWS Batch. 
+ [Imagen de Docker de la Interfaz de la línea de comandos (CLI) de AWS, versión 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html), instalada y configurada.
+ Instancias de base de datos de Amazon RDS para PostgreSQL existentes.  
+ Un bucket de S3 existente. 
+ [Docker](https://www.docker.com/), instalado y configurado en Linux, macOS o Windows.
+ Familiaridad con la codificación en Lambda. 

## Arquitectura
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-architecture"></a>

![\[Arquitectura para realizar copias de seguridad de las instancias de base de datos de Amazon RDS para PostgreSQL mediante la utilidad pg_dump.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/3283f739-980b-43d4-aca0-9d77a2ce3b85/images/352e2eab-1b7d-44ec-840a-a772a175e873.png)


 

**Pila de tecnología**
+  CloudWatch Eventos de Amazon
+ Amazon DynamoDB
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon RDS
+ Amazon SNS
+ Amazon S3
+ AWS Batch
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ Docker

## Tools (Herramientas)
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — CloudWatch Events ofrece una transmisión casi en tiempo real de los eventos del sistema que describen los cambios en los recursos de AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html): DynamoDB es un servicio de base de datos NoSQL totalmente administrado que ofrece un rendimiento rápido y predecible, así como una perfecta escalabilidad.
+ [Amazon ECR](https://docs.aws.amazon.com/ecr/index.html): Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor de AWS administrado que es seguro, escalable y fiable.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/index.html): Amazon Relational Database Service (Amazon RDS) es un servicio web que facilita la configuración, el funcionamiento y el escalado de una base de datos relacional en la nube de AWS.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): Amazon Simple Notification Service (Amazon SNS) es un servicio administrado que proporciona la entrega de mensajes de los publicadores a los suscriptores.
+ [Amazon S3](https://docs.aws.amazon.com/s3/index.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento para Internet.
+ [AWS Batch](https://docs.aws.amazon.com/batch/index.html): AWS Batch facilita poder ejecutar cargas de trabajo informáticas por lotes en la nube de AWS.
+ [AWS KMS](https://docs.aws.amazon.com/kms/index.html) – AWS Key Management Service (AWS KMS) es un servicio administrado que permite crear y controlar fácilmente las claves de cifrado que se utilizan para cifrar datos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/index.html): Lambda es un servicio informático que facilita poder ejecutar código sin aprovisionar ni administrar servidores.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/index.html): Secrets Manager 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.
+ [Docker:](https://www.docker.com/) Docker facilita a los desarrolladores empaquetar, enviar y ejecutar cualquier aplicación como un contenedor ligero, portátil y autosuficiente.

Las instancias de base de datos de PostgreSQL en Amazon RDS deben tener [etiquetas aplicadas a sus metadatos](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html). La función de Lambda busca etiquetas para identificar las instancias de base de datos de las que se debe hacer una copia de seguridad y, por lo general, se utilizan las siguientes etiquetas.


| 
| 
| Etiqueta | Description (Descripción) | 
| --- |--- |
| BKP: Automatizado = Activo DBDump  | Identifica una instancia de base de datos de Amazon RDS como candidata para realizar copia de seguridad. | 
| bkp: = AutomatedBackupSecret <secret\$1name > | Identifica el secreto de Secrets Manager que contiene las credenciales de inicio de sesión de Amazon RDS. | 
| BKP: Cubeta S3 DBDump automatizada = <s3\$1bucket\$1name> | Identifica el bucket de S3 al que se enviarán las copias de seguridad. | 
| BKP: DBDump Frecuencia automatizadaBKP: Tiempo DBDump automatizado | Identifica la frecuencia y las horas en las que se deben hacer copias de seguridad de las bases de datos.  | 
| bkp:pgdumpcommand = <pgdump\$1command> | Identifica las bases de datos para las que se deben realizar las copias de seguridad. | 

## Epics
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-epics"></a>

### Crear una tabla de inventario en DynamoDB
<a name="create-an-inventory-table-in-dynamodb"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una tabla en DynamoDB. | Inicie sesión en la Consola de administración de AWS, abra la consola de Amazon DynamoDB y cree una tabla. Para obtener ayuda con esta y otras explicaciones, consulte la sección *Recursos relacionados*. | Administrador de la nube, administrador de bases de datos | 
| Confirme que se creó la tabla.  | Ejecute el comando `aws dynamodb describe-table --table-name <table-name> \| grep TableStatus`. Si la tabla existe, el comando devolverá el resultado `"TableStatus": "ACTIVE",`. | Administrador de la nube, administrador de bases de datos | 

### Creación de un tema de SNS para los eventos de trabajo con errores en AWS Batch
<a name="create-an-sns-topic-for-failed-job-events-in-aws-batch"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un tema de SNS. | Abra la consola de Amazon SNS, seleccione **Topics** (Temas) y cree un tema de SNS con el nombre `JobFailedAlert`. Suscríbase al tema con una dirección de correo electrónico activa y compruebe su bandeja de entrada para confirmar que llegue el correo electrónico de suscripción a SNS de AWS Notifications. | Administrador de la nube | 
| Cree una regla de eventos de trabajo con errores para AWS Batch.  | Abre la CloudWatch consola de Amazon, selecciona **Eventos** y, a continuación, selecciona **Crear regla**. Seleccione **Show advanced options** (Mostrar opciones avanzadas) y, a continuación, **Edit** (Editar). En **Build a pattern that selects events for processing by your targets** (Crear un patrón que seleccione eventos para procesar por los destinos), sustituya el texto que aparezca con el código Failed job event (Evento de trabajo con errores) de la sección *Información adicional*. Este código define una regla de CloudWatch eventos que se inicia cuando AWS Batch tiene un `Failed` evento. | Administrador de la nube | 
| Agregue el destino de la regla del evento.  | En **Targets** (Destinos), seleccione **Add target** (Agregar destino) y, a continuación, el tema de SNS `JobFailedAlert`. Configure los detalles restantes y cree la regla de eventos de Cloudwatch. | Administrador de la nube | 

### Crear una imagen de Docker y pasarla a un repositorio de Amazon ECR
<a name="build-a-docker-image-and-push-it-to-an-amazon-ecr-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio de Amazon ECR. | Abra la consola de Amazon ECR y seleccione la región de AWS donde desee crear el repositorio. Seleccione **Repositories** (Repositorios) y, a continuación, **Create repository** (Crear repositorio). Configure el repositorio según los requisitos. | Administrador de la nube | 
| Cree un Dockerfile.  | Inicie sesión en Docker y utilice Sample Dockerfile (Dockerfile de muestra) y el archivo entrypoint.sh de muestra de la sección de *Información adicional* para crear un Dockerfile. | DevOps ingeniero | 
| Cree una imagen de Docker y pásela a un repositorio de Amazon ECR. | Cree el Dockerfile en una imagen de Docker y pásela a un repositorio de Amazon ECR. Para obtener ayuda con esta y otras explicaciones, consulte la sección *Recursos relacionados*. | DevOps ingeniero | 

### Crear los componentes de AWS Batch
<a name="create-the-aws-batch-components"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una definición de trabajo de AWS Batch. | Abra la consola de AWS Batch y cree una definición de trabajo que incluya el identificador uniforme de recursos (URI) del repositorio de Amazon ECR como la propiedad `Image`. | Administrador de la nube | 
| Configure la cola de trabajos de AWS Batch.  | En la consola de AWS Batch, seleccione **Job queues** (Colas de trabajos) y, a continuación, **Create queue** (Crear cola). Cree una cola de trabajos que almacene los trabajos hasta que AWS Batch los ejecute en los recursos del entorno informático. Importante: Asegúrese de escribir la lógica para que AWS Batch registre los detalles de la copia de seguridad en la tabla de inventario de DynamoDB. | Administrador de la nube | 

### Crear y programar una función de Lambda
<a name="create-and-schedule-a-lambda-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una función de Lambda para buscar etiquetas. | Cree una función de Lambda que busque etiquetas en las instancias de base de datos de PostgreSQL e identifique los candidatos a copia de seguridad. Asegúrese de que la función de Lambda pueda identificar la etiqueta `bkp:AutomatedDBDump = Active` y todas las demás etiquetas necesarias. Importante: La función de Lambda también debe poder agregar trabajos a la cola de trabajo de AWS Batch. | DevOps ingeniero | 
| Crea un evento de CloudWatch eventos basado en el tiempo.  | Abra la CloudWatch consola de Amazon y cree un evento CloudWatch Events que utilice una expresión cron para ejecutar la función Lambda de forma regular. Importante: Todos los eventos programados utilizan la zona horaria UTC. | Administrador de la nube | 

### Probar la automatización de las copias de seguridad
<a name="test-the-backup-automation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una clave de Amazon KMS. | Abra la consola de Amazon KMS y cree una clave de KMS que pueda usarse para cifrar las credenciales de Amazon RDS almacenadas en AWS Secrets Manager. | Administrador de la nube | 
| Crear un secreto de AWS Secrets Manager. | Abra la consola de AWS Secrets Manager y guarde en secreto las credenciales de la base de datos de Amazon RDS para PostgreSQL. | Administrador de la nube | 
| Agregue las etiquetas necesarias a las instancias de base de datos de PostgreSQL. | Abra la consola de Amazon RDS y agregue etiquetas a las instancias de base de datos de PostgreSQL de las que desee hacer una copia de seguridad automática. Puede utilizar las etiquetas de la tabla de la sección *Tools* (Herramientas). Si necesita copias de seguridad de varias bases de datos de PostgreSQL dentro de la misma instancia de Amazon RDS, utilice `-d test:-d test1` como valor para la etiqueta `bkp:pgdumpcommand`. `test` y `test1` son los nombres de las bases de datos. Compruebe que no quede ningún espacio después de los dos puntos (:). | Administrador de la nube | 
| Verifique la automatización de la copia de seguridad.  | Para verificar la automatización de la copia de seguridad, puede invocar la función de Lambda o esperar a que comience la programación de la copia de seguridad. Una vez finalizado el proceso de copia de seguridad, compruebe que la tabla de inventario de DynamoDB tenga una entrada de copia de seguridad válida para las instancias de base de datos de PostgreSQL. Si coinciden, el proceso de automatización de la copia de seguridad se ha realizado correctamente. | Administrador de la nube | 

## Recursos relacionados
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-resources"></a>

**Crear una tabla de inventario en DynamoDB**
+ [Crear una tabla de Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)

 

**Creación de un tema de SNS para los eventos de trabajo con errores en AWS Batch**
+ [Crear un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)
+ [Enviar alertas de SNS sobre eventos de trabajo con errores en AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html)

 

**Crear una imagen de Docker y pasarla a un repositorio de Amazon ECR**
+ [Crear un repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)    
+ [Escribir un Dockerfile, crear una imagen de Docker y pasarla a Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

 

**Crear los componentes de AWS Batch**
+ [Crear una definición de trabajo de AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-1)    
+ [Configurar el entorno informático y la cola de trabajos de AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-2)   
+ [Crear una cola de trabajos en AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/create-job-queue.html)

 

**Crear una función de Lambda**
+ [Crear una función de Lambda y escribir código](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)
+ [Usar Lambda con DynamoDB](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

 

**Cree un evento de eventos CloudWatch **
+ [Crea un evento de CloudWatch eventos basado en el tiempo](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Scheduled-Rule.html)   
+ [Utilizar expresiones cron en eventos de Cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

 

**Probar la automatización de las copias de seguridad**
+ [Crear una clave de Amazon KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)    
+ [Crear un secreto en Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)
+ [Agregar etiquetas a una instancia de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html)

## Información adicional
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-additional"></a>

**Evento de trabajo con errores:**

```
{
  "detail-type": [
    "Batch Job State Change"
  ],
  "source": [
    "aws.batch"
  ],
  "detail": {
    "status": [
      "FAILED"
    ]
  }
}
```

**Dockerfile de muestra:**

```
FROM alpine:latest
RUN apk --update add py-pip postgresql-client jq bash && \
pip install awscli && \
rm -rf /var/cache/apk/*
ADD entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
```

**Archivo entrypoint.sh de muestra:**

```
 #!/bin/bash
set -e
DATETIME=`date +"%Y-%m-%d_%H_%M"`
FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME}
FILE=${FILENAME}_${DATETIME}

aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName}
aws configure --profile new-profile set credential_source EcsContainer

echo "Central Account access provider IAM role is: "
aws sts get-caller-identity

echo "Target Customer Account access provider IAM role is: "
aws sts get-caller-identity --profile new-profile

securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile)

if [[ ${securestring} ]]; then
    echo "successfully accessed secrets manager and got the credentials"
    export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD')
    PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME')
    echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}"
    # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c  | aws s3 cp - --region=$REGION  --profile new-profile s3://$BUCKET/$FILE
    # in="-n public:-n private"
    IFS=':' list=($EXECUTE_COMMAND);
    for command in "${list[@]}";
      do
        echo $command;
        pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c  | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz"
        echo $?;
        if  [[ $? -ne 0 ]]; then
            echo "Error occurred in database backup process. Exiting now....."
            exit 1
        else
            echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz"
            #write the details into the inventory table in central account
            echo "Writing to DynamoDB inventory table"
            aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}'
            echo $?
            if  [[ $? -ne 0 ]]; then
                echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....."
                exit 1
            else
                echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}"
            fi
        fi
      done;
else
    echo "Something went wrong {$?}"
    exit 1
fi

exec "$@"
```

# Automatice la implementación del controlador de terminación de nodos en Amazon EKS mediante una CI/CD canalización
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline"></a>

*Sandip Gangapadhyay, Sandeep Gawande, Viyoma Sachdeva, Pragtideep Singh y John Vargas, Amazon Web Services*

## Resumen
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-summary"></a>

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

En la nube de Amazon Web Services (AWS), puede utilizar [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler), un proyecto de código abierto, para gestionar el cierre de instancias de Amazon Elastic Compute Cloud EC2 (Amazon) en Kubernetes sin problemas. El controlador de terminaciones de nodos de AWS ayuda a garantizar que el plano de control de Kubernetes responda adecuadamente a los eventos que pueden provocar que la EC2 instancia deje de estar disponible. Dichos eventos incluyen lo siguiente:
+ [EC2 mantenimiento programado de la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
+ [Interrupciones de Amazon EC2 Spot Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)
+ [El grupo de escalado automático se reduce horizontalmente](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html#as-lifecycle-scale-in)
+ [Reequilibrio de grupos de escalado automático](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage) en todas las zonas de disponibilidad
+ EC2 terminación de instancias a través de la API o la consola de administración de AWS

Si no se gestiona un evento, es posible que el código de su aplicación no se detenga correctamente. También puede tardar más en recuperar la disponibilidad total o programar accidentalmente el trabajo en los nodos que están dejando de funcionar. El (NTH) `aws-node-termination-handler` puede funcionar en dos modos diferentes: servicio de metadatos de instancias (IMDS) o procesador de colas. Para obtener más información acerca de los dos modos, consulte el [archivo Léame](https://github.com/aws/aws-node-termination-handler#readme).

Este patrón utiliza AWS CodeCommit y automatiza la implementación de NTH mediante el uso de Queue Processor mediante un proceso de integración y entrega continuas (CI/CD).

**nota**  
Si utiliza [grupos de nodos gestionados por EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), no necesita `aws-node-termination-handler`.

## Requisitos previos y limitaciones
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Un navegador web compatible para su uso con la consola de administración de AWS. Consulte la [lista de los navegadores compatibles](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/).
+ AWS Cloud Development Kit (AWS CDK), [instalado](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).
+ `kubectl`, la herramienta de línea de comandos de Kubernetes, [instalada](https://kubernetes.io/docs/tasks/tools/).
+ `eksctl`, la interfaz de la línea de comandos de AWS (AWS CLI) para Amazon Elastic Kubernetes Service (Amazon EKS), [instalada](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html).
+ Un clúster de EKS en ejecución con la versión 1.20 o posterior.
+ Grupo de nodos autogestionados adjunto al clúster de EKS. Para crear un clúster de Amazon EKS con un grupo de nodos autogestionado, ejecute el siguiente comando.

  ```
  eksctl create cluster --managed=false --region <region> --name <cluster_name>
  ```

  Para obtener más información sobre `eksctl`, consulte la [documentación de eksctl](https://eksctl.io/usage/creating-and-managing-clusters/).
+ Proveedor de OpenID Connect (OIDC) de AWS Identity and Access Management (IAM) para su clúster. Para obtener más información, consulte [Creación de un proveedor OIDC de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).

**Limitaciones**
+ Debe utilizar una región de AWS que sea compatible con el servicio Amazon EKS.

**Versiones de producto**
+ Versión de Kubernetes 1.20 o posterior
+ `eksctl` versión 0.107.0 o posterior
+ CDK de AWS, versión 2.27.0 o posterior

## Arquitectura
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-architecture"></a>

**Pila de tecnología de destino**
+ Una nube privada virtual (VPC)
+ Un Clúster de EKS
+ Amazon Simple Queue Service (Amazon SQS)
+ IAM
+ Kubernetes 

**Arquitectura de destino**** **

El siguiente diagrama muestra una vista de alto nivel de los end-to-end pasos que se deben seguir cuando se inicia la terminación del nodo.

![\[Una VPC con un grupo de escalado automático, un clúster de EKS con Node Termination Handler y una cola de SQS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/970dfb73-9526-4942-a974-e8eef6416596/images/9e0125ae-d55b-49dd-ae70-ccaedf03832a.png)


El flujo de trabajo que se muestra en el diagrama consta de los siguientes pasos de alto nivel:

1. El evento de finalización de la EC2 instancia de escalado automático se envía a la cola de SQS.

1. El NTH Pod supervisa los mensajes nuevos en la cola de SQS.

1. El NTH Pod recibe el nuevo mensaje y hace lo siguiente:
   + Acordona el nodo para que el nuevo pod no se ejecute en él.
   + Drena el nodo para evacuar el pod existente
   + Envía una señal de enlace de ciclo de vida al grupo de escalado automático para que se pueda terminar el nodo.

**Automatizar y escalar**
+ El código lo administra e implementa AWS CDK, con el respaldo de pilas CloudFormation anidadas de AWS.
+ El [plano de control de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/disaster-recovery-resiliency.html) se ejecuta en varias zonas de disponibilidad para garantizar una alta disponibilidad.
+ Para el [escalado automático](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html), Amazon EKS admite el [escalador automático de clústeres](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) de Kubernetes y [Karpenter](https://karpenter.sh/).

## Tools (Herramientas)
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-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 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.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) lo ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) le ayuda a mantener la disponibilidad de las aplicaciones y le permite añadir o eliminar automáticamente EC2 instancias de Amazon según las condiciones que defina.
+ [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.

**Otras herramientas**
+ [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/): es una herramienta de línea de comandos para la ejecución de comandos en clústeres de Kubernetes. Puede usar kubectl para implementar aplicaciones, inspeccionar y administrar los recursos del clúster y ver los registros.

**Código**

El código de este patrón está disponible en el [deploy-nth-to-eks](https://github.com/aws-samples/deploy-nth-to-eks)repositorio de GitHub .com. El repositorio de código contiene los siguientes archivos y carpetas.
+ `nth folder`— El diagrama de Helm, los archivos de valores y los scripts para escanear e implementar la CloudFormation plantilla de AWS para Node Termination Handler.
+ `config/config.json`: el archivo de parámetros de configuración de la aplicación. Este archivo contiene todos los parámetros necesarios para implementar el CDK.
+ `cdk`: el código fuente del CDK de AWS.
+ `setup.sh`— El script utilizado para implementar la aplicación AWS CDK para crear la CI/CD canalización requerida y otros recursos necesarios.
+ `uninstall.sh`: el script utilizado para limpiar los recursos.

Para usar el código de muestra, siga las instrucciones en la sección *Epics *.

## Prácticas recomendadas
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-best-practices"></a>

Para conocer las prácticas recomendadas a la hora de automatizar AWS Node Termination Handler, consulte lo siguiente:
+ [Guías de prácticas recomendadas de EKS](https://aws.github.io/aws-eks-best-practices/)
+ [Node Termination Handler: configuración](https://github.com/aws/aws-node-termination-handler/tree/main/config/helm/aws-node-termination-handler)

## Epics
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio. | Para clonar el repositorio mediante SSH (Secure Shell), ejecute el siguiente comando.<pre>git clone git@github.com:aws-samples/deploy-nth-to-eks.git</pre>Para clonar el repositorio mediante HTTPS, ejecute el siguiente comando.<pre>git clone https://github.com/aws-samples/deploy-nth-to-eks.git</pre>Al clonar el repositorio se crea una carpeta llamada `deploy-nth-to-eks`.Cambie a ese directorio.<pre>cd deploy-nth-to-eks</pre> | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 
| Configure el archivo kubeconfig. | Configure sus credenciales de AWS en su terminal y confirme que tiene derechos para asumir el rol de clúster. Puede utilizar el siguiente código de ejemplo.<pre>aws eks update-kubeconfig --name <Cluster_Name> --region <region>--role-arn <Role_ARN></pre> | AWS DevOps, DevOps ingeniero, desarrollador de aplicaciones | 

### Implemente la CI/CD canalización
<a name="deploy-the-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Establezca los parámetros. | Configure los siguientes parámetros obligatorios en el archivo `config/config.json`.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 
| Cree la CI/CD canalización para implementar NTH. | Ejecute el script setup.sh.<pre>./setup.sh</pre>El script implementará la aplicación AWS CDK que creará el CodeCommit repositorio con el código de ejemplo, la canalización y los CodeBuild proyectos en función de los parámetros ingresados por el usuario en `config/config.json` el archivo.Este script solicitará la contraseña cuando instale los paquetes npm con el comando sudo. | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 
| Revise la CI/CD canalización. | Abra la consola de administración de AWS y revise los siguientes recursos creados en la pila.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html)Una vez que la canalización se ejecute correctamente, la versión de Helm `aws-node-termination-handler` se instala en el clúster de EKS. Además, se está ejecutando un pod denominado `aws-node-termination-handler` en el espacio de nombres `kube-system` del clúster. | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 

### Pruebe la implementación de NTH
<a name="test-nth-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Simule un evento de escalado de grupo de escalado automático. | Para simular un evento de reducción horizontal del escalado automático, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) |  | 
| Revise los registros. | Durante el evento de escalado, el NTH Pod acordonará y vaciará el nodo de trabajo correspondiente (la EC2 instancia que finalizará como parte del evento de escalado). Para comprobar los registros, utilice el código de la sección *Información adicional*. | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpieza de todos los recursos de AWS. | Para limpiar los recursos creados por este patrón, ejecute el siguiente comando.<pre>./uninstall.sh</pre>Esto limpiará todos los recursos creados en este patrón al eliminar la CloudFormation pila. | DevOps ingeniero | 

## Resolución de problemas
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El registro npm no está configurado correctamente. | Durante la instalación de esta solución, el script instala npm install para descargar todos los paquetes necesarios. Si, durante la instalación, ve un mensaje que dice “No se puede encontrar el módulo”, es posible que el registro npm no esté configurado correctamente. Para ver la configuración actual del registro, ejecute el siguiente comando.<pre>npm config get registry</pre>Ejecute el siguiente comando para establecer el registro con `https://registry.npmjs.org/`.<pre>npm config set registry https://registry.npmjs.org</pre> | 
| Retrasar la entrega del mensaje SQS. | Como parte de la solución de problemas, si desea retrasar la entrega de los mensajes de SQS a NTH Pod, puede ajustar el parámetro de retraso de entrega de SQS. Para obtener más información, consulte [Colas de retraso de Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). | 

## Recursos relacionados
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-resources"></a>
+ [Código fuente de AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler)
+ [EC2 taller](https://ec2spotworkshops.com/using_ec2_spot_instances_with_eks/070_selfmanagednodegroupswithspot/deployhandler.html)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/)
+ [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)

## Información adicional
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-additional"></a>

1. Busque el nombre del NTH Pod.

```
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
```

2. Consulte los registros. Un registro de ejemplo se ve del siguiente modo. Muestra que el nodo ha sido acordonado y drenado antes de enviar la señal de finalización del enlace de ciclo de vida del grupo de escalado automático.

```
kubectl -n kube-system logs aws-node-termination-handler-65445555-kbqc7
022/07/17 20:20:43 INF Adding new event to the event store event={"AutoScalingGroupName":"eksctl-my-cluster-target-nodegroup-ng-10d99c89-NodeGroup-ZME36IGAP7O1","Description":"ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n","EndTime":"0001-01-01T00:00:00Z","EventID":"asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564","InProgress":false,"InstanceID":"i-0409f2a9d3085b80e","IsManaged":true,"Kind":"SQS_TERMINATE","NodeLabels":null,"NodeName":"ip-192-168-75-60.us-east-2.compute.internal","NodeProcessed":false,"Pods":null,"ProviderID":"aws:///us-east-2c/i-0409f2a9d3085b80e","StartTime":"2022-07-17T20:20:42.702Z","State":""}
2022/07/17 20:20:44 INF Requesting instance drain event-id=asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564 instance-id=i-0409f2a9d3085b80e kind=SQS_TERMINATE node-name=ip-192-168-75-60.us-east-2.compute.internal provider-id=aws:///us-east-2c/i-0409f2a9d3085b80e
2022/07/17 20:20:44 INF Pods on node node_name=ip-192-168-75-60.us-east-2.compute.internal pod_names=["aws-node-qchsw","aws-node-termination-handler-65445555-kbqc7","kube-proxy-mz5x5"]
2022/07/17 20:20:44 INF Draining the node
2022/07/17 20:20:44 ??? WARNING: ignoring DaemonSet-managed Pods: kube-system/aws-node-qchsw, kube-system/kube-proxy-mz5x5
2022/07/17 20:20:44 INF Node successfully cordoned and drained node_name=ip-192-168-75-60.us-east-2.compute.internal reason="ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n"
2022/07/17 20:20:44 INF Completed ASG Lifecycle Hook (NTH-K8S-TERM-HOOK) for instance i-0409f2a9d3085b80e
```

# Cree e implemente automáticamente una aplicación Java en Amazon EKS mediante una CI/CD canalización
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen y James Radtke, Amazon Web Services*

## Resumen
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Este patrón describe cómo crear una canalización de integración y entrega continuas (CI/CD) que cree e implemente automáticamente una aplicación Java con DevSecOps las prácticas recomendadas en un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) del. Nube de AWS Este patrón utiliza una aplicación de saludo desarrollada con un marco Java Spring Boot y que utiliza Apache Maven.

Puede utilizar el enfoque de este patrón para crear el código de una aplicación Java, empaquetar los artefactos de la aplicación como una imagen de Docker, escanear la imagen por motivos de seguridad y cargarla como un contenedor de carga de trabajo en Amazon EKS. El enfoque de este patrón es útil si desea migrar de una arquitectura monolítica estrechamente acoplada a una arquitectura de microservicios. Este enfoque también le ayuda a supervisar y gestionar todo el ciclo de vida de una aplicación Java, lo que garantiza un mayor nivel de automatización y ayuda a evitar errores o fallos.

## Requisitos previos y limitaciones
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ AWS Command Line Interface (AWS CLI) versión 2, instalada y configurada. Para obtener más información al respecto, consulte [Instalación o actualización a la última versión de AWS CLI en la](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) AWS CLI documentación.

  AWS CLI la versión 2 debe configurarse con el mismo rol AWS Identity and Access Management (IAM) que crea el clúster de Amazon EKS, ya que solo ese rol está autorizado a añadir otros roles de IAM al. `aws-auth` `ConfigMap` Para obtener información y los pasos de configuración AWS CLI, consulte [Configuración de los ajustes](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) en la AWS CLI documentación.
+ Funciones y permisos de IAM con acceso total a AWS CloudFormation. Para obtener más información al respecto, consulte [Controlar el acceso con IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) en la CloudFormation documentación.
+ Un clúster de Amazon EKS existente, con detalles del nombre del rol de IAM y el nombre de recurso de Amazon (ARN) del rol de IAM de los nodos de trabajo del clúster de EKS.
+ Escalador automático de clústeres de Kubernetes instalado y configurado en su clúster de Amazon EKS. Para más información, consulte [Escalado de computación en clústeres´con Karpenter y Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) en la documentación de Amazon EKS. 
+ Acceso al código del GitHub repositorio.

**importante**  
AWS Security Hub CSPM está habilitado como parte de las CloudFormation plantillas que se incluyen en el código de este patrón. De forma predeterminada, una vez que Security Hub CSPM está activado, viene con una prueba gratuita de 30 días. Una vez finalizada la prueba, se aplicará un costo a Servicio de AWS. Para obtener más información acerca de los precios, consulte [Precios de AWS Security Hub CSPM](https://aws.amazon.com/security-hub/pricing/).

**Versiones de producto**
+ Helm versión 3.4.2 o posterior
+ Apache Maven versión 3.6.3 o posterior
+ BridgeCrew Compruebe la versión 2.2 o posterior
+ Aqua Security Trivy versión 0.37 o posterior

## Arquitectura
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Pila de tecnología**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notification Service (Amazon SNS)

**Arquitectura de destino**

![\[Flujo de trabajo para implementar una aplicación Java en Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


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

1. El desarrollador actualiza el código de la aplicación Java en la rama base del CodeCommit repositorio, lo que crea una solicitud de extracción (PR).

1. En cuanto se envía el PR, Amazon CodeGuru Reviewer revisa automáticamente el código, lo analiza en función de las prácticas recomendadas para Java y ofrece recomendaciones al desarrollador.

1. Una vez que el PR se fusiona con la rama base, se crea un EventBridge evento de Amazon.

1. El EventBridge evento inicia la CodePipeline canalización, que comienza.

1. CodePipeline ejecuta la etapa de CodeSecurity escaneo (seguridad continua).

1. AWS CodeBuild inicia el proceso de análisis de seguridad, en el que los archivos Helm de implementación de Dockerfile y Kubernetes se escanean mediante Checkov, y el código fuente de la aplicación se escanea en función de los cambios incrementales en el código. El escaneo del código fuente de la aplicación lo realiza el [contenedor de interfaz de línea de comandos (CLI) de CodeGuru Reviewer](https://github.com/aws/aws-codeguru-cli).
**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. 

1. Si la etapa de escaneo de seguridad es exitosa, se inicia la etapa de compilación (integración continua).

1. En la etapa de compilación, CodeBuild crea el artefacto, empaqueta el artefacto en una imagen de Docker, escanea la imagen en busca de vulnerabilidades de seguridad mediante Aqua Security Trivy y almacena la imagen en Amazon ECR.

1. Las vulnerabilidades detectadas en el paso 8 se cargan en Security Hub CSPM para que los desarrolladores o ingenieros las analicen más a fondo. Security Hub CSPM proporciona una descripción general y recomendaciones para corregir las vulnerabilidades.

1. Las notificaciones por correo electrónico de las fases secuenciales de la CodePipeline canalización se envían a través de Amazon SNS.

1. Una vez completadas las fases de integración continua, CodePipeline pasa a la etapa de implementación (entrega continua).

1. La imagen de Docker se implementa en Amazon EKS como una carga de trabajo de contenedor (pod) mediante gráficos de Helm.

1. El pod de la aplicación se configura con el agente Amazon CodeGuru Profiler, que envía los datos de creación de perfiles de la aplicación (CPU, uso del montón y latencia) a CodeGuru Profiler, lo que ayuda a los desarrolladores a comprender el comportamiento de la aplicación.

## Tools (Herramientas)
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-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 las regiones. Cuentas 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.
+ [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.
+ [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 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, incluidas AWS Lambda funciones, puntos de enlace de invocación HTTP que utilizan destinos de API o buses de eventos, entre 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 Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)proporciona una visión completa del estado de su seguridad. AWS También le ayuda a comparar su AWS entorno con los estándares y las mejores prácticas del sector de la seguridad.
+ [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.

**Otros servicios**
+ [Helm](https://helm.sh/docs/) es un administrador de paquetes de código abierto para Kubernetes.
+ [Apache Maven](https://maven.apache.org/) es una herramienta de software para la comprensión y administración de proyectos.
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) es una herramienta de análisis de código estático que permite escanear la infraestructura en forma de archivos de código (IaC) para detectar errores de configuración que puedan provocar problemas de seguridad o de conformidad.
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) es un escáner completo para detectar vulnerabilidades en imágenes de contenedores, sistemas de archivos y repositorios de Git, además de problemas de configuración.

**Código**

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

## Prácticas recomendadas
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Este patrón sigue las [prácticas recomendadas de seguridad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) para aplicar el principio de privilegios mínimos en las entidades de IAM en todas las fases de la solución. Si desea ampliar la solución con herramientas adicionales Servicios de AWS o de terceros, le recomendamos que consulte la sección sobre la [aplicación de permisos con privilegios mínimos de](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) la documentación de IAM.
+ Si tiene varias aplicaciones Java, le recomendamos que cree CI/CD canalizaciones independientes para cada aplicación.
+ Si tiene una aplicación monolítica, le recomendamos dividirla en microservicios en la medida de lo posible. Los microservicios son más flexibles, facilitan la implementación de aplicaciones como contenedores y proporcionan una mejor visibilidad de la creación y la implementación generales de la aplicación.

## Epics
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el GitHub repositorio. | Para clonar el repositorio, ejecute el siguiente comando.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | Desarrollador de aplicaciones, DevOps ingeniero | 
| Cree un bucket de S3 y suba el código. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, administrador de la nube, DevOps ingeniero | 
| Cree una CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingeniero | 
| Valide el despliegue de la CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingeniero | 
| Elimine el bucket de S3. | Vacíe y borre el bucket de S3 que creó con anterioridad. 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, DevOps ingeniero | 

### Configure los gráficos de Helm
<a name="configure-the-helm-charts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure los gráficos de Helm de su aplicación Java. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingeniero | 
| Valide los gráficos de Helm para detectar errores de sintaxis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingeniero | 

### Configure la CI/CD canalización de Java
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea la CI/CD canalización. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Active la integración entre Security Hub CSPM y Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active la integración de Aqua Security. | Este paso es necesario para cargar los hallazgos de vulnerabilidad de imágenes de Docker reportados por Trivy a Security Hub CSPM. Como CloudFormation no es compatible con las integraciones CSPM de Security Hub, este proceso debe realizarse manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | Administrador DevOps e ingeniero de AWS | 

### Configure CodeBuild para ejecutar los comandos Helm o kubectl
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Permite CodeBuild ejecutar comandos Helm o kubectl en el clúster de Amazon EKS. |  CodeBuild Para autenticarse para usar Helm o `kubectl` comandos con el clúster de Amazon EKS, debe añadir las funciones de IAM al. `aws-auth` `ConfigMap` En este caso, añada el ARN de la función de IAM`EksCodeBuildkubeRoleARN`, que es la función de IAM creada para que el CodeBuild servicio acceda al clúster de Amazon EKS e implemente cargas de trabajo en él. Esta es una actividad que se realiza una vez.El siguiente procedimiento debe completarse antes de la fase de aprobación de la implementación. CodePipeline[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)`aws_auth` `ConfigMap` se configura y se concede el acceso.  | DevOps | 

### Valide la CI/CD canalización
<a name="validate-the-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe que la CI/CD canalización se inicie automáticamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Para obtener más información sobre cómo iniciar la canalización mediante el uso CodePipeline, consulte [Iniciar una canalización en](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)CodePipeline, [Iniciar una canalización manualmente](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) e [Iniciar una canalización según un cronograma](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html) en la CodePipeline documentación. | DevOps | 
| Apruebe la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Valide la creación de perfiles de la aplicación. | Una vez finalizada la implementación y desplegado el pod de la aplicación en Amazon EKS, el agente Amazon CodeGuru Profiler que está configurado en la aplicación intentará enviar los datos de creación de perfiles de la aplicación (CPU, resumen del montón, latencia y cuellos de botella) a Profiler. CodeGuru Para la implementación inicial de una aplicación, CodeGuru Profiler tarda unos 15 minutos en visualizar los datos de creación de perfiles. | AWS DevOps | 

## Recursos relacionados
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline documentación](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Escanear imágenes con Trivy en una AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (AWS entrada de blog)
+ [Mejora de sus aplicaciones Java con Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (AWS entrada del blog)
+ [AWS Sintaxis del formato de búsqueda de seguridad (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Patrones de EventBridge eventos de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Actualización de Helm](https://helm.sh/docs/helm/helm_upgrade/)

## Información adicional
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru El generador de perfiles no debe confundirse con el AWS X-Ray servicio en términos de funcionalidad. Le recomendamos que utilice CodeGuru Profiler para identificar las líneas de códigos más caras que puedan provocar cuellos de botella o problemas de seguridad, y que las corrija antes de que se conviertan en un riesgo potencial. El servicio X-Ray sirve para supervisar el rendimiento de las aplicaciones.
+ En este patrón, las reglas de eventos se asocian al bus de eventos predeterminado. Si es necesario, puede ampliar el patrón para utilizar un bus de eventos personalizado.
+ Este patrón utiliza CodeGuru Reviewer como una herramienta estática de pruebas de seguridad de aplicaciones (SAST) para el código de la aplicación. También puedes usar esta canalización para otras herramientas, como SonarQube Checkmarx. Puede añadir las instrucciones de configuración del escaneo a cualquiera de estas herramientas `buildspec/buildspec_secscan.yaml` para reemplazar las instrucciones de CodeGuru escaneo.
**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.

# Copie imágenes de contenedores de Amazon ECR en y Cuentas de AWS Regiones de AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Resumen
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Este patrón le muestra cómo utilizar un enfoque sin servidor para replicar imágenes etiquetadas de repositorios existentes de Amazon Elastic Container Registry (Amazon ECR) a otros repositorios y. Cuentas de AWS Regiones de AWS La solución se utiliza AWS Step Functions para administrar el flujo de trabajo de replicación y AWS Lambda funciona para copiar imágenes de contenedores de gran tamaño.

Amazon ECR utiliza características nativas de replicación [entre regiones](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) y [entre cuentas](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) que replican imágenes de contenedor entre regiones y cuentas. Sin embargo, estas características solo replican las imágenes desde el momento en que se activa la replicación. No existe ningún mecanismo para replicar las imágenes existentes en distintas regiones y cuentas. 

Este patrón ayuda a los equipos de inteligencia artificial (IA) a distribuir modelos, marcos (por ejemplo PyTorch TensorFlow, y Hugging Face) y dependencias de aprendizaje automático (ML) en contenedores a otras cuentas y regiones. Esto puede ayudarle a superar los límites del servicio y optimizar los recursos de computación de la GPU. También puede replicar selectivamente los repositorios de Amazon ECR desde regiones y cuentas de origen específicas. Para obtener más información, consulte [Cross-Region replication in Amazon ECR has landed](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/) (La replicación entre regiones en Amazon ECR ya está aquí).

## Requisitos previos y limitaciones
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Requisitos previos **
+ Dos o más activas Cuentas de AWS (una cuenta de origen y una cuenta de destino, como mínimo)
+ Permisos adecuados AWS Identity and Access Management (IAM) en todas las cuentas
+ Docker para crear la imagen del contenedor de Lambda
+ AWS Command Line Interface (AWS CLI) configurados para todas las cuentas

**Limitaciones**
+ **Exclusión de imágenes sin etiquetar:** la solución copia solo las imágenes del contenedor que tienen etiquetas explícitas. Omite las imágenes sin etiquetar que existen con resúmenes de `SHA256`.
+ **Restricciones de tiempo de espera de ejecución de Lambda:** AWS Lambda está limitado a un tiempo de espera de ejecución máximo de 15 minutos, que puede ser insuficiente para copiar repositorios o imágenes de contenedores de gran tamaño.
+ **Administración manual de imágenes de contenedor:** el código `crane-app.py` de Python requiere volver a crear e implementar la imagen de contenedor de Lambda.
+ **Capacidad de procesamiento paralelo limitada:** la configuración de estado de `MaxConcurrency` limita el número de repositorios que puede copiar al mismo tiempo. Sin embargo, puedes modificar esta configuración en la plantilla de la cuenta de origen. AWS CloudFormation Tenga en cuenta que los valores de simultaneidad más altos pueden provocar que supere los límites de tasas de servicio y las cuotas de ejecución de Lambda a nivel de cuenta.

## Arquitectura
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Pila de destino**

El patrón tiene cuatro componentes principales:
+ **Infraestructura de cuentas de origen:** CloudFormation plantilla que crea los componentes de orquestación
+ **Infraestructura de cuentas de destino:** CloudFormation plantilla que crea funciones de acceso entre cuentas
+ **Función de Lambda:** función basada en Python que utiliza Crane para copiar imágenes de forma eficiente.
+ **Imagen de contenedor:** contenedor de Docker que empaqueta la función de Lambda con las herramientas necesarias.

**Arquitectura de destino**

![\[alt text not found\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Flujo de trabajo de Step Functions**

La máquina de estados de Step Functions organiza lo siguiente, como se muestra en el siguiente diagrama:
+ `PopulateRepositoryList`**:** analiza los repositorios de Amazon ECR y rellena Amazon DynamoDB.
+ `GetRepositoryList`**:** recupera una lista de repositorios únicos de DynamoDB.
+ `DeduplicateRepositories`**:** garantiza que no haya ningún procesamiento duplicado.
+ `CopyRepositories`**:** gestiona la copia paralela de repositorios.
+ `NotifySuccess`/`NotifyFailure`**:** notificaciones de Amazon Simple Notification Service (Amazon SNS) basadas en el resultado de la ejecución.

![\[alt text not found\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Tools (Herramientas)
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Herramientas de Amazon**
+ [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.
+ [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 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 funciones de Lambda y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Crane](https://michaelsauter.github.io/crane/index.html) es una herramienta de orquestación de Docker. Es similar a Docker Compose, pero tiene características adicionales.
+ [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.

**Repositorio de código**
+ [El código de este patrón está disponible en el repositorio. GitHub sample-ecr-copy ](https://github.com/aws-samples/sample-ecr-copy) Puede usar la CloudFormation plantilla del repositorio para crear los recursos subyacentes.

## Prácticas recomendadas
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

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="copy-ecr-container-images-across-accounts-regions-epics"></a>

### Preparación del entorno de
<a name="prepare-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure AWS CLI los perfiles. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de datos, ingeniero de aprendizaje automático | 
| Reúna la información requerida. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de datos, ingeniero de aprendizaje automático | 
| Clonar el repositorio. | Clone el repositorio del patrón en la estación de trabajo local:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps ingeniero, ingeniero de datos, ingeniero de ML | 

### Implementación de infraestructura para la cuenta de destino
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la plantilla. | Valide la CloudFormation plantilla:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Implemente la infraestructura de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Comprobar la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 

### Creación e implementación de la imagen de contenedor de Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Prepare la compilación del contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Compile la imagen de contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Cree un repositorio y cargue la imagen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Verifique la imagen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 

### Implementación de la infraestructura de cuenta de origen
<a name="deploy-the-source-account-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Prepare los parámetros de implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, DevOps ingeniero, ingeniero de aprendizaje automático | 
| Valide la plantilla de origen. | Valide la CloudFormation plantilla de origen:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Implemente la infraestructura de origen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Verifique la implementación y recopile los resultados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Confirme la suscripción de correo electrónico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 

### Ejecución y supervisión del proceso de copia
<a name="run-and-monitor-the-copy-process"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute y supervise el proceso de copia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Ejecute Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Supervise el progreso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Compruebe los resultados. | Espere a que se complete el proceso (se actualiza cada 30 segundos):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Verifique las imágenes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de datos, ingeniero de ML | 

## Resolución de problemas
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se ha podido ejecutar Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Recursos relacionados
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Documentación de Crane](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [¿Qué es Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [¿Qué es AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [¿Qué es Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Información adicional
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parámetros de configuración**


| 
| 
| Parámetro | Description (Descripción) | Ejemplo | 
| --- |--- |--- |
| `SourceAccountId` |  Cuenta de AWS ID de la fuente | `11111111111` | 
| `DestinationAccountId` |  Cuenta de AWS ID de destino | `22222222222` | 
| `DestinationRegion` | Objetivo Región de AWS | `us-east-2` | 
| `SourceRegion` | Fuente Región de AWS | `us-east-1` | 
| `NotificationEmail` | Correo electrónico para las notificaciones | `abc@xyz.com` | 
| `RepositoryList` | Repositorios que se van a copiar | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI de la imagen de contenedor de Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 

# Cree una definición de tareas de Amazon ECS y monte un sistema de archivos en EC2 las instancias mediante Amazon EFS
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs"></a>

*Durga Prasad Cheepuri, Amazon Web Services*

## Resumen
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-summary"></a>

Este patrón proporciona ejemplos de código y pasos para crear una definición de tarea de Amazon Elastic Container Service (Amazon ECS) que se ejecute en instancias de Amazon Elastic Compute Cloud ( EC2Amazon) en la nube de Amazon Web Services (AWS), mientras se utiliza Amazon Elastic File System (Amazon EFS) para montar un sistema de archivos en EC2 esas instancias. Las tareas de Amazon ECS que utilizan Amazon EFS montan automáticamente los sistemas de archivos que especifique en la definición de la tarea y ponen estos sistemas de archivos a disposición de los contenedores de la tarea en todas las zonas de disponibilidad de una región de AWS.

Para cumplir sus requisitos de almacenamiento persistente y almacenamiento compartido, puede utilizar Amazon ECS y Amazon EFS juntos. Por ejemplo, puede usar Amazon EFS para almacenar datos persistentes de usuarios y datos de aplicaciones para sus aplicaciones con pares de contenedores ECS activos y en espera que se ejecuten en diferentes zonas de disponibilidad para lograr una alta disponibilidad. También puede usar Amazon EFS para almacenar datos compartidos a los que se puede acceder en paralelo mediante contenedores de ECS y cargas de trabajo distribuidas.

Para utilizar Amazon EFS con Amazon ECS, puede añadir una o más definiciones de volumen a una definición de tarea. Una definición de volumen incluye un ID de sistema de archivos de Amazon EFS, un ID de punto de acceso y una configuración para la autorización de AWS Identity and Access Management (IAM) o el cifrado en tránsito de la seguridad de la capa de transporte (TLS). Puede usar definiciones de contenedores dentro de las definiciones de tareas para especificar los volúmenes de definición de tareas que se montan cuando se ejecuta el contenedor. Cuando se ejecuta una tarea que utiliza un sistema de archivos Amazon EFS, Amazon ECS se asegura de que el sistema de archivos esté montado y disponible para los contenedores que necesitan acceder a él.

## Requisitos previos y limitaciones
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Una nube privada virtual (VPC) con un punto de conexión de red privada virtual (VPN) (VPN) o un router
+ (Recomendado) El [Agente contenedor Amazon ECS 1.38.0 o posterior](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-versions.html) para garantizar la compatibilidad con los puntos de acceso de Amazon EFS y las características de autorización de IAM (para obtener más información, consulte la entrada del blog de AWS [Nuevo para Amazon EFS – Autorización y puntos de acceso de IAM](https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/)).

**Limitaciones**
+ Las versiones del agente contenedor de Amazon ECS anteriores a la 1.35.0 no admiten los sistemas de archivos de Amazon EFS para las tareas que utilizan el tipo de EC2 lanzamiento.

## Arquitectura
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-architecture"></a>

El siguiente diagrama muestra un ejemplo de una aplicación que utiliza Amazon ECS para crear una definición de tarea y montar un sistema de archivos Amazon EFS en EC2 instancias de contenedores de ECS.

![\[Amazon ECS architecture with task definition, ECS service, containers, and EFS file system integration.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/images/343e0f1d-44ee-4ec2-8392-aeddc0e48b83.png)


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

1. Crear un sistema de archivos de Amazon EFS.

1. Cree una definición de tarea con un contenedor.

1. Configure las instancias de contenedor para montar el sistema de archivos de Amazon EFS. La definición de la tarea hace referencia a los montajes de volumen, para que la instancia de contenedor pueda utilizar el sistema de archivos Amazon EFS. Las tareas de ECS tienen acceso al mismo sistema de archivos de Amazon EFS, independientemente de la instancia de contenedor en la que se creen esas tareas.

1. Cree un servicio de Amazon ECS con tres instancias de la definición de tarea.

**Pila de tecnología**
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS

## Tools (Herramientas)
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/ec2/?id=docs_gateway): Amazon Elastic Compute Cloud (Amazon EC2) proporciona capacidad informática escalable en la nube de AWS. Puede utilizar Amazon EC2 para lanzar tantos o tan pocos servidores virtuales como necesite, y puede ampliarlos de forma horizontal o horizontal.
+ [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 permite 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. Como alternativa, para tener más control sobre su infraestructura, puede ejecutar sus tareas y servicios en un clúster de EC2 instancias que administre.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html): Amazon Elastic File System (Amazon EFS) ofrece un sistema de archivos NFS sencillo, escalable, elástico y completamente administrado que se utiliza con servicios de nube de AWS y recursos en las instalaciones.
+ [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 para interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de línea de comandos. Con una configuración mínima, puede ejecutar comandos de la CLI de AWS que implementan una funcionalidad equivalente a la proporcionada por la consola de administración de AWS basada en navegador desde un símbolo del sistema.

## Epics
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-epics"></a>

### Crear un sistema de archivos de Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un sistema de archivos de Amazon EFS mediante la consola de administración de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

### Cree una definición de tarea de Amazon ECS mediante un sistema de archivos de Amazon EFS o la CLI de AWS.
<a name="create-an-amazon-ecs-task-definition-by-using-either-an-amazon-efs-file-system-or-the-aws-cli"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una definición de tarea mediante un sistema de archivos de Amazon EFS. | Cree una definición de tarea mediante la [nueva consola Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) o la [consola Amazon ECS clásica](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition-classic.html) con las siguientes configuraciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 
| Cree una definición de tarea utilizando la CLI de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

## Recursos relacionados
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-resources"></a>
+ [Definiciones de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Volúmenes de Amazon EFS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)

## Conexiones
<a name="attachments-090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/attachments/attachment.zip)

# Implementar funciones de Lambda con imágenes de contenedor
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda admite imágenes de contenedores como modelo de implementación. Este patrón muestra cómo implementar funciones de Lambda a través de imágenes de contenedor. 

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 de backend, sin aprovisionar ni administrar servidores. La compatibilidad con imágenes de contenedores para las funciones de Lambda le otorga hasta 10 GB de almacenamiento para el artefacto de la aplicación y la posibilidad de utilizar herramientas de desarrollo de imágenes de contenedores conocidas.

El ejemplo de este patrón usa Python como lenguaje de programación subyacente, pero puede usar otros lenguajes, como Java, Node.js o Go. Para la fuente, considere un sistema basado en Git como GitHub GitLab, o Bitbucket, o utilice Amazon Simple Storage Service (Amazon S3).

## Requisitos previos y limitaciones
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Requisitos previos **
+ Amazon Elastic Container Registry (Amazon ECR) activado
+ Código de la aplicación
+ Imágenes de Docker con el cliente de interfaz de tiempo de ejecución y la última versión de Python
+ Conocimientos prácticos de Git

**Limitaciones**
+ El máximo tamaño de imagen soportado es de 10 GB.
+ El tiempo de ejecución máximo para una implementación de contenedores basada en Lambda es de 15 minutos.

## Arquitectura
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Arquitectura de destino**

![\[Proceso de cuatro pasos para crear la función de Lambda.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Cree un repositorio de Git y confirme el código de la aplicación en el repositorio.

1. El AWS CodeBuild proyecto se desencadena mediante la confirmación de cambios.

1. El CodeBuild proyecto crea la imagen de Docker y publica la imagen creada en Amazon ECR.

1. Cree una función de Lambda con la imagen de Amazon ECR.

**Automatización y escala**

Este patrón se puede automatizar mediante operaciones de API o mediante AWS CloudFormation el AWS Cloud Development Kit (AWS CDK) uso de operaciones de API desde un SDK. Lambda puede escalar automáticamente en función del número de solicitudes y se puede ajustar mediante los parámetros de simultaneidad. Para obtener más información, consulte la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Tools (Herramientas)
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**Servicios de AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)AWS, CloudFormationhelps usted configura AWS los recursos, los aprovisiona de forma rápida y coherente y los administra a lo largo de su ciclo de vida en todo el Cuentas de AWS mundo Regiones de AWS. Este patrón utiliza [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), que le ayuda a ver y editar CloudFormation plantillas de forma visual.
+ [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.
+ [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 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.

**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[GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html)](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), y [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) son algunos de los sistemas de control de código fuente basados en Git más utilizados para realizar un seguimiento de los cambios en el código fuente.

## Prácticas recomendadas
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Cree funciones lo más eficientes y pequeñas que sea posible para evitar la carga de archivos innecesarios.
+ Trate de colocar las capas estáticas en la parte superior de la lista de archivos de Docker y coloque las capas que cambien con más frecuencia en la parte inferior. Esto mejora el almacenamiento en caché, lo que mejora el rendimiento.
+ El propietario de la imagen es responsable de actualizar y parchear la imagen. Añada esa cadencia de actualización a sus procesos operativos. Para obtener más información, consulte la [Documentación de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Epics
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Crea un proyecto en CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio de Git. | Cree un repositorio de Git que contendrá el código fuente de la aplicación, el Dockerfile y el archivo `buildspec.yaml`.  | Desarrollador | 
| Crea un CodeBuild proyecto. | Para usar un CodeBuild proyecto para crear la imagen Lambda personalizada, haga lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Desarrollador | 
| Edite el Dockerfile. | El Dockerfile debe estar ubicado en el directorio de nivel superior en el que se está desarrollando la aplicación. El código de Python debe estar en la carpeta `src`.Al crear la imagen, utilice las [imágenes oficiales compatibles con Lambda](https://gallery.ecr.aws/lambda?page=1). De lo contrario, se producirá un error de arranque que dificultará el proceso de empaquetado.Para obtener más información, consulte la sección [Información adicional](#deploy-lambda-functions-with-container-images-additional). | Desarrollador | 
| Cree un repositorio en Amazon ECR. | Cree un repositorio de contenedores en Amazon ECR. En el siguiente comando de ejemplo, el nombre del repositorio creado es `cf-demo`:<pre>aws ecr create-repository --cf-demo </pre>Se hará referencia al repositorio en el archivo `buildspec.yaml`. | Administrador de AWS, desarrollador | 
| Enviar la imagen a Amazon ECR. | Puede utilizarla CodeBuild para realizar el proceso de creación de imágenes. CodeBuild necesita permiso para interactuar con Amazon ECR y trabajar con S3. Como parte del proceso, la imagen de Docker se compila y envía al registro de Amazon ECR. Para obtener información sobre la plantilla y el código, consulte la sección [Información adicional](#deploy-lambda-functions-with-container-images-additional). | Desarrollador | 
| Verificar que la imagen está en el repositorio. | Para verificar que la imagen se encuentra en el repositorio, seleccione **Repositorios** en la consola de Amazon ECR. Si esa característica estaba activada en la configuración de Amazon ECR, la imagen debería aparecer en la lista, junto con etiquetas y los resultados de un informe de análisis de vulnerabilidades.  Para obtener más información, consulte la [documentación de AWS](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Desarrollador | 

### Crear la función de Lambda para ejecutar la imagen
<a name="create-the-lambda-function-to-run-the-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear la función de Lambda. | En la consola de Lambda, seleccione **Crear función** y, a continuación, seleccione **Imagen de contenedor**. Introduzca el nombre de la función y el URI de la imagen que se encuentra en el repositorio de Amazon ECR y, a continuación, seleccione **Crear función**. Para obtener más información, consulte la [documentación de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | Desarrollador de aplicaciones | 
| Probar la función de Lambda. | Seleccione **Probar** para invocar y probar la función. Para obtener más información, consulte la [documentación de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La compilación no se está realizando correctamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Recursos relacionados
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Imágenes base para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Ejemplo de Docker para CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Credenciales de paso temporales](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Información adicional
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Editar el Dockerfile**

El siguiente código muestra los comandos que edita en el Dockerfile.

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

En el comando `FROM`, utilice el valor adecuado para la versión de Python compatible con Lambda (por ejemplo, `3.12`). Será la imagen base que estará disponible en el repositorio público de imágenes de Amazon ECR. 

El comando `COPY app.py ${LAMBDA_TASK_ROOT}` copia el código en el directorio raíz de la tarea, que la función de Lambda utilizará. Este comando usa la variable de entorno, por lo que no hay que preocuparse por la ruta real. La función que se va a ejecutar se pasa como argumento al comando `CMD [ "app.lambda_handler" ]`.

El comando `COPY requirements.txt` captura las dependencias necesarias para el código. 

El comando `RUN pip install --user -r requirements.txt` instala las dependencias en el directorio de usuarios local. 

Para compilar su imagen, ejecute el siguiente comando.

```
docker build -t <image name> .
```

**Cómo añadir la imagen en Amazon ECR**

En el siguiente código, sustituya `aws_account_id` por el número de cuenta, y sustituya `us-east-1` si utiliza una región diferente. El `buildspec` archivo usa el número de CodeBuild compilación para identificar de forma exclusiva las versiones de las imágenes como un valor de etiqueta. Puede cambiarlo para adaptarlo a sus necesidades.

*El código personalizado de buildspec*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```

# Implementar microservicios de Java en Amazon ECS con AWS Fargate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson y Sandeep Bondugula, Amazon Web Services*

## Resumen
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

Este patrón proporciona orientación para implementar microservicios de Java en contenedores en Amazon Elastic Container Service (Amazon ECS) mediante AWS Fargate. El patrón no utiliza Amazon Elastic Container Registry (Amazon ECR) para la administración de contenedores; en su lugar, las imágenes de Docker se extraen de un hub de Docker. 

## Requisitos previos y limitaciones
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**Requisitos previos **
+ Una aplicación de microservicios de Java existente en un hub de Docker
+ Un repositorio público de Docker
+ Una cuenta de AWS activa
+ Conocimientos de los servicios de AWS, incluyendo Amazon ECS y Fargate
+ Marco Docker, Java y Spring Boot
+ Amazon Relational Database Service (Amazon RDS) en funcionamiento (opcional)
+ Una nube privada virtual (VPC) si la aplicación requiere Amazon RDS (opcional)

## Arquitectura
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**Pila de tecnología de origen**
+ Microservicios de Java (por ejemplo, implementados en Spring Boot) e implementados en Docker

**Arquitectura de origen**

![\[Arquitectura de origen para los microservicios de Java implementados en Docker\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**Pila de tecnología de destino**
+ Un clúster de Amazon ECS que aloja cada microservicio mediante Fargate
+ Una red de VPC para alojar el clúster de Amazon ECS y los grupos de seguridad asociados 
+ Una cluster/task definición para cada microservicio que hace girar contenedores mediante Fargate

**Arquitectura de destino**

![\[Arquitectura de destino en microservicios de Java en Amazon ECS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## Tools (Herramientas)
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**Herramientas**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) elimina la necesidad de instalar y operar su propio software de orquestación de contenedores, administrar y escalar un clúster de máquinas virtuales o programar contenedores en esas máquinas virtuales. 
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) le ayuda a ejecutar contenedores sin necesidad de administrar servidores o instancias de Amazon Elastic Compute Cloud EC2 (Amazon). Se utiliza en conjunto con Amazon Elastic Container Service (Amazon ECS).
+ [Docker](https://www.docker.com/) es una plataforma de software que le permite compilar, probar e implementar aplicaciones de forma rápida. Docker agrupa el software en unidades estandarizadas denominadas *contenedores* que contienen todo lo que el software necesita para ejecutarse, incluyendo las bibliotecas, las herramientas del sistema, el código y el tiempo de ejecución. 

**Código de Docker**

El siguiente Dockerfile especifica la versión del kit de desarrollo de Java (JDK) que se utiliza, dónde se encuentra el archivo de almacenamiento Java (JAR), el número de puerto que está expuesto y el punto de entrada a la aplicación.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## Epics
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### Crear nuevas definiciones de tareas
<a name="create-new-task-definitions"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una definición de tarea. | Para ejecutar contenedores de Docker en Amazon ECS, se requiere una definición de tareas. Abra la consola de Amazon ECS en [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/), elija **Definiciones de tareas** y, a continuación, cree una nueva definición de tarea. Para obtener más información, consulte la [documentación de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html). | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Seleccione el tipo de lanzamiento. | Seleccione **Fargate** como tipo de lanzamiento. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Configure la tarea. | Defina un nombre de tarea y configure la aplicación con la cantidad adecuada de memoria de tareas y CPU. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Defina el contenedor. | Especifique el nombre del contenedor. Para la imagen, introduzca el nombre del sitio de Docker, el nombre del repositorio y el nombre de la etiqueta de la imagen de Docker (`docker.io/sample-repo/sample-application:sample-tag-name`). Establezca los límites de memoria para la aplicación y establezca las asignaciones de puertos (`8080, 80`) para los puertos permitidos. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Cree la tarea. | Cuando las configuraciones de la tarea y el contenedor se hayan establecido, cree la tarea. Para obtener instrucciones detalladas, consulte los enlaces de la sección *Recursos relacionados*. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 

### Configure el clúster
<a name="configure-the-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear y configurar un clúster. | Seleccione **Solo redes** como tipo de clúster, configure el nombre y, a continuación, cree el clúster o utilice un clúster existente si está disponible. Para obtener más información, consulte la [documentación de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html). | Administrador de sistemas de AWS, desarrollador de aplicaciones | 

### Configurar la tarea
<a name="configure-task"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una tarea de . | Dentro del clúster, seleccione **Ejecutar nueva tarea**. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Seleccione el tipo de lanzamiento. | Seleccione **Fargate** como tipo de lanzamiento. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Seleccione la definición de la tarea, la revisión y la versión de la plataforma. | Seleccione la tarea que desee ejecutar, la revisión de la definición de la tarea y la versión de la plataforma. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Seleccione el clúster. | Seleccione el clúster desde el que desea ejecutar la tarea. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Especifique el número de tareas. | Configure el número de tareas que deben ejecutarse. Si lo inicia con dos o más tareas, necesitará un equilibrador de carga para distribuir el tráfico entre las tareas. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Especifique el grupo de tareas. | (Opcional) Especifique un nombre de grupo de tareas para identificar un conjunto de tareas relacionadas como grupo de tareas. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Configure la VPC del clúster, las subredes y los grupos de seguridad. | Configure la VPC del clúster y las subredes en las que desea implementar la aplicación. Cree o actualice grupos de seguridad (HTTP, HTTPS y puerto 8080) para proporcionar acceso a las conexiones entrantes y salientes. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Configure los ajustes de la IP pública. | Active o desactive la IP pública, en función de si desea utilizar una dirección IP pública para las tareas de Fargate. La opción predeterminada recomendada es **Habilitada**. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Revisar la configuración y crear la tarea | Revise la configuración y, a continuación seleccione **Ejecutar tarea**. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 

### Realizar la transición
<a name="cut-over"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copie la URL de la aplicación. | Cuando el estado de la tarea se haya actualizado a *En ejecución*, seleccione la tarea. En la sección Redes, copie la IP pública. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Pruebe su aplicación. | En su navegador, introduzca la IP pública para probar la aplicación. | Administrador de sistemas de AWS, desarrollador de aplicaciones | 

## Recursos relacionados
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Conceptos básicos de Docker para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) (documentación de Amazon ECS)
+ [Amazon ECS en AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) (documentación de Amazon ECS)
+ [Creación de una definición de tarea](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) (documentación de Amazon ECS)
+ [Creación de un clúster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) (documentación de Amazon ECS)
+ [Configuración de los parámetros básicos del servicio](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) (documentación de Amazon ECS)
+ [Configuración de una red](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html) (documentación de Amazon ECS)
+ [Implementación de microservicios de Java en Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/) (entrada del blog)

# Implementar recursos y paquetes de Kubernetes con Amazon EKS y un repositorio de gráficos de Helm en Amazon S3
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Resumen
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Este patrón le ayuda a administrar las aplicaciones de Kubernetes de forma eficiente, independientemente de su complejidad. El patrón integra Helm en sus canalizaciones de integración y entrega continuas (CI/CD) existentes para implementar aplicaciones en un clúster de Kubernetes. Helm es un administrador de paquetes de Kubernetes que le ayuda a gestionar las aplicaciones de Kubernetes. Los gráficos de Helm le ayudan a definir, instalar y actualizar aplicaciones complejas de Kubernetes. Los gráficos se pueden versionar y almacenar en repositorios de Helm, lo que mejora el tiempo medio de restauración (MTTR) durante las interrupciones. 

Este patrón utiliza Amazon Elastic Kubernetes Service (Amazon EKS) para el clúster de Kubernetes. Utiliza Amazon Simple Storage Service (Amazon S3) como repositorio de gráficos de Helm, de modo que todos los desarrolladores de la organización puedan gestionar y acceder a los gráficos de forma centralizada.

## Requisitos previos y limitaciones
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa con una nube privada virtual (VPC)
+ Un clúster de Amazon EKS 
+ Nodos de trabajo configurados dentro del clúster de Amazon EKS y preparados para soportar cargas de trabajo
+ Kubectl para configurar el archivo kubeconfig de Amazon EKS para el clúster de destino en la máquina cliente
+ Acceso de AWS Identity and Access Management (IAM) para crear el bucket de S3
+ Acceso de IAM (mediante programación o de rol) a Amazon S3 desde la máquina cliente
+ Gestión del código fuente y CI/CD canalización

**Limitaciones**
+ En este momento, no se admite la actualización, la eliminación o la administración de definiciones de recursos personalizadas (CRDs).
+ Si utiliza un recurso que hace referencia a una CRD, la CRD debe instalarse por separado (fuera del gráfico).

**Versiones de producto**
+ Helm v3.6.3

## Arquitectura
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Pila de tecnología de destino**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ Gestión de código fuente
+ Helm
+ Kubectl

**Arquitectura de destino**

![\[Los clientes Helm y Kubectl implementan un repositorio de gráfico de Helm en Amazon S3 para los clústeres de Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Automatización y escala**
+ AWS se CloudFormation puede utilizar para automatizar la creación de la infraestructura. Para obtener más información, consulte [Creación de recursos de Amazon EKS con AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) en la documentación de Amazon EKS.
+ Helm se incorporará a su herramienta de CI/CD automatización existente para automatizar el empaquetado y el control de versiones de los gráficos de Helm (algo fuera del alcance de este patrón).
+ GitVersion o bien, se pueden utilizar los números de compilación de Jenkins para automatizar el control de versiones de los gráficos.

## Tools (Herramientas)
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Herramientas**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html): Amazon Elastic Kubernetes Service (Amazon EKS) es un servicio administrado para ejecutar Kubernetes en AWS sin necesidad de crear ni mantener su propio plano de control de Kubernetes. Kubernetes es un sistema de código abierto para automatizar la implementación, el escalado y la administración de las aplicaciones en contenedores.
+ [Helm](https://helm.sh/docs/): Helm es un administrador de paquetes para Kubernetes que le ayuda a instalar y administrar aplicaciones en su clúster de Kubernetes.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento para Internet. Puede utilizar Amazon S3 para almacenar y recuperar cualquier cantidad de datos en cualquier momento y desde cualquier parte de la web.
+ [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/): Kubectl es una utilidad de la línea de comandos para la ejecución de comandos en clústeres de Kubernetes.

**Código**

Se adjunta el código de ejemplo.

## Epics
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Configurar e inicializar Helm
<a name="configure-and-initialize-helm"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar el cliente Helm. | Para descargar e instalar el cliente Helm en su sistema local, utilice el siguiente comando. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps ingeniero | 
| Validar la instalación de Helm. | Para validar que Helm puede comunicarse con el servidor API de Kubernetes del clúster de Amazon EKS, ejecute `helm version`. | DevOps ingeniero | 

### Crear e instalar un gráfico de Helm en el clúster de Amazon EKS
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un gráfico de Helm para NGINX. | Para crear un gráfico de Helm llamado `my-nginx` en la máquina cliente, ejecute `helm create my-nginx`. | DevOps ingeniero | 
| Revisar la estructura del gráfico. | Para revisar la estructura del gráfico, ejecute el comando tree `tree my-nginx/`. | DevOps ingeniero | 
| Desactive la creación de cuentas de servicio en el gráfico. | En `values.yaml`, en la sección `serviceAccount`, establezca la clave `create` en `false`. Esta opción está desactivada porque no es necesario crear una cuenta de servicio para este patrón. | DevOps ingeniero | 
| Validar (lint) el gráfico modificado para detectar errores sintácticos. | Para validar el gráfico para detectar cualquier error sintáctico antes de instalarlo en el clúster de destino, ejecute `helm lint my-nginx/`. | DevOps ingeniero | 
| Instale el gráfico para implementar los recursos de Kubernetes. | Para ejecutar la instalación del gráfico de Helm, utilice el siguiente comando. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>La marca opcional `debug` muestra todos los mensajes de depuración durante la instalación. La marca `namespace` especifica el espacio de nombres en el que se creará la parte de recursos de este gráfico. | DevOps ingeniero | 
| Revisar los recursos del clúster de Amazon EKS. | Para revisar los recursos que se crearon como parte del gráfico de Helm en el espacio de nombres `helm-space`, utilice el siguiente comando. <pre>kubectl get all -n helm-space</pre> | DevOps ingeniero | 

### Restaurar una versión anterior de una aplicación de Kubernetes
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique y actualice la versión. | Para modificar el gráfico, en `values.yaml`, cambie el valor `replicaCount` a `2`. A continuación, ejecute el siguiente comando para actualizar la versión ya instalada.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps ingeniero | 
| Revisar el historial de la versión de Helm. | Para ver todas las revisiones de una versión específica instalada con Helm, ejecute el siguiente comando. <pre>helm history my-nginx-release</pre> | DevOps ingeniero | 
| Comprobar los detalles de una revisión específica. | Antes de cambiar a o restaurar una versión operativa, y para obtener una capa adicional de validación antes de instalar una revisión, compruebe qué valores se han pasado a cada una de las revisiones mediante el siguiente comando.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps ingeniero | 
| Restaurar una versión anterior. | Para restaurar una revisión anterior, utilice el siguiente comando. <pre>helm rollback my-nginx-release 1 </pre>Este ejemplo restaura la revisión número 1. | DevOps ingeniero | 

### Inicializar un bucket de S3 como repositorio de Helm
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un bucket de S3 para gráficos de Helm. | Cree un bucket de S3 único. En el bucket, cree una carpeta llamada `charts`. El ejemplo de este patrón usa `s3://my-helm-charts/charts` como repositorio de gráficos de destino. | Administrador de la nube | 
| Instalar el complemento de Helm para Amazon S3. | Para instalar el complemento helm-s3 en su máquina cliente, utilice el siguiente comando. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Nota: El soporte de Helm V3 está disponible con la versión 0.9.0 y superior del complemento. | DevOps ingeniero | 
| Inicializar el repositorio de Helm de Amazon S3.  | Para inicializar la carpeta de destino como repositorio de Helm, utilice el siguiente comando. <pre>helm S3 init s3://my-helm-charts/charts </pre>El comando crea un archivo `index.yaml` en el destino para rastrear toda la información del gráfico almacenada en esa ubicación. | DevOps ingeniero | 
| Añada el repositorio de Amazon S3 a Helm. | Para añadir el repositorio a la máquina cliente, utilice el siguiente comando.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Este comando añade un alias al repositorio de destino de la máquina cliente de Helm. | DevOps ingeniero | 
| Revisar la lista de repositorios. | Para ver la lista de repositorios de la máquina cliente de Helm, ejecute `helm repo list`. | DevOps ingeniero | 

### Empaquetar y almacenar gráficos en el repositorio de Helm de Amazon S3
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Empaquetar el gráfico. | Para empaquetar el gráfico `my-nginx` que creó, ejecute `helm package ./my-nginx/`. El comando empaqueta todo el contenido de la carpeta de gráficos `my-nginx` en un archivo de almacenamiento que se nombra según el número de versión mencionado en el archivo `Chart.yaml`. | DevOps ingeniero | 
| Almacenar el paquete en el repositorio de Helm de Amazon S3. | Para cargar el paquete en el repositorio de Helm de Amazon S3, ejecute el siguiente comando usando el nombre correcto del archivo `.tgz`.<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps ingeniero | 
| Buscar el gráfico de Helm. | Para confirmar que el gráfico aparece tanto localmente como en el repositorio de Helm de Amazon S3, ejecute el siguiente comando.<pre>helm search repo my-nginx</pre> | DevOps ingeniero | 

### Modificar, versionar y empaquetar un gráfico
<a name="modify-version-and-package-a-chart"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique y empaquete el gráfico. | En `values.yaml`, defina el valor de `replicaCount` en `1`. A continuación, ejecute `helm package ./my-nginx/` para empaquetar el gráfico, esta vez cambiando la versión en `Chart.yaml` a `0.1.1`. Lo ideal es actualizar el control de versiones mediante la automatización mediante herramientas como GitVersion los números de compilación de Jenkins en un CI/CD proceso. La automatización del número de versión está fuera del alcance de este patrón. | DevOps ingeniero | 
| Enviar la nueva versión al repositorio de Helm de Amazon S3. | Para enviar el nuevo paquete, versión 0.1.1, al repositorio de Helm `my-helm-charts` de Amazon S3, ejecute el siguiente comando.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps ingeniero | 

### Buscar e instalar un gráfico en el repositorio de Helm de Amazon S3
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Buscar todas las versiones del gráfico my-nginx. | Para ver todas las versiones disponibles de un gráfico, ejecute el siguiente comando con la marca `--versions`.<pre>helm search repo my-nginx --versions</pre>Sin la marca, Helm mostrará de forma predeterminada la última versión cargada de un gráfico. | DevOps ingeniero | 
| Instalar un gráfico desde el repositorio de Helm de Amazon S3. | Los resultados de búsqueda de la tarea anterior mostrarán las múltiples versiones del gráfico `my-nginx`. Para instalar la nueva versión (0.1.1) desde el repositorio de Helm de Amazon S3, utilice el siguiente comando.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps ingeniero | 

## Recursos relacionados
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [Documentación de HELM](https://helm.sh/docs/)
+ [Complemento helm-s3 (licencia MIT)](https://github.com/hypnoglow/helm-s3.git)
+ [Binario del cliente HELM](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Documentación de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Conexiones
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)

# Implemente un clúster de CockroachDB en Amazon EKS mediante Terraform
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay y Kalyan Senthilnathan, Amazon Web Services*

## Resumen
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Este patrón proporciona un módulo HashiCorp Terraform para implementar un clúster [CockroachDB](https://www.cockroachlabs.com/docs/stable/) de varios nodos en Amazon Elastic Kubernetes Service (Amazon EKS) mediante el operador CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) CockroachDB es una base de datos SQL distribuida que proporciona fragmentación horizontal automática, alta disponibilidad y un rendimiento uniforme en clústeres distribuidos geográficamente. Este patrón usa Amazon EKS como plataforma de Kubernetes administrada e implementa [cert-manager](https://cert-manager.io/docs/) para la comunicación de nodos segura por TLS. También utiliza un [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) para la distribución del tráfico y crea CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)con módulos que replican automáticamente los datos para garantizar la tolerancia a los errores y el rendimiento.

**Destinatarios previstos**

Para implementar este patrón, le recomendamos que se familiarice con lo siguiente:
+ HashiCorp Conceptos y prácticas de infraestructura como código (IaC) de Terraform
+ Servicios de AWS, en particular Amazon EKS
+ Los aspectos básicos de Kubernetes StatefulSets, incluidos los operadores y las configuraciones de los servicios
+ Bases de datos SQL distribuidas
+ Conceptos de seguridad, como la gestión de certificados TLS.
+ DevOps prácticas, CI/CD flujos de trabajo y automatización de infraestructuras

## Requisitos previos y limitaciones
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Permisos para implementar recursos en un clúster de Amazon EKS
+ Un clúster de Amazon EKS versión 1.23 o posterior, con los nodos etiquetados `node=cockroachdb`
+ [Controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic Block Store](https://github.com/kubernetes-sigs/aws-ebs-csi-driver), versión 1.19.0 o posterior, instalado en el clúster Amazon EKS
+ [Terraform CLI versión 1.0.0 o posterior, instalada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl, instalado](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ Git, [instalado](https://git-scm.com/install/)
+ AWS Command Line Interface [https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

**Limitaciones**
+ El operador Kubernetes de CockroachDB no admite varios clústeres de Kubernetes para despliegues en varias regiones. [Para más limitaciones, consulte Cómo organizar CockroachDB en varios clústeres de Kubernetes (documentación de CockroachDB) [y CockroachDB Kubernetes Operator](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ Actualmente, la eliminación automática PVCs de las notificaciones por volumen persistentes () está deshabilitada de forma predeterminada. Esto significa que, tras desmantelar y retirar un nodo, el operador no eliminará el volumen persistente que estaba montado en su módulo. Para obtener más información, consulte Eliminación [automática de PVC en la documentación](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) de CockroachDB.

**Versiones de producto**
+ CockroachDB versión 22.2.2

## Arquitectura
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Arquitectura de destino**

El siguiente diagrama muestra una implementación de CockroachDB de alta disponibilidad en tres zonas de AWS disponibilidad dentro de una nube privada virtual (VPC). Los pods CockroachDB se administran a través de Amazon EKS. La arquitectura ilustra cómo los usuarios acceden a la base de datos a través de un Network Load Balancer, que distribuye el tráfico a los pods de CockroachDB. Los pods se ejecutan en instancias de Amazon Elastic Compute Cloud (Amazon EC2) en cada zona de disponibilidad, lo que proporciona resiliencia y tolerancia a errores.

![\[Una implementación de CockroachDB de alta disponibilidad en tres zonas de disponibilidad de AWS dentro de una VPC.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Recursos creados**

Al implementar el módulo Terraform utilizado en este patrón, se crean los siguientes recursos:

1. **Network Load Balancer**: este recurso sirve como punto de entrada para las solicitudes de los clientes y distribuye el tráfico de manera uniforme entre las instancias de CockroachDB.

1. **CockroachDB StatefulSet**: StatefulSet define el estado deseado de la implementación de CockroachDB dentro del clúster de Amazon EKS. Administra el despliegue ordenado, el escalado y las actualizaciones de los pods de CockroachDB.

1. **Módulos CockroachDB: estos pods** son instancias de CockroachDB que se ejecutan como contenedores dentro de los pods de Kubernetes. Estos pods almacenan y administran los datos en el clúster distribuido.

1. **Base de datos CockroachDB**: se trata de la base de datos distribuida que administra CockroachDB y que abarca varios módulos. Replica los datos para garantizar una alta disponibilidad, tolerancia a errores y rendimiento.

## Tools (Herramientas)
<a name="deploy-cockroachdb-on-eks-using-terraform-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 comandos en su shell de línea de comandos.
+ [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.

**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.
+ [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 a CockroachDB en Amazon EKS mediante](https://github.com/aws-samples/crdb-cluster-eks-terraform) Terraform. El repositorio de código contiene los siguientes archivos y carpetas para Terraform:
+ `modules`carpeta: esta carpeta contiene el módulo Terraform para CockroachDB
+ `main`carpeta: esta carpeta contiene el módulo raíz que llama al módulo secundario de CockroachDB para crear el clúster de base de datos de CockroachDB.

## Prácticas recomendadas
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ No reduzca la escala a menos de tres nodos. Esto se considera un antipatrón en CockroachDB y puede provocar errores. Para obtener más información, consulte el [escalado de clústeres](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) en la documentación de CockroachDB.
+ Implemente el escalado automático de Amazon EKS mediante Karpernter o Cluster Autoscaler. Esto permite que el clúster de CockroachDB se escale horizontalmente y que los nuevos nodos se creen automáticamente. Para más información, consulte [Escalado de computación en clústeres´con Karpenter y Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) en la documentación de Amazon EKS.
**nota**  
Debido a la regla de programación de `podAntiAffinity` Kubernetes, solo se puede programar un pod de CockroachDB en un nodo de Amazon EKS.
+ Para conocer las prácticas recomendadas de seguridad de Amazon EKS, consulte [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) en la documentación de Amazon EKS.
+ Para conocer las prácticas recomendadas de rendimiento de SQL para CockroachDB, consulte las prácticas [recomendadas de rendimiento de SQL en la documentación](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) de CockroachDB.
+ Para obtener más información sobre cómo configurar un backend remoto de Amazon Simple Storage Service (Amazon S3) para el archivo de estado de Terraform, consulte [Amazon S3](https://developer.hashicorp.com/terraform/language/backend/s3) en la documentación de Terraform.

## Epics
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código. | Introduzca el siguiente comando para clonar el repositorio:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps ingeniero, Git | 
| Actualice las variables de Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero, Terraform | 

### Implementación de recursos
<a name="deploy-the-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la infraestructura. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero, Terraform | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verificar la creación de recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero | 
| (Opcional) Amplíe o reduzca la escala. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingeniero, Terraform | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configurar la infraestructura. | Escalar los nodos para `0` reducir los costos de cómputo. Sin embargo, seguirá incurriendo en cargos por los volúmenes persistentes de Amazon EBS que creó este módulo. Para eliminar los costes de almacenamiento, siga estos pasos para eliminar todos los volúmenes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Resolución de problemas
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Error al validar las credenciales del proveedor | Al ejecutar Terraform `apply` o el `destroy` comando, es posible que aparezca el siguiente error:`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`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 obtener instrucciones sobre cómo 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 AWS CLI documentación. | 
| Los pods de CockroachDB están en estado pendiente | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Recursos relacionados
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Implemente CockroachDB en un único clúster de Kubernetes](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (documentación de CockroachDB)
+ [Organice CockroachDB](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html) en varios clústeres de Kubernetes (documentación de CockroachDB)
+ [AWS Proveedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentación de Terraform)

## Conexiones
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)

# Implemente un microservicio Java de muestra en Amazon EKS y exponga el microservicio mediante un Equilibrador de carga de aplicación
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson y Akkamahadevi Hiremath, Amazon Web Services*

## Resumen
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Este patrón describe cómo implementar un microservicio Java de muestra como una aplicación en contenedores en Amazon Elastic Kubernetes Service (Amazon EKS) mediante la utilidad de línea de comandos `eksctl` y Amazon Elastic Container Registry (Amazon ECR). Puede usar un equilibrador de carga de aplicación para equilibrar la carga del tráfico de la aplicación.

## Requisitos previos y limitaciones
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ La interfaz de la línea de comandos de AWS (AWS CLI) versión 1.7, instalada y configurada en Linux, macOS o Windows
+ Un [daemon de Docker](https://docs.docker.com/config/daemon/) en ejecución
+ La utilidad de línea de comandos `eksctl`, instalada y configurada en macOS, Linux o Windows (para obtener más información, consulte [Introducción a Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) en la documentación de Amazon EKS).
+ La utilidad de línea de comandos `kubectl`, instalada y configurada en macOS, Linux o Windows (para obtener más información, consulte [Instalar o actualizar eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la documentación de Amazon EKS).

**Limitaciones**
+ Este patrón no cubre la instalación de un certificado SSL para el Equilibrador de carga de aplicación.

## Arquitectura
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Pila de tecnología de destino**
+ Amazon ECR
+ Amazon EKS
+ Elastic Load Balancing

**Arquitectura de destino**

El siguiente diagrama muestra una arquitectura para organizar en contenedores un microservicio Java en Amazon EKS.

![\[Un microservicio Java implementado como una aplicación contenerizada en Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Tools (Herramientas)
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ [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 EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) lo ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
+ 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.
+ [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, como instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2), en una o más zonas de disponibilidad.
+ [eksctl](https://eksctl.io/) le ayuda a crear clústeres en Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) permite ejecutar comandos en clústeres de Kubernetes.
+ [Docker](https://www.docker.com/) le ayuda a crear, probar y entregar aplicaciones en paquetes llamados contenedores.

## Epics
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Crear un clúster de Amazon EKS mediante eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un clúster de Amazon EKS.  | Para crear un clúster de Amazon EKS que utilice dos EC2 instancias de Amazon t2.small como nodos, ejecute el siguiente comando:<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>El proceso puede tardar entre 15 y 20 minutos. Una vez creado el clúster, se añade la configuración de Kubernetes adecuada al archivo [kubeconfig](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html). Puede usar el archivo `kubeconfig` con `kubectl`**** para implementar la aplicación en pasos posteriores. | Desarrollador, administrador del sistema | 
| Verifique el clúster de Amazon EKS. | Para comprobar que se ha creado el clúster y que puede conectarse a él, ejecute el comando `kubectl get nodes`. | Desarrollador, administrador del sistema | 

### Cree un repositorio de Amazon ECR y envíe la imagen de Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio de Amazon ECR. | Siga las instrucciones de [Creación de un repositorio privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la documentación de Amazon ECR. | Desarrollador, administrador del sistema | 
| Cree un archivo XML POM. | Cree un archivo `pom.xml` basado en el *ejemplo de código de archivo POM* de la sección de [información adicional](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de este patrón. | Desarrollador, administrador del sistema | 
| Cree un archivo de origen. | Cree un archivo de origen llamado `HelloWorld.java` en la ruta `src/main/java/eksExample` según el siguiente ejemplo:<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Asegúree de usar la siguiente estructura de directorios:<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Cree un Dockerfile. | Cree un archivo `Dockerfile` basado en el *ejemplo de código de Dockerfile* de la sección de [información adicional](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de este patrón. | Desarrollador, administrador del sistema | 
| Cree y envíe la imagen de Docker. | En el directorio en el que desee que su `Dockerfile` compile, etiquete y envie la imagen a Amazon ECR, ejecute los siguientes comandos:<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Modifique la región de AWS, el número de cuenta y los detalles del repositorio en los comandos anteriores. Asegúrese de anotar la URL de la imagen para usarla más adelante.Un sistema macOS con un chip M1 tiene problemas para crear una imagen que sea compatible con Amazon EKS que se ejecuta en una AMD64 plataforma. Para resolver este problema, utilice [docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) para crear una imagen de Docker que funcione en Amazon EKS. |  | 

### Implemente los microservicios de Java
<a name="deploy-the-java-microservices"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un archivo implementación.  | Cree un archivo YAML llamado `deployment.yaml` basado en el *ejemplo de código de archivo de implementación* de la sección de [información adicional](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de este patrón.Utilice la URL de la imagen que copió anteriormente como ruta del archivo de imagen para el repositorio de Amazon ECR. | Desarrollador, administrador del sistema | 
| Implemente los microservicios de Java en el clúster de Amazon EKS.  | Para crear una implementación en su clúster de Amazon EKS, ejecute el comando `kubectl apply -f deployment.yaml`. | Desarrollador, administrador del sistema | 
| Verifique el estado de los pods. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Desarrollador, administrador del sistema | 
| Cree un servicio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Desarrollador, administrador del sistema | 
| Instalación del complemento controlador del equilibrador de carga de AWS. | Siga las instrucciones de [Instalación del complemento controlador del equilibrador de carga de AWS](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) en la documentación de Amazon EKS.Debe tener el complemento instalado para crear un Equilibrador de carga de aplicación o un Equilibrador de carga de red para un servicio de Kubernetes. | Desarrollador, administrador del sistema | 
| Cree un recurso de ingreso. | Cree un archivo YAML llamado `ingress.yaml` basado en el *ejemplo de código de archivo de recurso* de la sección de [información adicional](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de este patrón. | Desarrollador, administrador del sistema | 
| Cree un Equilibrador de carga de aplicación. | Para implementar el recurso de ingreso y crear un Equilibrador de carga de aplicación, ejecute el comando `kubectl apply -f ingress.yaml`. | Desarrollador, administrador del sistema | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe y verifique la aplicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Desarrollador, administrador del sistema | 

## Recursos relacionados
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Creación de un repositorio privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) (documentación de Amazon ECR)
+ [Enviar una imagen de Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentación de Amazon ECR)
+ [Controladores de ingreso](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (taller de Amazon EKS)
+ [Docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) (documentación de Docker)

## Información adicional
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Ejemplo de archivo POM**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Ejemplo de Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Ejemplo de archivo de implementación**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**Ejemplo de archivo de servicio**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Ejemplo de archivo de recursos de ingreso**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```

# 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
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar y Huy Nguyen, Amazon Web Services*

## Resumen
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Este patrón describe cómo alojar una aplicación basada en gRPC en un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) y cómo acceder a ella de forma segura a través de un Equilibrador de carga de aplicación.

[gRPC](https://grpc.io/) es un marco de llamada a procedimientos remotos (RPC) de código abierto que se puede ejecutar en cualquier entorno. Puede usarlo para integraciones de microservicios y comunicaciones cliente-servidor. Para obtener más información sobre el gRPC, consulte la entrada del blog de AWS sobre el [soporte del Application Load Balancer para end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) y gRPC.

Este patrón le muestra cómo alojar una aplicación basada en gRPC que se ejecuta como pods de Kubernetes en Amazon EKS. El cliente gRPC se conecta a un Application Load Balancer a través del protocolo HTTP/2 con una conexión cifrada. SSL/TLS El Equilibrador de carga de aplicación reenvía el tráfico a la aplicación gRPC que se ejecuta en los pods de Amazon EKS. La cantidad de pods de gRPC se puede escalar automáticamente en función del tráfico mediante el [escalador automático de pods horizontales de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html). El grupo de destino del equilibrador de carga de aplicación realiza comprobaciones de estado en los nodos de Amazon EKS, evalúa si el destino está en buen estado y solo reenvía el tráfico a los nodos en buen estado.

## Requisitos previos y limitaciones
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ [Docker](https://www.docker.com/), instalado y configurado en Linux, macOS o Windows.
+ [Interfaz de la línea de comandos de AWS (AWS CLI) versión 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalada y configurada en Linux, macOS o Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation) instalado y configurado en Linux, macOS o Windows.
+ `kubectl`, instalado y configurado para acceder a los recursos de su clúster de Amazon EKS. Para más información, consulte [Instalar o actualizar kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la documentación de Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), instalado y configurado.
+ Un clúster existente o nuevo de Amazon EKS. Para obtener más información, consulte [Getting started with Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).
+ Su terminal de equipo está configurado para acceder al clúster de Amazon EKS. Para obtener más información, consulte [Configuración del equipo para que se comunique con el clúster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) en la documentación de Amazon EKS.
+ [Controlador del equilibrador de carga de AWS](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), aprovisionado en el clúster de Amazon EKS.
+ Un nombre de host DNS existente con un SSL/TLS certificado o SSL válido. Puede obtener un certificado para su dominio mediante AWS Certificate Manager (ACM) o cargando un certificado existente en ACM. Para obtener más información sobre estas dos opciones, consulte [Solicitud de un certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) e [Importación de certificados a AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) en la documentación de ACM.

## Arquitectura
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

En el siguiente diagrama, se muestra la arquitectura implementada por este patrón.

![\[Arquitectura para aplicación basada en gRPC en Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

El siguiente diagrama muestra un flujo de trabajo en el que SSL/TLS el tráfico se recibe de un cliente gRPC que se descarga a un Application Load Balancer. El tráfico se reenvía en texto sin formato al servidor gPC porque proviene de una nube privada virtual (VPC).

![\[Flujo de trabajo para enviar SSL/TLS tráfico a un servidor gRPC\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Tools (Herramientas)
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**Servicios de AWS**
+ 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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Así, por ejemplo, puede distribuir el tráfico a través de instancias de Amazon Elastic Compute Cloud (Amazon EC2), contenedores y direcciones IP de una o varias zonas de disponibilidad.
+ [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 EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) lo ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.  

**Herramientas**
+ [eksctl](https://eksctl.io/) es una herramienta de CLI sencilla para crear clústeres de Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): es una utilidad de línea de comandos para la ejecución de comandos en clústeres de Kubernetes.
+ [El controlador del equilibrador de carga de AWS](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) le ayuda a administrar los Elastic Load Balancer de AWS para un clúster de Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) es una herramienta de línea de comandos que te ayuda a interactuar con los servicios de gRPC.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Epics
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Cree y envíe la imagen de Docker del servidor gRPC a Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></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](https://console.aws.amazon.com/ecr/) y, luego, cree un repositorio de Amazon ECR. Para obtener más información, consulte [Creación de un repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la documentación de Amazon ECR. Asegúrese de registrar la URL del repositorio de Amazon ECR.También puede crear un repositorio de Amazon ECR con la CLI de AWS ejecutando el siguiente comando:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrador de la nube | 
| Cree la imagen de Docker.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingeniero | 
| Envíe la imagen de Docker a Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingeniero | 

### Implemente los manifiestos de Kubernetes en el clúster de Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique los valores del archivo de manifiesto de Kubernetes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingeniero | 
| Implemente el archivo de manifiesto de Kubernetes.  | Para implementar el archivo `grpc-sample.yaml` en el clúster de Amazon EKS, ejecute el siguiente comando `kubectl`: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps ingeniero | 

### Cree el registro de DNS para el FQDN del Equilibrador de carga de aplicación
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Registre el FQDN para el 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-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingeniero | 

### Pruebe la solución
<a name="test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe el servidor gRPC.  | Use g RPCurl para probar el punto final ejecutando el siguiente comando:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>Sustituya `grpc.example.com` por su nombre de DNS. | DevOps ingeniero | 
| Pruebe el servidor gRPC con un cliente gRPC.  | En el ejemplo de cliente gRPC de `helloworld_client_ssl.py`, sustituya el nombre de host de `grpc.example.com` por el nombre de host utilizado para el servidor gRPC.  El siguiente ejemplo de código muestra la respuesta del servidor gRPC a la solicitud del cliente:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre>Esto demuestra que el cliente puede hablar con el servidor y que la conexión se ha realizado correctamente. | DevOps ingeniero | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine el registro de DNS. | Elimine el registro DNS que apunta al FQDN del Equilibrador de carga de aplicación que creó anteriormente.  | Administrador de la nube | 
| Elimine el equilibrador de carga. | En la [consola Amazon EC2](https://console.aws.amazon.com/ec2/), elija **Equilibradores de carga** y, a continuación, elimine el equilibrador de carga que el controlador de Kubernetes creó para su recurso de entrada. | Administrador de la nube | 
| Elimine el clúster de Amazon EKS. | Elimine el clúster de Amazon EKS mediante `eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Recursos relacionados
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Equilibrio de carga de red en Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Grupos de destino para los Equilibradores de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Información adicional
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Ejemplo de recurso de ingreso:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Ejemplo de recurso de implementación:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Resultado de ejemplo**:

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```

# Implemente aplicaciones en contenedores si se AWS IoT Greengrass V2 ejecutan como un contenedor Docker
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container"></a>

*Salih Bakir, Giuseppe Di Bella y Gustav Svalander, Amazon Web Services*

## Resumen
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-summary"></a>

AWS IoT Greengrass Version 2, cuando se implementa como un contenedor de Docker, no admite la ejecución de contenedores de aplicaciones de Docker de forma nativa. Este patrón le muestra cómo crear una imagen de contenedor personalizada basada en la última versión AWS IoT Greengrass V2 que habilite la funcionalidad Docker-in-Docker (DiND). Con DiND, puede ejecutar aplicaciones en contenedores dentro del entorno. AWS IoT Greengrass V2 

Puede implementar este patrón como una solución independiente o integrarlo con plataformas de organización de contenedores como Amazon ECS Anywhere. En cualquiera de los dos modelos de implementación, mantiene todas las AWS IoT Greengrass V2 funciones, incluidas las capacidades de procesamiento AWS IoT SiteWise perimetral, al tiempo que permite implementaciones escalables basadas en contenedores. 

## Requisitos previos y limitaciones
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ Para conocer AWS IoT Greengrass Version 2 los requisitos previos generales, consulte los [requisitos previos](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started-prerequisites.html) en la AWS IoT Greengrass Version 2 documentación. 
+ Docker Engine, instalado y configurado en Linux, macOS o Windows.
+ Docker Compose (si utiliza la interfaz de línea de comandos (CLI) de Docker Compose para ejecutar imágenes de Docker).
+ Un sistema operativo Linux.
+ Un hipervisor con un servidor host que admite la virtualización.
+ Requisitos del sistema:
  + 2 GB de RAM (mínimo)
  + 5 GB de espacio disponible en disco (mínimo)
  + Para AWS IoT SiteWise Edge, una CPU x86\$164 de cuatro núcleos con 16 GB de RAM y 50 GB de espacio disponible en disco. Para obtener más información sobre el procesamiento de AWS IoT SiteWise datos, consulte los requisitos del [paquete de procesamiento de datos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway-ggv2.html#w2aac17c19c13b7) en la documentación. AWS IoT SiteWise 

**Versiones de producto**
+ AWS IoT Greengrass Version 2 versión 2.5.3 o posterior
+ Docker-in-Docker versión 1.0.0 o posterior
+ Docker Compose versión 1.22 o posterior
+ Docker Engine, versión 20.10.12 o posterior

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todas las versiones. 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-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-architecture"></a>

**Pila de tecnología de destino**
+ **Fuentes de datos**: dispositivos de IoT, sensores o equipos industriales que generan datos para su procesamiento
+ **AWS IoT Greengrass V2**— Funciona como un contenedor Docker con D-in-D capacidades, implementado en infraestructuras perimetrales
+ Aplicaciones en **contenedores: aplicaciones** personalizadas que se ejecutan en el AWS IoT Greengrass V2 entorno como contenedores Docker anidados
+ **(Opcional) Amazon ECS Anywhere**: organización de contenedores que gestiona la implementación de AWS IoT Greengrass V2 contenedores
+ **Otros Servicios de AWS**: AWS IoT Core AWS IoT SiteWise, y otros Servicios de AWS para el procesamiento y la administración de datos

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de arquitectura de implementación de destino que utiliza Amazon ECS Anywhere, que es una herramienta de administración de contenedores.

![\[Arquitectura de implementación con Amazon ECS Anywhere.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2ecf5354-40e0-4fd9-9798-086719059784/images/5ed2652e-9604-4809-8962-b167e1991658.png)


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

**1: Almacenamiento de imágenes de contenedores:** Amazon ECR almacena las imágenes del AWS IoT Greengrass contenedor y cualquier contenedor de aplicaciones personalizadas necesario para el procesamiento perimetral.

**2** y **3: Despliegue de contenedores:** Amazon ECS Anywhere despliega la imagen del AWS IoT Greengrass contenedor desde Amazon ECR en la ubicación perimetral, gestionando el ciclo de vida del contenedor y el proceso de despliegue.

**4: Despliegue de componentes:** el AWS IoT Greengrass núcleo implementado despliega automáticamente sus componentes relevantes en función de su configuración. Los componentes incluyen AWS IoT SiteWise Edge y otros componentes de procesamiento perimetral necesarios dentro del entorno contenerizado.

**5: Ingesta de datos:** una vez que esté completamente configurado, AWS IoT Greengrass comienza a ingerir datos de telemetría y sensores de varias fuentes de datos de IoT en la ubicación perimetral.

**6: Procesamiento de datos e integración en la nube**: el AWS IoT Greengrass núcleo contenerizado procesa los datos de forma local mediante sus componentes desplegados (incluido AWS IoT SiteWise Edge para datos industriales). Luego, envía los datos procesados a los Nube de AWS servicios para su posterior análisis y almacenamiento.

## Tools (Herramientas)
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-tools"></a>

**Servicios de AWS**
+ [Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch-type-external.html) le ayuda a implementar, usar y gestionar las tareas y los servicios de Amazon ECS en su propia infraestructura.
+ [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 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 IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html) es un servicio en la nube y de tiempo de ejecución en la periferia de Internet de las cosas (IoT) de código abierto que ayuda a crear, implementar y administrar aplicaciones de IoT en los dispositivos.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) lo ayuda a recopilar, modelar, analizar y visualizar datos de equipos industriales a escala.

**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.
+ [Docker Engine](https://docs.docker.com/engine/) es una tecnología de contenerización de código abierto para crear y contenedorizar aplicaciones.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio de la versión 2. GitHub AWS IoT Greengrass Docker-in-Docker](https://github.com/aws-samples/aws-iot-greengrass-docker-in-docker)

## Epics
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-epics"></a>

### Construye la AWS IoT Greengrass V2 Docker-in-Docker imagen
<a name="build-the-gg2-docker-in-docker-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona y navega hasta el repositorio. | Para clonar el repositorio, utilice el siguiente comando: `git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git`Para navegar hasta el `docker` directorio, utilice el siguiente comando:`cd aws-iot-greengrass-v2-docker-in-docker/docker` | DevOps ingeniero, AWS DevOps | 
| Cree la imagen de Docker. | Para crear la imagen de Docker con la versión predeterminada (la más reciente), ejecute el siguiente comando:`docker build -t x86_64/aws-iot-greengrass:latest .`O bien, para crear la imagen de Docker con una versión específica, ejecute el siguiente comando:`docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .`Para verificar la compilación, ejecuta el siguiente comando:`docker images \| grep aws-iot-greengrass`  | AWS DevOps, DevOps ingeniero, desarrollador de aplicaciones | 
| (Opcional) Empuje a Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero | 

### Configure AWS las credenciales
<a name="configure-aws-credentials"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Seleccione el método de autenticación. | Elija una de las siguientes opciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador de AWS | 
| Configure el método de autenticación. | Para el método de autenticación que ha seleccionado, utilice las siguientes instrucciones de configuración:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador de AWS | 

### Ejecute con Docker Compose
<a name="run-with-docker-compose"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configuración `docker-compose.yml`. | Actualice el `docker-compose.yml` archivo con las variables de entorno de la siguiente manera:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingeniero | 
| Inicie y verifique el contenedor. | Para empezar en primer plano, ejecute el siguiente comando:`docker-compose up --build`O bien, para empezar en segundo plano, ejecute el siguiente comando:`docker-compose up --build -d`Para comprobar el estado, ejecute el siguiente comando:`docker-compose ps`Para supervisar los registros, ejecute el siguiente comando:`docker-compose logs -f` | DevOps ingeniero | 

### Ejecute con Docker CLI
<a name="run-with-docker-cli"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute el contenedor con la CLI de Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingeniero | 
| Verifica el contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingeniero | 

### Gestione aplicaciones contenerizadas
<a name="manage-containerized-applications"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente aplicaciones. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Desarrollador de aplicaciones | 
| Acceda y pruébelo Docker-in-Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingeniero | 

### (Opcional) Intégrelo con Amazon ECS Anywhere
<a name="optional-integrate-with-ecs-anywhere"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el clúster de Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador de AWS | 
| Implemente la tarea Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador de AWS | 

### Detenga y limpie
<a name="stop-and-cleanup"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Detenga el contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El contenedor no se inicia debido a errores de permiso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)`--privileged`concede privilegios ampliados al contenedor. | 
| El aprovisionamiento falla debido a errores de credenciales. | Para comprobar que las credenciales están configuradas correctamente, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Asegúrese de que los permisos de IAM incluyan `iot:CreateThing``iot:CreatePolicy`, `iot:AttachPolicy``iam:CreateRole`, y`iam:AttachRolePolicy`. | 
| No se puede conectar al daemon de Docker dentro del contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| El contenedor se queda sin espacio en disco. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Garantice un espacio mínimo en disco: 5 GB para las operaciones básicas y 50 GB para Edge AWS IoT SiteWise  | 
| Problemas de compilación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Problemas de conectividad de red. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Compruebe que el firewall permita el tráfico saliente de HTTPS (443) y MQTT (8883). | 
| Los componentes de Greengrass no se despliegan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Compruebe los registros específicos de los componentes en el `/greengrass/v2/logs/` directorio. | 
| El contenedor sale inmediatamente después del inicio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Compruebe que todas las variables de entorno requeridas estén configuradas correctamente si`PROVISION=true`. Asegúrese de utilizar la `--init` marca al iniciar el contenedor. | 

## Recursos relacionados
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-resources"></a>

**AWS resources**
+ [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)
+ [Configure el procesamiento de datos perimetrales para AWS IoT SiteWise los modelos y los activos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/edge-processing.html)
+ [¿Qué es AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)

**Otros recursos**
+ [Documentación de Docker](https://docs.docker.com/)

## Información adicional
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-additional"></a>
+ Para el procesamiento de datos de AWS IoT SiteWise Edge, Docker debe estar disponible en el AWS IoT Greengrass entorno.
+ Para ejecutar un contenedor anidado, debe ejecutarlo con credenciales de AWS IoT Greengrass nivel de administrador.

# Implementar contenedores mediante Elastic Beanstalk
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott y Jean-Baptiste Guillois, Amazon Web Services*

## Resumen
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

En la nube de Amazon Web Services (AWS), AWS Elastic Beanstalk admite Docker como plataforma disponible, de forma que los contenedores pueden ejecutarse en el entorno creado. Este patrón muestra cómo implementar contenedores mediante el servicio Elastic Beanstalk. La implementación de este patrón utilizará el entorno de servidor web basado en la plataforma Docker.

Para usar Elastic Beanstalk para implementar y escalar aplicaciones y servicios web, debe cargar el código y la implementación se gestiona automáticamente. También se incluyen el aprovisionamiento de capacidad, el equilibrio de carga, el escalado automático y la supervisión del estado de las aplicaciones. Cuando usa Elastic Beanstalk, puede tomar el control total de los recursos de AWS que crea en su nombre. No se aplican cargos adicionales por utilizar Elastic Beanstalk. Solo tiene que pagar por los recursos de AWS que se utilizan para almacenar y ejecutar sus aplicaciones.

Este patrón incluye instrucciones de implementación utilizando la [interfaz de la línea de comandos de AWS Elastic Beanstalk (CLI de EB)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html) y la consola de administración de AWS.

**Casos de uso**

Los casos de uso de Elastic Beanstalk incluyen los siguientes: 
+ Implementar un entorno prototipo para hacer una demostración de una aplicación frontend. (Este patrón usa un Dockerfile** **como ejemplo).
+ Implemente una API para gestionar las solicitudes de API de un dominio determinado.
+ Implemente una solución de orquestación mediante Docker-Compose (`docker-compose.yml`** **no se utiliza como ejemplo práctico en este patrón).

## Requisitos previos y limitaciones
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS
+ AWS EB CLI instalada localmente
+ Instalación de Docker en un equipo local

**Limitaciones**
+ En el plan gratuito, hay un límite de 100 extracciones de Docker cada 6 horas por dirección IP.

## Arquitectura
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**Pila de tecnología de destino**
+ Instancias de Amazon Elastic Compute Cloud (Amazon EC2)
+ Security group (Grupo de seguridad)
+ Equilibrador de carga de aplicación
+ Grupo de escalado automático

**Arquitectura de destino**

![\[Arquitectura para implementar contenedores con Elastic Beanstalk.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


**Automatización y escala**

AWS Elastic Beanstalk puede escalarse automáticamente en función del número de solicitudes realizadas. Los recursos de AWS creados para un entorno incluyen un Application Load Balancer, un grupo de Auto Scaling y una o más instancias de Amazon EC2 . 

El balanceador de carga se encuentra frente a las EC2 instancias de Amazon, que forman parte del grupo Auto Scaling. Amazon EC2 Auto Scaling inicia automáticamente EC2 instancias de Amazon adicionales para adaptarse al aumento de la carga de la aplicación. Si la carga de la aplicación disminuye, Amazon EC2 Auto Scaling detiene las instancias, pero mantiene al menos una instancia en ejecución.

**Activadores de escalado automáticos**

El grupo Auto Scaling del entorno de Elastic Beanstalk utiliza CloudWatch dos alarmas de Amazon para iniciar las operaciones de escalado. Los desencadenadores predeterminados adaptan su capacidad cuando el tráfico de la red saliente promedio de cada instancia es superior a 6 MB o inferior a 2 MB durante un periodo de cinco minutos. Para utilizar Amazon EC2 Auto Scaling de forma eficaz, configure los activadores adecuados para su aplicación, tipo de instancia y requisitos de servicio. Puede optar por la escala en función de varias estadísticas, como la latencia, E/S de disco, la utilización de la CPU y el recuento de solicitudes. Para obtener más información, consulte [Límites de escalado automático](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html).

## Tools (Herramientas)
<a name="deploy-containers-by-using-elastic-beanstalk-tools"></a>

**Servicios de AWS**
+ 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.
+ [La interfaz de la línea de comandos de AWS EB (CLI de EB)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) es un cliente de línea de comandos que puede utilizar para crear, configurar y administrar entornos de Elastic Beanstalk.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Por ejemplo, puede distribuir el tráfico entre instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2) en una o más zonas de disponibilidad.

**Otros servicios**
+ [Docker](https://www.docker.com/) agrupa el software en unidades estandarizadas denominadas contenedores que incluyen bibliotecas, herramientas del sistema, código y tiempo de ejecución.

**Código**

El código de este patrón está disponible en el repositorio de [aplicaciones de muestra de GitHub clúster](https://github.com/aws-samples/cluster-sample-app).

## Epics
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### Creación con un Dockerfile
<a name="build-with-a-dockerfile"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Inicialice el proyecto Docker de Elastic Beanstalk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Ejecute el proyecto localmente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

### Implemente utilizando la CLI de EB
<a name="deploy-using-eb-cli"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute el comando de implementación | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Acceda a la versión implementada. | Una vez finalizado el comando de implementación, acceda al proyecto mediante el comando `eb open`. | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

### Implementación con la consola
<a name="deploy-using-the-console"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la aplicación mediante el navegador. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Acceda a la versión implementada. | Tras la implementación, acceda a la aplicación implementada y elija la URL proporcionada. | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

## Recursos relacionados
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Entornos del servidor web](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [Instalación de la CLI de EB en macOS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [Instalación manual de la CLI de EB](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## Información adicional
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**Ventajas de utilizar Elastic Beanstalk**
+ Aprovisionamiento automático de infraestructura
+ Administración automática de la plataforma subyacente
+ Parches y actualizaciones automáticos para dar soporte a la aplicación
+ Escalado automático de la aplicación
+ Posibilidad de personalizar el número de nodos
+ Posibilidad de acceder a los componentes de la infraestructura si es necesario
+ Facilidad de implementación en comparación con otras soluciones de implementación de contenedores

# Genere una dirección IP saliente estática mediante una función de Lambda, Amazon VPC y una arquitectura sin servidor
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott, Amazon Web Services*

## Resumen
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

En este patrón se describe la forma de generar una dirección IP saliente estática en la nube de Amazon Web Services (AWS) mediante una arquitectura sin servidor. Su organización puede beneficiarse de este enfoque si quiere enviar archivos a una entidad empresarial independiente mediante el protocolo seguro File Transfer (SFTP). Esto significa que la entidad empresarial debe tener acceso a una dirección IP que permita que los archivos pasen por su firewall. 

El enfoque del patrón lo ayuda a crear una función de AWS Lambda que utilice una [dirección IP elástica](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) como dirección IP de salida. Si sigue los pasos de este patrón, puede crear una función de Lambda y una nube privada virtual (VPC) que enrute el tráfico saliente a través de una puerta de enlace de Internet con una dirección IP estática. Para usar la dirección IP estática, debe adjuntar la función de Lambda a la VPC y sus subredes. 

## Requisitos previos y limitaciones
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa. 
+ Permisos de AWS Identity and Access Management (IAM) para crear e implementar una función de Lambda y para crear una VPC y sus subredes. Para obtener más información, consulte [Rol de ejecución y permisos de usuario](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions) en la documentación de AWS Lambda.
+ Si planea usar la infraestructura como código (IaC) para implementar el enfoque de este patrón, necesitará un entorno de desarrollo integrado (IDE) como AWS Cloud9. Para obtener más información, consulte [¿Qué es AWS Cloud9?](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html) en la documentación de AWS Cloud9.

## Arquitectura
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

El siguiente diagrama muestra la arquitectura sin servidor para este patrón.

![\[Nube de AWS VPC architecture with two availability zones, public and private subnets, NAT gateways, and a Lambda function.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


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

1. El tráfico saliente deja `NAT gateway 1` en `Public subnet 1`.

1. El tráfico saliente deja `NAT gateway 2` en `Public subnet 2`.

1. La función de Lambda se puede ejecutar en `Private subnet 1` o `Private subnet 2`.

1. `Private subnet 1` y `Private subnet 2` enrutan el tráfico a las puertas de enlace NAT de las subredes públicas.

1. Las puertas de enlace NAT envían tráfico saliente a la puerta de enlace de Internet desde las subredes públicas.

1. Los datos salientes se transfieren desde la puerta de enlace de Internet al servidor externo.



**Pila de tecnología**
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC)

 

**Automatizar y escalar**

Puede garantizar la alta disponibilidad (HA) mediante el uso de dos subredes públicas y dos privadas en distintas zonas de disponibilidad. Incluso si una zona de disponibilidad deja de estar disponible, la solución del patrón sigue funcionando.

## Tools (Herramientas)
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [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 VPC](https://docs.aws.amazon.com/vpc/): Amazon Virtual Private Cloud (Amazon VPC) le permite aprovisionar una sección aislada de forma lógica de la nube de AWS donde puede lanzar recursos de AWS en una red virtual que haya definido. Dicha red virtual es prácticamente idéntica a las redes tradicionales que se utilizan en sus propios centros de datos, con los beneficios que supone utilizar la infraestructura escalable de AWS.

## Epics
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### Cree una nueva VPC
<a name="create-a-new-vpc"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una nueva VPC. | Inicie sesión en la consola de administración de AWS, abra la consola de Amazon VPC y, a continuación, cree una VPC con el nombre `Lambda VPC` que tenga `10.0.0.0/25`**** como rango CIDR. IPv4 Para obtener más información, consulte [Introducción a Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc) en la documentación de Amazon VPC.  | Administrador de AWS | 

### Crear dos subredes públicas
<a name="create-two-public-subnets"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la primera subred pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Cree la segunda subred pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 

### Crear dos subredes privadas
<a name="create-two-private-subnets"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la primera subred privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Cree la segunda subred privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 

### Crear dos direcciones IP elásticas para su gateway NAT
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Cree la primera dirección IP elástica. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Esta dirección IP elástica se utiliza para su primera puerta de enlace de NAT.  | Administrador de AWS | 
| Cree la segunda dirección IP elástica. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Esta dirección IP elástica se utiliza para su segunda puerta de enlace de NAT. | Administrador de AWS | 

### Cree un puerta de enlace de Internet
<a name="create-an-internet-gateway"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una puerta de enlace de Internet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Adjunte la puerta de enlace de Internet a la VPC. | Seleccione el puerta de enlace de Internet que acaba de crear y, a continuación, elija **Actions, Attach to VPC (Acciones, Adjuntar a la VPC)**. | Administrador de AWS | 

### Cree dos puertas de enlace NAT
<a name="create-two-nat-gateways"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la primera puerta de enlace NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Cree la segunda puerta de enlace NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 

### Cree tablas de enrutamiento para sus subredes públicas y privadas
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear la tabla de enrutamiento de la subred pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Crear la tabla de enrutamiento de la segunda subred pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Crear la tabla de enrutamiento de la subred privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Crear la tabla de enrutamiento de la segunda subred privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 

### Cree la función de Lambda, agréguela a la VPC y pruebe la solución
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una nueva función de Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Agregue la función de Lambda a su VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 
| Escriba el código para llamar a un servicio externo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador de AWS | 

## Recursos relacionados
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [Configuración de una función Lambda para obtener acceso a los recursos en una PC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)

# Identificación automática de las imágenes de contenedor duplicadas al migrar a un repositorio de Amazon ECR
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav y Rishi Singla, Amazon Web Services*

## Resumen
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

El patrón proporciona una solución automatizada para identificar si las imágenes almacenadas en diferentes repositorios de contenedores son duplicadas. Esta comprobación resulta útil si planea migrar imágenes de otros repositorios de contenedor a Amazon Elastic Container Registry (Amazon ECR).

Para obtener información básica, el patrón también describe los componentes de una imagen de contenedor, como el resumen de la imagen, el manifiesto y las etiquetas. Cuando planifique una migración a Amazon ECR, puede decidir sincronizar las imágenes de los contenedores entre los registros de contenedores comparando los resúmenes de las imágenes. Antes de migrar las imágenes de contenedor, debe comprobar si estas imágenes ya existen en el repositorio de Amazon ECR para evitar la duplicación. Sin embargo, puede resultar difícil detectar la duplicación comparando los resúmenes de imágenes, y esto podría provocar problemas en la fase inicial de migración.  Este patrón compara los resúmenes de dos imágenes similares que están almacenadas en diferentes registros de contenedores y explica por qué varían los resúmenes con el fin de ayudarle a comparar las imágenes con precisión.

## Requisitos previos y limitaciones
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Un activo Cuenta de AWS
+ Acceso al [registro público de Amazon ECR](https://gallery.ecr.aws/)
+ Familiaridad con lo siguiente: Servicios de AWS
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)
+  CodeCommit Credenciales configuradas (consulte [las instrucciones](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html))

## Arquitectura
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**Componentes de la imagen de contenedor**

En el siguiente diagrama se ilustran algunos de los componentes de una imagen de contenedor. Estos componentes se describen después del diagrama.

![\[Manifiesto, configuración, capas del sistema de archivos y resúmenes.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Términos y definiciones**

Los siguientes términos se definen en la [especificación de imagen de la Open Container Initiative (OCI)](https://github.com/opencontainers/image-spec/blob/main/spec.md).
+ **Registro:** servicio de almacenamiento y administración de imágenes.
+ **Cliente:** herramienta que se comunica con los registros y funciona con imágenes locales.
+ **Inserción:** proceso para cargar imágenes a un registro.
+ **Extracción:** proceso de descarga de imágenes de un registro.
+ **Blob:** formato binario de contenido que almacena un registro y al que se puede acceder mediante un resumen.
+ **Índice:** constructo que identifica varios manifiestos de imágenes para distintos tipos de plataformas informáticas (como x86-64 o ARM de 64 bits) o contenido multimedia. Para obtener más información, consulte la [especificación del índice de imágenes de OCI](https://github.com/opencontainers/image-spec/blob/main/image-index.md).
+ **Manifiesto:** documento JSON que define una imagen o un artefacto que se carga a través del punto de conexión del manifiesto. Un manifiesto puede hacer referencia a otros blobs de un repositorio mediante descriptores. Para obtener más información, consulte la [especificación del manifiesto de imágenes de OCI](https://github.com/opencontainers/image-spec/blob/main/manifest.md).
+ **Capa del sistema de archivos:** bibliotecas del sistema y otras dependencias de una imagen.
+ **Configuración:** un blob que contiene metadatos de artefactos y al que se hace referencia en el manifiesto. Para obtener más información, consulte la [especificación de la configuración de imágenes de OCI](https://github.com/opencontainers/image-spec/blob/main/config.md).
+ **Objeto o artefacto:** elemento de contenido conceptual que se almacena como un blob y se asocia a un manifiesto adjunto con una configuración.
+ **Resumen:** identificador único que se crea a partir de un hash criptográfico del contenido de un manifiesto. El resumen de imágenes ayuda a identificar de forma única una imagen de contenedor inmutable. Al extraer una imagen mediante su resumen, descargará siempre la misma imagen en cualquier sistema operativo o arquitectura. Para obtener más información, consulte la [especificación de imágenes de OCI](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Etiqueta:** un identificador de manifiesto legible para los humanos. En comparación con los resúmenes de imágenes, que son inmutables, las etiquetas son dinámicas. Una etiqueta que apunta a una imagen puede cambiar y pasar de una imagen a otra, aunque el resumen de la imagen subyacente sigue siendo el mismo.

**Arquitectura de destino**

El siguiente diagrama muestra la arquitectura de alto nivel de la solución proporcionada por este patrón para identificar imágenes de contenedor duplicadas mediante la comparación de las imágenes almacenadas en Amazon ECR y en repositorios privados.

![\[Detección automática de duplicados con CodePipeline y. CodeBuild\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## Tools (Herramientas)
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-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 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 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.

**Código**

El código de este patrón está disponible en la [solución**** automatizada de GitHub repositorios para identificar imágenes de contenedores duplicadas entre repositorios](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/).

## Prácticas recomendadas
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ prácticas recomendadas de [CloudFormation  ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ prácticas recomendadas de [AWS CodePipeline  ](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## Epics
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Extracción de imágenes de contenedor de repositorios públicos y privados de Amazon ECR
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Extraiga una imagen de un repositorio público de Amazon ECR. | Desde el terminal, ejecute el siguiente comando para extraer la imagen `amazonlinux` del repositorio público de Amazon ECR.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>Cuando la imagen se haya trasladado a su máquina local, verá el siguiente resumen de extracción, que representa el índice de la imagen.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | Desarrollador de aplicaciones, AWS DevOps, administrador de AWS | 
| Inserte la imagen en un repositorio privado de Amazon ECR | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador de AWS, AWS DevOps, desarrollador de aplicaciones | 
| Extraiga la misma imagen del repositorio privado de Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Desarrollador de aplicaciones, AWS DevOps, administrador de AWS | 

### Comparación de los manifiestos de imágenes
<a name="compare-the-image-manifests"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Busque el manifiesto de la imagen almacenada en el repositorio público de Amazon ECR. | Desde el terminal, ejecute el siguiente comando para extraer el manifiesto de la imagen `public.ecr.aws/amazonlinux/amazonlinux:2018.03` del repositorio público de Amazon ECR.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | Administrador de AWS, AWS DevOps, desarrollador de aplicaciones | 
| Busque el manifiesto de la imagen almacenada en el repositorio privado de Amazon ECR. | Desde el terminal, ejecute el siguiente comando para extraer el manifiesto de la imagen `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` del repositorio privado de Amazon ECR.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, administrador de sistemas de AWS, desarrollador de aplicaciones | 
| Compare el resumen extraído por Docker con el resumen del manifiesto de la imagen en el repositorio privado de Amazon ECR. | Otra pregunta es por qué el resumen proporcionado por el comando **docker pull** difiere del resumen del manifiesto de la imagen `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`.El resumen utilizado para **docker pull** representa el resumen del manifiesto de la imagen, que se almacena en un registro. Este resumen se considera la raíz de una cadena de hash, porque el manifiesto contiene el hash del contenido que se descargará e importará a Docker.El ID de imagen utilizado en Docker se encuentra en este manifiesto como `config.digest`. Representa la configuración de imagen que usa Docker. Por lo tanto, se podría decir que el manifiesto es el sobre y la imagen es el contenido del sobre. El resumen del manifiesto siempre es diferente del ID de la imagen. Sin embargo, un manifiesto específico siempre debe producir el mismo ID de imagen. Como el resumen del manifiesto es una cadena de hash, no podemos garantizar que siempre sea igual para un ID de imagen determinado. En la mayoría de los casos, produce el mismo resumen, aunque Docker no puede garantizarlo. La posible diferencia en el resumen del manifiesto se debe a que Docker no almacena localmente los blobs comprimidos con gzip. Por lo tanto, la exportación de capas puede producir un resumen diferente, aunque el contenido sin comprimir siga siendo el mismo. El ID de imagen comprueba que el contenido sin comprimir es el mismo; es decir, el ID de imagen es ahora un identificador de contenido direccionable (`chainID`).Para confirmar esta información, puede comparar el resultado del comando **docker inspect** en los repositorios públicos y privados de Amazon ECR:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Los resultados verifican que ambas imágenes tienen el mismo resumen de ID de imagen y resumen de capa.ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`Capas: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`Además, los resúmenes se basan en los bytes del objeto que se administra localmente (el archivo local es un tar de la capa de imágenes de contenedor) o en el blob que se inserta en el servidor de registro. Sin embargo, al insertar el blob en un registro, el tar se comprime y el resumen se calcula en el archivo tar comprimido. Por lo tanto, la diferencia en el valor del resumen de **extracción de docker** se debe a la compresión que se aplica a nivel de registro (Amazon ECR privado o público).Esta explicación es específica del uso de un cliente Docker. No verá este comportamiento en otros clientes, como **nerdctl** o **Finch**, porque no comprimen automáticamente la imagen durante las operaciones de inserción y extracción. | AWS DevOps, administrador de sistemas de AWS, desarrollador de aplicaciones | 

### Identificación automática de las imágenes duplicadas entre los repositorios públicos y privados de Amazon ECR
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Clone el repositorio de GitHub para este patrón en una carpeta local:<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | Administrador de AWS, AWS DevOps | 
| Configure una CI/CD canalización. | El GitHub repositorio incluye un `.yaml` archivo que crea una CloudFormation pila para configurar una canalización AWS CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)El proceso se configurará con dos etapas (CodeCommit y CodeBuild, como se muestra en el diagrama de arquitectura), para identificar las imágenes del repositorio privado que también existen en el repositorio público. La canalización está configurada con los siguientes recursos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador de AWS, AWS DevOps | 
| Rellene el CodeCommit repositorio. | Para rellenar el CodeCommit repositorio, lleve a cabo estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador de AWS, AWS DevOps | 
| Elimine recursos. | Para evitar incurrir en cargos en el futuro, elimine los recursos siguiendo estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador de AWS | 

## Resolución de problemas
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Cuando intentas insertar, extraer o interactuar con un CodeCommit repositorio desde el terminal o la línea de comandos, se te pide que proporciones un nombre de usuario y una contraseña, y debes proporcionar las credenciales de Git de tu usuario de IAM. | Las siguientes son las causas comunes para esto:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Según el sistema operativo y el entorno local, es posible que tenga que instalar un gestor de credenciales, configurar el gestor de credenciales que se incluye en el sistema operativo o personalizar su entorno local para utilizar el almacenamiento de credenciales. Por ejemplo, si su equipo ejecuta macOS, puede usar la utilidad Keychain Access para almacenar sus credenciales. Si su equipo utiliza Windows, puede utilizar el Administrador de credenciales de Git que se instala en Git para Windows. Para obtener más información, consulte [Configuración para usuarios de HTTPS que utilizan credenciales de Git](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) en la CodeCommit documentación y [Almacenamiento de credenciales](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) en la documentación de Git. | 
| Al insertar una imagen en el repositorio de Amazon ECR, se producen errores HTTP 403 o “no basic auth credentials”. | **Es posible que encuentre estos mensajes de error en los comandos **docker push** o **docker pull**, incluso si se ha autenticado correctamente en Docker mediante el comando aws ecr. get-login-password** Las causas conocidas son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Recursos relacionados
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Solución automatizada para identificar imágenes de contenedores duplicadas entre repositorios](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) (repositorio) GitHub 
+ [Galería pública de Amazon ECR](https://gallery.ecr.aws/)
+ [Imágenes privadas en Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (documentación de Amazon ECR)
+ [AWS::CodePipeline::Pipeline recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html) (CloudFormation documentación)
+ [Especificación del formato de imagen OCI](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Información adicional
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Resultado de la inspección de Docker para una imagen en el repositorio público de Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Resultado de la inspección de Docker para una imagen en el repositorio privado de Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

# Instalación del agente SSM en los nodos de trabajo de Amazon EKS mediante Kubernetes DaemonSet
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumen
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-summary"></a>

**Nota, septiembre de 2021:** La última versión optimizada para Amazon EKS AMIs instala SSM Agent automáticamente. Para obtener más información, consulte las [notas de la versión](https://github.com/awslabs/amazon-eks-ami/releases/tag/v20210621) de junio de 2021 AMIs.

En Amazon Elastic Kubernetes Service (Amazon EKS), debido a las directrices de seguridad, los nodos de trabajo no tienen pares de claves de Secure Shell (SSH) adjuntos. Este patrón muestra cómo puede usar el tipo de DaemonSet recurso Kubernetes para instalar AWS Systems Manager Agent (SSM Agent) en todos los nodos de trabajo, en lugar de instalarlo manualmente o reemplazar la Amazon Machine Image (AMI) de los nodos. DaemonSet utiliza una tarea automática en el nodo de trabajo para programar la instalación del agente SSM. También puede usar este patrón para instalar otros paquetes en los nodos de trabajo.

Al solucionar problemas en el clúster, instalar el agente SSM bajo demanda le permite establecer una sesión de SSH con el nodo de trabajo, recopilar registros o analizar la configuración de la instancia, sin pares de claves SSH.

## Requisitos previos y limitaciones
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-prereqs"></a>

**Requisitos previos **
+ Un clúster de Amazon EKS existente con nodos de trabajo de Amazon Elastic Compute Cloud (Amazon EC2).
+ Las instancias contenedoras deben tener los permisos necesarios para comunicarse con el servicio SSM. **Amazon**, la función gestionada por AWS Identity and Access Management (IAM), SSMManaged InstanceCore proporciona los permisos necesarios para que SSM Agent se ejecute en EC2 las instancias. Para obtener más información, consulte la [documentación de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html).

**Limitaciones**
+ Este patrón no se aplica a AWS Fargate porque DaemonSets no es compatible con la plataforma Fargate.
+ Este patrón solo se aplica a los nodos de trabajo basados en Linux.
+ Los DaemonSet pods se ejecutan en modo privilegiado. Si el clúster de Amazon EKS tiene un webhook que bloquea los pods en modo privilegiado, el agente SSM no se instalará.

## Arquitectura
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-architecture"></a>

El siguiente diagrama ilustra la arquitectura de este patrón.

![\[Uso de Kubernetes DaemonSet para instalar el agente SSM en los nodos de trabajo de Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)


## Tools (Herramientas)
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools"></a>

**Herramientas**
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) es una utilidad de línea de comandos que se utiliza para interactuar con un clúster de Amazon EKS. Este patrón se utiliza `kubectl` para implementar un DaemonSet en el clúster de Amazon EKS, que instalará el agente SSM en todos los nodos de trabajo.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) facilita la ejecución de Kubernetes en AWS sin tener que instalar, operar y mantener su propio plano o nodos de control de Kubernetes. Kubernetes es un sistema de código abierto para automatizar la implementación, el escalado y la administración de las aplicaciones en contenedores.
+ El administrador de [sesiones de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) le permite administrar sus EC2 instancias, instancias locales y máquinas virtuales (VMs) mediante un shell interactivo basado en el navegador con un solo clic o mediante la interfaz de línea de comandos de AWS (AWS CLI).

**Código**

Utilice el siguiente código para crear un archivo de DaemonSet configuración que instalará el agente SSM en el clúster de Amazon EKS. Siga las instrucciones en la sección [Epics](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics).

```
cat << EOF > ssm_daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: ssm-installer
  name: ssm-installer
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: ssm-installer
  template:
    metadata:
      labels:
        k8s-app: ssm-installer
    spec:
      containers:
      - name: sleeper
        image: busybox
        command: ['sh', '-c', 'echo I keep things running! && sleep 3600']
      initContainers:
      - image: amazonlinux
        imagePullPolicy: Always
        name: ssm
        command: ["/bin/bash"]
        args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]
        securityContext:
          allowPrivilegeEscalation: true
        volumeMounts:
        - mountPath: /etc/cron.d
          name: cronfile
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      volumes:
      - name: cronfile
        hostPath:
          path: /etc/cron.d
          type: Directory
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
EOF
```

## Epics
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics"></a>

### Configurar kubectl
<a name="set-up-kubectl"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale y configure kubectl para acceder al clúster de EKS. | Si `kubectl` aún no está instalado y configurado para acceder al clúster de Amazon EKS, consulte [Instalación de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la documentación de Amazon EKS. | DevOps | 

### Implemente el DaemonSet
<a name="deploy-the-daemonset"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el archivo DaemonSet de configuración. | Utilice el código de la sección [Código](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools) que aparece anteriormente en este patrón para crear un archivo de DaemonSet configuración denominado`ssm_daemonset.yaml`, que se implementará en el clúster de Amazon EKS. El pod lanzado por DaemonSet tiene un contenedor principal y un `init` contenedor. El contenedor principal tiene un comando `sleep`. El contenedor `init` incluye una sección `command` que crea un archivo cron para instalar el agente SSM en la ruta `/etc/cron.d/`. El trabajo cron se ejecuta solo una vez y el archivo que crea se elimina automáticamente una vez finalizado el trabajo. Cuando el contenedor de inicio ha terminado, el contenedor principal espera 60 minutos antes de salir. Después de 60 minutos, se lanza un nuevo pod. Este pod instala SSM Agent, si falta, o actualiza SSM Agent a la versión más reciente.Si es necesario, puede modificar el comando `sleep` para que se reinicie el pod una vez al día o para que se ejecute con más frecuencia.  | DevOps | 
|  DaemonSet Despliéguelo en el clúster de Amazon EKS. | Para implementar el archivo de DaemonSet configuración que creó en el paso anterior en el clúster de Amazon EKS, utilice el siguiente comando:<pre>kubectl apply -f ssm_daemonset.yaml </pre>Este comando crea un DaemonSet para ejecutar los pods en los nodos de trabajo e instalar el agente SSM. | DevOps | 

## Recursos relacionados
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-resources"></a>
+ [Instalación de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (documentación de Amazon EKS)
+ [Configuración del administrador de sesiones](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) (documentación de AWS Systems Manager)

# Instale el agente SSM y el CloudWatch agente en los nodos de trabajo de Amazon EKS mediante preBootstrapCommands
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Akkamahadevi Hiremath, Amazon Web Services*

## Resumen
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

Este patrón proporciona ejemplos de código y pasos para instalar el agente de AWS Systems Manager (SSM Agent) y el agente de Amazon CloudWatch en los nodos de trabajo de Amazon Elastic Kubernetes Service (Amazon EKS) en la nube de Amazon Web Services (AWS) durante la creación del clúster de Amazon EKS. Puede instalar el agente SSM y el CloudWatch agente mediante la `preBootstrapCommands` propiedad del [esquema del archivo de `eksctl` configuración (documentación de Weaveworks](https://eksctl.io/usage/schema/)). Luego, puede usar el agente SSM para conectarse a sus nodos de trabajo sin usar un par de claves de Amazon Elastic Compute Cloud (Amazon EC2). Además, puede usar el CloudWatch agente para monitorear la utilización de memoria y disco en sus nodos de trabajo de Amazon EKS.

## Requisitos previos y limitaciones
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa 
+ La [utilidad de línea de comandos eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), instalada y configurada en macOS, Linux o Windows
+ La [utilidad de línea de comandos kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), instalada y configurada en macOS, Linux o Windows

**Limitaciones**
+ Le recomendamos que evite añadir scripts de ejecución prolongada a la propiedad `preBootstrapCommands`****, ya que esto retrasa la incorporación del nodo al clúster de Amazon EKS durante las actividades de escalado. En su lugar, le recomendamos que cree una [imagen de máquina de Amazon Machine (AMI) personalizada](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html).
+ Este patrón se aplica únicamente a las instancias de Amazon EC2 Linux.

## Arquitectura
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**Pila de tecnología**
+ Amazon CloudWatch
+ Amazon Elastic Kubernetes Service (Amazon EKS)
+ Almacén de parámetros de AWS Systems Manager

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de un usuario que se conecta a los nodos de trabajo de Amazon EKS mediante el agente SSM, que se instaló mediante elv`preBootstrapCommands`.

![\[User connecting to Amazon EKS worker nodes via Administrador de sistemas, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


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

1. El usuario crea un clúster de Amazon EKS mediante el archivo de `eksctl` configuración con la `preBootstrapCommands` propiedad, que instala el agente y CloudWatch el agente de SSM.

1. Todas las instancias nuevas que se unan al clúster más adelante debido a actividades de escalado se crean con el agente y el agente SSM preinstalados. CloudWatch 

1. El usuario se conecta a Amazon EC2 mediante el agente SSM y, a continuación, supervisa el uso de la memoria y el disco mediante el CloudWatch agente.

## Tools (Herramientas)
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+ [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 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.
+ 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.
+ El administrador de [sesiones de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) lo ayuda a administrar sus EC2 instancias, instancias locales y máquinas virtuales mediante un shell interactivo basado en el navegador con un solo clic o mediante la interfaz de línea de comandos de AWS (AWS CLI).
+ [eksctl](https://eksctl.io/usage/schema/): es una utilidad sencilla de línea de comandos para crear y administrar clústeres de Kubernetes en Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): es una utilidad de línea de comandos para comunicarse con el servidor de la API del clúster.

## Epics
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Crear un clúster de Amazon EKS
<a name="create-an-amazon-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Guarde el archivo de configuración del agente CloudWatch . | Guarde el archivo de configuración del CloudWatch agente en el [almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html), en la región de AWS en la que desee crear su clúster de Amazon EKS. Para ello, [cree un parámetro](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) en el Almacén de parámetros de AWS Systems Manager y anote el nombre del parámetro (por ejemplo, `AmazonCloudwatch-linux`).Para obtener más información, consulte el *ejemplo de código del archivo de configuración del CloudWatch agente* en la sección de [información adicional](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) de este patrón. | DevOps ingeniero | 
| Cree el archivo de configuración y el clúster de eksctl.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### Compruebe que el agente y el agente de SSM CloudWatch funcionan
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe el agente de SSM. | Utilice SSH para conectarse a los nodos de su clúster de Amazon EKS mediante cualquiera de los métodos descritos en [Iniciar una sesión](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli) en la documentación de AWS Systems Manager. | AWS DevOps | 
| Pon a prueba el CloudWatch agente. | Utilice la CloudWatch consola para validar el CloudWatch agente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## Recursos relacionados
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [Instalación y ejecución del CloudWatch agente en sus servidores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html) ( CloudWatch documentación de Amazon)
+ [Creación de un parámetro de Systems Manager (consola)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) (documentación de AWS Systems Manager)
+ [Crear el archivo de configuración del CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html) ( CloudWatch documentación de Amazon)
+ [Iniciar una sesión (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) (documentación de AWS Systems Manager)
+ [Inicio de una sesión ( EC2 consola de Amazon)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console) (documentación de AWS Systems Manager)

## Información adicional
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**Ejemplo de archivo de configuración del CloudWatch agente**

En el siguiente ejemplo, el CloudWatch agente está configurado para supervisar el uso del disco y la memoria en las instancias de Amazon Linux:

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**Ejemplo de archivo de configuración eksctl**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**Detalles de código adicionales**
+ En la última línea de la propiedad `preBootstrapCommands`, `AmazonCloudwatch-linux` es el nombre del parámetro creado en el almacén de parámetros del Almacén de parámetros de AWS Systems Manager. Debe incluir `AmazonCloudwatch-linux` en el Almacén de parámetros de la misma región de AWS en la que creó el clúster de Amazon EKS. También puede especificar una ruta de archivo, pero le recomendamos que utilice Systems Manager para facilitar la automatización y la reutilización.
+ Si las utiliza `preBootstrapCommands` en el archivo `eksctl` de configuración, verá dos plantillas de lanzamiento en la consola de administración de AWS. La primera plantilla de lanzamiento incluye los comandos especificados en `preBootstrapCommands`. La segunda plantilla incluye los comandos especificados `preBootstrapCommands` y los datos de usuario predeterminados de Amazon EKS. Estos datos son necesarios para que los nodos se unan al clúster. El grupo Auto Scaling del grupo de nodos utiliza estos datos de usuario para generar nuevas instancias.
+ Si usa el atributo `iam` en el archivo de configuración `eksctl`, debe enumerar las políticas predeterminadas de Amazon EKS junto con cualquier política adicional requerida en las políticas de AWS Identity and Access Management (IAM) adjuntas. En el fragmento de código del paso *Crear el clúster y el archivo de configuración eksctl*, `AmazonSSMMangedInstanceCore` se añaden políticas adicionales para garantizar que el CloudWatch agente `CloudWatchAgentServerPolicy` y el agente SSM funcionen según lo previsto. Las políticas`AmazonEKSWorkerNodePolicy`, `AmazonEKS_CNI_Policy` y `AmazonEC2ContainerRegistryReadOnly` son políticas obligatorias necesarias para que el clúster de Amazon EKS funcione correctamente.

# Migración de los controladores de entrada NGINX al activar el Modo automático de Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye y Shamanth Devagari, Amazon Web Services*

## Resumen
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

El [Modo automático de EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) para Amazon Elastic Kubernetes Service (Amazon EKS) puede recudir la sobrecarga operativa de ejecutar cargas de trabajo en clústeres de Kubernetes. Este modo también le AWS permite configurar y administrar la infraestructura en su nombre. Al habilitar el Modo automático de EKS en un clúster existente, debe planificar cuidadosamente la migración de las configuraciones del [controlador de entrada NGINX](https://docs.nginx.com/nginx-ingress-controller/overview/about/). Esto se debe a que la transferencia directa de los equilibradores de carga de red no es posible.

Puede utilizar una estrategia de blue/green despliegue para migrar una instancia de NGINX Ingress Controller al habilitar el modo automático de EKS en un clúster de Amazon EKS existente.

## Requisitos previos y limitaciones
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Un [clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) que ejecuta la versión 1.29 de Kubernetes o una posterior
+ Complementos de Amazon EKS que ejecutan [versiones mínimas](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ Versión más recientes de [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Una instancia del [controlador de entrada de NGINX](https://kubernetes.github.io/ingress-nginx/deploy/#aws) existente
+ (Opcional) Una [zona alojada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) en Amazon Route 53 para el desplazamiento de tráfico basado en DNS

## Arquitectura
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Un *despliegue azul/verde* es una estrategia de despliegue en la que se crean dos entornos separados pero idénticos. Blue/green las implementaciones ofrecen capacidades de liberación y reversión prácticamente nulas durante el tiempo de inactividad. La idea fundamental es desplazar el tráfico entre dos entornos idénticos que ejecutan versiones diferentes de la aplicación.

En la siguiente imagen se muestra la migración de los equilibradores de carga de red desde dos instancias diferentes del controlador de entrada NGINX al activar el Modo automático de EKS. Se utiliza una blue/green implementación para transferir el tráfico entre los dos balanceadores de carga de red.

![\[Uso de una estrategia blue/green de implementación para migrar las instancias del controlador de ingreso de NGINX.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


El espacio de nombres original es el espacio de nombres *azul*. Aquí es donde se ejecutan el servicio y la instancia originales del controlador de entrada NGINX, antes de activar el Modo automático de EKS. El servicio y la instancia originales se conectan a un equilibrador de carga de red que tiene un nombre de DNS configurado en Route 53. El [controlador del equilibrador de carga de AWS](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) implementó este equilibrador de carga de red en la nube privada virtual (VPC).

El diagrama muestra el siguiente flujo de trabajo para configurar un entorno para una implementación: blue/green 

1. Instale y configure otra instancia del controlador de entrada NGINX en un espacio de nombres diferente, un espacio de nombres *verde*.

1. En Route 53, configure un nombre de DNS para un nuevo equilibrador de carga de red.

## Tools (Herramientas)
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Servicios de AWS**
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Por ejemplo, puede distribuir el tráfico entre instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2) en una o más zonas de disponibilidad.
+ [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.
+ [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**
+ [Helm](https://helm.sh/) es un administrador de paquetes de código abierto para Kubernetes que le permite instalar y administrar aplicaciones en el clúster de Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): una interfaz de la línea de comandos que le ayuda en la ejecución de comandos en clústeres de Kubernetes.
+ El [controlador de entrada NGINX](https://docs.nginx.com/nginx-ingress-controller/overview/about/) conecta las aplicaciones y los servicios de Kubernetes con la gestión de solicitudes, la autenticación, los recursos personalizados de autoservicio y la depuración.

## Epics
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Revisión del entorno existente
<a name="review-the-existing-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Confirme que la instancia original del controlador de entrada NGINX esté operativa. | Ingrese el siguiente comando para verificar que los recursos del espacio de nombres `ingress-nginx` estén operativos. Si ha implementado el controlador de entrada NGINX en otro espacio de nombres, actualice el nombre del espacio de nombres en este comando.<pre>kubectl get all -n ingress-nginx</pre>En la salida, confirme que el estado de los pods del controlador de entrada NGINX sea en ejecución. El siguiente es un ejemplo de output:<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps ingeniero | 

### Implemente un ejemplo de HTTPd carga de trabajo para usar el controlador de entrada NGINX
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los recursos de Kubernetes. | Ingrese los siguientes comandos para crear un ejemplo de implementación, servicio y entrada de Kubernetes:<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingeniero | 
| Revise los recursos implementados. | Ingrese el siguiente comando para ver una lista de los recursos implementados:<pre>kubectl get all,ingress</pre>En el resultado, confirme que el HTTPd pod de muestra está en ejecución. El siguiente es un ejemplo de output:<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps ingeniero | 
| Confirme que se pueda acceder al servicio. | Ingrese el siguiente comando para confirmar que se pueda acceder al servicio a través del nombre de DNS del equilibrador de carga de red:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>La salida esperada es la siguiente:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingeniero | 
| (Opcional) Cree un registro de DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingeniero, AWS DevOps | 

### Cómo habilitar el modo automático de EKS en el clúster existente
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active el Modo automático de EKS. | Siga las instrucciones en [Cómo habilitar el modo automático de EKS en un clúster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentación de Amazon EKS). | AWS DevOps | 

### Instalación de un nuevo controlador de entrada NGINX
<a name="install-a-new-nginx-ingress-controller"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure una nueva instancia del controlador de entrada NGINX. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingeniero | 
| Implemente la nueva instancia del controlador de instancias NGINX. | Ingrese el siguiente comando para aplicar el archivo de manifiesto modificado:<pre>kubectl apply -f deploy.yaml</pre> | DevOps ingeniero | 
| Confirme que la implementación se haya llevado a cabo correctamente. | Ingrese el siguiente comando para verificar que los recursos del espacio de nombres `ingress-nginx-v2` estén operativos:<pre>kubectl get all -n ingress-nginx-v2</pre>En la salida, confirme que el estado de los pods del controlador de entrada NGINX sea en ejecución. El siguiente es un ejemplo de output:<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps ingeniero | 
| Cree una nueva entrada para la HTTPd carga de trabajo de muestra. | Introduzca el siguiente comando para crear una nueva entrada para la carga de trabajo de muestra HTTPd existente:<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingeniero | 
| Confirme que la nueva entrada funcione. | Ingrese el siguiente comando para confirmar que la nueva entrada funcione:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>La salida esperada es la siguiente:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingeniero | 

### Realizar la transición
<a name="cut-over"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Haga la transición al nuevo espacio de nombres. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps ingeniero | 
| Revise las dos entradas. | Introduzca el siguiente comando para revisar las dos entradas que se crearon para la HTTPd carga de trabajo de muestra:<pre>kubectl get ingress</pre>El siguiente es un ejemplo de output:<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps ingeniero | 

## Recursos relacionados
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Cómo habilitar el modo automático de EKS en un clúster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentación de Amazon EKS)
+ [Solucione los problemas de los balanceadores de carga creados por el controlador de servicios de Kubernetes en Amazon EKS](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (re:POST Knowledge Center)AWS 
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/) (documentación de NGINX)

# Migre sus cargas de trabajo de contenedores de Azure Red Hat OpenShift (ARO) a Red Hat OpenShift Service en AWS (ROSA)
<a name="migrate-container-workloads-from-aro-to-rosa"></a>

*Naveen Ramasamy, Srikanth Rangavajhala y Gireesh Sreekantan, Amazon Web Services*

## Resumen
<a name="migrate-container-workloads-from-aro-to-rosa-summary"></a>

[Este patrón proporciona step-by-step instrucciones para migrar cargas de trabajo en contenedores de Azure Red Hat (ARO) a (ROSA). OpenShift Red Hat OpenShift Service en AWS](https://aws.amazon.com/rosa/) ROSA es un servicio de Kubernetes gestionado que proporciona Red Hat en colaboración con. AWS Le ayuda a implementar, administrar y escalar sus aplicaciones en contenedores mediante el uso de la plataforma Kubernetes, y se beneficia tanto de la experiencia de Red Hat en Kubernetes como en la infraestructura. Nube de AWS 

La migración de cargas de trabajo de contenedores desde ARO, otras nubes o entornos en las instalaciones a ROSA implica la transferencia de aplicaciones, configuraciones y datos de una plataforma a otra. Este patrón ayuda a garantizar una transición fluida y, al mismo tiempo, optimiza los servicios, la seguridad y la rentabilidad Nube de AWS . Abarca dos métodos para migrar sus cargas de trabajo a clústeres ROSA: CI/CD y el kit de herramientas de migración para contenedores (MTC).

En este patrón se tratan ambos métodos. El método que elija depende de la complejidad y la certeza del proceso de migración. Si tiene el control total sobre el estado de su aplicación y puede garantizar una configuración uniforme a través de una canalización, le recomendamos que utilice este método. CI/CD Sin embargo, si el estado de la aplicación implica incertidumbres, cambios imprevistos o un ecosistema complejo, le recomendamos que utilice MTC como una ruta fiable y controlada para migrar la aplicación y sus datos a un nuevo clúster. Para obtener una comparación detallada de los dos métodos, consulte la sección [Información adicional](#migrate-container-workloads-from-aro-to-rosa-additional).

Beneficios de la migración a ROSA:
+ ROSA se integra perfectamente AWS como un servicio nativo. Es fácilmente accesible a través de Consola de administración de AWS y se factura a través de una sola Cuenta de AWS. Ofrece total compatibilidad con otros Servicios de AWS y proporciona soporte colaborativo tanto por parte de Red Hat como por parte de ambos AWS .
+ ROSA admite implementaciones híbridas y multinube. Permite que las aplicaciones se ejecuten de manera coherente en los centros de datos en las instalaciones y en varios entornos en la nube.
+ ROSA se beneficia del enfoque de seguridad de Red Hat y ofrece características como el control de acceso basado en roles (RBAC), el escaneo de imágenes y las evaluaciones de vulnerabilidades para garantizar un entorno de contenedores seguro.
+ ROSA se ha diseñado para escalar aplicaciones con facilidad y ofrece opciones de alta disponibilidad. Permite que las aplicaciones crezcan según sea necesario y, al mismo tiempo, mantiene la fiabilidad.
+ ROSA automatiza y simplifica la implementación de un clúster de Kubernetes en comparación con los métodos de administración y configuración manuales. Esto acelera el proceso de desarrollo e implementación.
+ ROSA se beneficia de los Nube de AWS servicios y proporciona una integración perfecta con AWS ofertas como los servicios de bases de datos, las soluciones de almacenamiento y los servicios de seguridad.

## Requisitos previos y limitaciones
<a name="migrate-container-workloads-from-aro-to-rosa-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Permisos configurados para los Servicios de AWS que ROSA confía para ofrecer funcionalidad. Para obtener más información, consulte [Prerequisites](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html) en la documentación de ROSA.
+ ROSA activado en la [consola de ROSA](https://console.aws.amazon.com/rosa). Para obtener instrucciones, consulte la [documentación de ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html#enable-rosa).
+ El clúster de ROSA instalado y configurado. Para obtener más información, consulte [Get started with ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started.html) en la documentación de ROSA. Para comprender los diferentes métodos para configurar un clúster de ROSA, consulte la guía de orientación AWS prescriptiva sobre las [estrategias de implementación de ROSA](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/).
+ La conectividad de red se establece desde la red local AWS hasta [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)(preferiblemente) o [AWS Virtual Private Network (Site-to-Site VPN](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)).
+ Una instancia de Amazon Elastic Compute Cloud (Amazon EC2) u otro servidor virtual para instalar herramientas como `aws client` el cliente OpenShift CLI (`oc`), el cliente ROSA y el binario de Git.

Requisitos previos adicionales para el CI/CD método:
+ Acceso al servidor Jenkins local con permisos para crear una nueva canalización, añadir etapas, añadir OpenShift clústeres y realizar compilaciones.
+ Acceso al repositorio de Git en el que se mantiene el código fuente de la aplicación, con permisos para crear una nueva rama de Git y llevar a cabo confirmaciones en la nueva rama.

Requisitos previos adicionales para el método de MTC:
+ Un bucket de Amazon Simple Storage Service (Amazon S3) que se utilizará como repositorio de replicación.
+ Acceso administrativo al clúster de ARO de origen. Es necesario para configurar la conexión de MTC.

**Limitaciones**
+ 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="migrate-container-workloads-from-aro-to-rosa-architecture"></a>

ROSA proporciona tres patrones de despliegue de red: pública, privada y [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html). PrivateLinkpermite a los equipos de ingeniería de confiabilidad de sitios (SRE) de Red Hat administrar el clúster mediante una subred privada conectada al PrivateLink punto final del clúster en una VPC existente.

La elección de PrivateLink esta opción proporciona la configuración más segura. Por ese motivo, la recomendamos para cargas de trabajo confidenciales o para requisitos de cumplimiento estrictos. Para obtener información sobre las opciones de implementación de redes públicas y privadas, consulte la [ OpenShift documentación de Red Hat](https://docs.openshift.com/rosa/architecture/rosa-architecture-models.html#rosa-hcp-architecture_rosa-architecture-models).

**importante**  
Puede crear un PrivateLink clúster solo en el momento de la instalación. No puede cambiar un clúster para usarlo PrivateLink después de la instalación.

El siguiente diagrama ilustra la PrivateLink arquitectura de un clúster ROSA que se utiliza Direct Connect para conectarse a los entornos locales y ARO.

![\[Clúster ROSA que utiliza AWS Direct Connect y AWS PrivateLink.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/eff9b017-6fc7-4874-b610-849a42071ef4.png)


**AWS permisos para ROSA**

Para obtener AWS permisos para ROSA, le recomendamos que utilice AWS Security Token Service (AWS STS) con tokens dinámicos de corta duración. Este método utiliza funciones y políticas predefinidas con privilegios mínimos para conceder a ROSA permisos mínimos para operar en la instalación Cuenta de AWS, el plano de control y las funciones informáticas de ROSA.

**Reimplementación de la canalización de CI/CD**

CI/CD pipeline redeployment is the recommended method for users who have a mature CI/CDcanalización. Si elige esta opción, puede utilizar cualquier [estrategia de DevOps despliegue](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html) para trasladar gradualmente la carga de aplicaciones a los despliegues en ROSA.

**nota**  
Este patrón supone un caso de uso común en el que tienes una canalización local de Git, JFrog Artifactory y Jenkins. [Este enfoque requiere que establezcas la conectividad de red desde la red local AWS hasta Direct Connect ella y que configures el clúster ROSA antes de seguir las instrucciones de la sección Epics.](#migrate-container-workloads-from-aro-to-rosa-epics) Consulte la sección [Requisitos previos](#migrate-container-workloads-from-aro-to-rosa-prereqs) para obtener los detalles.

En el siguiente diagrama se muestra el flujo de trabajo para este método.

![\[Migración de contenedores de ARO a ROSA mediante el método. CI/CD\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/f658590e-fbd9-4297-a02c-0b516694d436.png)


**Método MTC**

Puede usar [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html)** **para migrar cargas de trabajo en contenedores entre diferentes entornos de Kubernetes; por ejemplo, de ARO a ROSA. MTC simplifica el proceso de migración porque automatiza varias tareas clave y proporciona un marco completo para administrar el ciclo de vida de la migración.

En el siguiente diagrama se muestra el flujo de trabajo para este método.

![\[Migración de contenedores de ARO a ROSA mediante el método MTC.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/979bbc7b-2e39-4dd1-b4f0-ea1032880a38.png)


## Tools (Herramientas)
<a name="migrate-container-workloads-from-aro-to-rosa-tools"></a>

**Servicios de AWS**
+ [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 u datos de objetos hacia, desde y entre los servicios AWS de almacenamiento.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)conecta la red interna a una Direct Connect ubicación a través de un cable Ethernet de fibra óptica estándar. Con esta conexión, puede crear interfaces virtuales directamente con las públicas y, al Servicios de AWS mismo tiempo, omitir a los proveedores de servicios de Internet en su ruta de red.
+ [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.
+ [Red Hat OpenShift Service en AWS (ROSA)](https://docs.aws.amazon.com/rosa/latest/userguide/what-is-rosa.html) es un servicio gestionado que ayuda a OpenShift los usuarios de Red Hat a crear, escalar y gestionar aplicaciones en contenedores. AWS
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) le ayuda a solicitar credenciales temporales con privilegios limitados para los usuarios.

**Otras herramientas**
+ [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) proporciona una consola y una API para migrar aplicaciones en contenedores de ARO a ROSA.

## Prácticas recomendadas
<a name="migrate-container-workloads-from-aro-to-rosa-best-practices"></a>
+ Para mayor [resiliencia](https://docs.aws.amazon.com/ROSA/latest/userguide/disaster-recovery-resiliency.html) y si tiene cargas de trabajo que cumplen con las normas de seguridad, configure un clúster ROSA multizona de disponibilidad que utilice. PrivateLink Para obtener más información, consulte la [documentación de ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started-classic-private-link.html).
**nota**  
PrivateLink no se puede configurar después de la instalación.
+ El bucket de S3 que utiliza como repositorio de replicación no debe ser público. Utilice las políticas de bucket de S3 adecuadas para restringir el acceso.
+ Si elige el método MTC, utilice la opción de migración por **etapas** para reducir el tiempo de inactividad durante la transición.
+ Revise las cuotas de servicio antes y después de aprovisionar el clúster de ROSA. Si es necesario, solicite un aumento de la cuota de acuerdo con sus requisitos. Para obtener más información, consulte la [documentación de Service Quotas](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).
+ Consulte [ROSA security guidelines](https://docs.aws.amazon.com/ROSA/latest/userguide/security.html) e implemente las prácticas recomendadas de seguridad.
+ Le recomendamos eliminar el administrador de clústeres predeterminado después de la instalación. Para obtener más información, consulte la [ OpenShift documentación de Red Hat](https://docs.openshift.com/container-platform/4.13/post_installation_configuration/cluster-tasks.html).
+ Utilice el escalado automático del grupo de máquinas para reducir verticalmente los nodos de trabajo no utilizados en el clúster de ROSA a fin de optimizar los costos. Para obtener más información, consulte [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/5-nodes-storage/3-autoscale-machine-pool).
+ Utilice el servicio de gestión de costes de Red Hat para OpenShift Container Platform para comprender mejor los costes de las nubes y los contenedores y realizar un seguimiento de los mismos. Para obtener más información, consulte [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/10-cost-management).
+ Supervise y audite los servicios y aplicaciones de infraestructura de clústeres de ROSA mediante el uso de Servicios de AWS. Para obtener más información, consulte [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/8-observability).

## Epics
<a name="migrate-container-workloads-from-aro-to-rosa-epics"></a>

### Opción 1: utilizar una CI/CD canalización
<a name="option-1-use-a-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue el nuevo clúster de ROSA a Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador de AWS, administrador de sistemas de AWS, AWS DevOps | 
| Agregue el cliente `oc` a sus nodos de Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador de AWS, administrador de sistemas de AWS, AWS DevOps | 
| Cree una nueva rama de Git. | Cree una nueva rama en el repositorio de Git para `rosa-dev`. Esta rama separa los cambios en los parámetros de configuración o el código de ROSA de la canalización existente. | AWS DevOps | 
| Etiquete las imágenes para ROSA. | En la etapa de compilación, utilice una etiqueta diferente para identificar las imágenes que se crearon a partir de la canalización de ROSA. | Administrador de AWS, administrador de sistemas de AWS, AWS DevOps | 
| Crear una canalización. | Cree una nueva canalización de Jenkins que sea similar a la canalización existente. Para esta canalización, utilice la rama de Git `rosa-dev` que creó anteriormente y asegúrese de incluir las etapas de extracción, escaneo de código y compilación de Git que sean idénticas a las de la canalización existente. | Administrador de AWS, administrador de sistemas de AWS, AWS DevOps | 
| Agregue una etapa de implementación de ROSA. | En la nueva canalización, agregue una etapa de implementación en el clúster de ROSA y haga referencia al clúster de ROSA que agregó a la configuración global de Jenkins. | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Inicie una nueva compilación. | En Jenkins, seleccione la canalización y elija **Build now**, o confirme un cambio en la rama `rosa-dev` en Git para iniciar una nueva complicación. | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Comprobar la implementación. | Utilice el comando **oc** o la [consola de ROSA](https://console.aws.amazon.com/rosa) para verificar que la aplicación se haya implementado en el clúster de ROSA de destino. | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Copie los datos en el clúster de destino. | Para cargas de trabajo con estado, copie los datos del clúster de origen al clúster de destino mediante AWS DataSync utilidades de código abierto como **rsync**, o puede utilizar el método MTC. Para obtener más información, consulte la [Documentación de AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html). | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Pruebe su aplicación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Lleve a cabo la transición. | Si las pruebas se llevan a cabo correctamente, utilice la política de Amazon Route 53 adecuada para trasladar el tráfico de la aplicación alojada en ARO a la aplicación alojada en ROSA. Cuando complete este paso, la carga de trabajo de la aplicación pasará por completo al clúster de ROSA. | Administrador AWS, administrador de sistemas AWS | 

### Opción 2: uso de MTC
<a name="option-2-use-mtc"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale el operador de MTC. | Instale el operador de MTC en los clústeres de ARO y ROSA:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Configure el tráfico de red al repositorio de replicación. | Si utiliza un servidor proxy, configúrelo para permitir el tráfico de red entre el repositorio de replicación y los clústeres. El repositorio de replicación es un objeto de almacenamiento intermedio que MTC utiliza para migrar datos. Los clústeres de origen y destino deben tener acceso de red al repositorio de replicación durante la migración. | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Agregue el clúster de origen a MTC. | En la consola web de MTC, agregue el clúster de origen de ARO. | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Agregue Amazon S3 como repositorio de replicación. | En la consola web de MTC, agregue el bucket de Amazon S3 (consulte [Requisitos previos](#migrate-container-workloads-from-aro-to-rosa-prereqs)) como repositorio de replicación. | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Cree un plan de migración. | En la consola web de MTC, cree un plan de migración y especifique el tipo de transferencia de datos como **Copy**. Esto indicará a MTC que copie los datos del clúster de origen (ARO) al bucket de S3 y del bucket al clúster de destino (ROSA). | Administrador de AWS DevOps, administrador de sistemas de AWS | 
| Ejecute el plan de migración. | Ejecute el plan de migración mediante la opción **Stage** o **Cutover**:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador de AWS DevOps, administrador de sistemas de AWS | 

## Resolución de problemas
<a name="migrate-container-workloads-from-aro-to-rosa-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Problemas de conectividad | Al migrar las cargas de trabajo de contenedores de ARO a ROSA, es posible que se produzcan problemas de conectividad que deban resolverse para garantizar una migración satisfactoria. Para corregir estos problemas de conectividad (enumerados en esta tabla) durante la migración, es fundamental contar con una planificación meticulosa, coordinarse con los equipos de red y seguridad y llevar a cabo pruebas exhaustivas. La implementación de una estrategia de migración gradual y la verificación de la conectividad en cada paso ayudarán a minimizar las posibles interrupciones y a garantizar una transición fluida de ARO a ROSA. | 
| Diferencias de configuración de la red | ARO y ROSA pueden tener variaciones en sus configuraciones de red, como la configuración de la red virtual (VNet), las subredes y las políticas de red. Para que la comunicación entre los servicios sea adecuada, asegúrese de que la configuración de red esté alineada entre las dos plataformas. | 
| Reglas de firewall y grupo de seguridad | ROSA y ARO pueden tener una configuración predeterminada de firewall y grupo de seguridad diferente. Asegúrese de ajustar y actualizar estas reglas para permitir el tráfico necesario a fin de mantener la conectividad entre los contenedores y los servicios durante la migración.  | 
| Cambios de dirección IP y DNS | Al migrar las cargas de trabajo, los nombres de DNS y las direcciones IP pueden cambiar. Reconfigure las aplicaciones que se basan en nombres DNS estáticos IPs o específicos.  | 
| Acceso a servicios externos | Si su aplicación depende de servicios externos, como bases de datos APIs, es posible que tenga que actualizar su configuración de conexión para asegurarse de que pueda comunicarse con los nuevos servicios de ROSA. | 
| Configuración de Azure Private Link | Si utiliza Azure Private Link o servicios de puntos de conexión privados en ARO, necesitará configurar la funcionalidad equivalente en ROSA para garantizar la conectividad privada entre los recursos. | 
| Site-to-Site VPN o Direct Connect configuración  | Si ya Site-to-Site VPN existen Direct Connect conexiones entre su red local y ARO, necesitará establecer conexiones similares con ROSA para una comunicación ininterrumpida con sus recursos locales. | 
| Configuración del equilibrador de carga y entrada | Las configuraciones de los controladores de entrada y los equilibradores de carga pueden diferir entre ARO y ROSA. Vuelva a configurar estos ajustes para mantener el acceso externo a los servicios. | 
| Gestión de TLS y certificados | Si las aplicaciones utilizan certificados SSL o TLS, asegúrese de que sean válidos y estén configurados correctamente en ROSA. | 
| Acceso al registro de contenedores | Si los contenedores están alojados en un registro de contenedores externo, configure los permisos de acceso y autenticación adecuados para ROSA. | 
| Supervisión y registro | Actualice las configuraciones de supervisión y registro para que reflejen la nueva infraestructura de ROSA para que pueda continuar supervisando el estado y el rendimiento de los contenedores de manera eficaz. | 

## Recursos relacionados
<a name="migrate-container-workloads-from-aro-to-rosa-resources"></a>

**AWS****referencias**
+ [¿Qué es Red Hat OpenShift Service en AWS?](https://docs.aws.amazon.com/ROSA/latest/userguide/what-is-rosa.html) (documentación de ROSA)
+ [Get started with ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/getting-started.html) (documentación de ROSA)
+ [Red Hat OpenShift Service en AWS estrategias de implementación](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/) (orientación AWS prescriptiva)
+ [Red Hat OpenShift Service en AWS Now GA](https://aws.amazon.com/blogs/aws/red-hat-openshift-service-on-aws-now-generally-availably/) (AWS entrada de blog)
+ [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/0-introduction)
+ [ROSA FAQ](https://aws.amazon.com/rosa/faqs/)
+ [ROSA Workshop FAQ](https://www.rosaworkshop.io/rosa/14-faq/)
+ [Precios de ROSA](https://aws.amazon.com/rosa/pricing/)

** OpenShift Documentación de Red Hat**
+ [Instalación rápida de un clúster en AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-default.html)
+ [Instalar un clúster AWS en una red restringida](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.html)
+ [Instalación de un clúster AWS en una VPC existente](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-vpc.html)
+ [Instalar un clúster en una infraestructura aprovisionada por el usuario mediante plantillas AWS CloudFormation ](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-user-infra.html)
+ [Instalar un clúster AWS en una red restringida con una infraestructura aprovisionada por el usuario](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws.html)
+ [Instalar un clúster con personalizaciones AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-customizations.html)
+ [Introducción a la OpenShift CLI](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html)

## Información adicional
<a name="migrate-container-workloads-from-aro-to-rosa-additional"></a>

**Elegir entre las opciones de reimplementación de MTC y de CI/CD canalización**

La migración de aplicaciones de un OpenShift clúster a otro requiere una cuidadosa consideración. Lo ideal sería que la transición fuera fluida mediante una CI/CD canalización para volver a implementar la aplicación y gestionar la migración de los volúmenes de datos persistentes. Sin embargo, en la práctica, una aplicación en ejecución en un clúster es susceptible a cambios imprevistos con el tiempo. Estos cambios pueden hacer que la aplicación se desvíe gradualmente de su estado de implementación original. MTC ofrece una solución para casos en los que el contenido exacto de un espacio de nombres es incierto y es importante migrar sin problemas todos los componentes de la aplicación a un nuevo clúster.

Para tomar la decisión correcta, es necesario evaluar el caso específico y sopesar los beneficios de cada enfoque. De este modo, puede garantizar una migración exitosa y fluida que se ajuste a sus necesidades y prioridades. A continuación, se comparan las directrices adicionales para elegir entre las dos opciones.

**Reimplementación de la canalización de CI/CD**

El método de CI/CD canalización es el enfoque recomendado si la aplicación se puede volver a implementar con confianza mediante una canalización. De este modo, se garantiza que la migración sea controlada, predecible y alineada con sus prácticas de implementación actuales. Si elige este método, puede utilizar estrategias de [implementación azul/verde](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html) o implementación canario para trasladar la carga a implementaciones en ROSA. En este caso, este patrón supone que Jenkins orquesta las implementaciones de aplicaciones desde el entorno en las instalaciones.

Ventajas:
+ No necesita acceso administrativo al clúster de ARO de origen ni implementar ningún operador en el clúster de origen o destino.
+ Este enfoque le ayuda a cambiar el tráfico gradualmente mediante una estrategia. DevOps 

Desventajas:
+ Probar la funcionalidad de la aplicación requiere más esfuerzo.
+ Si la aplicación contiene datos persistentes, se requieren pasos adicionales para copiar los datos mediante el uso de AWS DataSync otras herramientas.

**Migración de MTC**

En un entorno real, las aplicaciones en ejecución pueden sufrir cambios imprevistos que hacen que se alejen de la implementación inicial. Elija la opción de MTC cuando no conozca el estado actual de la aplicación en el clúster de origen. Por ejemplo, si el ecosistema de aplicaciones abarca varios componentes, configuraciones y volúmenes de almacenamiento de datos, le recomendamos que elija MTC para garantizar una migración completa que abarque la aplicación y todo su entorno.

Ventajas:
+ MTC proporciona una copia de seguridad y restauración completas de la carga de trabajo.
+ Copiará los datos persistentes del origen al destino mientras migra la carga de trabajo.
+ No requiere acceso al repositorio de código fuente.

Desventajas:
+ Necesita privilegios administrativos para instalar el operador de MTC en los clústeres de origen y destino.
+ El DevOps equipo necesita formación para utilizar la herramienta MTC y realizar migraciones. 

# Ejecute tareas de Amazon ECS en Amazon WorkSpaces con Amazon ECS Anywhere
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere"></a>

*Akash Kumar, Amazon Web Services*

## Resumen
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-summary"></a>

Amazon Elastic Container Service (Amazon ECS) Anywhere permite la implementación de tareas de Amazon ECS en cualquier entorno, incluida la infraestructura administrada por Amazon Web Services (AWS) y la infraestructura administrada por el cliente. Esto se puede hacer al tiempo que se utiliza un plano de control totalmente administrado por AWS que se ejecuta en la nube y que está siempre actualizado. 

Las empresas suelen utilizar Amazon WorkSpaces para desarrollar aplicaciones basadas en contenedores. Para ello, se necesitó Amazon Elastic Compute Cloud (Amazon EC2) o AWS Fargate con un clúster de Amazon ECS para probar y ejecutar las tareas de ECS. Ahora, con Amazon ECS Anywhere, puede añadir Amazon WorkSpaces como instancias externas directamente a un clúster de ECS y ejecutar sus tareas directamente. Esto reduce el tiempo de desarrollo, ya que puede probar su contenedor con un clúster de ECS localmente en Amazon WorkSpaces. También puede ahorrar el costo de usar EC2 instancias de Fargate para probar sus aplicaciones de contenedores.

Este patrón muestra cómo implementar tareas de ECS en Amazon WorkSpaces con Amazon ECS Anywhere. Configura el clúster de ECS y utiliza AWS Directory Service Simple AD para lanzar el WorkSpaces. A continuación, la tarea ECS de ejemplo lanza NGINX en. WorkSpaces

## Requisitos previos y limitaciones
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-prereqs"></a>
+ Una cuenta de AWS activa
+ Interfaz de la línea de comandos de AWS (AWS CLI)
+ Credenciales de AWS [configuradas en su máquina](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)

## Arquitectura
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-architecture"></a>

**Pila de tecnología de destino**
+ Una nube privada virtual (VPC)
+ Clúster de Amazon ECS
+ Amazon WorkSpaces
+ AWS Directory Service con AD Connector

**Arquitectura de destino**

![\[ECS Anywhere configura el clúster de ECS y utiliza Simple AD para su lanzamiento WorkSpaces.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/da8b2249-3423-485c-9fef-6f902025e969/images/fd354d14-f29b-4b9e-8f1a-c3cb7ed4d6bf.png)


 

La arquitectura incluye los siguientes servicios y recursos:
+ Un clúster de ECS con subredes públicas y privadas en una VPC personalizada
+ Simple AD en la VPC para proporcionar a los usuarios acceso a Amazon WorkSpaces
+ Amazon WorkSpaces aprovisionó en la VPC mediante Simple AD
+ AWS Systems Manager activado para añadir Amazon WorkSpaces como instancias gestionadas
+ Con Amazon ECS y AWS Systems Manager Agent (SSM Agent), Amazon WorkSpaces agregó a Systems Manager y al clúster de ECS
+ Un ejemplo de tarea de ECS para ejecutar WorkSpaces en el clúster de ECS

## Tools (Herramientas)
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-tools"></a>
+ [AWS Directory Service Simple Active Directory (Simple AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html) es un directorio administrado de manera autónoma que utiliza tecnología de un servidor compatible con Active Directory de Samba 4. Simple AD ofrece un subconjunto de las funciones que ofrece AWS Managed Microsoft AD, incluida la capacidad de gestionar los usuarios y conectarse de forma segura a las EC2 instancias de Amazon.
+ [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 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 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.
+ [Amazon](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html) le WorkSpaces ayuda a aprovisionar escritorios Microsoft Windows o Amazon Linux virtuales basados en la nube para sus usuarios, conocidos como *WorkSpaces*. WorkSpaces elimina la necesidad de adquirir e implementar hardware o instalar software complejo.

## Epics
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear y configurar el clúster de ECS. | Para crear el clúster de ECS, siga las instrucciones que figuran en la [Documentación de AWS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html), que incluyen los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.html) | Arquitecto de la nube | 

### Lanza Amazon WorkSpaces
<a name="launch-amazon-workspaces"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configura Simple AD y lanza Amazon WorkSpaces. | Para aprovisionar un directorio de Simple AD para su VPC recién creada e iniciar Amazon WorkSpaces, siga las instrucciones de la documentación de [AWS](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html). | Arquitecto de la nube | 

### Configuración de AWS Systems Manager para entornos híbridos
<a name="set-up-aws-systems-manager-for-a-hybrid-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargar los scripts adjuntos. | En su máquina local, descargue los archivos `ssm-trust-policy.json` y `ssm-activation.json` que se encuentran en la sección *Archivos adjuntos*. | Arquitecto de la nube | 
| Agregar el rol de IAM. | Añada variables de entorno en función de los requisitos de su empresa.<pre>export AWS_DEFAULT_REGION=${AWS_REGION_ID}<br />export ROLE_NAME=${ECS_TASK_ROLE}<br />export CLUSTER_NAME=${ECS_CLUSTER_NAME}<br />export SERVICE_NAME=${ECS_CLUSTER_SERVICE_NAME}</pre>Ejecutar el siguiente comando.<pre>aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json</pre> | Arquitecto de la nube | 
| Añade la SSMManaged InstanceCore política de Amazon a la función de IAM. | Ejecutar el siguiente comando.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore</pre> | Arquitecto de la nube | 
| Añada la política de Amazon EC2 ContainerServicefor EC2 Role al rol de IAM. | Ejecutar el siguiente comando.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role</pre> | Arquitecto de la nube | 
| Comprobar el rol de IAM. | Para verificar el rol de IAM, ejecute el siguiente comando.<pre>aws iam list-attached-role-policies --role-name $ROLE_NAME</pre> | Arquitecto de la nube | 
| Activar Systems Manager. | Ejecutar el siguiente comando.<pre>aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json</pre> | Arquitecto de la nube | 

### WorkSpaces Añádala al clúster de ECS
<a name="add-workspaces-to-the-ecs-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Conéctese a su WorkSpaces. | Para conectarse a sus Workspaces y configurarlos, siga las instrucciones que figuran en la [Documentación de AWS](https://docs.aws.amazon.com/workspaces/latest/userguide/workspaces-user-getting-started.html). | Desarrollador de aplicaciones | 
| Descargar el script de instalación ecs-anywhere. | En el símbolo del sistema, ejecute el siguiente comando.<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh</pre> | Desarrollador de aplicaciones | 
| Comprobar la integridad del script del intérprete de comandos. | Ejecutar el siguiente comando (opcional).<pre>curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256<br /><br /><br /></pre> | Desarrollador de aplicaciones | 
| Agregar un repositorio EPEL en Amazon Linux. | Para agregar un repositorio Extra Packages for Enterprise Linux (EPEL), ejecute el comando `sudo amazon-linux-extras install epel -y`. | Desarrollador de aplicaciones | 
| Instalar Amazon ECS Anywhere. | Para ejecutar el script de instalación, utilice el siguiente comando.<pre>sudo ./ecs-anywhere-install.sh --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE --region $AWS_REGION<br /><br /><br /></pre> |  | 
| Comprobar la información de la instancia desde el clúster de ECS. | Para comprobar la información de las instancias del clúster de Systems Manager y ECS y validar las que WorkSpaces se agregaron al clúster, ejecute el siguiente comando desde su máquina local.<pre>aws ssm describe-instance-information" && "aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | Desarrollador de aplicaciones | 

### Agregue una tarea de ECS para el WorkSpaces
<a name="add-an-ecs-task-for-the-workspaces"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Para crear un rol de IAM de ejecución de tareas. | Descargue `task-execution-assume-role.json` y `external-task-definition.json` desde la sección *Archivos adjuntos*. Ejecute el siguiente comando en su equipo local.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json</pre> | Arquitecto de la nube | 
| Agregue la política al rol de ejecución. | Ejecutar el siguiente comando.<pre>aws iam --region $AWS_DEFAULT_REGION attach-role-policy --role-name $ECS_TASK_EXECUTION_ROLE --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy</pre> | Arquitecto de la nube | 
| Crear un rol de tarea. | Ejecutar el siguiente comando.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json<br /><br /><br /></pre> | Arquitecto de la nube | 
| Registrar la definición de tareas en el clúster. | Ejecute el siguiente comando en su equipo local.<pre>aws ecs register-task-definition --cli-input-json file://external-task-definition.json</pre> | Arquitecto de la nube | 
| Ejecutar la tarea. | Ejecute el siguiente comando en su equipo local.<pre>aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx</pre> | Arquitecto de la nube | 
| Validar el estado de ejecución de la tarea. | Para obtener el ID de la tarea, ejecute el siguiente comando.<pre>export TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')</pre>Ejecute el siguiente comando con el ID de la tarea.<pre>aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks ${TEST_TASKID}</pre> | Arquitecto de la nube | 
| Compruebe la tarea en WorkSpace. | Para comprobar que NGINX se está ejecutando en WorkSpace, ejecute el comando. ` curl http://localhost:8080` | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-resources"></a>
+ [Clúster de ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Configurar un entorno híbrido](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html)
+ [AD sencillo](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html)

## Conexiones
<a name="attachments-da8b2249-3423-485c-9fef-6f902025e969"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/da8b2249-3423-485c-9fef-6f902025e969/attachments/attachment.zip)

# Ejecute un contenedor Docker de la API web de ASP.NET Core en una instancia de Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam y Sreelaxmi Pai, Amazon Web Services*

## Resumen
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Este patrón es para personas que están empezando a colocar en contenedores sus aplicaciones en la nube de Amazon Web Services (AWS). Cuando empiezaa a colocar aplicaciones en contenedores en la nube, normalmente no hay ninguna plataforma de orquestación de contenedores configurada. Este patrón le ayuda a configurar rápidamente la infraestructura en AWS para probar sus aplicaciones en contenedores sin necesidad de una infraestructura compleja de orquestación de contenedores.

El primer paso en el proceso de modernización es transformar la aplicación. Si se trata de una aplicación antigua de .NET Framework, primero debe cambiar el tiempo de ejecución a ASP.NET Core. A continuación, proceda del modo siguiente:
+ Cree la imagen del contenedor de Docker
+ Ejecute el contenedor de Docker con la imagen compilada
+ Valide la aplicación antes de implementarla en cualquier plataforma de orquestación de contenedores, como Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS). 

Este patrón cubre los aspectos de creación, ejecución y validación del desarrollo de aplicaciones modernas en una instancia Linux de Amazon Elastic Compute Cloud (Amazon EC2).

## Requisitos previos y limitaciones
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Requisitos previos **
+ Una [cuenta de Amazon Web Services (AWS) activa](https://aws.amazon.com/account/) 
+ Un [rol de AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) con acceso suficiente para crear recursos de AWS para este patrón 
+ Se descargó e instaló [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) o posterior
+ Un proyecto de .NET Framework modernizado a ASP.NET Core
+ Un GitHub repositorio

**Versiones de producto**
+ Visual Studio Community 2022 o posterior

## Arquitectura
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Arquitectura de destino**

Este patrón utiliza una [ CloudFormation plantilla de AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) para crear la arquitectura de alta disponibilidad que se muestra en el siguiente diagrama. Se lanza una instancia de Amazon EC2 Linux en una subred privada. El administrador de sesiones de AWS Systems Manager se utiliza para acceder a la instancia privada de Amazon EC2 Linux y para probar la API que se ejecuta en el contenedor de Docker.

![\[Un usuario que accede a la instancia de Amazon EC2 Linux y prueba la API que se ejecuta en el contenedor de Docker.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Acceso a la instancia de Linux a través de Session Manager

## Tools (Herramientas)
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**Servicios de AWS**
+ [Interfaz de la línea de comandos de AWS](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 le permite interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos. Con una configuración mínima, puede utilizar comandos de CLI de AWS que implementen una funcionalidad equivalente a la que ofrece la consola de administración de AWS basada en navegador.
+ [Consola de administración de AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html): la consola de administración de AWS es una aplicación web que engloba y hace referencia a un amplio conjunto de consolas de servicios para la administración de recursos de AWS. La primera vez que inicie sesión, verá la página de inicio de la consola. La página de inicio proporciona acceso a la consola de cada servicio y ofrece un único lugar para acceder a la información que necesita para realizar sus tareas relacionadas con AWS.
+ [Administrador de sesiones de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html): el administrador de sesiones es una funcionalidad de AWS Systems Manager totalmente gestionada. Con Session Manager, puede gestionar sus instancias de Amazon Elastic Compute Cloud (Amazon EC2). El administrador de sesiones proporciona una administración de nodos segura y auditable sin necesidad de abrir puertos de entrada, mantener los hosts bastiones ni administrar las claves SSH.

**Otras herramientas**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/): Visual Studio 2022 es un entorno de desarrollo integrado (IDE).
+ [Docker](https://www.docker.com/): Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.

**Código**

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Epics
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Desarrollar la API web de ASP.NET Core
<a name="develop-the-asp-net-core-web-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un ejemplo de API web de ASP.NET Core con Visual Studio. | Para crear una API web de ASP.NET Core de ejemplo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones | 
| Cree un Dockerfile. | Para crear un archivo Dockerfile, 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/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Para enviar los cambios a tu GitHub repositorio, ejecuta el siguiente comando.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Desarrollador de aplicaciones | 

### Configurar la instancia de Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la infraestructura. | Lance la [ CloudFormation plantilla de AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) para crear la infraestructura, que incluye lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Para obtener más información sobre cómo acceder a una EC2 instancia privada de Amazon mediante el Administrador de sesiones sin necesidad de un host bastión, consulta la entrada del [blog Hacia un mundo sin bastiones](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Inicie sesión en la instancia de Amazon EC2 Linux. | Para conectarse a la instancia de Amazon EC2 Linux en la subred privada, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones | 
| Instale e inicie Docker. | Para instalar e iniciar Docker en la instancia de Amazon EC2 Linux, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Instale GitHub y clone el repositorio. | Para instalar Git en la instancia de Amazon EC2 Linux y clonar el repositorio desde GitHub ella, haz lo siguiente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Cree y ejecute el contenedor de Docker. | Para compilar la imagen de Docker y ejecutar el contenedor dentro de la instancia de Amazon EC2 Linux, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

### Pruebe la API web
<a name="test-the-web-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la API web con el comando curl. | Para probar la API web, ejecute el siguiente comando.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Verifique la respuesta de la API.Si usa Swagger de forma local, puede obtener los comandos curl de cada punto de conexión. | Desarrollador de aplicaciones | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine todos los recursos. | Eliminar la pila para eliminar todos los recursos. Esto asegura que no se le cobre por ningún servicio que no utilice. | Administrador de AWS, AWS DevOps | 

## Recursos relacionados
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Conectarse a la instancia de Linux desde Windows mediante PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Crear una API web con ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)

# Ejecutar cargas de trabajo con estado y almacenamiento de datos persistente mediante Amazon EFS en Amazon EKS con AWS Fargate
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate"></a>

*Ricardo Morais, Rodrigo Bersa y Lucio Pereira, Amazon Web Services*

## Resumen
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-summary"></a>

Este patrón proporciona orientación para habilitar Amazon Elastic File System (Amazon EFS) como dispositivo de almacenamiento para contenedores que usan Amazon Elastic Kubernetes Service (Amazon EKS), mediante AWS Fargate para aprovisionar sus recursos de computación.

La configuración descrita en este patrón sigue las prácticas recomendadas de seguridad y proporciona seguridad en reposo y seguridad en tránsito de forma predeterminada. Para cifrar su sistema de archivos Amazon EFS, utiliza una clave de AWS Key Management Service (AWS KMS), pero también puede especificar un alias de clave que gestione el proceso de creación de una clave de KMS.

Puede seguir los pasos de este patrón para crear un espacio de nombres y un perfil de Fargate para una aplicación proof-of-concept (PoC), instalar el controlador Amazon EFS Container Storage Interface (CSI) que se utiliza para integrar el clúster de Kubernetes con Amazon EFS, configurar la clase de almacenamiento e implementar la aplicación PoC. Estos pasos dan como resultado un sistema de archivos Amazon EFS que se comparte entre varias cargas de trabajo de Kubernetes y se ejecuta en Fargate. El patrón va acompañado de scripts que automatizan estos pasos.

Puede utilizar este patrón si quiere garantizar la persistencia de los datos en sus aplicaciones contenerizadas y evitar la pérdida de datos en las operaciones de escalado. Por ejemplo:
+ **DevOps herramientas**: un escenario habitual es desarrollar una herramienta de integración y entrega continuas. CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CD
+ **Servidores web**: un escenario habitual es utilizar Apache como servidor web HTTP. Puede utilizar Amazon EFS como un sistema de archivos compartidos para almacenar archivos estáticos que se comparten entre distintas instancias del servidor web. En este escenario de ejemplo, las modificaciones se aplican directamente al sistema de archivos en lugar de incluir los archivos estáticos en una imagen de Docker.

## Requisitos previos y limitaciones
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un clúster de Amazon EKS existente con la versión 1.17 o posterior de Kubernetes (probado hasta la versión 1.27)
+ Un sistema de archivos Amazon EFS existente para vincular un Kubernetes StorageClass y aprovisionar sistemas de archivos de forma dinámica
+ Permisos de administración de clústeres
+ El contexto está configurado para apuntar al clúster de Amazon EKS deseado

**Limitaciones**
+ Hay algunas limitaciones que se deben tener en cuenta al utilizar Amazon EKS con Fargate. Por ejemplo, no se admite el uso de algunas construcciones de Kubernetes, como los contenedores DaemonSets privilegiados. Para obtener más información sobre las limitaciones de Fargate, consulte [Consideraciones sobre AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html#fargate-considerations) en la documentación de Amazon EKS.
+ El código que se proporciona con este patrón es compatible con estaciones de trabajo que ejecutan Linux o macOS.

**Versiones de producto**
+ Interfaz de la línea de comandos de AWS (AWS CLI) versión 2 o posterior
+ La versión 1.0 o posterior del controlador de CSI de Amazon EFS (probado hasta la versión 2.4.8)
+ La versión 0.24.0 o posterior de eksctl (probado hasta la versión 0.158.0)
+ La versión 1.6 o posterior de jq
+ La versión 1.17 o posterior de kubectl (probado hasta la versión 1.27)
+ La versión 1.17 o posterior de Kubernetes (probado hasta la versión 1.27)

## Arquitectura
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-architecture"></a>

![\[Diagrama de arquitectura de la puesta en marcha de cargas de trabajo con estado y almacenamiento de datos persistente mediante Amazon EFS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2487e285-269b-415b-a270-877f973e3aaf/images/ec8de63c-3307-4010-9e03-2bd7b9881fff.png)


La arquitectura de destino consta de la siguiente infraestructura:
+ Una nube privada virtual (VPC)
+ Dos zonas de disponibilidad.
+ Una subred pública con una puerta de enlace de NAT que proporciona acceso a Internet.
+ Una subred privada con un clúster de Amazon EKS y destinos de montaje de Amazon EFS (también conocidos como *puntos de montaje*)
+ Amazon EFS para VPC

La siguiente es la infraestructura del entorno del clúster de Amazon EKS:
+ Perfiles de AWS Fargate que admitan los constructos de Kubernetes en el espacio de nombres.
+ Un espacio de nombres de Kubernetes con lo siguiente:
  + Dos pods de aplicaciones distribuidos en las zonas de disponibilidad.
  + Una solicitud de volumen persistente (PVC) vinculada a un volumen persistente (PV) en el clúster.
+ Un PV de todo el clúster que esté enlazado a la PVC del espacio de nombres y que apunte a los destinos de montaje de Amazon EFS en la subred privada, fuera del clúster.

## Tools (Herramientas)
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-tools"></a>

**Servicios de AWS**
+ [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 puede usar para interactuar con los servicios de AWS desde la línea de comandos.
+ [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. Siguiendo este patrón, proporciona un sistema de archivos simple, escalable, completamente administrado y compartido para su uso con Amazon EKS.
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) le permite poner en marcha Kubernetes en AWS sin necesidad de instalar ni operar sus propios clústeres.
+ [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) es un motor de computación sin servidor para Amazon EKS. Crea y administra recursos de computación para sus aplicaciones de Kubernetes.
+ [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.

**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.
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html): es una utilidad sencilla de línea de comandos para crear y administrar clústeres de Kubernetes en Amazon EKS.
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html): una interfaz de la línea de comandos que le ayuda en la ejecución de comandos en clústeres de Kubernetes.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.

**Código**

El código de este patrón se proporciona en la [configuración de GitHub persistencia con Amazon EFS en Amazon EKS mediante el repositorio de AWS Fargate](https://github.com/aws-samples/eks-efs-share-within-fargate). Los scripts están organizados por epic, en las carpetas desde `epic01` hasta `epic06`, según el orden de la sección [Epics](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics) de este patrón.

## Prácticas recomendadas
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-best-practices"></a>

La arquitectura de destino incluye los siguientes servicios y componentes, y sigue las prácticas recomendadas de [Marco de AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/):
+ Amazon EFS, que proporciona un sistema de archivos NFS elástico, simple, escalable y completamente administrado. Se utiliza como un sistema de archivos compartido entre todas las replicaciones de la aplicación PoC que se ejecutan en pods, que se distribuyen en las subredes privadas del clúster de Amazon EKS elegido.
+ Un destino de montaje de Amazon EFS para cada subred privada. Esto proporciona redundancia por zona de disponibilidad dentro de la nube privada virtual (VPC) del clúster.
+ Amazon EKS, que ejecuta las cargas de trabajo de Kubernetes. [Debe aprovisionar un clúster de Amazon EKS antes de utilizar este patrón, tal y como se describe en la sección Requisitos previos](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs).
+ AWS KMS, que proporciona cifrado en reposo para el contenido almacenado en el sistema de archivos Amazon EFS.
+ Fargate, que administra los recursos informáticos de los contenedores para que pueda centrarse en los requisitos empresariales y no en la carga de la infraestructura. El perfil de Fargate se crea para todas las subredes privadas. Esto proporciona redundancia por zona de disponibilidad dentro de la nube privada virtual (VPC) del clúster.
+ Los pods de Kubernetes permiten validar que distintas instancias de una aplicación puedan compartir, consumir y escribir contenido.

## Epics
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics"></a>

### Aprovisionamiento de un clúster de Amazon EKS (opcional)
<a name="provision-an-amazon-eks-cluster-optional"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un clúster de Amazon EKS. | Si ya dispone de un clúster, continúe con la siguiente epic. Cree un clúster de Amazon EKS en su cuenta de AWS. En el [GitHub directorio](https://github.com/aws-samples/eks-efs-share-within-fargate/tree/master/bootstrap), utilice uno de los patrones para implementar un clúster de Amazon EKS mediante Terraform o eksctl. Para obtener más información, consulte [Creación de un clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) en la documentación de Amazon EKS. En el patrón de Terraform, también hay ejemplos que muestran cómo: vincular los perfiles de Fargate a su clúster de Amazon EKS, crear un sistema de archivos de Amazon EFS e implementar el controlador de CSI de Amazon EFS en su clúster de Amazon EKS. | Administrador de AWS, administrador de Terraform o eksctl, administrador de Kubernetes | 
| Exporte variables de entorno. | Use el script env.sh. Esto proporciona la información necesaria en los siguientes pasos.<pre>source ./scripts/env.sh<br />Inform the AWS Account ID:<br /><13-digit-account-id><br />Inform your AWS Region:<br /><aws-Region-code><br />Inform your Amazon EKS Cluster Name:<br /><amazon-eks-cluster-name><br />Inform the Amazon EFS Creation Token:<br /><self-genereated-uuid></pre>Si aún no lo ha indicado, puede obtener toda la información solicitada anteriormente con los siguientes comandos de CLI.<pre># ACCOUNT ID<br />aws sts get-caller-identity --query "Account" --output text</pre><pre># REGION CODE<br />aws configure get region</pre><pre># CLUSTER EKS NAME<br />aws eks list-clusters --query "clusters" --output text</pre><pre># GENERATE EFS TOKEN<br />uuidgen</pre> | Administrador de sistemas de AWS | 

### Crear un espacio de nombres de Kubernetes y un perfil de Fargate vinculado
<a name="create-a-kubernetes-namespace-and-a-linked-fargate-profile"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un espacio de nombres de Kubernetes y perfil de Fargate para las cargas de trabajo de las aplicaciones. | Cree un espacio de nombres para recibir las cargas de trabajo de las aplicaciones que interactúan con Amazon EFS. Ejecute el script `create-k8s-ns-and-linked-fargate-profile.sh`. Puede elegir usar un nombre para el espacio de nombres personalizado o el espacio de nombres proporcionado por defecto `poc-efs-eks-fargate`.**Con un nombre para el espacio de nombres de la aplicación personalizado:**<pre>export $APP_NAMESPACE=<CUSTOM_NAME><br />./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />-c "$CLUSTER_NAME" -n "$APP_NAMESPACE"</pre>**Sin un nombre para el espacio de nombres de la aplicación personalizado:**<pre>./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />    -c "$CLUSTER_NAME"</pre>donde `$CLUSTER_NAME` es el nombre de su clúster de Amazon EKS. El parámetro `-n <NAMESPACE>` es opcional; si no se indica, se proporcionará un nombre para el espacio de nombres generado por defecto. | Usuario de Kubernetes con permisos concedidos | 

### Crear un sistema de archivos de Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Genere un token único. | Amazon EFS requiere la creación de un token para garantizar la operación de idempotencia (llamar a la operación con el mismo token de creación no tiene ningún efecto). Para cumplir con este requisito, debe generar un token único mediante una técnica disponible. Por ejemplo, puede generar un identificador único universal (UUID) para usarlo como token de creación. | Administrador de sistemas de AWS | 
| Crear un sistema de archivos de Amazon EFS. | Cree el sistema de archivos para recibir los archivos de datos que leen y escriben las cargas de trabajo de la aplicación. Puede crear un sistema de archivos cifrado o no cifrado. (Como práctica recomendada, el código de este patrón crea un sistema cifrado para habilitar el cifrado en reposo de forma predeterminada). Puede utilizar una clave de AWS KMS simétrica y única para cifrar su sistema de archivos. Si no se especifica, se utiliza una clave administrada de AWS.Utilice el script create-efs.sh para crear un sistema de archivos Amazon EFS cifrado o no cifrado, después de generar un token único para Amazon EFS.**Con el cifrado en reposo, sin clave KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>donde `$CLUSTER_NAME` es el nombre de su clúster de Amazon EKS y `$EFS_CREATION_TOKEN` es un token de creación único para el sistema de archivos.**Con el cifrado en reposo, con una clave KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>donde `$CLUSTER_NAME` es el nombre de su clúster de Amazon EKS, `$EFS_CREATION_TOKEN` es un token de creación único para el sistema de archivos y `$KMS_KEY_ALIAS` es el alias para la clave KMS.**Sin cifrado:**<pre>./scripts/epic02/create-efs.sh -d \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>donde `$CLUSTER_NAME` es el nombre de su clúster de Amazon EKS, `$EFS_CREATION_TOKEN` es un token de creación único para el sistema de archivos y `–d` deshabilita el cifrado en reposo. | Administrador de sistemas de AWS | 
| Crear un grupo de seguridad. | Cree un grupo de seguridad para permitir al clúster de Amazon EKS acceder al sistema de archivos de Amazon EFS. | Administrador de sistemas de AWS | 
| Actualizar la regla de entrada del grupo de seguridad. | Actualice las reglas de entrada del grupo de seguridad para permitir el tráfico entrante para las siguientes configuraciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.html) | Administrador de sistemas de AWS | 
| Agregar un destino de montaje para cada subred privada. | Para cada subred privada del clúster de Kubernetes, cree un destino de montaje para el sistema de archivos y el grupo de seguridad. | Administrador de sistemas de AWS | 

### Instalar los componentes de Amazon EFS en el clúster de Kubernetes
<a name="install-amazon-efs-components-into-the-kubernetes-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar el controlador de CSI de Amazon EFS. | Implemente el controlador de CSI de Amazon EFS en el clúster. El controlador aprovisiona el almacenamiento de acuerdo con las demandas de volumen persistentes creadas por las aplicaciones. Use el script `create-k8s-efs-csi-sc.sh` para implementar el controlador de CSI de Amazon EFS y la clase de almacenamiento en el clúster:<pre>./scripts/epic03/create-k8s-efs-csi-sc.sh</pre>Este script usa la utilidad `kubectl`, así que asegúrese de que el contexto se haya configurado y que apunte al clúster de Amazon EKS deseado. | Usuario de Kubernetes con permisos concedidos | 
| Implementar la clase de almacenamiento. | Implemente la clase de almacenamiento en el clúster del aprovisionador de Amazon EFS (efs.csi.aws.com). | Usuario de Kubernetes con permisos concedidos | 

### Instalear la aplicación PoC en el clúster de Kubernetes
<a name="install-the-poc-application-into-the-kubernetes-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar el volumen persistente. | Implemente el volumen persistente y vincúlelo a la clase de almacenamiento creada y al ID del sistema de archivos Amazon EFS. La aplicación utiliza el volumen persistente para leer y escribir contenido. Puede especificar cualquier tamaño para el volumen persistente en el campo de almacenamiento. Kubernetes requiere este campo, pero dado que Amazon EFS es un sistema de archivos elástico, no aplica ningún límite de capacidad del sistema de archivos. Puede implementar el volumen persistente con o sin cifrado. (El controlador CSI de Amazon EFS habilita el cifrado de forma predeterminada, como práctica recomendada). Use el script `deploy-poc-app.sh` para implementar el volumen persistente, la demanda de volumen persistente y las dos cargas de trabajo.**Con cifrado en tránsito:**<pre>./scripts/epic04/deploy-poc-app.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>donde `$EFS_CREATION_TOKEN` es el token de creación único para el sistema de archivos.**Sin cifrado en tránsito:**<pre>./scripts/epic04/deploy-poc-app.sh -d \<br />    -t "$EFS_CREATION_TOKEN"</pre>donde `$EFS_CREATION_TOKEN` es el token de creación único para el sistema de archivos y `–d` desactiva el cifrado en tránsito. | Usuario de Kubernetes con permisos concedidos | 
| Implementar la demanda de volumen persistente solicitada por la aplicación. | Implemente la demanda de volumen persistente solicitada por la aplicación y vincúlela a la clase de almacenamiento. Utilice el mismo modo de acceso que el volumen persistente que creó anteriormente. Puede especificar cualquier tamaño para la demanda de volumen persistente en el campo de almacenamiento. Kubernetes requiere este campo, pero dado que Amazon EFS es un sistema de archivos elástico, no aplica ningún límite de capacidad del sistema de archivos. | Usuario de Kubernetes con permisos concedidos | 
| Implementar la carga de trabajo 1. | Implemente el pod que representa la carga de trabajo 1 de la aplicación. Esta carga de trabajo escribe el contenido en el archivo `/data/out1.txt`. | Usuario de Kubernetes con permisos concedidos | 
| Implementar la carga de trabajo 2. | Implemente el pod que representa la carga de trabajo 2 de la aplicación. Esta carga de trabajo escribe el contenido en el archivo `/data/out2.txt`. | Usuario de Kubernetes con permisos concedidos | 

### Validar la persistencia, durabilidad y compartibilidad del sistema de archivos
<a name="validate-file-system-persistence-durability-and-shareability"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe el estado de `PersistentVolume`. | Ingrese el siguiente comando para verificar el estado de `PersistentVolume`.<pre>kubectl get pv</pre>Para obtener un ejemplo de salida, consulte la sección [Información adicional](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Usuario de Kubernetes con permisos concedidos | 
| Compruebe el estado de `PersistentVolumeClaim`. | Ingrese el siguiente comando para verificar el estado de `PersistentVolumeClaim`.<pre>kubectl -n poc-efs-eks-fargate get pvc</pre>Para obtener un ejemplo de salida, consulte la sección [Información adicional](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Usuario de Kubernetes con permisos concedidos | 
| Validar que la carga de trabajo 1 pueda escribir en el sistema de archivos. | Ingrese el siguiente comando para validar que la carga de trabajo 1 esté escribiendo en `/data/out1.txt`.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt</pre>Los resultados son similares a los siguientes:<pre>...<br />Thu Sep  3 15:25:07 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:12 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:17 UTC 2023 - PoC APP 1<br />...</pre> | Usuario de Kubernetes con permisos concedidos | 
| Validar que la carga de trabajo 2 pueda escribir en el sistema de archivos. | Ingrese el siguiente comando para validar que la carga de trabajo 2 esté escribiendo en `/data/out2.txt`.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt</pre>Los resultados son similares a los siguientes:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Usuario de Kubernetes con permisos concedidos | 
| Validar que la carga de trabajo 1 pueda leer el archivo escrito por la carga de trabajo 2. | Ingrese el siguiente comando para validar que la carga de trabajo 1 pueda leer el archivo `/data/out2.txt` escrito por la carga de trabajo 2.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt</pre>Los resultados son similares a los siguientes:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Usuario de Kubernetes con permisos concedidos | 
| Validar que la carga de trabajo 2 pueda leer el archivo escrito por la carga de trabajo 1. | Ingrese el siguiente comando para validar que la carga de trabajo 2 pueda leer el archivo `/data/out1.txt` escrito por la carga de trabajo 1.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt</pre>Los resultados son similares a los siguientes:<pre>...<br />Thu Sep  3 15:29:22 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:27 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:32 UTC 2023 - PoC APP 1<br />...</pre> | Usuario de Kubernetes con permisos concedidos | 
| Validar que los archivos se conserven después de eliminar los componentes de la aplicación. | A continuación, utilice un script para eliminar los componentes de la aplicación (volumen persistente, solicitud de volumen persistente y pods) y comprobar que los archivos `/data/out1.txt` y `/data/out2.txt` se retienen en el sistema de archivos. Ejecute el script `validate-efs-content.sh` mediante el comando siguiente.<pre>./scripts/epic05/validate-efs-content.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>donde `$EFS_CREATION_TOKEN` es el token de creación único para el sistema de archivos.Los resultados son similares a los siguientes:<pre>pod/poc-app-validation created<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Results from execution of 'find /data' on validation process pod:<br />/data<br />/data/out2.txt<br />/data/out1.txt</pre> | Usuario de Kubernetes con permisos concedidos, administrador de sistemas | 

### Operaciones de supervisión
<a name="monitor-operations"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Supervisar los registros de aplicación. | Como parte de una operación de dos días, envía los registros de la aplicación a Amazon CloudWatch para que los supervisen. | Administrador de sistemas de AWS, usuario de Kubernetes con permisos concedidos | 
| Supervisar contenedores de Amazon EKS y de Kubernetes con Container Insights. | Como parte de una operación de dos días, supervise los sistemas Amazon EKS y Kubernetes mediante Amazon Container Insights. CloudWatch Esta herramienta recopila, agrega y resume métricas de aplicaciones en contenedores en diferentes niveles y dimensiones. Para obtener más información, consulte la sección [Recursos relacionados](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrador de sistemas de AWS, usuario de Kubernetes con permisos concedidos | 
| Supervise Amazon EFS con CloudWatch. | Como parte de una operación de dos días, supervise los sistemas de archivos con Amazon CloudWatch, que recopila y procesa datos sin procesar de Amazon EFS para convertirlos en métricas legibles y prácticamente en tiempo real. Para obtener más información, consulte la sección [Recursos relacionados](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrador de sistemas de AWS | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpiar todos los recursos creados para el patrón. | Tras completar este patrón, limpie todos los recursos para evitar incurrir en cargos de AWS. Use el script `clean-up-resources.sh` para eliminar todos los recursos una vez que haya terminado de usar la aplicación PoC. Complete una de las siguientes opciones:**Con el cifrado en reposo, con una clave KMS:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>donde `$CLUSTER_NAME` es el nombre de su clúster de Amazon EKS, `$EFS_CREATION_TOKEN` es un token de creación único para el sistema de archivos y `$KMS_KEY_ALIAS` es el alias para la clave KMS.**Sin cifrado en reposo:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>donde `$CLUSTER_NAME` es el nombre de su clúster de Amazon EKS y `$EFS_CREATION_TOKEN` es un token de creación único para el sistema de archivos. | Usuario de Kubernetes con permisos concedidos, administrador de sistemas | 

## Recursos relacionados
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources"></a>

**Referencias**
+ [AWS Fargate for Amazon EKS now supports Amazon EFS](https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/) (anuncio)
+ [Cómo capturar los registros de las aplicaciones al usar Amazon EKS en AWS Fargate](https://aws.amazon.com/blogs/containers/how-to-capture-application-logs-when-using-amazon-eks-on-aws-fargate/) (entrada del blog)
+ [Uso de Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) ( CloudWatch documentación de Amazon)
+ [Configuración de Container Insights en Amazon EKS y Kubernetes (documentación de Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) CloudWatch 
+ Métricas de [Amazon EKS y Kubernetes Container Insights (documentación de Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html) CloudWatch 
+ [Supervisión de Amazon EFS con Amazon CloudWatch](https://docs.aws.amazon.com/efs/latest/ug/monitoring-cloudwatch.html) (documentación de Amazon EFS)

**GitHub tutoriales y ejemplos**
+ [Aprovisionamiento estático](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+ [Cifrado en tránsito](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/encryption_in_transit/README.md)
+ [Acceder al sistema de archivos desde varios pods](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/multiple_pods/README.md)
+ [Consumir Amazon EFS en StatefulSets](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/statefulset/README.md)
+ [Montaje de subrutas](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/volume_path/README.md)
+ [Uso de puntos de acceso de Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/access_points/README.md)
+ [Amazon EKS Blueprints for Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints/)

**Herramientas necesarias**
+ [Instalación de la versión 2 de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [Instalación de eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)
+ [Instalación de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Instalación de jq](https://stedolan.github.io/jq/download/)

## Información adicional
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional"></a>

A continuación, se muestra un ejemplo de la salida del comando `kubectl get pv`.

```
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   REASON   AGE
poc-app-pv   1Mi        RWX            Retain           Bound    poc-efs-eks-fargate/poc-app-pvc   efs-sc                  3m56s
```

A continuación, se muestra un ejemplo de la salida del comando `kubectl -n poc-efs-eks-fargate get pvc`.

```
NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
poc-app-pvc   Bound    poc-app-pv   1Mi        RWX            efs-sc         4m34s
```

# Configuración del escalado automático basado en eventos en Amazon EKS mediante Amazon EKS Pod Identity y KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi y Mahendra Revanasiddappa, Amazon Web Services*

## Resumen
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Las plataformas de orquestación, como [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html), han simplificado la administración del ciclo de vida de las aplicaciones basadas en contenedores. Esto ayuda a las organizaciones a centrarse en crear, proteger, operar y mantener aplicaciones basadas en contenedores. A medida que las implementaciones basadas en eventos se vuelven más comunes, las organizaciones escalan con mayor frecuencia las implementaciones de Kubernetes en función de diversos orígenes de eventos. Este método, combinado con el escalado automático, puede generar importantes ahorros de costos al proporcionar recursos de cómputo bajo demanda y un escalado eficiente que se adapta a la lógica de la aplicación.

[KEDA](https://keda.sh/) es un escalador automático basado en eventos que se basa en Kubernetes. KEDA lo ayuda a escalar cualquier contenedor de Kubernetes en función de la cantidad de eventos que deben procesarse. Es ligero y se integra con cualquier clúster de Kubernetes. También funciona con componentes estándar de Kubernetes, como el [escalado automático de pods horizontales (HPA)](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/). KEDA también ofrece una [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication)función que le ayuda a delegar la autenticación. Permite describir los parámetros de autenticación que están separados del contenedor de despliegue ScaledObject y del contenedor de despliegue.

AWS proporciona funciones AWS Identity and Access Management (IAM) que admiten diversas opciones de implementación de Kubernetes, incluidas Amazon EKS, Amazon EKS Anywhere Red Hat OpenShift Service en AWS (ROSA) y clústeres de Kubernetes autogestionados en Amazon Elastic Compute Cloud (Amazon). EC2 Estas funciones utilizan estructuras de IAM, como los proveedores de identidad de OpenID Connect (OIDC) y las políticas de confianza de IAM, para funcionar en diferentes entornos sin depender directamente de los servicios de Amazon EKS o. APIs Para obtener más información, consulte [Roles de IAM para cuentas de servicio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) en la documentación de Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) simplifica el proceso para que las cuentas de servicio de Kubernetes asuman roles de IAM sin necesidad de proveedores de OIDC. Ofrece la posibilidad de administrar las credenciales de sus aplicaciones. En lugar de crear y distribuir tus AWS credenciales a los contenedores o usar el rol de la EC2 instancia de Amazon, asocias un rol de IAM a una cuenta de servicio de Kubernetes y configuras tus Pods para que usen la cuenta de servicio. Esto lo ayuda a utilizar un rol de IAM en varios clústeres y simplifica la administración de políticas al permitir la reutilización de las políticas de permisos en todos los roles de IAM.

Al implementar KEDA con Amazon EKS Pod Identity, las empresas pueden lograr un escalado automático eficiente basado en eventos y una administración de credenciales simplificada. Las aplicaciones se escalan en función de la demanda, lo que optimiza la utilización de los recursos y reduce los costos.

Este patrón lo ayuda a integrar Amazon EKS Pod Identity con KEDA. Muestra cómo puede utilizar la cuenta de servicio `keda-operator` y delegar la autenticación con `TriggerAuthentication`. También describe cómo configurar una relación de confianza entre un rol de IAM para el operador de KEDA y un rol de IAM para la aplicación. Esta relación de confianza permite a KEDA supervisar los mensajes de las colas de eventos y ajustar la escala de los objetos de Kubernetes de destino.

## Requisitos previos y limitaciones
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Requisitos previos **
+ 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 3.11.5 o posterior de Python [instalada](https://www.python.org/downloads/)
+ AWS SDK para Python (Boto3) [versión 1.34.135 o posterior, instalada](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ La versión 3.12.3 o posterior de Helm [instalada](https://helm.sh/docs/intro/install/)
+ La versión 1.25.1 o posterior de kubectl [instalada](https://kubernetes.io/docs/tasks/tools/)
+ La versión 26.1.1 o posterior de Docker Engine [instalada](https://docs.docker.com/engine/install/)
+ Un clúster de Amazon EKS (versión 1.24 o posterior) [creado](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Se [cumplen](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) los requisitos previos para crear el agente de Amazon EKS Pod Identity

**Limitaciones**
+ Es necesario establecer una relación de confianza entre los roles `keda-operator` y `keda-identity`. Las instrucciones se proporcionan en la sección [Epics](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) de este patrón.

## Arquitectura
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

En este patrón, se crean los siguientes recursos: AWS 
+ **Repositorio de Amazon Elastic Container Registry (Amazon ECR)**: en este patrón, este repositorio se denomina `keda-pod-identity-registry`. Este repositorio privado se usa para almacenar imágenes de Docker de la aplicación de muestra.
+ **Cola de Amazon Simple Queue Service (Amazon SQS)**: en este patrón, esta cola se denomina `event-messages-queue`. La cola actúa como un búfer de mensajes que recopila y almacena los mensajes entrantes. KEDA supervisa las métricas de la cola, como el recuento de mensajes o la longitud de la cola, y escala automáticamente la aplicación en función de estas métricas.
+ **Rol de IAM para la aplicación**: en este patrón, este rol se denomina `keda-identity`. El rol `keda-operator` asume este rol. Este rol permite tener acceso a la cola de Amazon SQS.
+ **Rol de IAM para el operador KEDA**: en este patrón, este rol se denomina `keda-operator`. El operador KEDA usa esta función para realizar las llamadas a la AWS API necesarias. Este rol concede permisos para asumir el rol `keda-identity`. Debido a la relación de confianza entre los roles `keda-operator` y `keda-identity`, el rol `keda-operator` tiene permisos de Amazon SQS.

A través de los recursos personalizados `TriggerAuthentication` y `ScaledObject` de Kubernetes, el operador usa el rol `keda-identity` para conectarse con una cola de Amazon SQS. En función del tamaño de la cola, KEDA escala automáticamente la implementación de la aplicación. Añade 1 pod por cada 5 mensajes no leídos de la cola. En la configuración predeterminada, si no hay mensajes sin leer en la cola de Amazon SQS, la aplicación se reduce verticalmente a 0 pods. El operador de KEDA supervisa la cola en un intervalo especificado.

 

La siguiente imagen muestra cómo se utiliza Amazon EKS Pod Identity para proporcionar al rol `keda-operator` un acceso seguro a la cola de Amazon SQS.

![\[Uso de KEDA y Amazon EKS Pod Identity para escalar automáticamente una aplicación basada en Kubernetes.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


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

1. El agente Amazon EKS Pod Identity se instala en el clúster de Amazon EKS.

1. El operador de KEDA se implementa en el espacio de nombres de KEDA del clúster de Amazon EKS.

1. Los roles `keda-operator` y de `keda-identity` IAM se crean en el destino. Cuenta de AWS

1. Se establece una relación de confianza entre los roles de IAM.

1. La aplicación se implementa en el espacio de nombres `security`.

1. El operador de KEDA sondea los mensajes de una cola de Amazon SQS.

1. KEDA inicia HPA, que escala automáticamente la aplicación en función del tamaño de la cola.

## Tools (Herramientas)
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

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

**Otras herramientas**
+ [KEDA](https://keda.sh/) es un escalador automático basado en eventos que se basa en Kubernetes.

**Repositorio de código**

El código de este patrón está disponible en el [escalado GitHub automático basado en eventos mediante EKS Pod Identity y el repositorio KEDA](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main).

## Prácticas recomendadas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Recomendamos que siga las siguientes prácticas recomendadas:
+ [Prácticas recomendadas de Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Security best practices in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (Prácticas recomendadas de seguridad en IAM)
+ [Prácticas recomendadas de Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Epics
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Cree recursos AWS
<a name="create-aws-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el rol de IAM del operador de KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrador de AWS | 
| Cree un rol de IAM para la aplicación de muestra. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrador de AWS | 
| Crear una cola de Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS general | 
| Cree un repositorio de Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS general | 

### Configuración de un clúster de Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente el agente Amazon EKS Pod Identity. | Para el clúster de Amazon EKS, configure el agente Amazon EKS Pod Identity. Siga las instrucciones de [Configuración del agente Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) en la documentación de Amazon EKS. | AWS DevOps | 
| Implemente KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Asigne el rol de IAM a la cuenta de servicio de Kubernetes. | Siga las instrucciones de [Asignación de un rol de IAM a una cuenta de servicio de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) en la documentación de Amazon EKS. Use los siguientes valores:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Creación de un espacio de nombres de . | Introduzca el siguiente comando para crear un espacio de nombres `security` en el clúster de Amazon EKS de destino:<pre>kubectl create ns security</pre> | DevOps ingeniero | 

### Implemente la aplicación de muestra.
<a name="deploy-the-sample-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone los archivos de la aplicación. | Introduzca el siguiente comando para clonar el [autoescalado basado en eventos mediante EKS Pod Identity y el repositorio KEDA desde](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main): GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps ingeniero | 
| Cree la imagen de Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Envíe la imagen de Docker a Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Para encontrar los comandos de inserción, vaya a la página del repositorio de Amazon ECR y, a continuación, seleccione **Ver comandos de inserción**. | DevOps ingeniero | 
| Implemente la aplicación de muestra. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Asigne el rol de IAM a la cuenta de servicio de la aplicación. | Realice una de las siguientes acciones para asociar el rol de IAM `keda-identity` a la cuenta de servicio de la aplicación de ejemplo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Implemente `ScaledObject` y `TriggerAuthentication`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 

### Prueba de escalado automático
<a name="test-auto-scaling"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envíe mensajes a la cola de Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 
| Supervise los pods de aplicaciones. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El operador de KEDA no puede escalar la aplicación. | Introduzca el siguiente comando para comprobar los registros del rol de IAM `keda-operator`:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> Si hay un código de respuesta`HTTP 403`, la aplicación y el escalador de KEDA no tienen permisos suficientes para acceder a la cola de Amazon SQS. Realice los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Si se produce un error `Assume-Role`, el [rol de IAM de un nodo de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) no puede asumir el rol de IAM que está definido para `TriggerAuthentication`. Realice los siguientes pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Recursos relacionados
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configuración del agente Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (documentación de Amazon EKS)
+ [Implementación de KEDA](https://keda.sh/docs/2.14/deploy/) (documentación de KEDA)
+ [ScaledObject especificación](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (documentación de KEDA)
+ [Autenticación con TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentación de KEDA)

# Simplificación de las implementaciones de PostgreSQL en Amazon EKS mediante PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Resumen
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Este patrón integra el operador de Postgres de Crunchy Data (PGO) con Amazon Elastic Kubernetes Service (Amazon EKS) para agilizar las implementaciones de PostgreSQL en entornos nativos en la nube. PGO proporciona automatización y escalabilidad para administrar bases de datos de PostgreSQL en Kubernetes. Al combinar PGO con Amazon EKS, se forma una plataforma sólida para implementar, administrar y escalar bases de datos de PostgreSQL de manera eficiente.

Esta integración proporciona las ventajas clave siguientes:
+ Implementación automatizada: simplifica la implementación y la administración de clústeres de PostgreSQL.
+ Definiciones de recursos personalizadas (CRDs):**** utiliza primitivas de Kubernetes para la administración de PostgreSQL.
+ Alta disponibilidad: admite la conmutación por error automática y la replicación sincrónica.
+ Copias de seguridad y restauraciones automatizadas:** **simplifica los procesos para hacer copias de seguridad y restauraciones.
+ Escalado horizontal:** **permite el escalado dinámico de los clústeres de PostgreSQL.
+ Actualizaciones de versión: facilita las actualizaciones sucesivas con un tiempo de inactividad mínimo.
+ Seguridad: aplica el cifrado, los controles de acceso y los mecanismos de autenticación.

## Requisitos previos y limitaciones
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ [Interfaz de la línea de comandos de AWS (AWS CLI) versión 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalada y configurada en Linux, macOS o Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), para conectar AWS los recursos desde la línea de comandos.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation) instalado y configurado en Linux, macOS o Windows.
+ `kubectl`, instalado y configurado para acceder a los recursos de su clúster de Amazon EKS. Para más información, consulte [Configuración de kubectl y eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) en la documentación de Amazon EKS. 
+ Su terminal de equipo está configurado para acceder al clúster de Amazon EKS. Para obtener más información, consulte [Configuración del equipo para que se comunique con el clúster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) en la documentación de Amazon EKS.

**Versiones de producto**
+ Kubernetes, versiones 1.21 a 1.24 o posteriores (consulte la [documentación de PGO](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)).
+ PostgreSQL, versión 10 y posterior. Este patrón utiliza PostgreSQL, versión 16.

**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 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="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Pila de tecnología de destino**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Arquitectura de destino**

![\[Arquitectura para usar PGO con tres zonas de disponibilidad y dos réplicas PgBouncer, y un operador PGO.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Este patrón crea una arquitectura que contiene un clúster de Amazon EKS con tres nodos. Cada nodo se ejecuta en un conjunto de instancias de EC2 en el backend. Esta configuración de PostgreSQL sigue una arquitectura de réplica principal, que resulta especialmente eficaz en casos de uso con lectura intensiva. La arquitectura incluye los siguientes componentes:
+ El **contenedor de base de datos principal (pg-primary)** aloja la instancia principal de PostgreSQL a la que se dirigen todas las operaciones de escritura.
+ Los **contenedores de réplicas secundarios (pg-replica)** alojan las instancias de PostgreSQL que replican los datos de la base de datos principal y gestionan las operaciones de lectura.
+ **PgBouncer**es un agrupador de conexiones ligero para bases de datos PostgreSQL que se incluye en PGO. Se encuentra entre el cliente y el servidor PostgreSQL y actúa como intermediario para las conexiones de las bases de datos.
+ **PGO** automatiza la implementación y la administración de los clústeres de PostgreSQL en este entorno de Kubernetes.
+ **Patroni** es una herramienta de código abierto que administra y automatiza las configuraciones de alta disponibilidad para PostgreSQL. Se incluye con PGO. Cuando utiliza Patroni con PGO en Kubernetes, desempeña un papel crucial a la hora de garantizar la resiliencia y la tolerancia a errores de un clúster de PostgreSQL. Para más información, consulte la [documentación de Patroni](https://patroni.readthedocs.io/en/latest/).

En el flujo de trabajo se incluyen estos pasos:
+ **Implemente el operador de PGO**. El operador de PGO se implementa en el clúster de Kubernetes que se ejecuta en Amazon EKS. Esto se puede hacer mediante manifiestos de Kubernetes o gráficos de Helm. Este patrón utiliza los manifiestos de Kubernetes.
+ **Defina las instancias de PostgreSQL**. Cuando el operador está en ejecución, se crean recursos personalizados (CRs) para especificar el estado deseado de las instancias de PostgreSQL. Esto incluye configuraciones como el almacenamiento, la replicación y la alta disponibilidad.
+ **Administración de operadores**. Se interactúa con el operador a través de objetos de la API de Kubernetes, por ejemplo, CRs para crear, actualizar o eliminar instancias de PostgreSQL.
+ **Supervisión y mantenimiento**. Puede supervisar el estado y el rendimiento de las instancias de PostgreSQL que se ejecutan en Amazon EKS. Los operadores suelen proporcionar métricas y registros con fines de supervisión. Puede hacer tareas de mantenimiento de rutina, como actualizaciones y aplicación de revisiones, según sea necesario. Para más información, consulte [Supervisión del rendimiento de un clúster y visualización de registros](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) en la documentación de Amazon EKS.
+ **Escalado y copia de seguridad**: puede utilizar las características proporcionadas por el operador para escalar las instancias de PostgreSQL y administrar las copias de seguridad.

Este patrón no cubre las operaciones de supervisión, mantenimiento y copia de seguridad.

**Automatización y escala**
+ Puede utilizarlos para automatizar la creación de CloudFormation la infraestructura. Para más información, consulte [Creación de recursos de Amazon EKS con CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) en la documentación de Amazon EKS.
+ Puede usar GitVersion los números de compilación de Jenkins para automatizar la implementación de instancias de bases de datos.

## Tools (Herramientas)
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Servicios de AWS**
+ [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 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 mediante los comandos de su consola de línea de comandos. Servicios de AWS 

**Otras herramientas**
+ [eksctl](https://eksctl.io/) es una herramienta sencilla de línea de comandos para crear clústeres de Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): es una utilidad de línea de comandos para la ejecución de comandos en clústeres de Kubernetes.
+ [PGO](https://github.com/CrunchyData/postgres-operator) automatiza y escala la administración de las bases de datos de PostgreSQL en Kubernetes.

## Prácticas recomendadas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Siga estas prácticas recomendadas para garantizar una implementación eficiente y sin problemas:
+ **Proteja el clúster de EKS**. Implemente las mejores prácticas de seguridad para su clúster de EKS, como el uso de funciones AWS Identity and Access Management (IAM) para las cuentas de servicio (IRSA), las políticas de red y los grupos de seguridad de VPC. Limite el acceso al servidor de API del clúster de EKS y cifre las comunicaciones entre los nodos y el servidor de API mediante TLS.
+ **Asegúrese de la compatibilidad de versiones** entre PGO y Kubernetes que se ejecutan en Amazon EKS. Algunas características de PGO pueden requerir versiones específicas de Kubernetes o introducir limitaciones de compatibilidad. Para más información, consulte [Components and Compatibility](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) en la documentación de PGO.
+ **Planifique la asignación de recursos** para la implementación de PGO, lo que incluye la CPU, la memoria y el almacenamiento. Tenga en cuenta los requisitos de recursos de las instancias de PGO y PostgreSQL que administra. Supervise el uso de los recursos y escálelos según sea necesario.
+ **Diseñe para una alta disponibilidad**. Diseñe la implementación de PGO para una alta disponibilidad a fin de minimizar el tiempo de inactividad y garantizar la fiabilidad. Implemente varias réplicas de PGO en varias zonas de disponibilidad para la tolerancia a errores.
+ **Implemente procedimientos de copia de seguridad y restauración** para las bases de datos de PostgreSQL que administra PGO. Utilice las características que ofrece PGO o las soluciones de copia de seguridad de terceros que sean compatibles con Kubernetes y Amazon EKS.
+ **Configure la supervisión y el registro** de la implementación de PGO para hacer un seguimiento del rendimiento, del estado y de los eventos. Utilice herramientas como Prometheus para supervisar las métricas y Grafana para la visualización. Configure el registro para capturar los registros de PGO para la solución de problemas y la auditoría.
+ **Configure las redes** de manera correcta para permitir las comunicaciones entre instancias de PGO, PostgreSQL y otros servicios del clúster de Kubernetes. Utilice las características de red de Amazon VPC y los complementos de red de Kubernetes, como Calico o [CNI de Amazon VPC](https://github.com/aws/amazon-vpc-cni-k8s), para aplicar las políticas de red y aislar el tráfico.
+ **Elija las opciones de almacenamiento adecuadas** para las bases de datos de PostgreSQL. Tenga en cuenta factores como el rendimiento, la durabilidad y la escalabilidad. Utilice los volúmenes de Amazon Elastic Block Store (Amazon EBS) AWS o los servicios de almacenamiento gestionado para el almacenamiento persistente. Para más información, consulte el tema sobre [almacenamiento de volúmenes de Kubernetes con Amazon EBS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) en la documentación de Amazon EKS.
+ **Utilice herramientas de infraestructura como código (IaC)** CloudFormation para automatizar la implementación y la configuración de PGO en Amazon EKS. Defina los componentes de la infraestructura, tales como el clúster de EKS, las redes y los recursos de PGO, como código para garantizar la coherencia, la repetibilidad y el control de versiones.

## Epics
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Creación de un rol de IAM
<a name="create-an-iam-role"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un rol de IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador de AWS | 

### Crear un clúster de Amazon EKS
<a name="create-an-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un clúster de Amazon EKS. | Si ya implementó un clúster, omita este paso. De lo contrario, implemente un clúster de Amazon EKS en su clúster actual Cuenta de AWS mediante `eksctl` Terraform o CloudFormation. Este patrón utiliza `eksctl` para la implementación de clústeres.Este patrón utiliza Amazon EC2 como grupo de nodos para Amazon EKS. Si quiere usarlo AWS Fargate, consulte la `managedNodeGroups` configuración en la documentación de [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador de AWS, administrador de Terraform o eksctl, administrador de Kubernetes | 
| Valide el estado del clúster. | Ejecute el comando siguiente para ver el estado actual de los nodos del clúster:<pre>kubectl get nodes</pre>Si encuentra errores, consulte la [sección de resolución de problemas](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) de la documentación de Amazon EKS. | Administrador de AWS, administrador de Terraform o eksctl, administrador de Kubernetes | 

### Creación de un proveedor de identidad de OIDC
<a name="create-an-oidc-identity-provider"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Habilite el proveedor de OIDC de IAM. | Como requisito previo para el controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon EBS, debe tener un proveedor de IAM OpenID Connect (OIDC) existente para el clúster.Habilite el proveedor de IAM OIDC mediante el comando siguiente:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre>Para más información acerca de este paso, consulte la [documentación de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Administrador de AWS | 
| Cree un rol de IAM para el controlador de CSI de Amazon EBS | Utilice el comando siguiente `eksctl` para crear el rol de IAM para el controlador de la CSI:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre>Si utiliza controladores de Amazon EBS cifrados, debe configurar la política con mayor detalle. Para obtener instrucciones, consulte la [documentación de controladores de la SCI de Amazon EBS](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Administrador de AWS | 
| Agregue el controlador de CSI de Amazon EBS. | Utilice el comando siguiente `eksctl` para agregar el controlador de CSI de Amazon EBS:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Administrador de AWS | 

### Instalación de PGO
<a name="install-pgo"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de PGO. | Clona el GitHub repositorio para PGO:<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Proporcione los detalles del rol para crear la cuenta de servicio. | Para conceder al clúster de Amazon EKS acceso a los AWS recursos necesarios, especifique el nombre del recurso de Amazon (ARN) del rol OIDC que creó anteriormente en el `service_account.yaml` archivo que se encuentra en. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Administrador de AWS, administrador de Kubernetes | 
| Cree el espacio de nombres y los requisitos previos de PGO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador de Kubernetes | 
| Verifique la creación de los pods. | Compruebe que se hayan creado el espacio de nombres y la configuración predeterminada:<pre>kubectl get pods -n postgres-operator</pre> | Administrador de AWS, administrador de Kubernetes | 
| Verificar PVCs. | Usa el siguiente comando para verificar las notificaciones de volumen persistentes (PVCs):<pre>kubectl describe pvc -n postgres-operator</pre> | Administrador de AWS, administrador de Kubernetes | 

### Creación e implementación de un operador
<a name="create-and-deploy-an-operator"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un operador. | Revise el contenido del archivo ubicado en `/kustomize/postgres/postgres.yaml` para que coincida con lo siguiente:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre>Estas actualizaciones hacen lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador de AWS, DBA, administrador de Kubernetes | 
| Implemente el operador. | Implemente el operador de PGO para permitir la administración y el uso simplificados de las bases de datos de PostgreSQL en entornos de Kubernetes:<pre>kubectl apply -k kustomize/postgres</pre> | Administrador de AWS, DBA, administrador de Kubernetes | 
| Comprobar la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)En el resultado del comando, anote la réplica principal (`primary_pod_name`) y lea la réplica (`read_pod_name`). Los utilizará en los pasos próximos. | Administrador de AWS, DBA, administrador de Kubernetes | 

### Verificación de replicación de flujos
<a name="verify-streaming-replication"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Escriba los datos en la réplica principal. | Utilice los comandos siguientes para conectarse a la réplica principal de PostgreSQL y escribir datos en la base de datos:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | Administrador de AWS, administrador de Kubernetes | 
| Confirme que la réplica de lectura tiene los mismos datos. | Conéctese a la réplica de lectura de PostgreSQL y compruebe si la replicación de streaming funciona correctamente:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre>La réplica de lectura debe tener la tabla que creó en la réplica principal en el paso anterior. | Administrador de AWS, administrador de Kubernetes | 

## Resolución de problemas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El pod no se inicia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Las réplicas están muy atrasadas con respecto a la base de datos principal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| No tiene visibilidad del rendimiento y el estado del clúster de PostgreSQL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| La replicación no funciona. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Recursos relacionados
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) (documento técnico *Overview of Deployment Options on AWS*)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html) (documento técnico *Overview of Deployment Options on AWS*)
+ [Introducción a Amazon EKS: eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (*Guía de usuario de Amazon EKS*)
+ [Configuración de kubectl y eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (*Guía de usuario de Amazon EKS*)
+ [Creación de un rol para una federación de OpenID Connect](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (*Guía de usuario de IAM*)
+ [Configuración de los ajustes de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*Guía AWS CLI del usuario*)
+ [Documentación de Crunchy Postgres for Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy Postgres for Kubernetes 5,0](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) (video)

# Simplificación de la autenticación de aplicaciones con TLS mutuo en Amazon ECS mediante el equilibrador de carga de aplicación
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye y Shamanth Devagari, Amazon Web Services*

## Resumen
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

Este patrón le permite simplificar la autenticación de sus aplicaciones y a reducir las cargas de seguridad con el TLS mutuo en Amazon Elastic Container Service (Amazon ECS) mediante el [equilibrador de carga de aplicación (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html). Con ALB, puede autenticar los certificados de cliente X.509 desde. AWS Private Certificate Authority Esta eficiente combinación ayuda a lograr una comunicación segura entre sus servicios, lo que reduce la necesidad de mecanismos de autenticación complejos en las aplicaciones. Además, el patrón utiliza Amazon Elastic Container Registry (Amazon ECR) para almacenar imágenes de contenedor.

En el ejemplo de este patrón se utilizan imágenes de Docker de una galería pública para crear las cargas de trabajo de muestra desde un inicio. Posteriormente, se crean nuevas imágenes de Docker para almacenarlas en Amazon ECR. Para la fuente, considere un sistema basado en Git como GitHub GitLab, o Bitbucket, o utilice Amazon Simple Storage Service Amazon S3 (Amazon S3). Para crear las imágenes de Docker, considere utilizarlas AWS CodeBuild para las imágenes siguientes.

## Requisitos previos y limitaciones
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS con acceso a las pilas de despliegue AWS CloudFormation . Asegúrese de tener [permisos de usuario o rol AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) (de IAM) para realizar la implementación. CloudFormation
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). [Configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) sus AWS credenciales en su máquina local o en su entorno utilizando AWS CLI o configurando las variables de entorno del `~/.aws/credentials` archivo.
+ OpenSSL [instalado](https://www.openssl.org/).
+ Docker [instalado](https://www.docker.com/get-started/).
+ Familiaridad con lo Servicios de AWS descrito en [Herramientas](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools).
+ Conocimientos de Docker y NGINX.

**Limitaciones**
+ La TLS mutua para el equilibrador de carga de aplicación solo admite certificados de cliente X.509v3. No se admiten los certificados de cliente X.509v1.
+ La CloudFormation plantilla que se proporciona en el repositorio de código de este patrón no incluye el aprovisionamiento de un CodeBuild proyecto como parte de la pila.
+ 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.

**Versiones de producto**
+ La versión 27.3.1 o posterior de Docker
+ AWS CLI versión 2.14.5 o posterior

## Arquitectura
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

En el diagrama siguiente se muestran los componentes de la arquitectura de este patrón.

![\[Flujo de trabajo para autenticarse con la TLS mutua mediante el equilibrador de carga de aplicación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


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

1. Cree un repositorio de Git y confirme el código de la aplicación en el repositorio.

1. Cree una autoridad de certificación (CA) privada en. AWS Private CA

1. Cree un CodeBuild proyecto. CodeBuildproject Se activa mediante cambios de confirmación y crea la imagen de Docker y publica la imagen creada en Amazon ECR.

1. Copie la cadena del certificado y el cuerpo del certificado de la autoridad de certificación y cargue la agrupación de certificados en Amazon S3.

1. Cree un almacén de confianza con la agrupación de CA que cargó en Amazon S3. Asocie el almacén de confianza a los oyentes de la TLS mutua del equilibrador de carga de aplicación (ALB).

1. Utilice la CA privada para emitir certificados de cliente para las cargas de trabajo del contenedor. Cree también un certificado TLS privado utilizando. AWS Private CA

1. Importe el certificado TLS privado a AWS Certificate Manager (ACM) y utilícelo con el ALB.

1. La carga de trabajo del contenedor en `ServiceTwo` utiliza el certificado de cliente emitido para autenticarse con el equilibrador de carga de aplicación cuando se comunica con la carga de trabajo del contenedor en `ServiceOne`.

1. La carga de trabajo del contenedor en `ServiceOne` utiliza el certificado de cliente emitido para autenticarse con el equilibrador de carga de aplicación cuando se comunica con la carga de trabajo del contenedor en `ServiceTwo`.

**Automatización y escala**

Este patrón se puede automatizar por completo mediante el uso CloudFormation de operaciones de API desde un SDK para aprovisionar los recursos. AWS Cloud Development Kit (AWS CDK) AWS 

Se puede utilizar AWS CodePipeline para implementar una canalización de integración e implementación continuas (CI/CD) CodeBuild para automatizar el proceso de creación de imágenes de contenedores y la implementación de nuevas versiones en los servicios de clúster de Amazon ECS.

## Tools (Herramientas)
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**Servicios de AWS **
+ [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 AWS sitios web y aplicaciones.
+ [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.
+ [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 altamente escalable y rápido que permite ejecutar, detener y administrar contenedores en un clúster. Puede ejecutar sus tareas y servicios en una infraestructura sin servidores gestionada por AWS Fargate. Como alternativa, para tener 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.
+ [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) le permite interactuar de manera directa con los contenedores sin necesidad de interactuar primero con el sistema operativo del contenedor host, abrir puertos entrantes o administrar claves SSH. Puedes usar ECS Exec para ejecutar comandos u obtener un shell para un contenedor que se ejecute en una EC2 instancia de Amazon o en AWS Fargateél.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuye el tráfico entrante de aplicaciones o redes entre varios destinos. Por ejemplo, puede distribuir el tráfico entre EC2 instancias, contenedores y direcciones IP de Amazon, en una o más zonas de disponibilidad. ELB supervisa el estado de los destinos registrados y enruta el tráfico solo a los destinos con un estado correcto. ELB escala el equilibrador de carga a medida que el tráfico entrante va cambiando con el tiempo. Puede escalarse automáticamente para adaptarse a la mayoría de las cargas de trabajo.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)le ayuda a ejecutar contenedores sin necesidad de gestionar servidores o EC2 instancias de Amazon. Fargate es compatible tanto con Amazon ECS como con Amazon Elastic Kubernetes Service (Amazon EKS). Puede ejecutar las tareas y servicios de Amazon ECS con el tipo de lanzamiento de Fargate o con un proveedor de capacidad de Fargate. Todo lo que tiene que hacer es empaquetar su aplicación en contenedores, especificar los requisitos de CPU y de memoria, definir las políticas de IAM y de redes, y lanzar la aplicación. Cada tarea de Fargate tiene su propio límite de aislamiento y no comparte el kernel subyacente, los recursos de CPU, los recursos de memoria ni la interfaz de red elástica con otra tarea.
+ [AWS Private Certificate Authority](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)permite la creación de jerarquías de autoridades de certificación (CA) privadas, incluidas las principales y las subordinadas CAs, sin los costes de inversión y mantenimiento que implica operar una CA local.

**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[GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html)](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), y [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) son algunos de los sistemas de control de código fuente basados en Git más utilizados para realizar un seguimiento de los cambios en el código fuente.
+ [NGINX Open Source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) es un equilibrador de carga, caché de contenido y servidor web de código abierto. Este patrón lo utiliza como servidor web.
+ [OpenSSL](https://www.openssl.org/) es una biblioteca de código abierto que proporciona servicios que utilizan las implementaciones OpenSSL de TLS y CMS. 

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS).

## Prácticas recomendadas
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Utilice Amazon ECS Exec para ejecutar comandos en un contenedor u obtener un intérprete de comandos en un contenedor que se ejecute en Fargate. Puede también utilizar ECS Exec como ayuda para recopilar información de diagnóstico para la depuración.
+ Utilice grupos de seguridad y listas de control de acceso a la red () para controlar el tráfico entrante y saliente entre los servicios. ACLs Las tareas de Fargate reciben una dirección IP de la subred configurada en la nube privada virtual (VPC).

## Epics
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Creación de repositorio
<a name="create-the-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue el código fuente. | Para descargar el código fuente de este patrón, bifurque o clone el repositorio GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps ingeniero | 
| Cree un repositorio de Git. | Para crear un repositorio de Git que contenga el Dockerfile y los archivos `buildspec.yaml`, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps ingeniero | 

### Creación de una CA y generación de certificados
<a name="create-ca-and-generate-certificates"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una CA privada en AWS Private CA. | Para crear una autoridad de certificación (CA) privada, ejecute los siguientes comandos en su terminal. Sustituya los valores de las variables de ejemplo por sus propios valores. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Para obtener más información, consulte [Crear una CA privada AWS Private CA en](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) la AWS documentación. | DevOps ingeniero, AWS DevOps | 
| Cree e instale su certificado CA privado. | Para crear e instalar un certificado para su CA raíz privada, ejecute los comandos siguientes en su terminal:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps ingeniero | 
| Solicite un certificado administrado. | Para solicitar un certificado privado AWS Certificate Manager para usarlo con su ALB privado, utilice el siguiente comando:<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps ingeniero, AWS DevOps | 
| Utilice la CA privada para emitir un certificado de cliente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Este comando devuelve la CSR y la clave privada de los dos servicios. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Para obtener más información, consulte [Emitir certificados de entidades finales privadas](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html) en la AWS documentación. | DevOps ingeniero, AWS DevOps | 

### Aprovisionamiento de servicios de AWS
<a name="provision-aws-services"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Servicios de AWS Aprovisione con la CloudFormation plantilla. | Para aprovisionar la nube privada virtual (VPC), el clúster de Amazon ECS, los servicios de Amazon ECS, Application Load Balancer y Amazon Elastic Container Registry (Amazon ECR), utilice la plantilla. CloudFormation  | DevOps ingeniero | 
| Obtenga las variables. | Verifique que tiene un clúster de Amazon ECS con dos servicios en ejecución. Para recuperar los detalles del recurso y almacenarlos como variables, utilice los comandos siguientes:<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps ingeniero | 
| Crea un CodeBuild proyecto. | Para usar un CodeBuild proyecto para crear las imágenes de Docker para sus servicios de Amazon ECS, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Para obtener más información, consulta [Cómo crear un proyecto de compilación AWS CodeBuild en](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html) la AWS documentación. | AWS DevOps, DevOps ingeniero | 
| Cree las imágenes de Docker. | Se puede utilizar CodeBuild para realizar el proceso de creación de imágenes. CodeBuild necesita permisos para interactuar con Amazon ECR y trabajar con Amazon S3.Como parte del proceso, la imagen de Docker se compila y envía al registro de Amazon ECR. Para obtener información sobre la plantilla y el código, consulte [Información adicional](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional).(Opcional) Para compilar localmente con fines de prueba, utilice el siguiente comando:<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps ingeniero | 

### Cómo inhabilitar la TLS mutua
<a name="enable-mutual-tls"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cargue el certificado CA en Amazon S3. | Para cargar el certificado CA en el bucket de Amazon S3, utilice el comando de ejemplo siguiente:`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps ingeniero | 
| Cree un almacén de confianza. | Para crear el almacén de confianza, utilice el comando de ejemplo siguiente:<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps ingeniero | 
| Cargue los certificados de cliente. | Para cargar los certificados de cliente en Amazon S3 para las imágenes de Docker, utilice el comando de ejemplo siguiente:<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps ingeniero | 
| Modifique el oyente. | Para habilitar el TLS mutuo en el ALB, modifique los oyentes HTTPS con los comandos siguientes:<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Para obtener más información, consulte [Configuración del TLS mutuo en un Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html) Balancer en AWS la documentación. | AWS DevOps, DevOps ingeniero | 

### Actualización de los servicios
<a name="update-the-services"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice la definición de tareas de Amazon ECS. | Para actualizar la definición de tareas de Amazon ECS, modifique el parámetro `image` en la revisión nueva.Para obtener los valores de los servicios respectivos, actualice las definiciones de tareas con la nueva URI de imágenes de Docker que creó en los pasos anteriores: `echo $ECRRepositoryServiceOneUri` o `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Para obtener más información, consulte [Actualización de una definición de tarea de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) mediante la consola en la AWS documentación.  | AWS DevOps, DevOps ingeniero | 
| Actualice el servicio Amazon ECS. | Actualice el servicio con la última definición de tareas. Esta definición de tareas es el esquema de las imágenes de Docker recién creadas y contiene el certificado de cliente que se requiere para la autenticación de TLS mutua.  Para actualizar el servicio, proceda de la manera siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Repita los pasos para el otro servicio. | Administrador de AWS DevOps, DevOps ingeniero de AWS | 

### Acceda a la aplicación
<a name="access-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copie la URL de la aplicación. | Utilice la consola de Amazon ECS para ver la tarea. Cuando el estado de la tarea se haya actualizado a **En ejecución**, seleccione la tarea. En la sección **Tarea**, copie el ID de la tarea. | Administrador de AWS, AWS DevOps | 
| Pruebe su aplicación. | Para probar la aplicación, utilice ECS Exec para acceder a las tareas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | Administrador de AWS, AWS DevOps | 

## Recursos relacionados
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Documentación de Amazon ECS**
+ [Creación de una definición de tarea de Amazon ECS mediante la consola](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Creación de una imagen de contenedor para su uso en Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Clústeres de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS para AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Mejores prácticas de redes de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Parámetros de definición del servicio Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

**Otros AWS recursos**
+ [¿Cómo uso una CA AWS privada para configurar los mTLS en el Application Load Balancer?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) ()AWS re:Post

## Información adicional
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Edición del Dockerfile******

El siguiente código muestra los comandos que edita en el Dockerfile para el servicio 1:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

El siguiente código muestra los comandos que edita en el Dockerfile para el servicio 2:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Si está creando las imágenes de Docker CodeBuild, el `buildspec` archivo utiliza el número de CodeBuild compilación para identificar de forma exclusiva las versiones de las imágenes como un valor de etiqueta. Puede cambiar el archivo `buildspec` para adaptarlo a sus necesidades, como se muestra en el código personalizado `buildspec `: 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```

# Más patrones
<a name="containersandmicroservices-more-patterns-pattern-list"></a>

**Topics**
+ [Automatice la eliminación de AWS CloudFormation pilas y recursos asociados](automate-deletion-cloudformation-stacks-associated-resources.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)
+ [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)
+ [Almacenamiento en contenedores de las cargas de trabajo de mainframe que Blu Age ha modernizado](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.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)
+ [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)
+ [Implementar un entorno para aplicaciones de Blu Age en contenedores mediante Terraform](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Implemente la lógica de preprocesamiento en un modelo de aprendizaje automático en un único punto final mediante una canalización de inferencias en Amazon SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.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)
+ [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)
+ [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)
+ [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)
+ [Migre de Oracle WebLogic a Apache Tomcat (ToMEE) en Amazon ECS](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [Modernizar las aplicaciones de ASP.NET Web Forms en AWS](modernize-asp-net-web-forms-applications-on-aws.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)
+ [Supervise la actividad de las aplicaciones mediante CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.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 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)
+ [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)
+ [Estructure un proyecto de Python en una arquitectura hexagonal con AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Pruebe AWS la infraestructura mediante LocalStack Terraform Tests](test-aws-infra-localstack-terraform.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)
+ [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)

# Sin servidor
<a name="serverless-pattern-list"></a>

**Topics**
+ [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)
+ [Administrar los inquilinos de varios productos SaaS en un único plano de control](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.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)
+ [Crear una EventBridge conexión entre cuentas de Amazon en una organización](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Entregue registros de DynamoDB a Amazon S3 mediante Kinesis Data Streams y Firehose con AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.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)
+ [Importe la biblioteca psycopg2 para interactuar con su base de AWS Lambda datos PostgreSQL](import-psycopg2-library-lambda.md)
+ [Integre Amazon API Gateway con Amazon SQS para gestionar el REST asíncrono APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Procesamiento de eventos de forma asíncrona con Amazon API Gateway y AWS Lambda](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Procesamiento de eventos de forma asíncrona con Amazon API Gateway y Amazon DynamoDB Streams](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Procesamiento de eventos de forma asíncrona con Amazon API Gateway, Amazon SQS y AWS Fargate](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.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)
+ [Ejecute lecturas paralelas de objetos S3 mediante Python en una AWS Lambda función](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Envíe datos de telemetría desde y AWS Lambda OpenSearch para análisis y visualización en tiempo real](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Configuración de un router de celdas sin servidor para una arquitectura basada en celdas](serverless-cell-router-architecture.md)
+ [Configuración del acceso privado a un bucket de Amazon S3 a través de un punto de conexión de VPC](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Solucione problemas de estados AWS Step Functions mediante Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Más patrones](serverless-more-patterns-pattern-list.md)

# Cree una aplicación móvil React Native sin servidor con AWS Amplify
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

## Resumen
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-summary"></a>

Este patrón muestra cómo crear un backend sin servidor para una aplicación móvil React Native mediante AWS Amplify y los siguientes servicios de AWS:
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Tras configurar e implementar el backend de la aplicación mediante Amplify, Amazon Cognito autentica a los usuarios y los autoriza a acceder a la aplicación. AppSync A continuación, AWS interactúa con la aplicación de interfaz y con una tabla de DynamoDB de backend para crear y obtener datos.

**nota**  
En este patrón se utiliza una sencilla aplicación «ToDoList» como ejemplo, pero puede utilizar un procedimiento similar para crear cualquier aplicación móvil de React Native.

## Requisitos previos y limitaciones
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Interfaz de la línea de comandos de Amplify (Amplify CLI)](https://docs.amplify.aws/cli/start/install/) instalada y configurada
+ XCode (cualquier versión)
+ Microsoft Visual Studio (cualquier versión, cualquier editor de código, cualquier editor de texto)
+ Familiaridad con Amplify
+ Familiaridad con Amazon Cognito
+ Familiaridad con AWS AppSync
+ Familiaridad con DynamoDB
+ Familiaridad con Node.js
+ Familiarización con npm
+ Familiaridad con React y React Native
+ Familiaridad con JavaScript y ( ECMAScript 6) ES6
+ Familiaridad con GraphQL

## Arquitectura
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-architecture"></a>

El siguiente diagrama muestra un ejemplo de arquitectura para ejecutar el backend de una aplicación móvil React Native en la nube de AWS:

![\[Flujo de trabajo para ejecutar una aplicación móvil de React Native con los servicios de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


En el siguiente diagrama se muestra la arquitectura:

1. Amazon Cognito autentica a los usuarios y los autoriza a acceder a la aplicación.

1. Para crear y obtener datos, AWS AppSync utiliza una API de GraphQL para interactuar con la aplicación de frontend y una tabla de DynamoDB de backend.

## Tools (Herramientas)
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-tools"></a>

**Servicios de AWS**
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) es un conjunto de herramientas y características diseñadas específicamente que permiten a los desarrolladores web y móviles de frontend crear aplicaciones de pila completa en AWS de manera rápida.
+ [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) proporciona una interfaz GraphQL escalable que ayuda a los desarrolladores de aplicaciones a combinar datos de varias fuentes, incluidas Amazon DynamoDB, AWS Lambda y HTTP. APIs
+ [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.
+ [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.

**Código**

[El código de la aplicación de muestra que se utiliza en este patrón está disponible en el repositorio -. GitHub aws-amplify-react-native ios-todo-app](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app) Para usar los archivos de ejemplo, siga las instrucciones de la sección **Épica** de este patrón.

## Epics
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-epics"></a>

### Cree y ejecute su aplicación React Native
<a name="create-and-run-your-react-native-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure un entorno de desarrollo React Native.  | Para obtener instrucciones, consulte [Configurar el entorno de desarrollo](https://reactnative.dev/docs/next/environment-setup) en la documentación de React Native. | Desarrollador de aplicaciones | 
| Cree y ejecute la aplicación móvil ToDoList React Native en el simulador de iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 

### Inicialice un nuevo entorno backend para la aplicación
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los servicios de backend necesarios para respaldar la aplicación en Amplify.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración de aplicación React Native en Amplify**<pre>? Name: ToDoListAmplify<br /><br />? Environment: dev<br /><br />? Default editor: Visual Studio Code<br /><br />? App type: javascript<br /><br />? Javascript framework: react-native<br /><br />? Source Directory Path: src<br /><br />? Distribution Directory Path: /<br /><br />? Build Command: npm run-script build<br /><br />? Start Command: npm run-script start<br /><br />? Select the authentication method you want to use: AWS profile<br /><br />? Please choose the profile you want to use: default</pre>Para obtener más información, consulte [Crear un nuevo backend de Amplify](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) en la documentación de Amplify Dev Center.El `amplify init` comando aprovisiona los siguientes recursos mediante [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 

### Añada la autenticación de Amazon Cognito a su aplicación React Native de Amplify
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un servicio de autenticación de Amazon Cognito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración del servicio de autenticación**<pre>? Do you want to use the default authentication and security configuration? \ <br />Default configuration<br /> <br />? How do you want users to be able to sign in? \ <br />Username <br /><br />? Do you want to configure advanced settings? \ <br />No, I am done</pre>El comando `amplify add auth` crea las carpetas, archivos y archivos de dependencia necesarios en una carpeta local (**amplify**) dentro del directorio raíz del proyecto. Para la configuración de la ToDoList aplicación utilizada en este patrón, se crea el **archivo aws-exports.js** con este fin. | Desarrollador de aplicaciones | 
| Implemente el servicio de Amazon Cognito en la nube de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para ver los servicios implementados en su proyecto, acceda a la consola de Amplify ejecutando el siguiente comando:`amplify console` | Desarrollador de aplicaciones | 
| Instala las bibliotecas Amplify necesarias para React Native y las CocoaPods dependencias para iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 
| Importe y configure el servicio Amplify. | En el archivo de punto de entrada de la aplicación (por ejemplo, **App.js**), importe y cargue el archivo de configuración del servicio Amplify introduciendo las siguientes líneas de código:<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Si recibe un error después de importar el servicio Amplify en el archivo de punto de entrada de la aplicación, deténgala. A continuación, abre XCode y selecciona el **ToDoListAmplifyarchivo.xcworkspace** de la carpeta iOS del proyecto y ejecuta la aplicación. | Desarrollador de aplicaciones | 
| Actualice el archivo de punto de entrada de la aplicación para usar el componente de orden superior (HOC) withAuthenticator. | El HOC `withAuthenticator` proporciona flujos de trabajo para iniciar sesión, registrarse y recuperar contraseñas en su aplicación con unas pocas líneas de código. Para obtener más información, consulte [Opción 1: usar componentes de interfaz de usuario precompilados](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) en Amplify Dev Center. También puede consultar [Componentes de orden superior](https://reactjs.org/docs/higher-order-components.html) en la documentación de React.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**Ejemplo de código de HOC withAuthenticator**<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)<br />import { withAuthenticator } from 'aws-amplify-react-native';<br /><br /><br />const App = () => {<br />  return null;<br />};<br /><br /><br />export default withAuthenticator(App);</pre>En el simulador de iOS, la aplicación muestra la pantalla de inicio de sesión que proporciona el servicio Amazon Cognito. | Desarrollador de aplicaciones | 
| Pruebe la configuración del servicio de autenticación. | En el simulador de iOS, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)También puede abrir la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito/) y comprobar si se ha creado un nuevo usuario en el **grupo de identidades**. | Desarrollador de aplicaciones | 

### Conectar una AppSync API de AWS y una base de datos de DynamoDB a la aplicación
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una AppSync API de AWS y una base de datos de DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración de API y base de datos**<pre>? Please select from one of the below mentioned services: \ <br />GraphQL <br /><br />? Provide API name: todolistamplify<br /><br />? Choose the default authorization type for the API \ <br />Amazon Cognito User Pool<br /><br />Do you want to use the default authentication and security configuration<br /><br />? Default configuration How do you want users to be able to sign in? \ <br />Username<br /><br />Do you want to configure advanced settings? \ <br />No, I am done.<br /><br />? Do you want to configure advanced settings for the GraphQL API \ <br />No, I am done.<br /><br />? Do you have an annotated GraphQL schema? \ <br />No<br /><br />? Choose a schema template: \ <br />Single object with fields (e.g., "Todo" with ID, name, description)<br /><br />? Do you want to edit the schema now? \ <br />Yes</pre>**Ejemplo de esquema de GraphQL**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | Desarrollador de aplicaciones | 
| Implemente la AppSync API de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración AppSync de la API de AWS**La siguiente configuración crea la API GraphQL en AWS AppSync y una tabla **Todo** en Dynamo DB.<pre> ? Are you sure you want to continue? Yes<br />? Do you want to generate code for your newly created GraphQL API Yes<br />? Choose the code generation language target javascript<br />? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js<br />? Do you want to generate/update all possible GraphQL operations - \ <br />queries, mutations and subscriptions Yes<br />? Enter maximum statement depth \<br />[increase from default if your schema is deeply nested] 2</pre> | Desarrollador de aplicaciones | 
| Conecta la interfaz de la aplicación a la AppSync API de AWS. | Para usar la ToDoList aplicación de ejemplo que se proporciona en este patrón, copie el código del archivo **App.js** del ios-todo-app GitHub repositorio [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). A continuación, integre el código de ejemplo en su entorno local.El código de ejemplo proporcionado en el archivo **App.js** del repositorio hace lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-resources"></a>
+ [AWS Amplify](https://aws.amazon.com/amplify/)
+ [Amazon Cognito](https://aws.amazon.com/cognito/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)
+ [React](https://reactjs.org/) (documentación de React) 

# Administrar los inquilinos de varios productos SaaS en un único plano de control
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

*Ramanna Avancha, Kishan Kavala, Anusha Mandava y Jenifer Pascal, Amazon Web Services*

## Resumen
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-summary"></a>

Este patrón muestra cómo gestionar los ciclos de vida de los inquilinos en varios productos de software como servicio (SaaS) en un único plano de control en la nube de AWS. La arquitectura de referencia proporcionada puede ayudar a las organizaciones a reducir la implementación de características redundantes y compartidas en sus productos SaaS individuales y a proporcionar eficiencias de gobierno a escala.

Las grandes empresas pueden tener varios productos SaaS en varias unidades de negocio. A menudo, estos productos deben aprovisionarse para que los utilicen inquilinos externos con diferentes niveles de suscripción. Sin una solución de usuario común, los administradores de TI deben dedicar tiempo a administrar funciones indiferenciadas en varios APIs SaaS, en lugar de centrarse en el desarrollo de las funciones principales del producto.

La solución de inquilino común que se proporciona en este patrón puede ayudar a centralizar la administración de muchas de las características de los productos SaaS compartidos de una organización, incluidas las siguientes:
+ Seguridad
+ Aprovisionamiento de inquilinos
+ Almacenamiento de datos del inquilino
+ Comunicaciones con los inquilinos
+ Gestión de productos
+ Registro y supervisión de métricas

## Requisitos previos y limitaciones
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Conocimiento de Amazon Cognito o de un proveedor de identidades (IdP) externo
+ Conocimiento de Amazon API Gateway
+ Conocimiento de AWS Lambda
+ Conocimiento de Amazon DynamoDB
+ Conocimientos de AWS Identity and Access Management (IAM)
+ Conocimiento de AWS Step Functions
+ Conocimientos de AWS CloudTrail y Amazon CloudWatch
+ Conocimiento de las bibliotecas y el código de Python
+ Conocimiento del SaaS APIs, incluidos los diferentes tipos de usuarios (organizaciones, inquilinos, administradores y usuarios de aplicaciones), los modelos de suscripción y los modelos de aislamiento de inquilinos
+ Conocimiento de los requisitos de SaaS multiproducto y de las suscripciones multiusuario de su organización

**Limitaciones**
+ Las integraciones entre la solución de inquilino común y los productos SaaS individuales no se incluyen en este patrón.
+ Este patrón implementa el servicio Amazon Cognito únicamente en una sola región de AWS.

## Arquitectura
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-architecture"></a>

**Pila de tecnología de destino**
+ Amazon API Gateway
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Notification Service (Amazon SNS)
+ AWS Step Functions

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de flujo de trabajo para administrar los ciclos de vida de los inquilinos en varios productos SaaS en un único plano de control en la nube de AWS.

![\[Flujo de trabajo para administrar los ciclos de vida de los inquilinos en un único plano de control\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


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

1. Un usuario de AWS inicia el aprovisionamiento de inquilinos, el aprovisionamiento de productos o las acciones relacionadas con la administración mediante una llamada a un punto de conexión de API Gateway.

1. El usuario se autentica mediante un token de acceso que se recupera de un grupo de usuarios de Amazon Cognito o de otro IdP.

1. Las tareas individuales de aprovisionamiento o administración se ejecutan mediante funciones de Lambda que se integran con los puntos de conexión de API de API Gateway.

1. La administración APIs de la solución Common Tenant (para inquilinos, productos y usuarios) recopila todos los parámetros de entrada, encabezados y símbolos necesarios. A continuación, la administración APIs invoca las funciones Lambda asociadas.

1. El servicio de IAM valida los permisos de IAM tanto para la administración APIs como para las funciones de Lambda.

1. Las funciones de Lambda almacenan y recuperan datos de los catálogos (para inquilinos, productos y usuarios) en DynamoDB y Amazon S3.

1. Una vez validados los permisos, se invoca un flujo de trabajo de AWS Step Functions para realizar una tarea específica. El ejemplo del diagrama muestra un flujo de trabajo de aprovisionamiento de inquilinos.

1. Las tareas individuales del flujo de trabajo de AWS Step Functions se ejecutan en un flujo de trabajo predeterminado (máquina de estado).

1. Todos los datos esenciales necesarios para ejecutar la función de Lambda asociada a cada tarea del flujo de trabajo se recuperan de DynamoDB o Amazon S3. Es posible que sea necesario aprovisionar otros recursos de AWS mediante una CloudFormation plantilla de AWS.

1. Si es necesario, el flujo de trabajo envía una solicitud para aprovisionar recursos de AWS adicionales para un producto SaaS específico a la cuenta de AWS de ese producto.

1. Cuando la solicitud se realiza correctamente o no, el flujo de trabajo publica la actualización de estado como un mensaje en un tema de Amazon SNS.

1. Amazon SNS está suscrito al tema Amazon SNS del flujo de trabajo Step Functions.

1. A continuación, Amazon SNS envía la actualización del estado del flujo de trabajo al usuario de AWS.

1. Los registros de las acciones de cada servicio de AWS, incluida una pista de auditoría de las llamadas a la API, se envían a CloudWatch. Se pueden configurar reglas y alarmas específicas CloudWatch para cada caso de uso.

1. Los registros se archivan en buckets de Amazon S3 para fines de auditoría.

**Automatización y escala**

Este patrón utiliza una CloudFormation plantilla para ayudar a automatizar la implementación de la solución Common Tenant. La plantilla también puede ayudarlo a escalar o reducir verticalmente los recursos asociados con rapidez.

Para obtener más información, consulte [Trabajar con CloudFormation plantillas de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) en la *Guía del CloudFormation usuario de AWS*.

## Tools (Herramientas)
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-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.
+ [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.
+ [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.
+ [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.
+ [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 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 le ayuda a 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 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.

## Prácticas recomendadas
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-best-practices"></a>

La solución de este patrón utiliza un único plano de control para gestionar la incorporación de varios inquilinos y proporcionar acceso a varios productos de SaaS. El plano de control ayuda a los usuarios administrativos a gestionar otros cuatro planos con características específicas:
+ Plano de seguridad
+ Plano de flujo de trabajo
+ Plano de comunicación
+ Plano de registro y monitoreo

## Epics
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-epics"></a>

### Configuración del plano de seguridad
<a name="configure-the-security-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Establezca los requisitos para su plataforma SaaS multiusuario. | Establezca requisitos detallados para lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Arquitecto de la nube, administrador de sistemas de AWS | 
| Configure el servicio de Amazon Cognito. | Siga las instrucciones de [Introducción a Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) de la *Guía para desarrolladores de Amazon Cognito*. | Arquitecto de la nube | 
| Configure las políticas de IAM necesarias. | Cree las políticas de IAM necesarias para su caso de uso. A continuación, asigne las políticas a los roles de IAM en Amazon Cognito.Para obtener más información, consulte [Administrar el acceso mediante políticas](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) y [Control de acceso basado en roles](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) en la *Guía para desarrolladores de Amazon Cognito*. | Administrador de la nube, arquitecto de la nube, seguridad de AWS IAM | 
| Configure los permisos de API necesarios.  | Configure los permisos de acceso a API Gateway mediante roles y políticas de IAM y autorizadores Lambda.Para obtener instrucciones, consulte las secciones siguientes de la *Guía de desarrolladores de Amazon API Gateway*:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Administrador de la nube, arquitecto de la nube | 

### Configuración del plano de datos
<a name="configure-the-data-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los catálogos de datos necesarios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obtener más información, consulte [Configuración de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) en la *Guía para desarrolladores de Amazon DynamoDB*. | Administrador de base de datos | 

### Configuración del plano de control
<a name="configure-the-control-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree funciones Lambda y API Gateway APIs para ejecutar las tareas necesarias del plano de control. | Cree funciones Lambda y API Gateway independientes APIs para añadir, eliminar y gestionar lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obtener más información, consulte [Uso de AWS Lambda con Amazon API Gateway](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) en la *Guía para desarrolladores de AWS Lambda*. | Desarrollador de aplicaciones | 

### Configuración del plano de flujo de trabajo
<a name="configure-the-workflow-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Identifique las tareas que deben ejecutar los flujos de trabajo de AWS Step Functions. | Identifique y documente los requisitos detallados del flujo de trabajo de AWS Step Functions para lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Asegúrese de que las partes interesadas clave aprueben los requisitos. | Propietario de la aplicación | 
| Cree los flujos de trabajo de AWS Step Functions necesarios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Desarrollador de aplicaciones, responsable de compilación | 

### Configuración del plano de comunicación
<a name="configure-the-communication-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear temas de Amazon SNS. | Cree temas de Amazon SNS para recibir notificaciones sobre lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obtener más información, consulte [Creación de un tema de SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) en la *Guía para desarrolladores de Amazon SNS*. | Propietario de la aplicación, arquitecto de la nube | 
| Suscribir puntos de conexión a cada tema de Amazon SNS. | Para recibir los mensajes publicados en un tema de Amazon SNS, tiene que suscribirse a un punto de conexión en cada tema.Para obtener más información, consulte el [tema Suscripción a un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) en la *Guía para desarrolladores de Amazon SNS*. | Desarrollador de aplicaciones, arquitecto de la nube | 

### Configuración del plano de registro y supervisión
<a name="configure-the-logging-and-monitoring-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active el registro para cada componente de la solución común para inquilinos. | Active el registro a nivel de componente para cada recurso de la solución de inquilino común que haya creado.Para obtener instrucciones, consulte lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Puede consolidar los registros de cada recurso en una cuenta de registro centralizada mediante las políticas de IAM. Para obtener más información, consulte [Registro centralizado y barreras de protección para varias cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html). | Administrador de sistemas de AWS, desarrollador de aplicaciones, administrador de la nube | 

### Aprovisionar e implementar la solución de inquilino común
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree plantillas CloudFormation . | Automatice la implementación y el mantenimiento de la solución Common Tenant completa y todos sus componentes mediante el uso de CloudFormation plantillas.Para obtener más información, consulte la [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | Desarrollador, DevOps ingeniero y CloudFormation desarrollador de aplicaciones | 

## Recursos relacionados
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Control del acceso a una API de REST con grupos de usuarios de Amazon Cognito como autorizador](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (*Guía para desarrolladores de Amazon API Gateway*)
+ [Uso de autorizadores Lambda de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (*Guía para desarrolladores de Amazon API Gateway*)
+ [Grupos de usuarios de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) (*Guía para desarrolladores de Amazon Cognito*)
+ [ CloudWatch Consola multicuentas entre regiones](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (Guía del * CloudWatch usuario de Amazon*)

# 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
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

*Song Jin, Eunhye Jo y Jun Soung Lee, Amazon Web Services*

## Resumen
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

Este patrón simplifica el acceso a Amazon Simple Storage Service (Amazon S3) al crear descargas de objetos seguras y URLs prefirmadas personalizadas. La solución proporciona un único punto de conexión con un dominio único y direcciones IP estáticas. Está diseñado para los clientes que requieren la consolidación de la API y los puntos de conexión de Amazon S3 en un dominio unificado con direcciones IP estáticas. El caso de uso implica que los usuarios sigan una política de firewall de listas de direcciones IP y dominios permitidos, lo que limita el acceso de la API a dominios y direcciones IP específicos. 

La arquitectura emplea claves Servicios de AWS AWS Global Accelerator, como Amazon API Gateway AWS Lambda, Application Load Balancer y Amazon S3. AWS PrivateLink Este diseño centraliza la API para generar el punto final prefirmado URLs y el punto final de Amazon S3 en un único dominio, vinculado a un acelerador con dos direcciones IP estáticas. En consecuencia, los usuarios pueden solicitar URLs y descargar objetos de Amazon S3 prefirmados sin esfuerzo a través de un punto de enlace de dominio unificado con direcciones IP estáticas. 

Esta arquitectura es especialmente beneficiosa para los clientes con políticas o requisitos de conformidad estrictos, como los de los sectores público, médico y financiero.

## Requisitos previos y limitaciones
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Una zona alojada pública de su dominio personalizado
+ Un dominio importado en AWS Certificate Manager (ACM) Región de AWS de su elección

**Limitaciones**
+ El nombre del bucket de Amazon S3 debe coincidir con el nombre de dominio del punto de conexión. Este requisito es para garantizar que el punto de conexión de Amazon S3 se pueda atender a través del punto de conexión de API único.
+ El nombre de dominio personalizado utilizado en API Gateway debe coincidir con el nombre de dominio del único punto de conexión de la API.
+ 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="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

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

![\[Componentes y flujo de trabajo para la generación de URL prefirmadas y la descarga de objetos.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


El diagrama ilustra el siguiente concepto y flujo de trabajo:

1. Un usuario inicia una solicitud para generar una URL prefirmada mediante el punto de enlace personalizado a través del cual se sirve AWS Global Accelerator, utilizando el nombre de dominio personalizado y las direcciones IP asociadas.

1. Una función de Lambda genera la URL prefirmada y apunta al punto de conexión personalizado. Responde con una redirección 301 que contiene la URL prefirmada generada. A través de la URL prefirmada redirigida, el usuario descarga el objeto automáticamente mediante el punto de conexión personalizado ofrecido a través de Global Accelerator.

Los componentes de la arquitectura general para la generación de URL prefirmadas y el flujo de trabajo de descarga de objetos son los siguientes:
+ Aprovisionamiento de direcciones IP estáticas por parte de Global Accelerator.
+ Registro del alias del acelerador como registro A en la zona alojada pública de Amazon Route 53 con el nombre de dominio personalizado.
+ Creación de un bucket de Amazon S3 con un nombre de bucket que coincida con el nombre de dominio personalizado registrado.
+ Creación de puntos de enlace de VPC para API Gateway y el servicio Amazon S3.
+ Configuración de un equilibrador de carga de aplicación interno para conectarse a Global Accelerator.
+ Asignación de un nombre de dominio personalizado para API Gateway con un certificado ACM adjunto.
+ Implementación de una API Gateway privada integrada con una función de Lambda.
+ La función Lambda está equipada con un rol AWS Identity and Access Management (IAM) adjunto (con [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)permisos).

## Tools (Herramientas)
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-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.
+ [Los balanceadores de carga de aplicaciones](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuyen el tráfico de aplicaciones entrante entre varios destinos, como las instancias de Amazon Elastic Compute Cloud (Amazon EC2), en varias zonas de 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 AWS sitios web y aplicaciones.
+ [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 Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html) es un servicio global que admite puntos de conexión en varias Regiones de AWS. Puede crear aceleradores que dirijan el tráfico a puntos finales óptimos a través de la red AWS global. De este modo, se mejora la disponibilidad y el rendimiento de las aplicaciones de Internet destinadas al público general.
+ [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 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 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.
+ [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**
+ [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**

Puede implementar este patrón utilizando Terraform AWS CDK o Terraform según sus preferencias. La sección [Epics](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) contiene instrucciones para ambos métodos de implementación. El código de este patrón está disponible en los siguientes GitHub repositorios:
+ **AWS CDK**— [s3- presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk) -cdk
+ **Terraforma — s3** [- -terraforma presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform)

## Prácticas recomendadas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Para mejorar la seguridad en el entorno de producción, es crucial implementar mecanismos de autorización, como [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), para restringir el acceso a la API de generación `PresignedUrl`.
+ 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="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Prepare el entorno
<a name="prepare-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Decida un nombre de dominio. | Elija un nombre de dominio público para el punto de conexión unificado de Amazon S3. El nombre del dominio también se usa como el nombre del bucket de Amazon S3. | Administrador de AWS, administrador de red | 
| Creación de una zona alojada pública. | [Cree una zona alojada pública](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) en Amazon Route 53. Su nombre de dominio debe coincidir con el nombre de dominio que se usa en API Gateway. | Administrador de AWS, administrador de red | 
| Prepare un certificado SSL. | Utilice AWS Certificate Manager (ACM) para [solicitar](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) o [importar](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) un certificado SSL para el dominio de su aplicación web. | Administrador de AWS, administrador de red | 

### Implementación del patrón con Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el entorno de desarrollo de Terraform. | Para configurar el entorno de desarrollo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Modifique los archivos `.tfvars` y ** **`provider.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Tenga en cuenta lo siguiente:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Aprovisione los recursos de red. | Para aprovisionar los recursos de red, ejecute los siguientes comandos:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Durante la ejecución del comando `apply `, escriba **sí** cuando se le solicite. | Administrador de la nube, administrador de AWS | 
| Aprovisione API Gateway, Amazon S3 y Lambda. | Para aprovisionar los recursos de red, use los siguientes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrador de la nube, administrador de AWS | 

### Implemente el patrón con AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el entorno AWS CDK de desarrollo. | Para configurar el entorno de desarrollo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Configure los ajustes del dominio en el archivo `config/index.ts`. | Para editar las opciones de la variable constante, utilice los siguientes comandos:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>En los comandos, reemplace cada marcador de posición con su propia información:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Implemente las pilas. | Para implementar dos pilas, una para la nube privada virtual (VPC) y otra para la aplicación, utilice el siguiente comando:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrador de la nube, administrador de AWS | 

### Prueba del patrón
<a name="test-the-pattern"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique las direcciones IP del punto de conexión. | Para comprobar que el dominio de este patrón tenga direcciones IP estáticas, utilice el siguiente comando:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Administrador de red | 
| Cargue un archivo de prueba que pueda descargar más adelante. | Cargue el archivo de prueba en la carpeta `'/objects'` del bucket de Amazon S3. | Administrador de la nube, administrador de AWS | 
| Invoque la API para generar una URL prefirmada. | Para generar una URL prefirmada, llame a la URL desde un navegador o un cliente de API (por ejemplo, [Postman](https://www.postman.com/product/what-is-postman/)) con el siguiente formato:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Sustituya los valores de los marcadores de posición `${s3-bucket-prefix}` y `${domain}` por los valores que configuró en los pasos anteriores. | Propietario de la aplicación | 
| Compruebe el resultado. | El resultado esperado es que reciba un código de estado de redireccionamiento 301 (desplazado permanentemente). Esta respuesta contendrá la URL prefirmada, que debería iniciar automáticamente la descarga del archivo de prueba. | Ingeniero de pruebas | 

### Limpieza con Terraform
<a name="clean-up-with-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Destruya los recursos de API Gateway, Amazon S3 y Lambda. | Para eliminar los recursos, use los siguientes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador de la nube, administrador de AWS | 
| Destruya los recursos de red. | Para eliminar los recursos de red, use los siguientes comandos:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador de la nube, administrador de AWS | 

### Limpie con AWS CDK
<a name="clean-up-with-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Destruya las pilas. | Para destruir las pilas de VPC y de aplicaciones, utilice el siguiente comando:<pre>$ cdk destroy --all</pre> | Administrador de la nube, administrador de AWS | 
| Vacíe y elimine los buckets de Amazon S3. | [Vacíe](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) y [elimine](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) el bucket de Amazon S3 del objeto y el bucket de Amazon S3 de los registros que no se eliminen de forma predeterminada.Los nombres de los buckets de Amazon S3 son `${s3-bucket-prefix}.${domain}` y `${s3-bucket-prefix}.${domain}-logs`.Si prefiere usar [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para eliminar los buckets, utilice los siguientes comandos:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Sustituya `${s3-bucket-prefix}` y `${domain}` por los valores que se estableció en los pasos anteriores. | Administrador de la nube, administrador de AWS | 

## Recursos relacionados
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blogs**
+ [Acceso a una Amazon API Gateway mediante direcciones IP estáticas proporcionadas por AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Genere una URL prefirmada de forma modular AWS CDK para JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Alojamiento de sitios web estáticos HTTPS internos con ALB, S3 y PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Crear una EventBridge conexión entre cuentas de Amazon en una organización
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson y Robert Stone, Amazon Web Services*

## Resumen
<a name="create-cross-account-amazon-eventbridge-connection-organization-summary"></a>

Los grandes sistemas distribuidos utilizan Amazon EventBridge para comunicar los cambios de estado entre varias cuentas de Amazon Web Services (AWS) de una AWS Organizations organización. Sin embargo, por EventBridge lo general solo puede dirigirse a los puntos finales o a los consumidores de la misma Cuenta de AWS. La excepción es un bus de eventos en una cuenta diferente. Ese bus de eventos es un destino válido. Para consumir eventos de un bus de eventos de otra cuenta, los eventos deben transferirse del bus de eventos de la cuenta de origen al bus de eventos de la cuenta de destino. Para evitar problemas a la hora de gestionar eventos críticos en distintas aplicaciones Cuentas de AWS, utilice el enfoque recomendado que se presenta en este patrón.

Este patrón ilustra cómo implementar una arquitectura basada en eventos EventBridge que involucre a varios miembros de una Cuentas de AWS AWS Organizations organización. El patrón usa AWS Cloud Development Kit (AWS CDK) Toolkit y. AWS CloudFormation

EventBridge ofrece un bus de eventos sin servidor que le ayuda a recibir, filtrar, transformar, enrutar y entregar eventos. Un componente fundamental de las arquitecturas basadas en eventos, EventBridge permite separar entre los productores de mensajes y los consumidores de esos mensajes. En una sola cuenta, esto es sencillo. Una estructura entre cuentas requiere consideraciones adicionales para que los eventos del bus de eventos de una cuenta se consuman en otras cuentas de la misma organización.

Para obtener información sobre las consideraciones específicas de las cuentas para productores y consumidores, consulte la sección de [información adicional](#create-cross-account-amazon-eventbridge-connection-organization-additional).

## Requisitos previos y limitaciones
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Requisitos previos **
+ Una AWS Organizations organización con al menos dos asociados Cuentas de AWS
+ Una función AWS Identity and Access Management (IAM) en ambas Cuentas de AWS que le permita aprovisionar la infraestructura en ambas Cuentas de AWS mediante AWS CloudFormation
+ Git [instalado localmente](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [instalado localmente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [instalado localmente](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) y [arrancado en ambos](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) Cuentas de AWS

**Versiones de producto**

Este patrón se ha creado y probado usando las siguientes herramientas y versiones:
+ AWS CDK Kit de herramientas 2.126.0
+ Node.js 18.19.0
+ npm 10.2.3
+ Python 3.12

Este patrón debería funcionar con cualquier versión de AWS CDK v2 o npm. Las versiones 13.0.0 a 13.6.0 de Node.js no son compatibles con AWS CDK.

## Arquitectura
<a name="create-cross-account-amazon-eventbridge-connection-organization-architecture"></a>

**Arquitectura de destino**

El siguiente diagrama muestra el flujo de trabajo de arquitectura para enviar un evento desde una cuenta y consumirlo en otra cuenta.

![\[El proceso de tres pasos para conectar la cuenta de productor de origen y la cuenta de consumidor de destino.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


El flujo de trabajo consta de los pasos siguientes:

1. La AWS Lambda función Producer de la cuenta Source coloca un evento en el bus de EventBridge eventos de la cuenta.

1. La EventBridge regla de cuentas cruzadas dirige el evento a un bus de EventBridge eventos de la cuenta de destino.

1. El bus de EventBridge eventos de la cuenta de destino tiene una regla Lambda de destino que invoca la función Consumer Lambda.

Una práctica recomendada es utilizar una [cola de mensajes fallidos (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) para gestionar las invocaciones fallidas de la función de Lambda de consumidor. Sin embargo, el DLQ se omitió en esta solución para mayor claridad. Para obtener más información sobre cómo implementar una DLQ en sus flujos de trabajo y mejorar la capacidad de los flujos de trabajo para recuperarse de los errores, consulte la entrada del blog [Implementación AWS Lambda](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/) de patrones de manejo de errores.

**Automatización y escala**

AWS CDK aprovisiona automáticamente la arquitectura requerida. EventBridge puede ampliarse a miles de registros por segundo, según el Región de AWS. Para obtener más información, consulta la [documentación de EventBridge cuotas de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

## Tools (Herramientas)
<a name="create-cross-account-amazon-eventbridge-connection-organization-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 el código. Este patrón utiliza el kit de [AWS CDK herramientas, un kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) de desarrollo en la nube de línea de comandos que te ayuda a interactuar con tu AWS CDK aplicación.
+ [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 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 puede crear y administrar de forma centralizada.

**Otras herramientas**
+ [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.
+ [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 [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization).

## Prácticas recomendadas
<a name="create-cross-account-amazon-eventbridge-connection-organization-best-practices"></a>

Para conocer las mejores prácticas a la hora de trabajar con EventBridge él, consulta los siguientes recursos:
+ [Mejores prácticas para los patrones de EventBridge eventos de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Mejores prácticas a la hora de definir reglas en Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Epics
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Prepare su entorno AWS CDK de despliegue local
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure las credenciales locales para la cuenta de origen y la cuenta de destino. | Revise la [configuración y las credenciales nuevas](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new) y utilice el método de autenticación y credenciales que mejor se adapte a su entorno.Asegúrese de configurar la autenticación tanto AWS CLI para la cuenta de origen como para la cuenta de destino.Estas instrucciones suponen que ha configurado dos perfiles de AWS de manera local: `sourceAccount` y `destinationAccount`. | Desarrollador de aplicaciones | 
| Bootstrap para ambos Cuentas de AWS. | Para arrancar las cuentas, ejecute los siguientes comandos:<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | Desarrollador de aplicaciones | 
| Clone el código de patrón. | Para clonar el repositorio, ejecute el siguiente comando:<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>A continuación, cambie el directorio a la carpeta del proyecto recién clonada:<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | Desarrollador de aplicaciones | 

### Implemente ProducerStack en la cuenta Source
<a name="deploy-producerstack-to-the-source-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique `cdk.json` con sus detalles AWS Organizations y los de su cuenta. | En la carpeta raíz del proyecto, realiza los siguientes cambios en `cdk.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 
| Despliegue los ProducerStack recursos. | Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Cuando se le solicite, acepte las nuevas funciones de IAM y otros permisos relacionados con la seguridad que se hayan creado mediante ellas. AWS CloudFormation | Desarrollador de aplicaciones | 
| Compruebe que los ProducerStack recursos estén desplegados. | Para verificar los recursos, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 

### Implemente ConsumerStack en la cuenta de destino
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Despliegue los ConsumerStack recursos. | Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Cuando se le solicite, acepte las nuevas funciones de IAM y otros permisos relacionados con la seguridad que se hayan creado mediante ellas. CloudFormation | Desarrollador de aplicaciones | 
| Compruebe que los recursos estén desplegados ConsumerStack  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 

### Producción y consumo de eventos
<a name="produce-and-consume-events"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Invoque la función de Lambda de producción. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 
| Verifique que se haya recibido el evento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 

### Limpieza
<a name="cleanup"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Destruye los ConsumerStack recursos. | Si utiliza este patrón como prueba, limpie los recursos implementados para evitar incurrir en costos adicionales.Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Se le pedirá que confirme la eliminación de la pila. | Desarrollador de aplicaciones | 
| Destruye los ProducerStack recursos. | Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Se le pedirá que confirme la eliminación de la pila. | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se recibió ningún evento en la cuenta de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| Al invocar una función de Lambda desde la consola, se obtiene el siguiente error: `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Póngase en contacto con su Cuenta de AWS administrador para recibir los permisos de `lambda:Invoke` acción adecuados en la `ProducerStack-ProducerLambdaXXXX` función Lambda. | 

## Recursos relacionados
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Referencias**
+ [AWS Organizations Guía del usuario](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [Patrones de EventBridge eventos de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Reglas en Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutoriales y videos**
+ [Tutorial: Creación y configuración de una organización](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re:Invent 2023: patrones avanzados basados en eventos con Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Información adicional
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Regla del productor**

*En la cuenta Source, se crea un bus de EventBridge eventos para aceptar los mensajes de los productores (como se muestra en la sección Arquitectura).* En este bus de eventos se crea una regla con los correspondientes permisos de IAM. Las reglas se dirigen al bus de EventBridge eventos de la cuenta de destino y se basan en la siguiente `cdk.json` estructura:

```
"rules": [
  {
    "id": "CrossAccount",
    "sources": ["Producer"],
    "detail_types": ["TestType"],
    "targets": [
      {
        "id": "ConsumerEventBus",
        "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount"
      }
    ]
  }
]
```

Para cada bus de eventos que consume, se deben incluir el patrón de eventos y el bus de eventos de destino.

*Patrón de eventos*

Los [patrones de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) filtran a qué eventos se aplicará esta regla. Para los fines de este ejemplo, los orígenes de eventos y el registro `detail_types` identifican qué eventos se van a transmitir desde el bus de eventos de la cuenta de origen al bus de eventos de la cuenta de destino.

*Bus de eventos de destino*

Esta regla se dirige a un bus de eventos que existe en otra cuenta. El `arn` (nombre del recurso de Amazon) completo es necesario para identificar de forma única el bus de eventos de destino y `id` es el [ID lógico](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids) utilizado por AWS CloudFormation. No es necesario que el bus de eventos de destino exista realmente en el momento de la creación de la regla de destino.

**Consideraciones específicas de la cuenta de destino**

En la cuenta de destino, se crea un bus de EventBridge eventos para recibir mensajes del bus de eventos de la cuenta de origen. Para permitir que los eventos se publiquen desde la cuenta de origen, debe crear una [política basada en recursos](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html):

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowOrgToPutEvents",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "o-XXXXXXXXX"
      }
    }
  }]
}
```

Es especialmente importante conceder el permiso `events:PutEvents`, que permite a cualquier otra cuenta de la misma organización publicar eventos en este bus de eventos. Si `aws:PrincipalOrgId` se establece como ID de la organización, se conceden los permisos necesarios.

**Patrón del evento**

Puede modificar el patrón de eventos incluido para adaptarlo a su caso de uso:

```
rule = events.Rule(
    self,
    self.id + 'Rule' + rule_definition['id'],
    event_bus=event_bus,
    event_pattern=events.EventPattern(
        source=rule_definition['sources'],
        detail_type=rule_definition['detail_types'],
    )
)
```

Para reducir el procesamiento innecesario, el patrón de eventos debe especificar que solo los eventos que procese la cuenta de destino se transmitan al bus de eventos de la cuenta de destino.

*Política basada en recursos*

En este ejemplo, se utiliza el ID de la organización para controlar qué cuentas pueden incluir eventos en el bus de eventos de la cuenta de destino. Considere la posibilidad de utilizar una política más restrictiva, como especificar la cuenta de origen.

*EventBridge cuotas*

Tenga en cuenta las siguientes [cuotas](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html):
+ La cuota predeterminada es de 300 reglas por bus de eventos. Se puede ampliar si es necesario, pero debería adaptarse a la mayoría de los casos de uso.
+ El máximo permitido es de cinco destinos por regla. Recomendamos que los arquitectos de aplicaciones utilicen una regla distinta para cada cuenta de destino a fin de poder controlar de forma pormenorizada el patrón de eventos.

# Entregue registros de DynamoDB a Amazon S3 mediante Kinesis Data Streams y Firehose con AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava y Daniel Matuki da Cunha, Amazon Web Services*

## Resumen
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

Este patrón proporciona un código de muestra y una aplicación para entregar registros de Amazon DynamoDB a Amazon Simple Storage Service (Amazon S3) mediante Amazon Kinesis Data Streams y Amazon Data Firehose. El enfoque del patrón utiliza [construcciones de AWS Cloud Development Kit (AWS CDK) nivel 3](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) e incluye un ejemplo de cómo realizar la transformación de datos AWS Lambda antes de que los datos se entreguen al depósito S3 de destino en la nube de Amazon Web Services (AWS).

Kinesis Data Streams captura modificaciones a nivel de elemento en cualquier tabla de DynamoDB y las replica en una secuencia de datos de Kinesis. Sus aplicaciones pueden acceder al flujo de datos de Kinesis y ver los cambios a nivel de elemento casi en tiempo real. Kinesis Data Streams también le brinda acceso a otros servicios d Amazon Kinesis, como Firehose y Amazon Managed Service para Apache Flink. Puede crear aplicaciones que proporcionen paneles en tiempo real, generen alertas, apliquen precios y publicidad dinámicos y realicen análisis de datos sofisticados.

Puede usar este patrón para sus casos de uso de integración de datos. Por ejemplo, los vehículos de transporte o equipos industriales pueden enviar grandes volúmenes de datos a una tabla de DynamoDB. Estos datos se pueden transformar y almacenar en un lago de datos alojado en Amazon S3. A continuación, puede consultar y procesar los datos, así como predecir cualquier posible defecto, mediante servicios sin servidor como Amazon Athena, Amazon Redshift Spectrum, Amazon Rekognition y AWS Glue.

## Requisitos previos y limitaciones
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Requisitos previos *
+ Un activo. Cuenta de AWS
+ AWS Command Line Interface (AWS CLI), instalado y configurado. Para obtener más información, consulte [Primeros pasos con AWS CLIél en la](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) AWS CLI documentación.
+ Node.js (18.x\$1) y npm, instalados y configurados. Para obtener más información, consulte [Descargar e instalar Node.js y npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) en la documentación de `npm`.
+ aws-cdk (2.x\$1), instalado y configurado. Para obtener más información, consulte [Introducción a él AWS CDK en la documentación](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). AWS CDK 
+ El repositorio GitHub [aws-dynamodb-kinesisfirehose-sde 3 ingestas](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/), clonado y configurado en su máquina local.
+ Datos de ejemplo existentes para la tabla de DynamoDB. Los datos deben utilizar el siguiente formato: `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}` 

## Arquitectura
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

En el siguiente diagrama se muestra un ejemplo de flujo de trabajo que entrega registros de DynamoDB en Amazon S3 mediante Kinesis Data Streams y Firehose.

![\[Un ejemplo de flujo de trabajo que entrega registros de DynamoDB en Amazon S3 mediante Kinesis Data Streams y Firehose.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


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

1. Los datos se incorporan mediante Amazon API Gateway como proxy de DynamoDB. También puede usar cualquier otro origen para incorporar datos en DynamoDB. 

1. Los cambios a nivel de elemento se generan prácticamente en tiempo real en Kinesis Data Streams para su entrega a Amazon S3.

1. Kinesis Data Streams envía los registros a Firehose para su transformación y entrega. 

1. Una función de Lambda convierte los registros de un formato de registro de DynamoDB a un formato JSON, que contiene solo los nombres y valores de los atributos de los elementos del registro.

## Tools (Herramientas)
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-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 lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ AWS CDK El [kit de herramientas](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 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.
+ [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

*Repositorio de código*

El código de este patrón está disponible en el repositorio de GitHub [aws-dynamodb-kinesisfirehose-s3 ingestas.](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/)

## Epics
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### Instale y configure el código de muestra
<a name="set-up-and-configure-the-sample-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale las dependencias. | En su máquina local, instale las dependencias de los archivos `package.json` en los directorios `pattern/aws-dynamodb-kinesisstreams-s3` y `sample-application` ejecutando los siguientes comandos:<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | Desarrollador de aplicaciones, AWS general | 
| Genere la plantilla CloudFormation . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Desarrollador de aplicaciones, AWS general, AWS DevOps | 

### Implementación de recursos
<a name="deploy-the-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe e implemente los recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Desarrollador de aplicaciones, AWS general, AWS DevOps | 

### Incorpore datos a la tabla de DynamoDB para probar la solución
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Incorpore sus datos de muestra en la tabla de DynamoDB. | Envíe una solicitud a la tabla de DynamoDB ejecutando el siguiente comando en: AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`ejemplo:`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`De forma predeterminada, `put-item` no devuelve ningún valor como resultado si la operación se realiza correctamente. Si la operación falla, devuelve un error. Los datos se almacenan en DynamoDB y, a continuación, se envían a Kinesis Data Streams y Firehose. Puede adoptar diferentes enfoques para añadir datos a una tabla de DynamoDB. Para obtener más información, consulte la sección [Cargar datos en tablas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) en la documentación de DynamoDB. | Desarrollador de aplicaciones | 
| Verifique que se crea un objeto nuevo en el bucket de S3. | Inicie sesión en el bucket de S3 Consola de administración de AWS y supervise el mismo para comprobar que se ha creado un objeto nuevo con los datos que ha enviado. Para obtener más información, consulte [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)la documentación de Amazon S3. | Desarrollador de aplicaciones, AWS general | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpiar recursos.  | Ejecute el comando `cdk destroy` para eliminar todos los recursos usados por este patrón. | Desarrollador de aplicaciones, AWS general | 

## Recursos relacionados
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s3- static-site-stack .ts](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25) (GitHub repositorio)
+ [aws-apigateway-dynamodb módulo](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub repositorio)
+ [aws-kinesisstreams-kinesisfirehose-sMódulo 3](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub repositorio)
+ [Captura de datos de cambios para DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) (documentación de DynamoDB)
+ [Uso de Kinesis Data Streams para capturar cambios en DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html) (documentación de DynamoDB)

# Implementación del control de versiones de API basado en rutas mediante dominios personalizados en Amazon API Gateway
<a name="implement-path-based-api-versioning-by-using-custom-domains"></a>

*Corey Schnedl, Marcelo Barbosa, Mario Lopez Martinez, Anbazhagan Ponnuswamy, Gaurav Samudra y Abhilash Vinod, Amazon Web Services*

## Resumen
<a name="implement-path-based-api-versioning-by-using-custom-domains-summary"></a>

Este patrón demuestra cómo puede utilizar la característica de [asignación de API](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) de [dominios personalizados](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) para implementar una solución de control de versiones de API basado en rutas para Amazon API Gateway.

Amazon API Gateway es un servicio totalmente gestionado que puede utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Al utilizar la función de dominio personalizado del servicio, puede crear nombres de dominio personalizados que sean más sencillos e intuitivos y URLs que pueda proporcionarlos a los usuarios de su API. Puede utilizar las asignaciones de API para conectar etapas de la API a un nombre de dominio personalizado. Después de crear un nombre de dominio y configurar los registros de DNS, utiliza las asignaciones de API para enviarle tráfico a APIs través de su nombre de dominio personalizado.

Cuando una API pasa a estar disponible públicamente, los consumidores la utilizan. A medida que evoluciona una API pública, su contrato de servicio también evoluciona para reflejar las nuevas características y funcionalidades. Sin embargo, no es aconsejable cambiar ni eliminar las características existentes. Cualquier cambio importante podría afectar a las aplicaciones del consumidor y provocar fallos durante el tiempo de ejecución. El control de versiones de las API es importante para evitar interrumpir la compatibilidad con versiones anteriores e infringir un contrato.

Se necesita una estrategia clara de control de versiones de las API para ayudar a los consumidores a adoptarlas. El control de versiones APIs mediante rutas URLs es el enfoque más sencillo y utilizado con más frecuencia. En este tipo de control de versiones, las versiones se definen explícitamente como parte de la API. URIs El siguiente ejemplo URLs muestra cómo un consumidor puede usar el URI para especificar una versión de API para su solicitud:

`https://api.example.com/api/v1/orders `

`https://api.example.com/api/v2/orders `

`https://api.example.com/api/vX/orders`

Este patrón lo utiliza AWS Cloud Development Kit (AWS CDK) para crear, implementar y probar un ejemplo de implementación de una solución de control de versiones escalable basada en rutas para su API. AWS CDK es un marco de desarrollo de software de código abierto para modelar y aprovisionar los recursos de sus aplicaciones en la nube mediante lenguajes de programación conocidos.

## Requisitos previos y limitaciones
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS.
+ Se requiere la propiedad de un dominio para usar el repositorio de muestras de este patrón y para usar la funcionalidad de dominios personalizados de Amazon API Gateway. Puede usar Amazon Route 53 para crear y administrar los dominios de su organización. Para obtener información sobre cómo registrar o transferir un dominio con Route 53, consulte [Registering new domains](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) en la documentación de Route 53.
+ Antes de configurar un nombre de dominio personalizado para una API, debe disponer de un [certificado SSL/TLS](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html) listo en AWS Certificate Manager.
+ Debe crear o actualizar el registro de recursos del proveedor de DNS para asignarlo al punto de conexión de la API. Si no se lleva a cabo esta asignación, las solicitudes de API vinculadas al nombre de dominio personalizado no pueden llegar a API Gateway.

**Limitaciones**
+ Un nombre de dominio personalizado debe ser único dentro de un Región de AWS todo Cuentas de AWS.
+ Para configurar asignaciones de la API con varios niveles, debe usar un nombre de dominio personalizado regional y usar la política de seguridad de TLS 1.2.
+ En una asignación de API, el nombre de dominio personalizado y el mapeado APIs deben coincidir Cuenta de AWS.
+ Las asignaciones de API deben contener solo letras, números y los siguientes caracteres: `$-_.+!*'()/`
+ La longitud máxima de la ruta en una asignación de API es de 300 caracteres.
+ Puede tener 200 asignaciones de API con varios niveles para cada nombre de dominio.
+ Solo puede asignar HTTP APIs a un nombre de dominio personalizado regional con la política de seguridad TLS 1.2.
+ No puedes asignarlo WebSocket APIs al mismo nombre de dominio personalizado que una API HTTP o una API REST.
+ 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**
+ Este ejemplo de implementación se usa [AWS CDK en la TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) versión 2.149.0.

## Arquitectura
<a name="implement-path-based-api-versioning-by-using-custom-domains-architecture"></a>

En el siguiente diagrama se muestra el flujo de trabajo de la arquitectura.

![\[Flujo de trabajo con asignaciones de API y dominios personalizados para implementar una solución de control de versiones de API basado en rutas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


En el siguiente diagrama se ilustra lo siguiente:

1. El usuario de la API envía una solicitud a Amazon API Gateway con un nombre de dominio personalizado.

1. API Gateway dirige dinámicamente la solicitud del usuario a una instancia y etapa adecuadas de API Gateway, según la ruta indicada en la URL de la solicitud. En la siguiente tabla se muestra un ejemplo de cómo se pueden enrutar las distintas rutas basadas en URL a etapas específicas para distintas instancias de API Gateway.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. La instancia de API Gateway de destino procesa la solicitud y devuelve el resultado al usuario.

**Automatización y escala**

Te recomendamos que utilices AWS CloudFormation pilas independientes para cada versión de la API. Con este enfoque, puedes tener un aislamiento total entre el backend al APIs que se puede enrutar mediante la función de mapeo de API de dominio personalizado. Una ventaja de este enfoque es que se pueden implementar o eliminar diferentes versiones de la API de forma independiente sin que ello suponga el riesgo de modificar otra API. Este enfoque aumenta la resiliencia mediante el aislamiento de las CloudFormation pilas. Además, le proporciona diferentes opciones de back-end para su API AWS Lambda AWS Fargate, como los puntos finales HTTP y las acciones de. Servicios de AWS

Puedes usar estrategias de ramificación de Git, como [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html), en combinación con CloudFormation pilas aisladas para administrar el código fuente que se implementa en las diferentes versiones de la API. Al usar esta opción, puede mantener diferentes versiones de su API sin necesidad de duplicar el código fuente para las nuevas versiones. Con Gitflow, puede agregar etiquetas a las confirmaciones dentro de su repositorio de Git a medida que se vayan llevando a cabo los lanzamientos. Como resultado, tiene una instantánea completa del código fuente en relación con un lanzamiento específico. Como es necesario realizar actualizaciones, puedes consultar el código de una versión específica, realizar actualizaciones y, después, implementar el código fuente actualizado en la CloudFormation pila que se ajuste a la versión principal correspondiente. Este enfoque reduce el riesgo de interrumpir otra versión de la API, ya que cada versión de la API tiene un código fuente aislado y se implementa en CloudFormation pilas independientes.

## Tools (Herramientas)
<a name="implement-path-based-api-versioning-by-using-custom-domains-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 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 AWS sitios web y aplicaciones.
+ [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 su infraestructura de nube en código y aprovisionarla mediante ella. CloudFormation[El ejemplo de implementación de este patrón utiliza el AWS CDK in. TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Para trabajar con AWS CDK in se TypeScript utilizan herramientas conocidas, como el TypeScript compilador de Microsoft (`tsc`), [Node.js](https://nodejs.org/) y el administrador de paquetes de nodos (`npm`). Si lo prefiere, puede usar [Yarn](https://yarnpkg.com/), aunque en los ejemplos de este patrón se utiliza `npm`. Los módulos que componen la [Biblioteca de constructos de AWS](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) se distribuyen a través del repositorio `npm `, [npmjs.org](https://docs.npmjs.com/).
+ [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 mundo Cuentas de AWS . Regiones 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.
+ [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 WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) es un firewall de aplicación web que lo ayuda a supervisar las solicitudes HTTP y HTTPS que se reenvían a los recursos de su aplicación web protegida.

**Otras herramientas**
+ [Bruno](https://www.usebruno.com/) es un cliente de pruebas de API de código abierto y compatible con Git.
+ [cdk-nag](https://github.com/cdklabs/cdk-nag) es una utilidad de código abierto que comprueba AWS CDK las mejores prácticas en las aplicaciones mediante paquetes de reglas.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio -api-gateway. GitHub path-based-versioning-with](https://github.com/aws-samples/path-based-versioning-with-api-gateway)

## Prácticas recomendadas
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Utilice una sólida canalización de integración y entrega continuas (CI/CD) para automatizar las pruebas y el despliegue de las CloudFormation pilas creadas con. AWS CDK Para obtener más información relacionada con esta recomendación, consulte la Guía de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF es un firewall gestionado que se integra fácilmente con servicios como Amazon API Gateway. Si bien AWS WAF no es un componente necesario para que este patrón de control de versiones funcione, recomendamos incluirlo en API Gateway como práctica recomendada AWS WAF de seguridad.
+ Anime a los consumidores de la API a que actualicen periódicamente a la versión más reciente de su API para que las versiones anteriores queden obsoletas y se eliminen de forma eficiente.
+ Antes de utilizar este enfoque en un entorno de producción, implemente una estrategia de firewall y autorización para su API.
+ Implemente el acceso a la administración de sus AWS recursos Cuenta de AWS mediante el modelo de acceso con [privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ [Para aplicar las mejores prácticas y las recomendaciones de seguridad para las aplicaciones creadas con él AWS CDK, le recomendamos que utilice la utilidad 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) 

## Epics
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Preparación del entorno local
<a name="prepare-your-local-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio de la aplicación de ejemplo, ejecute el siguiente ejemplo:<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | Desarrollador de aplicaciones | 
| Navegue hasta el repositorio clonado. | Para ir a la ubicación de la carpeta del repositorio clonado, ejecute el siguiente comando: <pre>cd api-gateway-custom-domain-versioning</pre> | Desarrollador de aplicaciones | 
| Instale las dependencias requeridas. | Para instalar las dependencias necesarias, ejecute el siguiente comando:<pre>npm install </pre> | Desarrollador de aplicaciones | 

### Implemente la pila de enrutamiento CloudFormation
<a name="deploy-the-cfnshort-routing-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Iniciar la implementación de la pila de enrutamiento. | Para iniciar la implementación de la pila de CloudFormation enrutamiento`CustomDomainRouterStack`, ejecute el siguiente comando y `example.com` sustitúyalo por el nombre del dominio del que es propietario:<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>La implementación de la pila no se llevará a cabo correctamente hasta que la siguiente tarea de validación del DNS del dominio se efectúe correctamente. | Desarrollador de aplicaciones | 

### Verificar la propiedad del dominio
<a name="verify-domain-ownership"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verificar la propiedad de su dominio. | El certificado permanecerá en estado **Pendiente de validación** hasta que demuestre la propiedad del dominio asociado. Para demostrar la propiedad, agregue registros CNAME a la zona alojada asociada al dominio. Para obtener más información, consulte la [validación de DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) en la AWS Certificate Manager documentación. Agregar los registros adecuados permite que la implementación de `CustomDomainRouterStack` se lleve a cabo correctamente. | Desarrollador de aplicaciones, administrador de sistemas de AWS, administrador de redes | 
| Crear un registro de alias que apunte a su dominio personalizado de API Gateway. | Una vez que el certificado se haya emitido y validado correctamente, [cree un registro de DNS](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record) que apunte a la URL del dominio personalizado de Amazon API Gateway. La URL del dominio personalizado se genera exclusivamente mediante el aprovisionamiento del dominio personalizado y se especifica como parámetro de CloudFormation salida. A continuación, se muestra un [ejemplo del registro](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html): **Política de enrutamiento**: enrutamiento sencillo**Nombre del registro:** `demo.api-gateway-custom-domain-versioning.example.com`**Alias**: sí**Tipo de registro**: registro DNS de tipo «A» que apunta a un AWS recurso**Valor**: `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (segundos)**: 300 | Desarrollador de aplicaciones, administrador de sistemas de AWS, administrador de redes | 

### Implemente CloudFormation pilas e invoque la API
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la pila de `ApiStackV1`. | Para implementar la pila de `ApiStackV1`, use el siguiente comando:<pre>npm run deploy-v1</pre>El siguiente código de CDK agrega la asignación de API:<pre>var apiMapping = new CfnApiMapping(this, "ApiMapping", {<br />      apiId: this.lambdaRestApi.restApiId,<br />      domainName: props.customDomainName.domainName,<br />      stage: "api",<br />      apiMappingKey: "api/v1",<br />    });</pre> | Desarrollador de aplicaciones | 
| Implemente la pila de `ApiStackV2`. | Para implementar la pila de `ApiStackV2`, use el siguiente comando:<pre>npm run deploy-v2</pre> | Desarrollador de aplicaciones | 
| Invoque la API . | Para invocar la API y probar los puntos de conexión de la API mediante Bruno, consulte las instrucciones de [Información adicional](#implement-path-based-api-versioning-by-using-custom-domains-additional). | Desarrollador de aplicaciones | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de recursos. | Para destruir los recursos asociados a esta aplicación de ejemplo, utilice el comando siguiente:<pre>npx cdk destroy --all</pre>Asegúrese de limpiar todos los registros de DNS de Route 53 que se hayan agregado manualmente para el proceso de verificación de la propiedad del dominio. | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La implementación de `CustomDomainRouterStack` agota el tiempo de espera porque el certificado no se puede validar. | Asegúrese de haber agregado los registros CNAME de validación de DNS adecuados, tal como se describió en la tarea anterior. El nuevo certificado podría continuar mostrando el estado **Pendiente de validación** durante un máximo de 30 minutos después de agregar los registros de validación de DNS. Para obtener más información, consulta la [validación de DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) en la AWS Certificate Manager documentación. | 

## Recursos relacionados
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Implementación del control de versiones de API Gateway basado en encabezados con Amazon CloudFront](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/): esta entrada del blog de AWS Compute ofrece una estrategia de control de versiones basada en encabezados como alternativa a la estrategia de control de versiones basada en rutas que se describe en este patrón.
+ [AWS CDK Taller: este taller](https://cdkworkshop.com/20-typescript.html) introductorio se centra en la creación e implementación de aplicaciones mediante el uso de. AWS AWS Cloud Development Kit (AWS CDK) Este taller es compatible con Go, Python y TypeScript. 

## Información adicional
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Prueba de la API con Bruno**

Le recomendamos que utilice [Bruno](https://www.usebruno.com/), una herramienta de prueba de API de código abierto, para comprobar que el enrutamiento basado en rutas funciona correctamente en la aplicación de ejemplo. Este patrón proporciona una colección de ejemplo para facilitar las pruebas de la API de ejemplo.

Para invocar y probar la API, use los siguientes pasos:

1. [Instale Bruno.](https://www.usebruno.com/downloads)

1. Abra Bruno.

1. En el [repositorio de código](https://github.com/aws-samples/path-based-versioning-with-api-gateway) de este patrón, selecciona **Bruno/Sample-API- Gateway-Custom-Domain-Versioning ** y abre la colección.

1. Para ver el menú desplegable **Entornos** en la parte superior derecha de la interfaz de usuario (UI), seleccione cualquier solicitud de la colección.

1. En el menú desplegable **Entornos**, seleccione **Configurar**.

1. Sustituya el valor de `REPLACE_ME_WITH_YOUR_DOMAIN` por su dominio personalizado.

1. Elija **Guardar** y, a continuación, cierre la sección **Configuración**.

1. En **Entorno de pruebas**,** **compruebe que esté seleccionada la opción **Activo**.

1. Invoque su API mediante el botón **->** de la solicitud seleccionada.

1. Observe cómo se gestiona la validación (pasando valores no numéricos) en V1 en comparación con V2.

Para ver capturas de pantalla de ejemplos de invocación de la API y una comparación de las validaciones de V1 y V2, consulte **Testing your sample API** en el archivo `README.md` del [repositorio de código](https://github.com/aws-samples/path-based-versioning-with-api-gateway) de este patrón.

# Importe la biblioteca psycopg2 para interactuar con su base de AWS Lambda datos PostgreSQL
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Resumen
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) es un adaptador de bases de datos de PostgresSQL para Python. Los desarrolladores utilizan la biblioteca `psycopg2` para escribir aplicaciones de Python que interactúan con las bases de datos de PostgreSQL.

En Amazon Web Services (AWS), los desarrolladores también utilizan [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) para ejecutar código de aplicaciones o servicios de backend. Lambda es un servicio de computación sin servidor y basado en eventos que ejecuta código sin necesidad de aprovisionar ni administrar servidores.

De forma predeterminada, cuando se crea una función nueva que utiliza un [tiempo de ejecución de Python compatible con Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), el entorno de tiempo de ejecución de Lambda se crea a partir de una [imagen base de Lambda](https://github.com/aws/aws-lambda-base-images) proporcionada por AWS. Bibliotecas como `pandas` o `psycopg2` no se incluyen en la imagen base. Para usar una biblioteca, debe agruparla en un paquete personalizado y adjuntarla a Lambda.

Hay varias formas de agrupar y adjuntar una biblioteca, incluidas las siguientes:
+ Implemente la función de Lambda desde un [archivo .zip](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html).
+ Implemente la función de Lambda a partir de una imagen de contenedor personalizada.
+ Cree una [capa de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) y adjúntela a su función de Lambda.

Este patrón muestra las dos primeras opciones.

Con un paquete de implementación .zip, agregar la biblioteca `pandas` a la función de Lambda es relativamente sencillo. Cree una carpeta en su máquina Linux, agregue el script de Lambda junto con la biblioteca `pandas` y las dependencias de la biblioteca a la carpeta, comprima la carpeta y proporciónela como origen para su función de Lambda.

Aunque el uso de un paquete de implementación .zip es una práctica habitual, ese enfoque no funciona para la biblioteca `psycopg2`. Este patrón muestra primero el error que se produce si se utiliza un paquete de implementación .zip para agregar la biblioteca `psycopg2` a la función de Lambda. A continuación, el patrón muestra cómo implementar Lambda desde un Dockerfile y editar la imagen de Lambda para que la biblioteca `psycopg2` funcione.

Para obtener información sobre los tres recursos que implementa el patrón, consulte la sección [Información adicional](#import-psycopg2-library-lambda-additional).

## Requisitos previos y limitaciones
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS con permisos suficientes para implementar los recursos utilizados por este patrón AWS 
+ AWS Cloud Development Kit (AWS CDK) instalado globalmente mediante la ejecución `npm install -g aws-cdk`
+ Un cliente Git
+ Python
+ Docker

**Limitaciones**
+ Algunas 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 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**
+ Versión de tiempo de ejecución de Python [compatible con Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Versión 2.9.3 de Psycopg2
+ Versión 1.5.2 de pandas

## Arquitectura
<a name="import-psycopg2-library-lambda-architecture"></a>

**Información general de la solución**

Para ilustrar los desafíos a los que puede enfrentarse al utilizar la biblioteca `psycopg2` en Lambda, el patrón implementa dos funciones de Lambda:
+ Una función de Lambda con el tiempo de ejecución de Python creada a partir de un archivo .zip. Las bibliotecas `psycopg2` y `pandas` se instalan en este paquete de implementación .zip mediante [pip](https://pypi.org/project/pip/).
+ Una función de Lambda con el tiempo de ejecución de Python creada a partir de un Dockerfile. El Dockerfile instala las bibliotecas `psycopg2` y `pandas` en la imagen de contenedor de Lambda.

La primera función de Lambda instala la biblioteca `pandas` y sus dependencias en un archivo .zip; y Lambda puede usar esa biblioteca.

La segunda función de Lambda demuestra que, al crear una imagen de contenedor para la función de Lambda, puede ejecutar las bibliotecas `pandas` y `psycopg2` en Lambda.

## Tools (Herramientas)
<a name="import-psycopg2-library-lambda-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 lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ [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.

**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.
+ [pandas](https://pandas.pydata.org/) es una herramienta de código abierto basada en Python para el análisis y la manipulación de datos.
+ [Psycopg](https://www.psycopg.org/docs/) es un adaptador de bases de datos de PostgreSQL para el lenguaje Python diseñado para aplicaciones de varios subprocesos. Este patrón emplea Psycopg2.
+ [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 [import-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - -. in-lambda-to-interact with-postgres-database GitHub

## Prácticas recomendadas
<a name="import-psycopg2-library-lambda-best-practices"></a>

Este patrón le proporciona un ejemplo práctico de cómo crear una función Lambda AWS CDK a partir de un Dockerfile. Si reutiliza este código en su aplicación, asegúrese de que los recursos implementados cumplan con todos los requisitos de seguridad. Utilice herramientas como [Checkov](https://www.checkov.io/), que analiza las configuraciones de la infraestructura en la nube para detectar errores de configuración antes de implementar la infraestructura.

## Epics
<a name="import-psycopg2-library-lambda-epics"></a>

### Clonación del repositorio y configuración de la implementación
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el GitHub repositorio en su máquina local, ejecute los siguientes comandos:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS general | 
| Configurar su implementación. | Edite el `app.py` archivo con información sobre su Cuenta de AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS general | 

### Inicio de su cuenta de AWS e implementación de la aplicación
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap tu. Cuenta de AWS | Si aún no ha iniciado [su entorno de AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), ejecute los siguientes comandos con las AWS credenciales de su AWS cuenta:<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS general | 
| Implementar el código. | Para implementar la AWS CDK aplicación, ejecute el siguiente comando:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS general | 

### Prueba de las funciones de Lambda desde la Consola de administración de AWS
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Probar la función de Lambda creada a partir del archivo .zip. | Para probar la función de Lambda que se creó a partir del archivo .zip, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Como Lambda no encuentra las bibliotecas de PostgreSQL necesarias en la imagen predeterminada, no puede utilizar la biblioteca `psycopg2`. | AWS general | 
| Probar la función de Lambda creada a partir del Dockerfile. | Para utilizar la biblioteca `psycopg2` en la función de Lambda, debe editar la imagen de máquina de Amazon (AMI) de Lambda.Para probar la función de Lambda que se creó a partir del Dockerfile, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)El código siguiente muestra el Dockerfile que crea la AWS CDK plantilla:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>El Dockerfile toma la imagen AWS Lambda proporcionada para el entorno de ejecución de Python e instala [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), que contiene las bibliotecas necesarias para compilar aplicaciones que interactúan directamente con el servidor de administración de PostgreSQL. El Dockerfile también instala las bibliotecas `pandas` y `psycopg2`, que se indican en el archivo `requirements.txt`. | AWS general | 

## Recursos relacionados
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentación](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentación](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Información adicional
<a name="import-psycopg2-library-lambda-additional"></a>

En este patrón, la AWS CDK plantilla proporciona una AWS pila con tres recursos:
+ Un [rol de AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) para las funciones de Lambda.
+ Una función de Lambda con el tiempo de ejecución de Python. La función se implementa desde el paquete de implementación `Constructs/lambda/lambda_deploy.zip`.
+ Una función de Lambda con el tiempo de ejecución de Python. La función se implementa desde el Dockerfile de la carpeta `Constructs`.

El script de ambas funciones de Lambda comprueba si las bibliotecas `pandas` y `psycopg2` se han importado correctamente:

```
import pandas
print("pandas successfully imported")

import psycopg2
print("psycopg2 successfully imported")

def handler(event, context):
    """Function that checks whether psycopg2  and pandas are successfully imported or not"""
    return {"Status": "psycopg2 and pandas successfully imported"}
```

El paquete de implementación `lambda_deploy.zip` se crea con el script de bash `Constructs/lambda/build.sh`. Este script crea una carpeta, copia el script de Lambda, instala las bibliotecas `pandas` y `psycopg2` y genera el archivo .zip. Para generar el archivo.zip usted mismo, ejecute este script bash y vuelva a implementar la pila. AWS CDK 

El Dockerfile comienza con la imagen base AWS proporcionada para Lambda con un motor de ejecución de Python. El Dockerfile instala las bibliotecas `pandas` y `psycopg2` sobre la imagen predeterminada.

# Integre Amazon API Gateway con Amazon SQS para gestionar el REST asíncrono APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

*Natalia Colantonio Favero y Gustavo Martim, Amazon Web Services*

## Resumen
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-summary"></a>

Al implementar REST APIs, a veces es necesario exponer una cola de mensajes que las aplicaciones cliente puedan publicar. Por ejemplo, es posible que tenga problemas con la latencia de terceros APIs y que se produzcan retrasos en las respuestas, o puede que desee evitar el tiempo de respuesta de las consultas a la base de datos o escalar el servidor cuando hay un gran número de consultas APIs simultáneas. En estos escenarios, las aplicaciones cliente que publican en la cola solo necesitan saber que la API ha recibido los datos, no lo que ocurre después de recibirlos.

Este patrón crea un punto de conexión de la API de REST mediante [Amazon API Gateway](https://aws.amazon.com/api-gateway/) para enviar un mensaje a [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/). Crea una easy-to-implement integración entre los dos servicios que evita el acceso directo a la cola de SQS.

## Requisitos previos y limitaciones
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ [Una cuenta activa AWS](https://portal.aws.amazon.com/billing/signup/iam)

## Arquitectura
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-architecture"></a>

![\[Arquitectura para integrar API Gateway con Amazon SQS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


En el siguiente diagrama se muestran estos pasos:

1. Solicite un punto de conexión de la API de REST POST mediante una herramienta como Postman, otra API u otras tecnologías.

1. API Gateway publica un mensaje, que se recibe en el cuerpo de la solicitud, en la cola.

1. Amazon SQS recibe el mensaje y envía una respuesta a API Gateway con un código de éxito o error.

## Tools (Herramientas)
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-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.
+ [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 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.   

## Epics
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-epics"></a>

### Creación de una cola de SQS
<a name="create-an-sqs-queue"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de una cola. | Para crear una cola de SQS que reciba los mensajes de la API de REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 

### Cómo proporcionar acceso a Amazon SQS
<a name="provide-access-to-sqs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un rol de IAM. | Este rol de IAM proporciona a los recursos de API Gateway acceso completo a Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones, administrador de AWS | 

### Crear una API de REST
<a name="create-a-rest-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una API de REST. | Esta es la API de REST a la que se envían las solicitudes HTTP.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Conectar API Gateway a Amazon SQS. | Este paso permite que el mensaje fluya desde el cuerpo de la solicitud HTTP hasta Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 

### Prueba de la API de REST
<a name="test-the-rest-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Probar la API de REST. | Ejecute una prueba para comprobar si falta alguna configuración:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Cambiar la integración de la API para reenviar la solicitud correctamente a Amazon SQS. | Complete la configuración para corregir el error de integración:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Probar y validar el mensaje en Amazon SQS. | Ejecute una prueba para confirmar que la prueba se haya completado correctamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Probar API Gateway con un carácter especial. | Ejecute una prueba que incluya caracteres especiales (como &) que no sean aceptables en un mensaje:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Esto se debe a que los caracteres especiales no se admiten de forma predeterminada en el cuerpo del mensaje. En el siguiente paso, configurará API Gateway para que admita caracteres especiales. Para obtener más información sobre las conversiones de tipos de contenido, consulte la [documentación de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | Desarrollador de aplicaciones | 
| Cambiar la configuración de la API para que admita caracteres especiales. | Ajuste la configuración para que acepte caracteres especiales en el mensaje:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)El nuevo mensaje debe incluir el carácter especial. | Desarrollador de aplicaciones | 

### Implementación de la API de REST
<a name="deploy-the-rest-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar la API. |  Para implementar la API de REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Probar con una herramienta externa. | Ejecute una prueba con una herramienta externa para confirmar que el mensaje se ha recibido correctamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 

### Eliminación
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminar la API. | En la [consola de API Gateway](https://console.aws.amazon.com/apigateway/), elija la API que creó y, a continuación, elija **Eliminar**. | Desarrollador de aplicaciones | 
| Eliminación del rol de IAM. | **En la [consola de IAM](https://console.aws.amazon.com/iam/), en el panel **Funciones**, seleccione **AWSGatewayRoleForSQS** y, a continuación, elija Eliminar.** | Desarrollador de aplicaciones | 
| Eliminar la cola de SQS. | En la [consola de Amazon SQS](https://console.aws.amazon.com/sqs/), en el panel **Colas**, elija la cola de SQS que ha creado y, a continuación, elija **Eliminar**. | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-resources"></a>
+ [SQS- SendMessage](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#SQS-SendMessage) (documentación de API Gateway)
+ [Conversiones de tipo de contenido en API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (documentación de API Gateway)
+ [Variables \$1util](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) (documentación de API Gateway)
+ [¿Cómo puedo integrar una API REST de API Gateway con Amazon SQS y resolver los errores más comunes?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (Artículo de AWS Re:POST)

# Procesamiento de eventos de forma asíncrona con Amazon API Gateway y AWS Lambda
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed y Michael Wallner, Amazon Web Services*

## Resumen
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.

Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.

Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway y. AWS Lambda La arquitectura admite la puesta en marcha de trabajos de procesamiento con una duración de hasta 15 minutos y utiliza una API de REST básica como interfaz.

[Projen](https://pypi.org/project/projen/) [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Projen configura automáticamente un entorno virtual de [Python](https://www.python.org/downloads/) con [pre-commit](https://pre-commit.com/) y las herramientas que se utilizan para garantizar la calidad del código, analizar la seguridad y realizar pruebas unitarias. Para obtener más información, consulte la sección [Herramientas](#process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools).

## Requisitos previos y limitaciones
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS
+ Las siguientes herramientas están instaladas en su estación de trabajo:
  + [AWS Cloud Development Kit (AWS CDK) Kit de herramientas versión 2.85.0](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
  + La versión 20.10.21 de [Docker](https://docs.docker.com/get-docker/)
  + [Versión 18.13.0 de Node.js](https://nodejs.org/en/download/)
  + La versión 0.71.111 de [Projen](https://pypi.org/project/projen/)
  + La versión 3.9.16 de [Python](https://www.python.org/downloads/)

**Limitaciones**
+ El tiempo de ejecución máximo de un trabajo está limitado por el tiempo de ejecución máximo de las funciones de Lambda (15 minutos).
+ El número máximo de solicitudes de trabajo simultáneas está limitado por la simultaneidad reservada de la función de Lambda.

## Arquitectura
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-architecture"></a>

El siguiente diagrama muestra la interacción de la API de trabajos con las funciones Lambda de procesamiento y gestión de errores de eventos, con los eventos almacenados en un archivo de eventos de Amazon. EventBridge 

![\[Nube de AWS architecture showing user interaction with jobs API, Lambda functions, and EventBridge.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.png)


Un flujo de trabajo habitual incluye los siguientes pasos:

1. Usted se autentica con AWS Identity and Access Management (IAM) y obtiene las credenciales de seguridad.

1. Envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, especificando los parámetros del trabajo en el cuerpo de la solicitud.

1. La API de trabajos, que es una API de REST de API Gateway, le devuelve una respuesta HTTP que contiene el identificador del trabajo.

1. La API de trabajos invoca de forma asíncrona la función de Lambda de procesamiento de eventos.

1. La función de procesamiento de eventos procesa el evento y, a continuación, agrega los resultados del trabajo a la tabla de Amazon DynamoDB de trabajos.

1. Envía una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`, con el identificador de trabajo del paso 3 como `{jobId}`.

1. La API de trabajos consulta la tabla `jobs` de DynamoDB para recuperar los resultados del trabajo.

1. La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.

1. Si se produce un error al procesar un evento, la función de procesamiento de eventos envía el evento a la función de gestión de errores.

1. La función de gestión de errores agrega los parámetros del trabajo a la tabla `jobs` de DynamoDB.

1. Puede recuperar los parámetros del trabajo enviando una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`.

1. Si se produce un error en la gestión de errores, la función de gestión de errores envía el evento a un archivo de eventos. EventBridge 

   Puede reproducir los eventos archivados utilizando. EventBridge

## Tools (Herramientas)
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-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 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.
+ [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, funciones de Lambda, puntos de conexión de invocación HTTP que utilizan destinos de API o buses de eventos en otras 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.

**Otras herramientas**
+ [autopep8](https://github.com/hhatto/autopep8) formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) analiza el código de Python para detectar problemas de seguridad comunes.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) un verificador de confirmaciones y generador de `CHANGELOG` de Git.
+ [cfn-lint es un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.
+ [Postman](https://www.postman.com/) es una plataforma de API.
+ [pre-commit](https://pre-commit.com/) es un administrador de enlaces de Git.
+ [Projen](https://github.com/projen/projen) es un generador de proyectos.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) es un marco de Python para escribir pruebas pequeñas y legibles.

**Repositorio de código**

Este ejemplo de código de arquitectura se encuentra en el repositorio [Lambda y procesamiento de eventos GitHub asíncrono con API Gateway](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Prácticas recomendadas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-best-practices"></a>
+ Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) u otra solución de supervisión.
+ Esta arquitectura de ejemplo usa [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir `JobsAPIInvokeRole` podrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un [mecanismo de control de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Cuando un usuario envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, los datos de entrada se validan en dos niveles diferentes:
  + Amazon API Gateway se encarga de la [validación de la primera solicitud](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La función de procesamiento de eventos realiza la segunda solicitud.

    No se hace ninguna validación cuando el usuario realiza una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe la posibilidad de [usar AWS WAF para proteger su API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

## Epics
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk.git</pre> | DevOps ingeniero | 
| Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante [Projen](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-lambda-cdk<br />npx projen</pre> | DevOps ingeniero | 
| Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | DevOps ingeniero | 

### Implementación de la arquitectura de ejemplo
<a name="deploy-the-example-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Para arrancar AWS CDK Cuenta de AWS, ejecuta el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS hogar, ejecute el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Prueba de la arquitectura
<a name="test-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale los requisitos previos de prueba. | Instale en su estación de trabajo [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) y [jq](https://jqlang.github.io/jq/).Se sugiere usar [Postman](https://www.postman.com/downloads/) para probar esta arquitectura de ejemplo, pero no es obligatorio. Si elige una herramienta para probar API alternativa, asegúrese de que sea compatible con la [autenticación de AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y consulte los puntos de conexión de la API expuestos, que se pueden inspeccionar [exportando la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingeniero | 
| Asuma el `JobsAPIInvokeRole`. | [Asuma](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) el `JobsAPIInvokeRole` que apareció en la salida del comando de implementación:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | AWS DevOps | 
| Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, [envíe solicitudes](https://learning.postman.com/docs/sending-requests/requests/#next-steps) a la API de trabajos. Para obtener más información, consulte la [documentación de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingeniero | 

## Resolución de problemas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el [grupo de CloudWatch registros de Amazon Logs `/aws/apigateway/JobsAPIAccessLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | 

## Recursos relacionados
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [Plantilla de mapeo de API Gateway y referencia de variables de registro de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Configurar la invocación asíncrona de la función Lambda de backend](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)

# Procesamiento de eventos de forma asíncrona con Amazon API Gateway y Amazon DynamoDB Streams
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini y Michael Wallner, Amazon Web Services*

## Resumen
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.

Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.

Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway, Amazon DynamoDB Streams y. AWS Lambda La arquitectura admite la puesta en marcha de trabajos de procesamiento en paralelo con los mismos parámetros de entrada y utiliza una API de REST básica como interfaz. En este ejemplo, el uso de Lambda como backend limita la duración de los trabajos a 15 minutos. Puede evitar este límite utilizando un servicio alternativo para procesar los eventos entrantes (por ejemplo,). AWS Fargate

[Projen](https://pypi.org/project/projen/) [se utiliza para configurar el entorno de desarrollo local y para implementar la arquitectura de ejemplo en un objetivo Cuenta de AWS, en combinación con el [AWS Cloud Development Kit (AWS CDK) kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) y Node.js.](https://nodejs.org/en/download/) Projen configura automáticamente un entorno virtual de [Python](https://www.python.org/downloads/) con [pre-commit](https://pre-commit.com/) y las herramientas que se utilizan para garantizar la calidad del código, analizar la seguridad y realizar pruebas unitarias. Para obtener más información, consulte la sección [Herramientas](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools).

## Requisitos previos y limitaciones
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS
+ Las siguientes herramientas están instaladas en su estación de trabajo:
  + [AWS Cloud Development Kit (AWS CDK) Kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versión 2.85.0 o posterior
  + La versión 20.10.21 o posterior de [Docker](https://docs.docker.com/get-docker/)
  + La versión 18 o posterior de [Node.js](https://nodejs.org/en/download/)
  + La versión 0.71.111 o posterior de [Projen](https://pypi.org/project/projen/)
  + La versión 3.9.16 o posterior de [Python](https://www.python.org/downloads/)

**Limitaciones**
+ El número máximo recomendado de lectores para DynamoDB Streams es de dos para evitar la limitación.
+ El tiempo de ejecución máximo de un trabajo está limitado por el tiempo de ejecución máximo de las funciones de Lambda (15 minutos).
+ El número máximo de solicitudes de trabajo simultáneas está limitado por la simultaneidad reservada de las funciones de Lambda.

## Arquitectura
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Arquitectura**

El siguiente diagrama muestra la interacción de la API de trabajos con DynamoDB Streams y las funciones Lambda de procesamiento y gestión de errores de eventos, con los eventos almacenados en un archivo de eventos de Amazon. EventBridge 

![\[Diagrama de arquitectura y proceso, con los pasos enumerados después del diagrama.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.png)


Un flujo de trabajo habitual incluye los siguientes pasos:

1. Se autentica con (IAM) y se obtienen las credenciales de seguridad AWS Identity and Access Management .

1. Envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, especificando los parámetros del trabajo en el cuerpo de la solicitud.

1. La API de trabajos devuelve una respuesta HTTP que contiene el identificador del trabajo.

1. La API de trabajos agrega los parámetros del trabajo a la tabla `jobs_table` de Amazon DynamoDB.

1. El flujo de DynamoDB de la tabla de DynamoDB `jobs_table` invoca las funciones de Lambda de procesamiento de eventos.

1. Las funciones de Lambda de procesamiento de eventos procesan el evento y, a continuación, agregan los resultados del trabajo a la tabla `jobs_table` de DynamoDB. Para garantizar la coherencia de los resultados, las funciones de procesamiento de eventos implementan un mecanismo de [bloqueo positivo](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html).

1. Envía una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`, con el identificador de trabajo del paso 3 como `{jobId}`.

1. La API de trabajos consulta la tabla `jobs_table` de DynamoDB para recuperar los resultados del trabajo.

1. La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.

1. Si el procesamiento de eventos falla, la asignación de orígenes de la función de procesamiento de eventos envía el evento al tema de Amazon Simple Notification Service (Amazon SNS) de gestión de errores.

1. El tema de gestión de errores de SNS envía el evento de forma asíncrona a la función de gestión de errores.

1. La función de gestión de errores agrega los parámetros del trabajo a la tabla `jobs_table` de DynamoDB.

   Puede recuperar los parámetros del trabajo enviando una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`.

1. Si la gestión de errores falla, la función de gestión de errores envía el evento a un archivo de Amazon EventBridge .

   Puede reproducir los eventos archivados utilizando. EventBridge

## Tools (Herramientas)
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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 lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ [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.
+ [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 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.

**Otras herramientas**
+ [autopep8](https://github.com/hhatto/autopep8) formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) analiza el código de Python para detectar problemas de seguridad comunes.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) un verificador de confirmaciones y generador de `CHANGELOG` de Git.
+ [cfn-lint es un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.
+ [Postman](https://www.postman.com/) es una plataforma de API.
+ [pre-commit](https://pre-commit.com/) es un administrador de enlaces de Git.
+ [Projen](https://github.com/projen/projen) es un generador de proyectos.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) es un marco de Python para escribir pruebas pequeñas y legibles.

**Repositorio de código**

Este ejemplo de código de arquitectura se encuentra en el repositorio GitHub [Asynchronous Processing with API Gateway y DynamoDB Streams](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk).

## Prácticas recomendadas
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-best-practices"></a>
+ Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) u otra solución de supervisión.
+ Esta arquitectura de ejemplo usa [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir `JobsAPIInvokeRole` podrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un [mecanismo de control de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Cuando un usuario envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, los datos de entrada se validan en dos niveles diferentes:
  + API Gateway se encarga de la [validación de la primera solicitud](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La función de procesamiento de eventos realiza la segunda solicitud.

    No se hace ninguna validación cuando el usuario realiza una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe su [uso AWS WAF](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) para proteger su API.
+ Para evitar limitaciones, la [documentación de DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) desaconseja a los usuarios hacer operaciones de lectura con más de dos consumidores de la misma partición del flujo. Para escalar horizontalmente el número de consumidores, le recomendamos que utilice [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ En este ejemplo, se ha utilizado el [bloqueo positivo](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) para garantizar actualizaciones coherentes de los elementos de la tabla `jobs_table` de DynamoDB. Según los requisitos del caso de uso, es posible que tenga que implementar mecanismos de bloqueo más fiables, como el bloqueo negativo.

## Epics
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git</pre> | DevOps ingeniero | 
| Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante [Projen](https://github.com/projen/projen):<pre>cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk<br />npx projen</pre> | DevOps ingeniero | 
| Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | DevOps ingeniero | 

### Implementación de la arquitectura de ejemplo
<a name="deploy-the-example-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Para arrancar [AWS CDK](https://aws.amazon.com/cdk/) Cuenta de AWS, ejecuta el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS hogar, ejecute el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Prueba de la arquitectura
<a name="test-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale los requisitos previos de prueba. | Instale en su estación de trabajo [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) y [jq](https://jqlang.github.io/jq/).Se sugiere usar [Postman](https://www.postman.com/downloads/) para probar esta arquitectura de ejemplo, pero no es obligatorio. Si elige una herramienta para probar API alternativa, asegúrese de que sea compatible con la [autenticación de AWA Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y consulte los puntos de conexión de la API expuestos, que se pueden inspeccionar [exportando la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingeniero | 
| Asuma el `JobsAPIInvokeRole`. | [Asuma](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) el `JobsAPIInvokeRole` que apareció en la salida del comando `deploy`:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | AWS DevOps | 
| Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, envíe solicitudes a la API de trabajos. Para obtener más información, consulte la [documentación de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingeniero | 

## Resolución de problemas
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el [grupo de CloudWatch registros de Amazon Logs `/aws/apigateway/JobsAPIAccessLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Recursos relacionados
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-resources"></a>
+ [Plantilla de mapeo de API Gateway y referencia de variables de registro de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Cambiar la captura de datos para DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Bloqueo optimista con número de versión](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Uso de Kinesis Data Streams para capturar los cambios en DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

# Procesamiento de eventos de forma asíncrona con Amazon API Gateway, Amazon SQS y AWS Fargate
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini y Michael Wallner, Amazon Web Services*

## Resumen
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.

Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.

Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway, Amazon Simple Queue Service (Amazon SQS) y. AWS Fargate La arquitectura admite la puesta en marcha de trabajos de procesamiento sin restricciones de duración y utiliza una API de REST básica como interfaz.

[Projen](https://pypi.org/project/projen/) [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Projen configura automáticamente un entorno virtual de [Python](https://www.python.org/downloads/) con [pre-commit](https://pre-commit.com/) y las herramientas que se utilizan para garantizar la calidad del código, analizar la seguridad y realizar pruebas unitarias. Para obtener más información, consulte la sección [Herramientas](#process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools).

## Requisitos previos y limitaciones
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Las siguientes herramientas están instaladas en su estación de trabajo:
  + [AWS Cloud Development Kit (AWS CDK) Kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versión 2.85.0 o posterior
  + La versión 20.10.21 o posterior de [Docker](https://docs.docker.com/get-docker/)
  + La versión 18 o posterior de [Node.js](https://nodejs.org/en/download/)
  + La versión 0.71.111 o posterior de [Projen](https://pypi.org/project/projen/)
  + La versión 3.9.16 o posterior de [Python](https://www.python.org/downloads/)

**Limitaciones**
+ Los trabajos simultáneos están limitados a 500 tareas por minuto, que es el número máximo de tareas que Fargate puede aprovisionar.

## Arquitectura
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-architecture"></a>

El siguiente diagrama muestra la interacción de la API de trabajos con la tabla `jobs` Amazon DynamoDB, el servicio Fargate de procesamiento de eventos y la función de gestión de errores. AWS Lambda Los eventos se almacenan en un archivo de EventBridge eventos de Amazon.

![\[Diagrama de arquitectura con una descripción a continuación del diagrama.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.png)


Un flujo de trabajo habitual incluye los siguientes pasos:

1. Usted se autentica con AWS Identity and Access Management (IAM) y obtiene las credenciales de seguridad.

1. Envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, especificando los parámetros del trabajo en el cuerpo de la solicitud.

1. La API de trabajos, que es una API de REST de API Gateway, le devuelve una respuesta HTTP que contiene el identificador del trabajo.

1. La API de trabajos envía un mensaje a la cola de SQS.

1. Fargate extrae el mensaje de la cola de SQS, procesa el evento y, a continuación, agrega los resultados del trabajo a la tabla `jobs` de DynamoDB.

1. Envía una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`, con el identificador de trabajo del paso 3 como `{jobId}`.

1. La API de trabajos consulta la tabla `jobs` de DynamoDB para recuperar los resultados del trabajo.

1. La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.

1. Si el procesamiento de eventos falla, la cola de SQS envía el evento a la cola de mensajes fallidos (DLQ).

1. Un EventBridge evento inicia la función de gestión de errores.

1. La función de gestión de errores agrega los parámetros del trabajo a la tabla `jobs` de DynamoDB.

1. Puede recuperar los parámetros del trabajo enviando una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`.

1. Si la gestión de errores falla, la función de gestión de errores envía el evento a un archivo. EventBridge 

   Puede reproducir los eventos archivados utilizando. EventBridge

## Tools (Herramientas)
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-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 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 Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)le ayuda a ejecutar contenedores sin necesidad de gestionar servidores o instancias de Amazon Elastic Compute Cloud (Amazon EC2). Se utiliza en conjunto con Amazon Elastic Container Service (Amazon ECS).
+ [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, funciones de Lambda, puntos de conexión de invocación HTTP que utilizan destinos de API o buses de eventos en otras 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.
+ [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.

**Otras herramientas**
+ [autopep8](https://github.com/hhatto/autopep8) formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) analiza el código de Python para detectar problemas de seguridad comunes.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) un verificador de confirmaciones y generador de `CHANGELOG` de Git.
+ [cfn-lint es un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.
+ [Postman](https://www.postman.com/) es una plataforma de API.
+ [pre-commit](https://pre-commit.com/) es un administrador de enlaces de Git.
+ [Projen](https://github.com/projen/projen) es un generador de proyectos.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) es un marco de Python para escribir pruebas pequeñas y legibles.

**Repositorio de código**

Este ejemplo de código de arquitectura se encuentra en el repositorio de SQS [y procesamiento GitHub asíncrono con API Gateway](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk).

## Prácticas recomendadas
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-best-practices"></a>
+ Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) u otra solución de supervisión.
+ Esta arquitectura de ejemplo usa [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir `JobsAPIInvokeRole` podrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un [mecanismo de control de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Cuando un usuario envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, los datos de entrada se validan en dos niveles diferentes:
  + API Gateway se encarga de la [validación de la primera solicitud](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La función de procesamiento de eventos realiza la segunda solicitud.

    No se hace ninguna validación cuando el usuario realiza una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe su [uso AWS WAF para](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) proteger su API.

## Epics
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-epics"></a>

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git</pre> | DevOps ingeniero | 
| Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante [Projen](https://github.com/projen/projen):<pre>cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk<br />npx projen</pre> | DevOps ingeniero | 
| Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | DevOps ingeniero | 

### Implementación de la arquitectura de ejemplo
<a name="deploy-the-example-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Para arrancar [AWS CDK](https://aws.amazon.com/cdk/) Cuenta de AWS, ejecuta el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS servidor, ejecute el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Prueba de la arquitectura
<a name="test-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale los requisitos previos de prueba. | Instale en su estación de trabajo [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) y [jq](https://jqlang.github.io/jq/).Se sugiere usar [Postman](https://www.postman.com/downloads/) para probar esta arquitectura de ejemplo, pero no es obligatorio. Si elige una herramienta para probar API alternativa, asegúrese de que sea compatible con la [autenticación de AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y consulte los puntos de conexión de la API expuestos, que se pueden inspeccionar [exportando la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingeniero | 
| Asuma el `JobsAPIInvokeRole`. | [Asuma](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) el `JobsAPIInvokeRole` que apareció en la salida del comando `deploy`:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, envíe solicitudes a la API de trabajos. Para obtener más información, consulte la [documentación de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingeniero | 

## Resolución de problemas
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el [grupo de CloudWatch registros de Amazon Logs `/aws/apigateway/JobsAPIAccessLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 
| La destrucción y posterior redespliegue de la arquitectura del ejemplo fallan porque el [grupo de CloudWatch registros `/aws/ecs/EventProcessingServiceLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 

## Recursos relacionados
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-resources"></a>
+ [Plantilla de mapeo de API Gateway y referencia de variables de registro de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [¿Cómo integro una API de REST de API Gateway con Amazon SQS y soluciono los errores comunes?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)

# Puesta en marcha de las tareas de Automatización de AWS Systems Manager de forma sincrónica desde AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El khoury, Amazon Web Services*

## Resumen
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Este patrón explica cómo integrarse AWS Step Functions con AWS Systems Manager. Utiliza las integraciones de servicios del AWS SDK para llamar a la **startAutomationExecution**API de Systems Manager con un token de tarea de un flujo de trabajo de una máquina de estado y se detiene hasta que el token regresa con una llamada correcta o errónea. Para demostrar la integración, este patrón implementa un encapsulador de documentos (manuales de procedimientos) de Automatización en torno a los documentos `AWS-RunShellScript` o `AWS-RunPowerShellScript`; además, usa `.waitForTaskToken` para llamar de forma sincrónica a `AWS-RunShellScript` o `AWS-RunPowerShellScript`. Para obtener más información sobre las integraciones de servicios del AWS SDK en Step Functions, consulta la [Guía para AWS Step Functions desarrolladores](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** es un servicio de flujo de trabajo visual de bajo código que puede utilizar para crear aplicaciones distribuidas, automatizar los procesos empresariales y de TI y crear canalizaciones de datos y aprendizaje automático mediante AWS el uso de servicios. Los flujos de trabajo gestionan los errores, los reintentos, la paralelización, las integraciones de servicios y la observabilidad para que pueda centrarse en una lógica empresarial de mayor valor.

La automatización, una capacidad de AWS Systems Manager, simplifica las tareas comunes de mantenimiento, implementación y corrección para empresas Servicios de AWS como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift y Amazon Simple Storage Service (Amazon S3). Automation le ofrece un control granular sobre la concurrencia de sus automatizaciones. Por ejemplo, puede especificar a cuántos recursos desea dirigirse simultáneamente y cuántos errores pueden producirse antes de que se detenga una automatización.

Para obtener detalles sobre la implementación, incluidos los pasos, parámetros y ejemplos del manual de procedimientos, consulte la sección [Información adicional](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Requisitos previos y limitaciones
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Requisitos previos **
+  AWS Una cuenta activa
+ AWS Identity and Access Management (IAM) para acceder a Step Functions y Systems Manager
+ Una EC2 instancia con el Agente Systems Manager (SSM Agent) [instalado](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) en la instancia
+ [Un perfil de instancia de IAM para Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) adjunto a la instancia en la que planea ejecutar el manual de procedimientos
+ Un rol de Step Functions que tenga los siguientes permisos de IAM (que sigan el principio de privilegio mínimo):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Versiones de producto**
+ Versión de esquema de documento de SSM 0.3 o posterior
+ SSM Agent versión 2.3.672.0 o posterior

## Arquitectura
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Pila de tecnología de destino**
+ AWS Step Functions
+ AWS Systems Manager Automation

**Arquitectura de destino**

![\[Arquitectura para ejecutar tareas de automatización de Systems Manager de forma sincrónica desde Step Functions\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automatización y escala**
+ Este patrón proporciona una AWS CloudFormation plantilla que puede usar para implementar los manuales de ejecución en varias instancias. (Consulte el repositorio de [implementación de GitHub Step Functions y Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken)).

## Tools (Herramientas)
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-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 administrarlos a lo largo de su ciclo de vida en todas Cuentas de AWS las regiones.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) lo ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [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.
+ [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 recursos de forma segura y a escala. AWS 

**Código**

El código de este patrón está disponible en el repositorio de [implementación de GitHub Step Functions y Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Epics
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Creación de manuales de procedimientos
<a name="create-runbooks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue la CloudFormation plantilla. | Descarga la `ssm-automation-documents.cfn.json` plantilla de la `cloudformation ` carpeta del GitHub repositorio. | AWS DevOps | 
| Cree manuales de procedimientos. | Inicie sesión en Consola de administración de AWS, abra la [CloudFormation consola](https://console.aws.amazon.com/cloudformation/) e implemente la plantilla. Para obtener más información sobre la implementación de CloudFormation plantillas, consulte [Crear una pila en la CloudFormation consola](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) en la CloudFormation documentación. La CloudFormation plantilla implementa tres recursos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Crear una máquina de estado de muestra
<a name="create-a-sample-state-machine"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una máquina de estado de prueba.  | Siga las instrucciones de la [Guía para desarrolladores de AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) para crear y poner en marcha una máquina de estados. Para la definición, utilice el siguiente código. Asegúrese de actualizar el valor `InstanceIds` con el ID de una instancia válida habilitada para Systems Manager en su cuenta.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Este código llama al manual de procedimientos para ejecutar dos comandos que demuestran la llamada `waitForTaskToken` a Systems Manager Automation.El valor del parámetro `shell` (`Shell` o `PowerShell`) determina si el documento de Automatización se pone en marcha en `AWS-RunShellScript` o `AWS-RunPowerShellScript`.La tarea escribe en el `/home/ssm-user/automation.log` archivo «Se trata de un waitForTask token de automatización en ejecución de pruebas» y, a continuación, se suspende durante 100 segundos antes de responder con el token de la tarea y lanzar la siguiente tarea del flujo de trabajo.Si, en vez de eso, quiere llamar al manual de procedimientos `SfnRunCommandByTargets`, sustituya la sección `Parameters` del código anterior por la siguiente:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Actualice el rol de IAM de la máquina de estado. | El paso anterior crea automáticamente un rol de IAM dedicado para la máquina de estados. Sin embargo, no concede permisos para llamar al manual de procedimientos. Actualice el rol añadiendo los permisos siguientes:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Valide las llamadas sincrónicas. | Ejecute la máquina de estados para validar la llamada sincrónica entre Step Functions y Systems Manager Automation. Para ver un ejemplo de salida, consulte la sección [Información adicional](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Recursos relacionados
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Cómo empezar con AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guía para AWS Step Functions desarrolladores*)
+ [Espere a que le devuelvan la llamada con el token de la tarea](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*guía para AWS Step Functions desarrolladores*, patrones de integración de servicios)
+ Llamadas a las API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) y [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) (documentación de Boto3) 
+ [AWS Systems Manager Automatización](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*guía AWS Systems Manager del usuario*)

## Información adicional
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Detalles de la implementación**

Este patrón proporciona una CloudFormation plantilla que despliega dos manuales de ejecución de Systems Manager:
+ `SfnRunCommandByInstanceIds`ejecuta el `AWS-RunPowerShellScript` comando `AWS-RunShellScript` o mediante la instancia. IDs
+ `SfnRunCommandByTargets` pone en marcha el comando `AWS-RunShellScript` o `AWS-RunPowerShellScript` usando destinos.

Cada manual de procedimientos implementa cuatro pasos para lograr una llamada sincrónica cuando se usa la opción `.waitForTaskToken` de Step Functions.


| 
| 
| Paso | Action | Description (Descripción) | 
| --- |--- |--- |
| **1** | `Branch` | Comprueba el valor del parámetro `shell` (`Shell` o `PowerShell`) para decidir si poner en marcha `AWS-RunShellScript` en Linux o `AWS-RunPowerShellScript` en Windows. | 
| **2** | `RunCommand_Shell` o `RunCommand_PowerShell` | Recibe varias entradas y pone en marcha el comando `RunShellScript` o `RunPowerShellScript`. Para obtener más información, consulte la pestaña **Detalles** de `RunCommand_Shell` o `RunCommand_PowerShell` del documento de Automatización en la consola de Systems Manager. | 
| **3** | `SendTaskFailure` | Se ejecuta cuando se anula o cancela el paso 2. Llama a la API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) de Step Functions, que acepta tres parámetros como entrada: el token pasado por la máquina de estados, el error de error y una descripción de la causa del error. | 
| **4** | `SendTaskSuccess` | Se ejecuta cuando el paso 2 se realiza correctamente. Llama a la API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) de Step Functions, que acepta el token pasado por la máquina de estados como entrada. | 

**Parámetros del manual de procedimientos**

Manual de procedimientos `SfnRunCommandByInstanceIds`:


| 
| 
| Nombre del parámetro | Tipo | Opcional u obligatorio | Description (Descripción) | 
| --- |--- |--- |--- |
| `shell` | Cadena | Obligatorio | El intérprete de comandos de las instancias para decidir si poner en marcha `AWS-RunShellScript` para Linux o `AWS-RunPowerShellScript` para Windows. | 
| `deliveryTimeout` | Entero | Opcional | La cantidad, en segundos, de espera para que un comando se envíe a SSM Agent de una instancia. Este parámetro tiene un valor mínimo de 30 (0,5 minutos) y un valor máximo de 2 592 000 (720 horas). | 
| `executionTimeout` | Cadena | Opcional | El tiempo, en segundos, para que un comando se complete antes de considerar que se ha producido un error. El valor predeterminado es de 3600 (1 hora). El valor máximo es 172800 (48 horas). | 
| `workingDirectory` | Cadena | Opcional | La ruta al directorio de trabajo en la instancia. | 
| `Commands` | StringList | Obligatorio | El script o comando del intérprete de comandos que se va a ejecutar. | 
| `InstanceIds` | StringList | Obligatorio | La IDs de las instancias en las que desea ejecutar el comando. | 
| `taskToken` | Cadena | Obligatorio | El token de tarea que se utilizará para las respuestas de devolución de llamada. | 

Manual de procedimientos `SfnRunCommandByTargets`:


| 
| 
| Name | Tipo | Opcional u obligatorio | Description (Descripción) | 
| --- |--- |--- |--- |
| `shell` | Cadena | Obligatorio | El intérprete de comandos de las instancias para decidir si poner en marcha `AWS-RunShellScript` para Linux o `AWS-RunPowerShellScript` para Windows. | 
| `deliveryTimeout` | Entero | Opcional | La cantidad, en segundos, de espera para que un comando se envíe a SSM Agent de una instancia. Este parámetro tiene un valor mínimo de 30 (0,5 minutos) y un valor máximo de 2 592 000 (720 horas). | 
| `executionTimeout` | Entero | Opcional | El tiempo, en segundos, para que un comando se complete antes de considerar que se ha producido un error. El valor predeterminado es de 3600 (1 hora). El valor máximo es 172800 (48 horas). | 
| `workingDirectory` | Cadena | Opcional | La ruta al directorio de trabajo en la instancia. | 
| `Commands` | StringList | Obligatorio | El script o comando del intérprete de comandos que se va a ejecutar. | 
| `Targets` | MapList | Obligatorio | Una matriz de criterios de búsqueda que identifica las instancias utilizando los pares clave-valor que usted especifique. Por ejemplo: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | Cadena | Obligatorio | El token de tarea que se utilizará para las respuestas de devolución de llamada. | 

**Resultados de ejemplo**

La siguiente tabla proporciona un ejemplo de salida de la función step. Muestra que el tiempo total de ejecución es superior a 100 segundos entre el paso 5 (`TaskSubmitted`) y el paso 6 (`TaskSucceeded`). Esto demuestra que la función de Step Functions esperó a que finalizara el comando `sleep 100` antes de pasar a la siguiente tarea del flujo de trabajo.


| 
| 
| ID | Tipo | Paso | Recurso | Tiempo transcurrido (ms) | Timestamp | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 de marzo de 2022 02:50:34.303 p.m. | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 de marzo de 2022 02:50:34.343 p.m. | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 de marzo de 2022 02:50:34.343 p.m. | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 de marzo de 2022 02:50:34.457 p.m. | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 de marzo de 2022 02:50:34.960 p.m. | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 de marzo de 2022 02:52:18.138 p.m. | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 de marzo de 2022 02:52:18.163 p.m. | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 de marzo de 2022 02:52:18.200 p.m. | 

# Ejecute lecturas paralelas de objetos S3 mediante Python en una AWS Lambda función
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

## Resumen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-summary"></a>

Puede utilizar este patrón para recuperar y resumir una lista de documentos de buckets de Amazon Simple Storage Service (Amazon S3) en tiempo real. El patrón proporciona código de ejemplo para leer en paralelo objetos de buckets de S3 en Amazon Web Services (AWS). El patrón muestra cómo ejecutar eficientemente tareas I/O enlazadas con AWS Lambda funciones usando Python.

Una empresa financiera utilizó este patrón en una solución interactiva para aprobar o rechazar manualmente las transacciones financieras correlacionadas en tiempo real. Los documentos de las transacciones financieras se almacenaron en un bucket de S3 relacionado con el mercado. Un operador seleccionó una lista de documentos del bucket de S3, analizó el valor total de las transacciones calculadas por la solución y decidió aprobar o rechazar el lote seleccionado.

Las tareas vinculadas a operacioness de E/S admiten varios subprocesos. En este código de ejemplo, el [concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)se utiliza con un máximo de 30 subprocesos simultáneos, aunque las funciones Lambda admiten hasta 1024 subprocesos (uno de los cuales es el proceso principal). Este límite se debe a que demasiados subprocesos crean problemas de latencia debido al cambio de contexto y al uso de los recursos de computación. También es necesario aumentar el número máximo de conexiones del grupo en `botocore` para que todos los subprocesos puedan descargar el objeto de S3 de forma simultánea.

El código de ejemplo usa un objeto de 8,3 KB, con datos JSON en un bucket de S3. El objeto se lee varias veces. Cuando la función de Lambda lee el objeto, los datos JSON se decodifican en un objeto de Python. En diciembre de 2024, el resultado tras ejecutar este ejemplo fue de 1000 lecturas procesadas en 2,3 segundos y 10 000 lecturas procesadas en 27 segundos mediante una función Lambda configurada con 2304 MB de memoria. AWS Lambda admite configuraciones de memoria de 128 MB a 10 240 MB (10 GB), aunque aumentar la memoria Lambda a más de 2304 MB no ayudó a reducir el tiempo de ejecución de esta tarea específica vinculada a la E/S.

La herramienta [AWS Lambda Power Tuning](https://github.com/alexcasalboni/aws-lambda-power-tuning) se utilizó para probar diferentes configuraciones de memoria Lambda y verificar la mejor performance-to-cost relación para la tarea. Para obtener más información, consulte la sección [Información adicional](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Requisitos previos y limitaciones
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Competencia en desarrollo con Python.

**Limitaciones**
+ Una función de Lambda puede tener como máximo [1024 procesos o subprocesos de puesta en marcha](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution).
+  Cuentas de AWS Los nuevos tienen un límite de memoria Lambda de 3.008 MB. Ajuste la herramienta de ajuste AWS Lambda de potencia en consecuencia. Para obtener más información, consulte la sección [Solución de problemas](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ Amazon S3 tiene un límite de [5500 GET/HEAD solicitudes por segundo por prefijo particionado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html).

**Versiones de producto**
+ Python 3.9 o posterior
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) versión 2
+ AWS Lambda Power Tuning 4.3.6 (opcional)

## Arquitectura
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-architecture"></a>

**Pila de tecnología de destino**
+ AWS Lambda
+ Amazon S3
+ AWS Step Functions (si se ha implementado AWS Lambda Power Tuning)

**Arquitectura de destino**

En el siguiente diagrama, se muestra una función de Lambda que lee objetos de un bucket de S3 en paralelo. El diagrama también incluye un flujo de trabajo de Step Functions para que la herramienta AWS Lambda Power Tuning ajuste con precisión la memoria de funciones Lambda. Este refinamiento permite lograr un buen equilibrio entre el costo y el rendimiento.

![\[Diagrama que muestra la función de Lambda, el bucket de S3 y AWS Step Functions.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Automatización y escala**

Las funciones de Lambda se escalan rápidamente cuando es necesario. Para evitar los errores 503 de ralentización de Amazon S3 cuando hay mucha demanda, le recomendamos que ponga algunos límites al escalado.

## Tools (Herramientas)
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código. La infraestructura de ejemplo se creó para implementarla con AWS CDK.
+ [AWS Command Line InterfaceAWS 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 shell de línea de comandos. En este patrón, la AWS CLI versión 2 se utiliza para cargar un archivo JSON de ejemplo.
+ [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 le permite 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 otros servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general. La [reutilización de subprocesos de trabajo inactivos](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) se introdujo en la versión 3.8 de Python, y el código de la función de Lambda de este patrón se creó para la versión 3.9 y posteriores de Python.

**Repositorio de código**

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

## Prácticas recomendadas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+ Esta AWS CDK construcción se basa en sus permisos Cuenta de AWS de usuario para implementar la infraestructura. [Si tienes pensado usar AWS CDK Pipelines o despliegues multicuenta, consulta los sintetizadores Stack.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers)
+ Esta aplicación de ejemplo no tiene habilitados los registros de acceso en el bucket de S3. Se recomienda habilitar los registros de acceso en el código de producción.

## Epics
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-epics"></a>

### Preparación del entorno de desarrollo
<a name="prepare-the-development-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe la versión instalada de Python. | Este código se probó específicamente en Python 3.9 y Python 3.13, y debería funcionar en todas las versiones entre estas versiones. Para comprobar su versión de Python, use el comando `python3 -V` en su terminal e instale una versión más reciente si es necesario.Para verificar que los módulos necesarios estén instalados, use `python3 -c "import pip, venv"`. Si no aparece ningún mensaje de error, significa que los módulos están instalados correctamente y que todo está listo para poner en marcha este ejemplo.  | Arquitecto de la nube | 
| Instala. AWS CDK | Para instalarlo AWS CDK si aún no está instalado, siga las instrucciones que aparecen en [Introducción al AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Para confirmar que la AWS CDK versión instalada es 2.0 o posterior, ejecute`cdk –version`. | Arquitecto de la nube | 
| Arranque su entorno de . | Para arrancar su entorno, si aún no lo ha hecho, siga las instrucciones de [Bootstrap your environment for use with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html). | Arquitecto de la nube | 

### Clonación del repositorio de ejemplo
<a name="clone-the-example-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para instalar la versión más reciente del repositorio, use el siguiente comando:<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Arquitecto de la nube | 
| Cambie el directorio de trabajo al repositorio clonado. | Use el siguiente comando:<pre>cd aws-lambda-parallel-download</pre> | Arquitecto de la nube | 
| Cree un entorno virtual de Python. | Para crear un entorno virtual de Python, use el siguiente comando:<pre>python3 -m venv .venv</pre> | Arquitecto de la nube | 
| Active el entorno virtual. | Para activar el entorno virtual, puede usar el siguiente comando:<pre>source .venv/bin/activate</pre> | Arquitecto de la nube | 
| Instalar las dependencias. | Para instalar las dependencias de Python, use el comando `pip`:<pre>pip install -r requirements.txt</pre> | Arquitecto de la nube | 
| Examine el código. | (Opcional) El código de ejemplo que descarga un objeto del bucket de S3 está en `resources/parallel.py`.El código de la infraestructura está en la carpeta `parallel_download`. | Arquitecto de la nube | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la aplicación. | Ejecute `cdk deploy`.Anote los AWS CDK resultados:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arquitecto de la nube | 
| Cargue un archivo JSON de ejemplo. | El repositorio contiene un archivo JSON de ejemplo de unos 9 KB. Para cargar el archivo en el bucket de S3 de la pila creada, use el siguiente comando:<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>Reemplace `<ParallelDownloadStack.SampleS3BucketName>` con el valor correspondiente de la AWS CDK salida. | Arquitecto de la nube | 
| Ejecute la aplicación. | Para poner en marcha la aplicación, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arquitecto de la nube | 
| Agregue el número de descargas. | (Opcional) Para poner en marcha 1500 llamadas a get object, use el siguiente JSON en **Evento JSON** del parámetro `Test`:<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Arquitecto de la nube | 

### Opcional: ejecute Power Tuning AWS Lambda
<a name="optional-run-lamlong-power-tuning"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la herramienta AWS Lambda de ajuste de potencia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)Al final de la ejecución, el resultado aparecerá en la pestaña **Entrada y salida de ejecución**. | Arquitecto de la nube | 
| Vea los resultados del ajuste de AWS Lambda potencia en un gráfico. | En la pestaña **Entrada y salida de ejecución**, copie el enlace de la propiedad `visualization` y péguelo en una nueva pestaña del navegador. | Arquitecto de la nube | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los objetos del bucket de S3. | Antes de destruir los recursos implementados, debe eliminar todos los objetos del bucket de S3:<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>Recuerde `<ParallelDownloadStack.SampleS3BucketName>` sustituir por el valor de las AWS CDK salidas. | Arquitecto de la nube | 
| Destruya los recursos. | Para destruir todos los recursos que se hayan creado para este piloto, use el siguiente comando:<pre>cdk destroy</pre> | Arquitecto de la nube | 

## Resolución de problemas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | En el caso de las cuentas nuevas, es posible que no pueda configurar más de 3008 MB en las funciones de Lambda. Para probar con AWS Lambda Power Tuning, añada la siguiente propiedad en el JSON de entrada al iniciar la ejecución de Step Functions:<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Recursos relacionados
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python: futuros simultáneos. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Cuotas de Lambda: Configuración, implementación y ejecución de funciones](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Trabajando con el AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Funciones de creación de perfiles con AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Información adicional
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Código**

El siguiente fragmento de código realiza el procesamiento paralelo I/O :

```
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
  for result in executor.map(a_function, (the_arguments)):
    ...
```

`ThreadPoolExecutor` reutiliza los subprocesos cuando están disponibles.

**Pruebas y resultados**

Estas pruebas se realizaron en diciembre de 2024.

La primera prueba procesó 2500 lecturas de objetos, con el siguiente resultado:

![\[El tiempo de invocación disminuye, mientras que el costo de la invocación es mayor a medida que aumenta la memoria.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


A partir de 3009 MB, el nivel de tiempo de procesamiento se mantuvo prácticamente igual para cualquier incremento de memoria, pero el costo se hacía mayor a medida que aumentaba el tamaño de la memoria.

En otra prueba, se investigó el intervalo entre 1536 MB y 3072 MB de memoria. Se utilizaron valores que eran múltiplos de 256 MB y se procesaron 10 000 lecturas de objetos; los resultados son los siguientes:

![\[Se redujo la diferencia entre el descenso del tiempo de invocación y el aumento del costo de la invocación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


La mejor performance-to-cost relación fue con la configuración Lambda de 2.304 MB de memoria.

A modo de comparación, un proceso secuencial de 2500 lecturas de objetos tardó 47 segundos. El proceso paralelo con la configuración de Lambda de 2304 MB tardó 7 segundos, lo que supone un 85 por ciento menos.

![\[Gráfico que muestra la disminución del tiempo al cambiar del procesamiento secuencial al procesamiento paralelo.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Envíe datos de telemetría desde y AWS Lambda OpenSearch para análisis y visualización en tiempo real
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

*Tabby Ward, Guy Bachar y David Kilzer, Amazon Web Services*

## Resumen
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-summary"></a>

Las aplicaciones modernas están cada vez más distribuidas y se basan cada vez más en eventos, lo que refuerza la necesidad de monitoreo y observabilidad en tiempo real. AWS Lambda es un servicio de computación sin servidor que desempeña un papel crucial en la creación de arquitecturas escalables y basadas en eventos. Sin embargo, la supervisión y la solución de problemas de las funciones de Lambda pueden resultar complicadas si se confía únicamente en Amazon CloudWatch Logs, que puede introducir latencia y períodos de retención limitados.

Para abordar este desafío, AWS presentó la API de telemetría Lambda, que permite a las funciones de Lambda enviar datos de telemetría directamente a herramientas de monitoreo y observabilidad de terceros. Esta API admite la transmisión en tiempo real de registros, métricas y seguimientos, y proporciona una visión completa y puntual del rendimiento y el estado de las funciones de Lambda.

Este patrón explica cómo integrar la API de telemetría Lambda con [OpenSearch](https://opensearch.org/docs/latest/)un motor de búsqueda y análisis distribuido de código abierto. OpenSearch ofrece una plataforma potente y escalable para la ingesta, el almacenamiento y el análisis de grandes volúmenes de datos, lo que la convierte en la opción ideal para los datos de telemetría Lambda. En concreto, este patrón muestra cómo enviar registros desde una función de Lambda escrita en Python directamente a un OpenSearch clúster mediante una extensión de Lambda proporcionada por. AWS Esta solución es flexible y personalizable, por lo que puede crear su propia extensión de Lambda o modificar el código fuente del ejemplo para cambiar el formato de salida según lo desee.

El patrón explica cómo configurar y configurar la integración de la API de telemetría Lambda con OpenSearch la API de telemetría de Lambda e incluye las prácticas recomendadas en materia de seguridad, optimización de costes y escalabilidad. El objetivo es que pueda obtener información más detallada sobre las funciones de Lambda y mejorar la observabilidad general de sus aplicaciones sin servidor.


| 
| 
| Nota: Este patrón se centra en la integración de la API de telemetría Lambda con la gestionada. OpenSearch Sin embargo, los principios y las técnicas analizados también son aplicables a la búsqueda automática y a la búsqueda automática OpenSearch . | 
| --- |

## Requisitos previos y limitaciones
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Antes de comenzar el proceso de integración, asegúrese de que cumple los requisitos previos que se indican a continuación:

**Cuenta de AWS**: Un activo Cuenta de AWS con los permisos adecuados para crear y administrar los siguientes recursos: AWS 
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch Service (si utilizas un OpenSearch clúster gestionado)

**OpenSearch clúster**:
+ Puede utilizar un OpenSearch clúster autogestionado existente o un servicio gestionado como OpenSearch Service.
+ Si utilizas el OpenSearch Servicio, configura el OpenSearch clúster siguiendo las instrucciones de [Introducción a Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) en la documentación del OpenSearch Servicio.
+ Asegúrese de que se pueda acceder al OpenSearch clúster desde la función Lambda y de que esté configurado con los ajustes de seguridad necesarios, como las políticas de acceso, el cifrado y la autenticación.
+ Configure el OpenSearch clúster con las asignaciones de índices y los ajustes necesarios para ingerir los datos de telemetría de Lambda. Para obtener más información, consulta [Cómo cargar datos de streaming en Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html) en la documentación del OpenSearch servicio.

**Conectividad de red**:
+ Asegúrese de que la función Lambda tenga la conectividad de red necesaria para acceder al OpenSearch clúster. Para obtener orientación sobre cómo configurar los ajustes de la nube privada virtual (VPC), consulte [Lanzar sus dominios de Amazon OpenSearch Service dentro de una VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) en la documentación del servicio. OpenSearch 

**Roles y políticas de IAM**:
+ Cree un rol de IAM con los permisos necesarios para que su función Lambda pueda acceder al clúster y acceder a OpenSearch las credenciales almacenadas en él. AWS Secrets Manager
+ Adjunte las políticas de IAM adecuadas al rol, como la `AWSLambdaBasicExecutionRole` política y cualquier permiso adicional necesario para interactuar con él. OpenSearch
+ Compruebe que los permisos de IAM concedidos a la función Lambda le permiten escribir datos en el clúster. OpenSearch Para obtener información sobre la administración de los permisos de IAM, consulte [Definición de permisos de funciones de Lambda con un rol de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) en la documentación de Lambda.

**Conocimientos del lenguaje de programación**:
+ Necesitará conocimientos básicos de Python (o del lenguaje de programación que prefiera) para comprender y modificar el código de ejemplo de la función de Lambda y la extensión de Lambda.

**Entorno de desarrollo**:
+ Configure un entorno de desarrollo local con las herramientas y dependencias necesarias para crear e implementar funciones y extensiones de Lambda. 

**AWS CLI o: Consola de administración de AWS**
+ Instale y configure el [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) o utilícelo Consola de administración de AWS con las credenciales adecuadas para interactuar con lo requerido Servicios de AWS.

**Supervisión y registro**:
+ Familiarícese con las mejores prácticas de monitoreo y registro AWS, incluidos servicios como Amazon, CloudWatch y AWS CloudTrail con fines de monitoreo y auditoría.
+ Compruebe CloudWatch los registros de su función de Lambda para identificar cualquier error o excepción relacionados con la integración de la API de telemetría de Lambda. Para obtener orientación sobre la solución de problemas, consulte la [documentación de la API de telemetría de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

## Arquitectura
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-architecture"></a>

Este patrón utiliza OpenSearch Service para almacenar registros y datos de telemetría generados por las funciones de Lambda. Este enfoque le permite transmitir rápidamente los registros directamente a su OpenSearch clúster, lo que reduce la latencia y los costes asociados al uso de CloudWatch Logs como intermediario.


| 
| 
| [El código de extensión de Lambda puede enviar la telemetría al OpenSearch Servicio, ya sea directamente mediante la OpenSearch API o mediante una biblioteca cliente. OpenSearch ](https://opensearch.org/docs/latest/clients/index/) La extensión Lambda puede usar las operaciones masivas compatibles con la OpenSearch API para agrupar eventos de telemetría y enviarlos a OpenSearch Service en una sola solicitud. | 
| --- |

El siguiente diagrama de flujo de trabajo ilustra el flujo de trabajo de registro para las funciones de Lambda cuando se utiliza un OpenSearch clúster como punto final.

![\[Flujo de trabajo para enviar datos de telemetría a un clúster. OpenSearch\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


La arquitectura incluye los siguientes componentes:
+ Función de Lambda: función sin servidor que genera registros y datos de telemetría durante la puesta en marcha.
+ Extensión Lambda: extensión basada en Python que usa la API de telemetría de Lambda para integrarse directamente con el clúster. OpenSearch Las extensiones se ponen en marcha en el mismo entorno de ejecución que la función de Lambda.
+ API de telemetría de Lambda: la API que permite a las extensiones de Lambda enviar datos de telemetría, como registros, métricas y trazas, directamente a herramientas de supervisión y observabilidad de terceros.
+ Clúster de Amazon OpenSearch Service: OpenSearch clúster gestionado que se aloja en AWS. Este clúster es responsable de ingerir, almacenar e indexar los datos de registro transmitidos desde la función de Lambda a través de la extensión de Lambda.

El flujo de trabajo consta de los pasos siguientes:

1. Se llama a la función de Lambda y genera registros y datos de telemetría durante su puesta en marcha.

1. La extensión de Lambda se pone en marcha junto con la función para capturar los registros y los datos de telemetría mediante la API de telemetría de Lambda.

1. La extensión Lambda establece una conexión segura con el clúster de OpenSearch servicios y transmite los datos de registro en tiempo real.

1. El clúster de OpenSearch servicios ingiere, indexa y almacena los datos de registro para que estén disponibles para su búsqueda, análisis y visualización mediante el uso de herramientas como Kibana u otras aplicaciones compatibles.

Al evitar los CloudWatch registros y enviar los datos de registro directamente al OpenSearch clúster, esta solución ofrece varias ventajas:
+ Transmisión y análisis de registros en tiempo real, lo que permite una resolución de problemas más rápida y una mejor observabilidad.
+ Reducción de la latencia y posibles limitaciones de retención asociadas CloudWatch a los registros.
+ Flexibilidad para personalizar la extensión de Lambda o crear su propia extensión para formatos de salida específicos o procesamiento adicional.
+ Integración con las capacidades de búsqueda, análisis y visualización del OpenSearch Servicio para el análisis y la supervisión de los registros.

La sección [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) proporciona step-by-step instrucciones para configurar la extensión Lambda, configurar la función Lambda e integrarla con el clúster de servicios. OpenSearch Para ver las consideraciones de seguridad, las estrategias de optimización de costos y los consejos para supervisar y solucionar problemas de la solución, consulte la sección [Prácticas recomendadas](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices).

## Tools (Herramientas)
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-tools"></a>

**Servicios de AWS**
+ [AWS Lambda](https://aws.amazon.com/lambda/) es un servicio automá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.
+ [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) es un servicio totalmente gestionado que proporciona y AWS que facilita la implementación, el funcionamiento y el escalado de OpenSearch clústeres en la nube.
+ Las [extensiones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) amplían la funcionalidad de las funciones de Lambda al poner en marcha código personalizado junto con ellas. Puede utilizar extensiones de Lambda para integrar Lambda con varias herramientas de supervisión, observabilidad, seguridad y gobernanza.
+ AWS Lambda La [API de telemetría](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) le permite usar extensiones para capturar datos mejorados de monitoreo y observabilidad directamente desde Lambda y enviarlos al destino que elija.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)le ayuda a modelar y configurar sus AWS recursos para que pueda dedicar menos tiempo a gestionarlos y más tiempo a centrarse en sus aplicaciones.

**Repositorios de código**
+ [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) incluye demostraciones y proyectos de AWS muestra de AWS socios que le ayudarán a empezar a crear sus propias extensiones.
+ [Ejemplo de integraciones de telemetría Lambda para proporciona OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) un ejemplo de extensión de Lambda que muestra cómo enviar registros desde una función de Lambda a un clúster. OpenSearch 

**Otras herramientas**
+ [OpenSearch](https://opensearch.org/faq/)es un motor de búsqueda y análisis distribuido de código abierto que proporciona una plataforma potente para la ingesta, el almacenamiento y el análisis de grandes volúmenes de datos.
+ Kibana es una herramienta de exploración y visualización de datos de código abierto con la que puedes usarla. OpenSearch Tenga en cuenta que la implementación de la visualización y el análisis están fuera del alcance de este patrón. Para obtener más información, consulte la [documentación de Kibana](https://www.elastic.co/guide/en/kibana/current/index.html) y otros recursos.

## Prácticas recomendadas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices"></a>

Al integrar la API de telemetría Lambda con OpenSearch, tenga en cuenta las siguientes prácticas recomendadas.

**Seguridad y control de acceso**
+ **Comunicación segura**: cifre todas las comunicaciones entre las funciones de Lambda y OpenSearch el clúster mediante HTTPS. Configure los SSL/TLS ajustes necesarios en la extensión y OpenSearch configuración de Lambda.
+ **Permisos de IAM:**
  + Las extensiones se ponen en marcha en el mismo entorno de ejecución que la función de Lambda, por lo que heredan el mismo nivel de acceso a los recursos, como el sistema de archivos, las redes y las variables de entorno.
  + Otorgue los permisos de IAM mínimos necesarios a sus funciones de Lambda para acceder a la API de telemetría de Lambda y escribir datos en el clúster. OpenSearch Aplique el [principio de privilegio mínimo](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) para limitar el alcance de los permisos.
+ **OpenSearch control de acceso**: implemente un control de acceso detallado en su OpenSearch clúster para restringir el acceso a los datos confidenciales. Utilice las funciones de seguridad integradas, como la autenticación de usuarios, el control de acceso basado en roles y los permisos a nivel de índice, en. OpenSearch
+ **Extensiones fiables**: instale siempre las extensiones que provengan únicamente de una fuente fiable. Utilice herramientas de infraestructura como código (IaC) CloudFormation para simplificar el proceso de adjuntar la misma configuración de extensión, incluidos los permisos de IAM, a varias funciones de Lambda. Las herramientas de IaC también proporcionan un registro de auditoría de las extensiones y versiones utilizadas anteriormente.
+ **Gestión de información confidencial**: al crear extensiones, evite registrar información confidencial. Limpie las cargas útiles y los metadatos antes de registrarlos o conservarlos con fines de auditoría.

**Optimización de costos**
+ **Supervisión y alertas**: configure mecanismos de supervisión y alerta para realizar un seguimiento del volumen de datos que se envían OpenSearch desde las funciones de Lambda. Esto le permitirá identificar y abordar cualquier posible sobrecosto.
+ **Retención de datos**: considere detenidamente el período de retención de datos adecuado para sus datos de telemetría Lambda en. OpenSearch Los periodos de retención más prolongados pueden aumentar los costos de almacenamiento, así que equilibre sus necesidades de observabilidad con la optimización de costos.
+ **Compresión e indexación**: habilite la compresión de datos y optimice su estrategia de OpenSearch indexación para reducir el espacio de almacenamiento de sus datos de telemetría Lambda.
+ **Menor dependencia** de CloudWatch: al integrar directamente la API de telemetría Lambda con ella OpenSearch, puede reducir potencialmente su dependencia de los CloudWatch registros, lo que puede suponer un ahorro de costes. Esto se debe a que la API de telemetría Lambda le permite enviar registros directamente a OpenSearch, lo que evita la necesidad de almacenar y procesar los datos en ella. CloudWatch

**Escalabilidad y fiabilidad**
+ Procesamiento **asíncrono: utilice patrones de procesamiento** asíncrono, como Amazon Simple Queue Service (Amazon SQS) o Amazon Kinesis, para desacoplar la ejecución de la función Lambda de la ingesta de datos. OpenSearch Esto ayuda a mantener la capacidad de respuesta de las funciones de Lambda y mejora la fiabilidad general del sistema.
+ **OpenSearch escalado de clústeres**: supervise el rendimiento y la utilización de los recursos de su OpenSearch clúster y amplíelo o reduzca según sea necesario para gestionar el creciente volumen de datos de telemetría de Lambda.
+ **Conmutación por error y recuperación ante desastres**: implemente una estrategia sólida de recuperación ante desastres para su OpenSearch clúster, que incluya copias de seguridad periódicas y la capacidad de restaurar los datos rápidamente en caso de que se produzca un error.

**Observabilidad y supervisión**
+ **Paneles y visualizaciones**: utilice Kibana u otras herramientas de paneles para crear paneles y visualizaciones personalizados que proporcionen información sobre el rendimiento y el estado de sus funciones de Lambda en función de los datos de telemetría incluidos. OpenSearch
+ **Alertas y notificaciones**: configure alertas y notificaciones para supervisar de forma proactiva cualquier anomalía, error o problema de rendimiento en las funciones de Lambda. Integre estas alertas y notificaciones con sus procesos de administración de incidentes existentes.
+ **Rastreo y correlación**: asegúrese de que sus datos de telemetría Lambda incluyan información de seguimiento relevante, como la IDs solicitud o la IDs correlación, para end-to-end permitir la observabilidad y la solución de problemas en sus aplicaciones distribuidas sin servidor.

Si sigue estas prácticas recomendadas, puede asegurarse de que la integración de la API de telemetría Lambda con OpenSearch es segura, rentable y escalable, y proporciona una capacidad de observación completa para sus aplicaciones sin servidor.

## Epics
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics"></a>

### Creación e implementación la capa de extensión de Lambda
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue el código fuente. | Descargue las extensiones de ejemplo del repositorio [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions). | Desarrollador de aplicaciones, arquitecto de la nube | 
| Vaya a la carpeta `python-example-telemetry-opensearch-extension`. | El repositorio [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) que descargó contiene numerosos ejemplos de varios casos de uso y tiempos de ejecución de varios lenguajes. Navegue hasta la carpeta [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) para usar la OpenSearch extensión Python, que envía los registros a OpenSearch. | Desarrollador de aplicaciones, arquitecto de la nube | 
| Agregue permisos para poner en marcha el punto de conexión de la extensión. | Use el siguiente comando para poner en marcha el punto de conexión de la extensión.<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 
| Instale las dependencias de la extensión de forma local. | Use el siguiente comando para instalar manualmente las dependencias para el código en Python:<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Estas dependencias se montarán junto con el código de la extensión. | Desarrollador de aplicaciones, arquitecto de la nube | 
| Cree un paquete .zip para que la extensión se implemente como una capa. | El archivo .zip de la extensión debe contener un directorio raíz denominado`extensions/`, donde se encuentra el ejecutable de la extensión, y otro directorio raíz denominado `python-example-telemetry-opensearch-extension/`, donde se encuentran la lógica central de la extensión y sus dependencias.Cree el paquete .zip para la extensión:<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 
| Implemente la extensión como una capa de Lambda. | Publique la capa mediante el archivo .zip de su extensión y el siguiente comando:<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 

### Integración de la extensión en la función
<a name="integrate-the-extension-into-your-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue la capa a la función. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Para obtener más información sobre la adición de una capa a su función de Lambda, consulte la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html). | Desarrollador de aplicaciones, arquitecto de la nube | 
| Configure las variables de entorno para la función. | En la página de funciones, seleccione la pestaña **Configuración** y agregue las siguientes variables de entorno a la función:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | Desarrollador de aplicaciones, arquitecto de la nube | 

### Adición de declaraciones de registro y pruebas de la función
<a name="add-logging-statements-and-test-your-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue declaraciones de registro a la función. | Agregue declaraciones de registro a su función mediante uno de los [mecanismos de registro integrados](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) o el módulo de registro que prefiera. A continuación, se muestran ejemplos de registro de mensajes en Python:<pre>print("Your Log Message Here")<br />logger = logging.getLogger(__name__)<br /><br />logger.info("Test Info Log.")<br />logger.error("Test Error Log.")</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 
| Comprobación de la función de . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Debería ver **Ejecutando la función: listo** si todo funciona correctamente. | Desarrollador de aplicaciones, arquitecto de la nube | 

### Vea sus inicios de sesión OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Consulte sus índices. | En OpenSearch, ejecuta el siguiente comando para consultar tus índices:<pre>SELECT * FROM index-name</pre>Sus registros deberían mostrarse en los resultados de la consulta. | Arquitecto de la nube | 

## Resolución de problemas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Problemas de conectividad | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Errores de ingesta de datos | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Recursos relacionados
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Ejemplo de integraciones de telemetría Lambda](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) para (repositorio) OpenSearch GitHub 
+ [Aumente las funciones de Lambda utilizando extensiones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) (documentación de Lambda)
+ [API de telemetría de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) (documentación de Lambda)
+ [Presentamos la API de AWS Lambda telemetría](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/) (entrada de blog)AWS 
+ [Integración de la API de AWS Lambda telemetría con Prometheus](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch) y (entrada del blog) OpenSearch AWS 

## Información adicional
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Alteración de la estructura de los registros**

De forma predeterminada, la extensión envía los registros como un documento anidado. OpenSearch Esto le permite realizar consultas anidadas para recuperar valores de columnas individuales.

Si la salida de registro predeterminada no satisface sus necesidades específicas, puede personalizarla modificando el código fuente de la extensión Lambda proporcionada por. AWS AWS anima a los clientes a adaptar la producción a los requisitos de su empresa. Para cambiar la salida del registro, busque la función `dispatch_to_opensearch` en el archivo `telemetry_dispatcher.py` dentro del código fuente de la extensión y realice las modificaciones necesarias.

# Configuración de un router de celdas sin servidor para una arquitectura basada en celdas
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq and Ioannis Lioupras, Amazon Web Services*

## Resumen
<a name="serverless-cell-router-architecture-summary"></a>

Como punto de entrada al sistema de una aplicación global basada en células, el enrutador de celdas es responsable de asignar de manera eficiente los usuarios a las celdas adecuadas y de proporcionar los puntos de conexión a los usuarios. El enrutador de celdas maneja funciones tales como almacenar user-to-cell mapeos, monitorear la capacidad de la celda y solicitar nuevas celdas cuando sea necesario. Es importante mantener la funcionalidad del router de celdas durante interrupciones posibles.

El marco de diseño de los enrutadores de celdas de este patrón se centra en la resiliencia, la escalabilidad y la optimización general del rendimiento. El patrón utiliza un enrutamiento estático, en el que los clientes almacenan en caché los puntos de conexión al iniciar sesión por primera vez y se comunican directamente con las celdas. Esta disociación mejora la resiliencia del sistema, ya que ayuda a garantizar la funcionalidad ininterrumpida de la aplicación basada en celdas durante una afectación del router de celdas.

Este patrón utiliza una AWS CloudFormation plantilla para implementar la arquitectura. Para obtener detalles sobre lo que implementa la plantilla o para implementar la misma configuración mediante el Consola de administración de AWS, consulte la sección de [información adicional](#serverless-cell-router-architecture-additional).

**importante**  
La demostración, el código y la CloudFormation plantilla que se presentan en este patrón tienen únicamente fines explicativos. El material proporcionado tiene la finalidad única de ilustrar el patrón de diseño y ayudar a la comprensión. La demostración y el código no están listos para la producción y no deben utilizarse para ninguna actividad de producción en directo. Se recomienda no utilizar el código o la demostración en un entorno de producción. Hacerlo será bajo su propia responsabilidad. Recomendamos consultar con los profesionales adecuados y hacer pruebas exhaustivas antes de implementar este patrón o sus componentes en un entorno de producción.

## Requisitos previos y limitaciones
<a name="serverless-cell-router-architecture-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa
+ La última versión de [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Credenciales de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) con los permisos necesarios para crear la CloudFormation pila, AWS Lambda las funciones y los recursos relacionados

**Versiones de producto**
+ Python 3.12

## Arquitectura
<a name="serverless-cell-router-architecture-architecture"></a>

En el diagrama siguiente se muestra un diseño general del router de celdas.

![\[El proceso de cinco pasos del enrutador de celdas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


En el diagrama se muestra el flujo de trabajo siguiente:

1. El usuario se pone en contacto con Amazon API Gateway, que sirve de interfaz para los puntos de conexión de la API del router de celdas.

1. Amazon Cognito gestiona la autenticación y la autorización.

1. El AWS Step Functions flujo de trabajo consta de los siguientes componentes:
   + **Orchestrator**: se `Orchestrator` utiliza AWS Step Functions para crear un flujo de trabajo o una máquina de estados. La API del router de celdas desencadena el flujo de trabajo. `Orchestrator` ejecuta funciones de Lambda según la ruta del recurso.
   + **Dispatcher**: la función `Dispatcher` de Lambda identifica y asigna una celda estática por cada usuario registrado nuevo. La función busca la celda con el menor número de usuarios, la asigna al usuario y devuelve los puntos de conexión.
   + **Mapper** ‒ La `Mapper` operación gestiona las user-to-cell asignaciones dentro de la base de datos `RoutingDB` Amazon DynamoDB creada por la plantilla. CloudFormation Cuando se desencadena, la función `Mapper` proporciona sus puntos de conexión a los usuarios ya asignados.
   + **Scaler**: la función `Scaler` hace un seguimiento de la ocupación de las celdas y de la capacidad disponible. Cuando sea necesario, la función `Scaler` puede enviar una solicitud a través de Amazon Simple Queue Service (Amazon SQS) a la capa de aprovisionamiento e implementación para solicitar celdas nuevas.
   + **Validator**: la función `Validator` valida los puntos de conexión de las celdas y detecta problemas posibles.

1. `RoutingDB`Almacena la información y los atributos de las celdas (puntos finales de la API, estado, Región de AWS métricas).

1. Cuando la capacidad disponible de las celdas supera un umbral, el router de celdas solicita servicios de aprovisionamiento e implementación a través de Amazon SQS para crear celdas nuevas.

Cuando se crean celdas nuevas, `RoutingDB` se actualiza desde la capa de aprovisionamiento e implementación. Sin embargo, ese proceso está fuera del ámbito de este patrón. Para obtener información general de las premisas de diseño de la arquitectura basada en celdas y detalles sobre el diseño del router de celdas que se utiliza en este patrón, consulte la sección [Información adicional](#serverless-cell-router-architecture-additional).

## Tools (Herramientas)
<a name="serverless-cell-router-architecture-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 a lo largo de su ciclo de vida en todo el Cuentas de AWS mundo Regiones 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.
+ [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.
+ [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.
+ [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 funciones de Lambda y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [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 Serverless-Cell-Router. GitHub ](https://github.com/aws-samples/Serverless-Cell-Router/) 

## Prácticas recomendadas
<a name="serverless-cell-router-architecture-best-practices"></a>

Para conocer las mejores prácticas a la hora de crear arquitecturas basadas en celdas, consulte la siguiente guía de Well-Architected AWS :
+ [Reducing the Scope of Impact with Cell-Based Architecture](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Pilar de confiabilidad de un marco bien diseñado REL1: 0-BP04 Utilice arquitecturas de mamparo para limitar el alcance del impacto](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Epics
<a name="serverless-cell-router-architecture-epics"></a>

### Preparación del archivo de origen
<a name="prepare-source-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código de muestra. | Para clonar el Serverless-Cell-Router GitHub repositorio en su ordenador, utilice el siguiente comando:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Desarrollador | 
| Configure las credenciales AWS CLI temporales. | Configure el AWS CLI con las credenciales para su Cuenta de AWS. Este tutorial utiliza las credenciales temporales proporcionadas por la **línea de comandos de AWS IAM Identity Center o la opción de acceso programático**. Esto establece las variables de `AWS_SESSION_TOKEN` AWS entorno y `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, con las credenciales adecuadas para su uso con. AWS CLI | Desarrollador | 
| Cree un bucket de S3. | Cree un bucket de S3 que se utilizará para almacenar y acceder a las funciones de Serverless-Cell-Router Lambda para su despliegue mediante la CloudFormation plantilla. Para crear el bucket de S3, utilice el comando siguiente: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Desarrollador | 
| Cree los archivos .zip. | Cree un archivo .zip para cada función de Lambda ubicada en el directorio [Functions](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions). Estos archivos .zip se utilizarán para implementar las funciones de Lambda. En un equipo Mac, utilice los comandos `zip` siguientes:<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | Desarrollador | 
| Copie los archivos .zip en el bucket de S3. | Para copiar todos los archivos .zip de la función de Lambda al bucket de S3, utilice los comandos siguientes:<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | Desarrollador | 

### Cree la pila CloudFormation
<a name="create-the-cfn-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la CloudFormation plantilla. | Para implementar la CloudFormation plantilla, ejecute el siguiente AWS CLI comando:<pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | Desarrollador | 
| Compruebe el progreso. | Inicia sesión en Consola de administración de AWS, abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation/]()y comprueba el progreso del desarrollo de la pila. Cuando el estado sea `CREATE_COMPLETE`, la pila se habrá implementado correctamente. | Desarrollador | 

### Evaluación y verificación
<a name="assess-and-verify"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Asigne celdas al usuario. | Para iniciar `Orchestrator`, ejecute el comando curl siguiente:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre>`Orchestrator` desencadena la ejecución de la función `Dispatcher`. `Dispatcher`, a su vez, verifica la existencia del usuario. Si se encuentra el usuario, `Dispatcher` devuelve el ID de celda y el punto final asociados URLs. Si no se encuentra al usuario, `Dispatcher` asigna una celda y envía el ID de celda a la función `Scaler` para evaluar la capacidad residual de la celda asignada.La respuesta de la función `Scaler` es la siguiente:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Desarrollador | 
| Recupere las celdas de los usuarios. | Para utilizar `Orchestrator` para ejecutar la función `Mapper`, ejecute el comando siguiente:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre>`Orchestrator`Busca la celda asignada al usuario y devuelve el ID de la celda y URLs obtiene la siguiente respuesta:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Desarrollador | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie los recursos. | Para evitar el cobro de otros cargos en su cuenta, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="serverless-cell-router-architecture-resources"></a>

**Referencias**
+ [Estabilidad estática con zonas de disponibilidad](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [AWS Fault Isolation Boundaries: Static stability](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: Cell-based Architecture to Provide Higher Availability on Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6 ¿Iknq? RZMFic controles = 0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Información adicional
<a name="serverless-cell-router-architecture-additional"></a>

**Premisas de diseño de arquitectura basada en celdas**

Si bien este patrón se centra en el router de celdas, es importante comprender todo el entorno. El entorno está estructurado en tres capas discretas:
+ La capa de enrutamiento, o capa delgada, que contiene el enrutador de celdas
+ La capa de celdas, que comprende varias celdas
+ La capa de aprovisionamiento e implementación, que aprovisiona las celdas e implementa la aplicación

Cada capa mantiene su funcionalidad incluso en el caso de que las deficiencias afecten a otras capas. Cuentas de AWS sirven como límite de aislamiento de fallas.

En el diagrama siguiente se muestran las capas en un nivel general. La capa de celdas y la capa de aprovisionamiento e implementación quedan fuera del alcance de este patrón.

![\[La capa de enrutamiento, la capa de celdas con varias cuentas de celdas y la capa de aprovisionamiento e implementación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Para más información sobre la arquitectura basada en celdas, consulte [Reducing the Scope of Impact with Cell-Based Architecture: Cell routing](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Patrón de diseño de router de celdas**

El enrutador de celdas es un componente compartido en las celdas. Para mitigar los impactos posibles, es importante que la capa de enrutamiento utilice un diseño simplista y escalable horizontalmente que sea lo más delgado posible. La capa de enrutamiento, que sirve como punto de entrada al sistema, consta solo de los componentes necesarios para asignar a los usuarios de manera eficiente a las celdas adecuadas. Los componentes de esta capa no participan en la administración ni en la creación de celdas.

Este patrón utiliza el enrutamiento estático, lo que significa que el cliente almacena los puntos de conexión en las memorias caché durante el inicio de sesión inicial y, posteriormente, establece una comunicación directa con la celda. Se inician interacciones periódicas entre el cliente y el router de celdas para confirmar el estado actual o recuperar las actualizaciones. Este desacoplamiento intencionado permite a los usuarios actuales operar sin interrupciones en caso de que haya tiempo de inactividad del router de celdas y proporciona una funcionalidad y resiliencia continuas al sistema.

En este patrón, el router de celdas admite las funcionalidades siguientes:
+ Recuperación de datos de celdas a partir de la base de datos de celdas en la capa de aprovisionamiento e implementación. Almacenamiento o actualización de la base de datos local.
+ Asignación de una celda a cada usuario registrado nuevo de la aplicación mediante el algoritmo de asignación de celdas.
+ Almacenar el user-to-cells mapeo en la base de datos local.
+ Comprobación de la capacidad de las celdas durante la asignación de usuarios. Generación de un evento para la máquina expendedora a la capa de aprovisionamiento e implementación para crear celdas.
+ Uso del algoritmo de criterios de creación de celdas para proporcionar esta funcionalidad.
+ Responder a las solicitudes de los usuarios recién registrados proporcionando URLs las celdas estáticas. Se URLs almacenarán en caché en el cliente con un tiempo de vida (TTL).
+ Respuesta a las solicitudes de los usuarios existentes sobre una URL no válida al proporcionar una URL nueva o actualizada.

Para comprender mejor el router celular de demostración que se configura mediante la CloudFormation plantilla, revise los siguientes componentes y pasos:

1. Defina y configure el grupo de usuarios de Amazon Cognito.

1. Defina y configure la API de API Gateway para el router de celdas.

1. Crear una tabla de DynamoDB.

1. Cree y configure una cola de SQS.

1. Implemente la función `Orchestrator`.

1. Implemente las funciones de Lambda: `Dispatcher`, `Scaler`, `Mapper`, `Validator`.

1. Evalúe y verifique.

El supuesto es que la capa de aprovisionamiento e implementación ya está establecida. Los detalles de su implementación quedan fuera del alcance de este artefacto.

Como estos componentes se configuran y configuran mediante una CloudFormation plantilla, los siguientes pasos se presentan de forma descriptiva y de alto nivel. Se supone que tiene los AWS conocimientos necesarios para completar la instalación y la configuración.

*1. Defina y configure el grupo de usuarios de Amazon Cognito*

Inicie sesión en y abra la Consola de administración de AWS consola de Amazon Cognito en. [https://console.aws.amazon.com/cognito/]() Defina y configure un grupo de usuarios de Amazon Cognito denominado `CellRouterPool`, con integración de aplicaciones, interfaz de usuario alojada y permisos necesarios.

*2. Defina y configure la API de API Gateway para el router de celdas*

Abra la consola de API Gateway en [https://console.aws.amazon.com/apigateway/](). Defina y configure una API denominada `CellRouter`, mediante un autorizador de Amazon Cognito integrado con el grupo de usuarios `CellRouterPool` de Amazon Cognito. Implemente los elementos siguientes:
+ Recursos de API `CellRouter`, tal como los métodos `POST`
+ Integración con el flujo de trabajo de Step Functions implementada en el paso 5
+ Autorización a través del autorizador de Amazon Cognito
+ Asignaciones de solicitudes y respuestas de integración
+ Asignación de los permisos necesarios

*3. Crear una tabla de DynamoDB*

Abra la consola de DynamoDB [https://console.aws.amazon.com/dynamodb/]()en y cree una tabla de DynamoDB estándar llamada con la siguiente configuración: `tbl_router`
+ **Clave de partición ‒** `marketId`
+ **Clave de clasificación** ‒ `cellId`
+ **Modo de capacidad**: provisioned
+ **Point-in-time recuperación (PITR) ‒ Desactivada**

En la pestaña **Índices**, cree un índice secundario global llamado `marketId-currentCapacity-index`. La función de Lambda `Scaler` utilizará el índice para hacer búsquedas eficaces en la celda con el menor número de usuarios asignados.

Cree la estructura de tabla con los atributos siguientes:
+ `marketId`: Europe
+ `cellId`: cell-0002
+ `currentCapacity`: 2
+ `endPoint_1`: <su punto de conexión de la primera región>
+ `endPoint_2`: <su punto de conexión de la segunda región>
+ `IsHealthy`: true
+ `maxCapacity`: 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`: <su dirección de correo electrónico>

*4. Cree y configure una cola de SQS*

**Abra la consola de Amazon SQS en [https://console.aws.amazon.com/sqs/]()y cree una cola SQS estándar denominada configurada con cifrado de claves `CellProvisioning` Amazon SQS.**

*5. Implemente la función Orchestrator*

Desarrolle un flujo de trabajo de Step Functions que sirva de `Orchestrator` para el router. Se puede acceder al flujo de trabajo a través de la API del enrutador de celdas. El flujo de trabajo ejecuta las funciones de Lambda designadas según la ruta de recursos. Integre la función step con la API de API Gateway para el router de celdas `CellRouter` y configure los permisos necesarios para invocar las funciones de Lambda.

El siguiente diagrama muestra el flujo de trabajo. El estado de elección invoca una de las funciones de Lambda. Si la función de Lambda se ejecuta de manera correcta, el flujo de trabajo termina. Si se produce un error en la función de Lambda, se invoca el estado de error.

![\[Un diagrama del flujo de trabajo con las cuatro funciones y que termina en estado de error.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implemente las funciones de Lambda*

Implemente las funciones `Dispatcher`, `Mapper`, `Scaler` y `Validator`. Al definir y configurar cada función en la demostración, defina un rol para la función y asigne los permisos necesarios para realizar las operaciones necesarias en la tabla de DynamoDB `tbl_router`. Además, integre cada función en el flujo de trabajo `Orchestrator`.

*Función dispatcher*

La función `Dispatcher` se encarga de identificar y asignar una única celda estática para cada nuevo usuario registrado. Cuando un usuario nuevo se registra en la aplicación global, la solicitud se dirige a la función `Dispatcher`. La función procesa la solicitud mediante criterios de evaluación predefinidos, como los siguientes:

1. **Región**: seleccione la celda del mercado donde se encuentra el usuario. Por ejemplo, si el usuario accede a la aplicación global desde Europa, seleccione una celda que se utilice Regiones de AWS en Europa.

1. **Proximidad o latencia**: seleccione la celda más cercana al usuario. Por ejemplo, si el usuario accede a la aplicación desde Holanda, la función considerará una celda que utilice Fráncfort e Irlanda. La decisión sobre qué celda está más cerca se basa en métricas como la latencia entre la ubicación del usuario y las regiones de la celda. Para este patrón de ejemplo, la información se suministra de manera estática desde la capa de aprovisionamiento e implementación.

1. **Estado**: la función `Dispatcher` comprueba si es correcto el estado de la celda seleccionada según el estado de la celda proporcionado (Correcto = verdadero o falso).

1. **Capacidad**: la distribución de usuarios se basa en la lógica del *número mínimo de usuarios de una celda*, por lo que el usuario se asigna a la celda que tiene el menor número de usuarios.

**nota**  
Estos criterios se presentan solo para explicar este patrón de ejemplo. Para una implementación real de un router de celdas, puede definir criterios más refinados y basados en casos de uso.

La función `Orchestrator` invoca la función Dispatcher para asignar usuarios a las celdas. En esta función de demostración, el valor de mercado es un parámetro estático definido como `europe`.

La función `Dispatcher` evalúa si una celda ya está asignada al usuario. Si la celda ya está asignada, la función `Dispatcher` devuelve los puntos de conexión de la celda. Si no se asigna ninguna celda al usuario, la función busca la celda con el menor número de usuarios, la asigna al usuario y devuelve los puntos de conexión. La eficacia de la consulta de búsqueda de celdas se optimiza mediante el uso del índice secundario global.

*Función mapper*

La `Mapper` función supervisa el almacenamiento y el mantenimiento de las user-to-cell asignaciones en la base de datos. Se asigna una celda única a cada usuario registrado. Cada celda tiene dos celdas distintas URLs, una para cada región de AWS. Funcionan como puntos finales de API alojados en API Gateway y URLs funcionan como puntos de entrada a la aplicación global.

Cuando la `Mapper` función recibe una solicitud de la aplicación cliente, ejecuta una consulta en la `tbl_router` tabla de DynamoDB para recuperar user-to-cell la asignación asociada al ID de correo electrónico proporcionado. Si encuentra una celda asignada, la `Mapper` función proporciona inmediatamente las dos de la celda. URLs La `Mapper` función también monitorea activamente las alteraciones de la celda URLs e inicia notificaciones o actualizaciones de la configuración del usuario.

*Función scaler*

La función `Scaler` administra la capacidad residual de la celda. Para cada nueva solicitud de registro de usuario, la función `Scaler` evalúa la capacidad disponible de la celda que la función `Dispatcher` asignó al usuario. Si la celda ha alcanzado su límite predeterminado de acuerdo con los criterios de evaluación especificados, la función inicia una solicitud a través de una cola de Amazon SQS a la capa de aprovisionamiento e implementación, y solicita el aprovisionamiento y la implementación de celdas nuevas. El escalado de las celdas se puede ejecutar según un conjunto de criterios de evaluación, como los siguientes:

1. **Usuarios máximos**: cada celda puede tener un número máximo de 500 usuarios.

1. **Capacidad del búfer**: la capacidad del búfer de cada celda es del 20 %, lo que significa que cada celda se puede asignar a 400 usuarios en cualquier momento. El 20 % restante de la capacidad de búfer se reserva para futuros casos de uso y para la gestión de situaciones inesperadas (por ejemplo, cuando los servicios de creación y aprovisionamiento de celdas no están disponibles).

1. **Creación de celdas**: en cuanto una celda existente alcanza el 70 % de su capacidad, se activa una solicitud para crear una celda adicional.

**nota**  
Estos criterios se presentan solo para explicar este patrón de ejemplo. Para una implementación real de un router de celdas, puede definir criterios más refinados y basados en casos de uso.

El código `Scaler` de demostración es ejecutado por la función `Orchestrator` después de que la función `Dispatcher` ha asignado correctamente una celda al usuario recién registrado. La función `Scaler`, tras recibir el ID de la celda por parte de la función `Dispatcher`, evalúa si la celda designada tiene la capacidad adecuada para alojar a más usuarios, según los criterios de evaluación predefinidos. Si la capacidad de la celda es insuficiente, la función `Scaler` envía un mensaje al servicio Amazon SQS. El servicio recupera este mensaje en la capa de aprovisionamiento e implementación e inicia el aprovisionamiento de una celda nueva.

**Función validator**

La función `Validator` identifica y resuelve los problemas relacionados con el acceso a la celda. Cuando un usuario inicia sesión en la aplicación global, la aplicación recupera las celdas de la configuración del perfil URLs del usuario y dirige las solicitudes de los usuarios a una de las dos regiones asignadas dentro de la celda. Si no URLs se puede acceder a ellas, la aplicación puede enviar una solicitud de validación de URL al router móvil. El router de celdas de la función `Orchestrator` invoca a la función `Validator`. La función `Validator` inicia el proceso de validación. La validación puede incluir, entre otras comprobaciones, las siguientes:
+ Hacer una referencia cruzada de la celda URLs de la solicitud con la URLs almacenada en la base de datos para identificar y procesar posibles actualizaciones
+ Hacer una comprobación de estado exhaustiva (por ejemplo, una solicitud `HTTP GET` al punto de conexión de la celda)

En conclusión, la función `Validator` responde a las solicitudes de los clientes y proporciona el estado de la validación y las medidas correctivas necesarias.

La función `Validator` está diseñada para mejorar la experiencia del usuario. Imagine un escenario en el que usuarios determinados tengan dificultades para acceder a la aplicación global porque un incidente provoca que las celdas no estén disponibles temporalmente. En lugar de presentar errores genéricos, la función `Validator` puede proporcionar pasos de corrección instructivos. Entre estos pasos se pueden incluir los siguientes:
+ Informe a los usuarios acerca del incidente.
+ Proporcione un tiempo de espera aproximado antes de la disponibilidad del servicio.
+ Proporcione un número de contacto de asistencia para obtener información adicional.

El código de demostración de la `Validator` función verifica que la celda proporcionada por el usuario URLs en la solicitud coincida con los registros almacenados en la tabla. `tbl_router` La función `Validator` también comprueba si el estado de las celdas es correcto.

# Configuración del acceso privado a un bucket de Amazon S3 a través de un punto de conexión de VPC
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint"></a>

*Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama y Joaquin Rinaudo, Amazon Web Services*

## Resumen
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-summary"></a>

En Amazon Simple Storage Service (Amazon S3), los URLs prefirmados permiten compartir archivos de tamaño arbitrario con los usuarios de destino. De forma predeterminada, URLs se puede acceder a Amazon S3 prefirmados desde Internet dentro de un período de tiempo de caducidad, lo que facilita su uso. Sin embargo, los entornos corporativos a menudo requieren que el acceso a Amazon S3 esté prefirmado URLs para estar limitado únicamente a una red privada.

Este patrón presenta una solución sin servidor para interactuar de forma segura con los objetos de S3 mediante el uso de objetos prefirmados URLs desde una red privada sin acceso a Internet. En la arquitectura, los usuarios acceden a un equilibrador de carga de aplicación a través de un nombre de dominio interno. El tráfico se enruta de manera interna a través de Amazon API Gateway y un punto de conexión de nube privada virtual (VPC) del bucket de S3. La AWS Lambda función genera descargas de archivos prefirmados URLs a través del punto final de la VPC privada, lo que ayuda a mejorar la seguridad y la privacidad de los datos confidenciales.

## Requisitos previos y limitaciones
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Requisitos previos **
+ Una VPC que incluye una subred implementada en una Cuenta de AWS que está conectada a la red corporativa (por ejemplo, a través de). AWS Direct Connect

**Limitaciones**
+ El bucket S3 debe tener el mismo nombre que el dominio, por lo que le recomendamos que consulte [Reglas de nomenclatura de buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
+ Este ejemplo de arquitectura no incluye características de supervisión para la infraestructura implementada. Si su caso de uso requiere supervisión, considere la posibilidad de añadir [servicios de supervisión de AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Este ejemplo de arquitectura no incluye la validación de entradas. Si su caso de uso requiere la validación de las entradas y un mayor nivel de seguridad, considere [utilizarla AWS WAF para proteger su API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Esta arquitectura de ejemplo no incluye el registro de acceso con el equilibrador de carga de aplicación Si el caso de uso requiere el registro de acceso, considere la posibilidad de habilitar los [registros de acceso del equilibrador de carga](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

**Versiones**
+ Python versión 3.11 o posterior
+ Terraform versión 1.6 o posterior

## Arquitectura
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-architecture"></a>

**Pila de tecnología de destino**

Los servicios siguientes de AWS se utilizan en la pila de tecnologías de destino:
+ **Amazon S3** es el servicio de almacenamiento principal que se utiliza para cargar, descargar y almacenar archivos de manera segura.
+ **Amazon API Gateway** expone los recursos y puntos de conexión para interactuar con el bucket de S3. Este servicio desempeña un papel en la generación de datos prefirmados URLs para descargar o cargar.
+ **AWS Lambda**genera archivos prefirmados URLs para descargar desde Amazon S3. API Gateway llama a la función de Lambda.
+ **Amazon VPC** implementa recursos en una VPC para proporcionar aislamiento de la red. La VPC incluye subredes y tablas de enrutamiento para controlar el flujo de tráfico.
+ El **equilibrador de carga de aplicación** dirige el tráfico entrante a API Gateway o al punto de conexión de VPC del bucket de S3. Permite a los usuarios de la red corporativa acceder a los recursos de manera interna.
+ El **punto de conexión de VPC para Amazon S3** permite la comunicación directa y privada entre los recursos de la VPC y Amazon S3 sin tener que atravesar la Internet pública.
+ **AWS Identity and Access Management (IAM)** controla el acceso a AWS los recursos. Los permisos se configuran para garantizar interacciones seguras con la API y otros servicios.

**Arquitectura de destino**

![\[Configuración del acceso privado a un bucket de S3 a través de un punto de conexión de VPC\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


En el siguiente diagrama se ilustra lo siguiente:

1. Los usuarios de la red corporativa pueden acceder al equilibrador de carga de aplicación a través de un nombre de dominio interno. Suponemos que existe una conexión entre la red corporativa y la subred de la intranet Cuenta de AWS (por ejemplo, a través de una Direct Connect conexión).

1. El Application Load Balancer dirige el tráfico entrante a API Gateway para generar datos prefirmados URLs para descargar o cargar en Amazon S3, o al punto final de VPC del bucket de S3. En ambos casos, las solicitudes se enrutan internamente y no es necesario que atraviesen Internet.

1. API Gateway expone los recursos y puntos de conexión para interactuar con el bucket de S3. En este ejemplo, proporcionamos un punto de conexión para descargar archivos del bucket de S3, pero esto podría ampliarse para proporcionar también la funcionalidad de carga.

1. La función de Lambda genera la URL prefirmada para descargar un archivo de Amazon S3 mediante el nombre de dominio del equilibrador de carga de aplicación en lugar del dominio público de Amazon S3.

1. El usuario recibe la URL prefirmada y la utiliza para descargar el archivo de Amazon S3 mediante el equilibrador de carga de aplicación. El equilibrador de carga incluye una ruta predeterminada para enviar el tráfico que no está destinado a la API hacia el punto de conexión de VPC del bucket de S3.

1. El punto de conexión de VPC enruta la URL prefirmada con el nombre de dominio personalizado al bucket de S3. El bucket de S3 debe tener el mismo nombre que el dominio.

**Automatización y escala**

Este patrón utiliza Terraform para implementar la infraestructura del repositorio de código en una Cuenta de AWS.

## Tools (Herramientas)
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-tools"></a>

**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.
+ [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 con los AWS servicios mediante comandos en tu consola de línea de comandos.

**Repositorio de código**

[El código de este patrón está disponible en un GitHub repositorio en private-s3-vpce. https://github.com/aws-samples/](https://github.com/aws-samples/private-s3-vpce)

## Prácticas recomendadas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-best-practices"></a>

La arquitectura de ejemplo para este patrón utiliza [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API. Cualquier persona que tenga credenciales de IAM válidas puede llamar a la API. Si su caso de uso requiere un modelo de autorización más complejo, es posible que quiera [utilizar un mecanismo de control de acceso distinto](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

## Epics
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-epics"></a>

### Implemente la solución en un Cuenta de AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Obtenga AWS las credenciales. | Revise sus AWS credenciales y el acceso a su cuenta. 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. | AWS DevOps, AWS general | 
| Clonar el repositorio. | Clona el GitHub repositorio proporcionado con este patrón:<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, AWS general | 
| Configure las variables | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS general | 
| Implemente la solución. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS general | 

### Pruebe la solución
<a name="test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un archivo de prueba. | Cargue un archivo en Amazon S3 para crear un escenario de prueba para la descarga del archivo. Puede utilizar la [consola Amazon S3](https://console.aws.amazon.com/s3/) o el siguiente AWS CLI comando:<pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, AWS general | 
| Pruebe la funcionalidad de las URL prefirmadas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS general | 
| Elimine recursos. | Asegúrese de eliminar los recursos cuando ya no sean necesarios:<pre>terraform destroy</pre> | AWS DevOps, AWS general | 

## Resolución de problemas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los nombres de clave de objetos de S3 con caracteres especiales, como signos numéricos (\$1), infringen los parámetros de la URL y provocan errores. | Codifique los parámetros de URL correctamente y asegúrese de que el nombre de la clave del objeto S3 siga las [directrices de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

## Recursos relacionados
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-resources"></a>

Amazon S3:
+ [Compartir objetos con prefirmados URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Controlar el acceso desde los puntos finales de la VPC con políticas de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway:
+ [Usa políticas de puntos finales de VPC de forma privada APIs en API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Equilibrador de carga de aplicación:
+ [Alojamiento de sitios web estáticos HTTPS internos con ALB, S3 y PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) (AWS entrada de blog)

# Solucione problemas de estados AWS Step Functions mediante Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar y Sangam Kushwaha, Amazon Web Services*

## Resumen
<a name="troubleshooting-states-in-aws-step-functions-summary"></a>

AWS Step Functions Las capacidades de gestión de errores pueden ayudarlo a detectar un error que se produce durante un estado de un [flujo de trabajo](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), pero aun así puede resultar difícil encontrar la causa raíz de un error y depurarlo. Este patrón aborda ese desafío y muestra cómo Amazon Bedrock puede serle útil para resolver los errores que se producen durante los estados de Step Functions. 

Step Functions orquesta el flujo de trabajo, lo que facilita a los desarrolladores la automatización de los procesos. Step Functions también proporciona una funcionalidad de gestión de errores que ofrece las ventajas siguientes:
+ Los desarrolladores pueden crear aplicaciones más resilientes que no fallen por completo cuando algo sale mal.
+ Los flujos de trabajo pueden incluir lógica condicional para gestionar los distintos tipos de errores de otra manera.
+ El sistema puede volver a intentar las operaciones erróneas de manera automática, tal vez con un retroceso exponencial.
+ Se pueden definir rutas de ejecución alternativas para los escenarios de error, lo que permite que el flujo de trabajo se adapte y continúe procesándose.

Cuando se produce un error en un flujo de trabajo de Step Functions, este patrón muestra cómo se pueden enviar el mensaje de error y el contexto a un modelo fundacional (FM) como Claude 3, compatible con Step Functions. El FM puede analizar el error, clasificarlo y sugerir posibles medidas de corrección.

## Requisitos previos y limitaciones
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Comprensión básica de los [flujos de trabajo de AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)
+ [Conectividad con la API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html) de Amazon Bedrock

**Limitaciones**
+ Puede utilizar el enfoque de este patrón para varios Servicios de AWS. Sin embargo, los resultados pueden variar en función del mensaje creado por AWS Lambda Amazon Bedrock y evaluado posteriormente.
+ 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="troubleshooting-states-in-aws-step-functions-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 la gestión y notificación de errores mediante Step Functions, Amazon Bedrock y Amazon SNS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


En el diagrama se muestra el flujo de trabajo automatizado para la gestión y notificación de errores en una máquina de estados de Step Functions:

1. El desarrollador inicia la ejecución de una máquina de estados.

1. La máquina de estados de Step Functions comienza a procesar sus estados. Hay dos resultados posibles:
   + (a) Si todos los estados se ejecutan correctamente, el flujo de trabajo pasa de manera directa a Amazon SNS para recibir una notificación de operación correcta por correo electrónico.
   + (b) Si se produce un error en algún estado, el flujo de trabajo pasa a la función de Lambda de gestión de errores.

1. En caso de error, sucede lo siguiente:
   + (a) Se desencadena la función de Lambda (controlador de errores). La función de Lambda extrae el mensaje de error de los datos del evento que le pasó la máquina de estados de Step Functions. A continuación, la función de Lambda prepara una petición según este mensaje de error y la envía a Amazon Bedrock. La petición solicita soluciones y sugerencias relacionadas con el error específico encontrado.
   + (b) Amazon Bedrock, que aloja el modelo de IA generativa, procesa la petición de entrada. (Este patrón utiliza el modelo de base Anthropic Claude 3 (FM), que es uno de los muchos FMs que admite Amazon Bedrock). El modelo de IA analiza el contexto del error. A continuación, el modelo genera una respuesta que puede incluir explicaciones de por qué se produjo el error, soluciones posibles para resolverlo y sugerencias para evitar cometer los mismos errores en el futuro.

     Amazon Bedrock devuelve su respuesta generada por IA a la función de Lambda. La función de Lambda procesa la respuesta y, posiblemente, la formatea o extrae información clave. A continuación, la función de Lambda envía la respuesta a la salida de la máquina de estados.

1. Tras la gestión del error o una ejecución correcta, el flujo de trabajo finaliza con la activación de Amazon SNS para que envíe una notificación por correo electrónico.

## Tools (Herramientas)
<a name="troubleshooting-states-in-aws-step-functions-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 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.
+ [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.

## Prácticas recomendadas
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Dado que Amazon Bedrock es un modelo de IA generativo que aprende de los datos entrenados, también utiliza esos datos para entrenar y generar contexto. Como práctica recomendada, oculte la información privada que pueda provocar problemas de filtración de datos. 
+ Si bien la IA generativa puede proporcionar información valiosa, una persona debe supervisar las decisiones críticas relacionadas con la gestión de errores, sobre todo en los entornos de producción.

## Epics
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Creación de una máquina de estados para un flujo de trabajo
<a name="create-a-state-machine-for-your-workflow"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una máquina de estado  | Para crear una máquina de estados que sea adecuada para el 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/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Crear una función de Lambda
<a name="create-a-lam-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de una función de Lambda.  | Para crear una 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/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Configure la lógica requerida en el código de Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html)<pre>client = boto3.client(<br />        service_name="bedrock-runtime", region_name="selected-region"<br />    )<br /><br />    # Invoke Claude 3 with the text prompt<br />    model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format<br /><br />    try:<br />        response = client.invoke_model(<br />            modelId=model_id,<br />            body=json.dumps(<br />                {<br />                    "anthropic_version": "bedrock-2023-05-31",<br />                    "max_tokens": 1024,<br />                    "messages": [<br />                        {<br />                            "role": "user",<br />                            "content": [{"type": "text", "text": prompt}],<br />                        }<br />                    ],<br />                }<br />            ),<br />        )<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Integración de Step Functions con Lambda
<a name="integrate-sfn-with-lam"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure Lambda para gestionar los errores en Step Functions. | Para configurar Step Functions a fin de gestionar los errores sin interrumpir el 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/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Resolución de problemas
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Lambda no puede acceder a la API de Amazon Bedrock (no tiene autorización para realizar la operación) | Este error se produce cuando el rol de Lambda no tiene permiso para acceder a la API de Amazon Bedrock. Para resolver este problema, agregue la política `AmazonBedrockFullAccess` para el rol de Lambda. Para obtener más información, consulte [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)la *Guía de referencia de políticas AWS administradas*. | 
| Error del tiempo de espera de Lambda | A veces, es posible que tarde más de 30 segundos en generar una respuesta y enviarla, según la petición. Para resolver este problema, aumente el tiempo de configuración. Para más información, consulte [Configure Lambda function timeout](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) en la *AWS Lambda Developer Guide*. | 

## Recursos relacionados
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon Bedrock API access](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Cree su primera función Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Desarrollo de flujos de trabajo con Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/developing-workflows.html#development-run-debug)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

# Más patrones
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Acceder, consultar y unirse a las tablas de Amazon DynamoDB con Athena](access-query-and-join-amazon-dynamodb-tables-using-athena.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 la evaluación de recursos de AWS](automate-aws-resource-assessment.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 de lagos de AWS Supply Chain datos en una configuración de múltiples repositorios](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)
+ [Automatice la configuración del emparejamiento entre regiones con AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.md)
+ [Archivar automáticamente los elementos en Amazon S3 con DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.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 arquitectura sin servidor multiusuario en Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Cree un visor de archivos de unidad central avanzada en la nube de AWS](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Calcule el valor en riesgo (VaR) mediante los servicios de AWS](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Copiar los productos de AWS Service Catalog en diferentes cuentas y regiones de AWS](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.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)
+ [Descomponga monolitos en microservicios mediante CQRS y abastecimiento de eventos](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.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)
+ [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 un caso de uso de RAG AWS mediante Terraform y Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Desarrollo de un asistente basado en el chat totalmente automatizado con los agentes y las bases de conocimiento de Amazon Bedrock](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.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)
+ [Genere dinámicamente una política de IAM con IAM Access Analyzer mediante Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.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)
+ [Asegúrese de que el registro de Amazon EMR en Amazon S3 esté habilitado en el lanzamiento](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Estime el costo de una tabla de DynamoDB para la capacidad bajo demanda](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Genere recomendaciones personalizadas y reclasificadas con Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Genere datos de prueba con un trabajo de AWS Glue y Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [Implemente SHA1 el hash para los datos de PII al migrar de SQL Server a PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Implementar el patrón saga sin servidor mediante AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.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)
+ [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)
+ [Migración de cargas de trabajo de Apache Cassandra a Amazon Keyspaces mediante AWS Glue](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.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)
+ [Optimice las implementaciones sin servidor con varias cuentas mediante los flujos de trabajo y Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.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)
+ [Consulta de las tablas de Amazon DynamoDB con SQL mediante Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.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)
+ [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)
+ [Estructure un proyecto de Python en una arquitectura hexagonal con AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Traduce el lenguaje natural a consultas (DSL) para consultas de Elasticsearch OpenSearch y consultas de Elasticsearch](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Descarga de datos de un clúster de Amazon Redshift entre las cuentas a Amazon S3](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.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)
+ [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)

# Red
<a name="networking-pattern-list"></a>

**Topics**
+ [Automatice la configuración del emparejamiento entre regiones con AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.md)
+ [Centralice la conectividad de red con AWS Transit Gateway](centralize-network-connectivity-using-aws-transit-gateway.md)
+ [Configure el cifrado HTTPS para Oracle JD Edwards EnterpriseOne en Oracle WebLogic mediante un Application Load Balancer](configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.md)
+ [Conéctese a los planos de datos y control del Servicio de Migración de Aplicaciones a través de una red privada](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [Cree objetos de Infoblox con los recursos CloudFormation personalizados de AWS y Amazon SNS](create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.md)
+ [Cree una arquitectura IPAM jerárquica y multirregional mediante Terraform AWS](multi-region-ipam-architecture.md)
+ [Personaliza las CloudWatch alertas de Amazon para AWS Network Firewall](customize-amazon-cloudwatch-alerts-for-aws-network-firewall.md)
+ [Despliega recursos en una AWS Wavelength zona mediante Terraform](deploy-resources-wavelength-zone-using-terraform.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)
+ [Cómo modificar los encabezados HTTP al migrar de F5 a un equilibrador de carga de aplicación en AWS](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [Cree un informe con los hallazgos de Network Access Analyzer sobre el acceso entrante a Internet en múltiples Cuentas de AWS](create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.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)
+ [Verifique que los equilibradores de carga ELB requieran la terminación de TLS](verify-that-elb-load-balancers-require-tls-termination.md)
+ [Visualización de los registros y las métricas de AWS Network Firewall mediante Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)
+ [Más patrones](networking-more-patterns-pattern-list.md)

# Automatice la configuración del emparejamiento entre regiones con AWS Transit Gateway
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-summary"></a>

[AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)conecta nubes privadas virtuales (VPCs) y redes locales a través de un hub central. El tráfico de Transit Gateway no atraviesa la Internet pública, lo que reduce los vectores de amenazas, como las vulnerabilidades más comunes y los ataques de denegación de servicio (DDoS) distribuidos.

Si necesitas comunicarte entre dos o más Regiones de AWS, puedes usar la interconexión de Transit Gateway entre regiones para establecer conexiones de interconexión entre pasarelas de tránsito de diferentes regiones. Sin embargo, la configuración manual de la interconexión entre regiones con Transit Gateway puede resultar compleja y llevar mucho tiempo. Este patrón proporciona una guía para usar la infraestructura como código (IaC) para configurar la interconexión. Puede utilizar este enfoque si tiene que configurar varias regiones de forma repetida y Cuentas de AWS para configurar una organización multirregional.

Este patrón configura una [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)pila que incluye un AWS Step Functions [flujo de trabajo](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), AWS Lambda [funciones](https://docs.aws.amazon.com/lambda/latest/dg/concepts-basics.html#gettingstarted-concepts-function), [roles AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) (IAM) y [grupos](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) de CloudWatch registros en Amazon Logs. A continuación, ejecute el flujo de trabajo de Step Functions para crear la conexión de peering interregional para sus pasarelas de tránsito.

## Requisitos previos y limitaciones
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-prereqs"></a>

**Requisitos previos **
+ Una activa. Cuenta de AWS
+ [Un IDE con capacidad de generación de código, como Kiro.](https://kiro.dev/#what-is-kiro)
+ Un bucket de Amazon Simple Storage Service (Amazon S3) y permisos para cargar objetos en él.
+ Pasarelas de tránsito creadas en las regiones solicitantes y aceptadoras.
+ VPCs creadas en las regiones solicitantes y aceptadoras. Etiquete VPCs con una `addToTransitGateway` clave con un valor de`true`.
+ [Grupos de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) configurados para usted de VPCs acuerdo con sus requisitos.
+ [Listas de control de acceso a la red (ACLs)](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) configuradas para usted VPCs según sus necesidades.

**Limitaciones**
+ Solo algunas Regiones de AWS admiten la interconexión entre regiones. Para ver una lista completa de las regiones que admiten la interconexión entre regiones, consulta la. [AWS Transit Gateway FAQs](https://aws.amazon.com/transit-gateway/faqs/)

## Arquitectura
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-architecture"></a>

 El enfoque de desarrollo de la IA entre agencias descrito en este patrón implica los siguientes pasos:

1. **Defina el mensaje de automatización**: Kiro recibe un mensaje en lenguaje natural en el que se detallan los requisitos de interconexión.

1. **Generar script de automatización**: Kiro genera los scripts Lambda CloudFormation y los scripts Lambda en función de la solicitud proporcionada.

1. **Implemente la pila**: Kiro utiliza CloudFormation para implementar los recursos necesarios.

1. **Configurar el peering**: Kiro ejecuta el flujo de trabajo Step Functions, que llama a las funciones Lambda para crear conexiones de peering y modificar tablas de enrutamiento.

El siguiente diagrama muestra el flujo de trabajo de Step Functions:

![\[El flujo de trabajo de Step Functions llama a la función de Lambda para modificar las tablas de enrutamiento el emparejamiento de la puerta de enlace de tránsito.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/2f235f47-5d68-492c-b954-7dc170939cae.png)


 

El flujo de trabajo consta de los pasos siguientes:

1. El flujo de trabajo de Step Functions llama a la función Lambda para el peering de Transit Gateway. 

1. El flujo de trabajo espera un minuto.

1. El flujo de trabajo recupera el estado de emparejamiento y lo envía al bloque de condiciones. El bloque es responsable del bucle. 

1. Si no se cumple la condición de éxito, el flujo de trabajo se codifica para entrar en la fase de temporización. 

1. Si se cumple la condición de éxito, una función Lambda modifica las tablas de enrutamiento. 

1. Finaliza el flujo de trabajo de Step Functions.

## Tools (Herramientas)
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-tools"></a>
+ [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. 
+ [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 Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[(](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[)](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.
+ [Kiro](https://kiro.dev/#what-is-kiro) es una herramienta de desarrollo de IA para agencias que le ayuda a crear aplicaciones listas para la producción mediante un desarrollo basado en especificaciones. 
+ [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 funciones y otras para crear aplicaciones críticas para la empresa. AWS Lambda Servicios de AWS   

## Epics
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-epics"></a>

### Genere código de Lambda y Step Functions
<a name="generate-lam-and-sfn-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Rellenar los marcadores de posición de los mensajes con detalles específicos | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html)Como alternativa, puedes añadirlo como un mensaje en línea que haga referencia a las variables anteriores sin adjuntar el archivo como contexto. | AWS general, administrador de red | 
| Cree una función Lambda que cree los adjuntos de emparejamiento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS general, administrador de red, ingeniería rápida | 
| Cree una función Lambda que sondee el estado del adjunto entre pares. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS general, administrador de red, ingeniería rápida | 
| Cree una función Lambda que añada rutas estáticas a ambas regiones. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS general, administrador de red | 
| Cree la CloudFormation plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS DevOps, AWS general, ingeniería rápida | 

### Implemente los AWS recursos
<a name="deploy-the-aws-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la CloudFormation pila mediante las indicaciones. | Ingresa la siguiente solicitud:<pre>Using the outputs from Prompts 1-4, package and deploy the full stack. Steps:<br /><br />1. For each of the three Python files from Prompts 1-3, create a zip named after the file (e.g. peer-transit-gateway.zip that contains peer-transit-gateway.py).<br />2. Upload all three zips to S3_BUCKET.<br />3. Deploy the CloudFormation template from Prompt 4 to ACTIVE_REGION with S3BucketName=S3_BUCKET and CAPABILITY_NAMED_IAM.<br />4. Initiate the Step Function from the deployed stack.<br /><br />Zip file names must match the S3Key values in the template exactly.</pre> | AWS DevOps, administrador de la nube, AWS general, pronta ingeniería | 
| Valide la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS general | 

## Recursos relacionados
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-resources"></a>
+ [Inicio de ejecuciones de máquinas de estado en Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-state-machine-executions.html)
+ [Archivos adjuntos de peering de Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)
+ [Interconexión Regiones de AWS mediante VPCs el uso AWS Transit Gateway(vídeo](https://www.youtube.com/watch?v=cj1rQqLxXU8))

# Centralice la conectividad de red con AWS Transit Gateway
<a name="centralize-network-connectivity-using-aws-transit-gateway"></a>

*Mydhili Palagummi y Nikhil Marrapu, Amazon Web Services*

## Resumen
<a name="centralize-network-connectivity-using-aws-transit-gateway-summary"></a>

Este patrón describe la configuración más sencilla en la que se puede usar AWS Transit Gateway para conectar una red local a nubes privadas virtuales (VPCs) en varias cuentas de AWS dentro de una región de AWS. Con esta configuración, puede establecer una red híbrida que conecte varias redes de VPC en una región y una red en las instalaciones. Esto se logra mediante el uso de una puerta de enlace de tránsito y una conexión de red privada virtual (VPN) a la red en las instalaciones. 

## Requisitos previos y limitaciones
<a name="centralize-network-connectivity-using-aws-transit-gateway-prereqs"></a>

**Requisitos previos **
+ Una cuenta para alojar servicios de red, administrada como una cuenta de miembro de una organización en AWS Organizations
+ VPCs en varias cuentas de AWS, sin superponer bloques de enrutamiento entre dominios sin clase (CIDR)

**Limitaciones**

Este patrón no admite el aislamiento del tráfico entre determinadas redes VPCs o entre redes locales. Todas las redes conectadas a la puerta de enlace de tránsito podrán comunicarse entre sí. Para aislar el tráfico, debe usar tablas de enrutamiento personalizadas en la puerta de enlace de tránsito. Este patrón solo conecta la VPCs red local con una única tabla de rutas de Transit Gateway predeterminada, que es la configuración más sencilla.

## Arquitectura
<a name="centralize-network-connectivity-using-aws-transit-gateway-architecture"></a>

**Pila de tecnología de destino**
+ AWS Transit Gateway
+  Site-to-SiteVPN DE AWS
+ VPC
+ AWS Resource Access Manager (AWS RAM)

 

**Arquitectura de destino**

![\[AWS Transit Gateway conecta la red local con VPCs varias cuentas de AWS dentro de una región.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e23f5faf-e75e-42a3-80e3-142516a2db4e/images/1ecf7e04-bbf8-4304-88c8-6aceb7271d1e.jpeg)


## Tools (Herramientas)
<a name="centralize-network-connectivity-using-aws-transit-gateway-tools"></a>

**Servicios de AWS**
+ [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 entre las cuentas de AWS y dentro de su organización o unidades organizativas en AWS Organizations.
+ [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.

## Epics
<a name="centralize-network-connectivity-using-aws-transit-gateway-epics"></a>

### Crear una puerta de enlace de tránsito en la cuenta de servicios de red
<a name="create-a-transit-gateway-in-the-network-services-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una puerta de enlace de tránsito | En la cuenta de AWS en la que desee alojar los servicios de red, cree una puerta de enlace de tránsito en la región de AWS de destino. Para obtener instrucciones, consulte [Creación de una puerta de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw). Tenga en cuenta lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/centralize-network-connectivity-using-aws-transit-gateway.html) | Administrador de red | 

### Conecte la puerta de enlace de tránsito a su red en las instalaciones
<a name="connect-the-transit-gateway-to-your-on-premises-network"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cambio de la puerta de enlace de cliente para una conexión de VPN. | El dispositivo de puerta de enlace del cliente está conectado al lado local de la conexión Site-to-Site VPN entre la puerta de enlace de tránsito y la red local. Para obtener más información, consulte El [dispositivo de puerta de enlace del cliente](https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html) en la documentación de AWS Site-to-Site VPN. Identifique o inicie un dispositivo de cliente en las instalaciones compatible y anote su dirección IP pública. La configuración de la VPN se completará más adelante en esta epopeya.  | Administrador de red | 
| En la cuenta de servicios de red, cree una conexión VPC a la puerta de enlace de tránsito. | Para configurar una conexión, cree una conexión VPN para la puerta de enlace de tránsito. Para obtener instrucciones, consulte las [conexiones VPN de puerta de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html). | Administrador de red | 
| Configure la VPN en el dispositivo de la puerta de enlace de cliente en las instalaciones.  | Descargue el archivo de configuración de la conexión Site-to-Site VPN asociada a la puerta de enlace de tránsito y configure los ajustes de la VPN en el dispositivo de la puerta de enlace del cliente. Para obtener las instrucciones, consulte [Descargar el archivo de configuración](https://docs.aws.amazon.com/vpn/latest/s2svpn/SetUpVPNConnections.html#vpn-download-config). | Administrador de red | 

### Comparta la puerta de enlace de tránsito de la cuenta de servicios de red con otras cuentas de AWS o con su organización
<a name="share-the-transit-gateway-in-the-network-services-account-to-other-aws-accounts-or-your-organization"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| En la cuenta de administración de AWS Organizations, active el uso compartido. | Para compartir la puerta de enlace de tránsito con su organización o con determinadas unidades organizativas, active el uso compartido en AWS Organizations. De lo contrario, tendrá que compartir la puerta de enlace de tránsito de cada cuenta de forma individual. Para obtener instrucciones, consulte [Habilitar el uso compartido de recursos en AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs). | Administrador de sistemas de AWS | 
| Cree el recurso compartido de la puerta de enlace de tránsito en la cuenta de servicios de red. | Para permitir que otras cuentas de AWS de su organización se VPCs conecten a la puerta de enlace de tránsito, en la cuenta de servicios de red, utilice la consola RAM de AWS para compartir el recurso de la puerta de enlace de tránsito. Para obtener instrucciones, consulte [Crear un recurso compartido](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create). | Administrador de sistemas de AWS | 

### Conéctese VPCs a la pasarela de tránsito
<a name="connect-vpcs-to-the-transit-gateway"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree adjuntos de VPC en cuentas individuales.  | En las cuentas con las que se ha compartido la puerta de enlace de tránsito, cree adjuntos de VPC de la puerta de enlace de tránsito. Para obtener instrucciones, consulte [Creación de una conexión de puerta de enlace de tránsito a una VPC](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment). | Administrador de red | 
| Acepte las solicitudes de adjuntos de la VPC. | En la cuenta de servicios de red, acepte las solicitudes de adjuntos de VPC de la puerta de enlace de tránsito. Para obtener instrucciones, consulte [Aceptar un archivo adjunto compartido](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#tgw-accept-shared-attachment). | Administrador de red | 

### Configuración del enrutamiento
<a name="configure-routing"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure las rutas en una cuenta individual VPCs. | En cada VPC de cuenta individual, agregue rutas a la red en las instalaciones y a otras redes de VPC, utilizando la puerta de enlace de tránsito como destino. Para obtener instrucciones, consulte [Agregar y eliminar rutas de una tabla de enrutamiento](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes). | Administrador de red | 
| Configure la ruta a la tabla de enrutamiento de la puerta de enlace de tránsito. | Las rutas desde VPCs y hacia la conexión VPN deben propagarse y deben aparecer en la tabla de rutas predeterminada de la pasarela de tránsito. Si es necesario, cree cualquier ruta estática (un ejemplo son las rutas estáticas para la conexión VPN estática) en la tabla de enrutamiento predeterminada de la puerta de enlace de tránsito. Para obtener instrucciones, consulte [Crear una ruta estática](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-create-static-route). | Administrador de red | 
| Agregar reglas de grupos de seguridad y listas de control de acceso a la red (ACL). | Para las EC2 instancias y otros recursos de la VPC, asegúrese de que las reglas del grupo de seguridad y las reglas de ACL de la red permitan el tráfico entre VPCs la red local y la red local. Para obtener instrucciones, consulte [Controlar el tráfico hacia los recursos mediante grupos de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules) y [Agregar y eliminar reglas de una ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#Rules). | Administrador de red | 

### Prueba de conectividad
<a name="test-connectivity"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la conectividad entre. VPCs | Asegúrese de que la ACL de la red y los grupos de seguridad permitan el tráfico del Protocolo de mensajes de control de Internet (ICMP) y, a continuación, haga ping desde las instancias de una VPC a otra VPC que también esté conectada a la puerta de enlace de tránsito. | Administrador de red | 
| Pruebe la conectividad entre la red local VPCs y la red local. | Asegúrese de que las reglas de ACL de la red, las reglas de los grupos de seguridad y cualquier firewall permitan el tráfico ICMP y, a continuación, haga ping entre la red local y las instancias de la EC2 misma. VPCs La comunicación de red debe iniciarse primero desde la red en las instalaciones para que la conexión VPN recupere el estado `UP`. | Administrador de red | 

## Recursos relacionados
<a name="centralize-network-connectivity-using-aws-transit-gateway-resources"></a>
+ [Creación de una infraestructura de red de AWS multiVPC escalable y segura](https://d1.awsstatic.com/whitepapers/building-a-scalable-and-secure-multi-vpc-aws-network-infrastructure.pdf) (documento técnico de AWS)
+ [Trabajar con recursos compartidos](https://docs.aws.amazon.com/ram/latest/userguide/working-with.html) (documentación de RAM de AWS)
+ [Cómo trabajar con puertas de enlace de tránsito](https://docs.aws.amazon.com/vpc/latest/tgw/working-with-transit-gateways.html) (documentación de AWS Transit Gateway)

# Configure el cifrado HTTPS para Oracle JD Edwards EnterpriseOne en Oracle WebLogic mediante un Application Load Balancer
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## Resumen
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-summary"></a>

Este patrón explica cómo configurar el cifrado HTTPS para la descarga de SSL en Oracle JD Edwards EnterpriseOne en cargas de trabajo de Oracle. WebLogic Este enfoque cifra el tráfico entre el navegador del usuario y un equilibrador de carga para eliminar la carga de cifrado de los servidores. EnterpriseOne 

Muchos usuarios escalan el nivel de la máquina virtual EnterpriseOne JAVA (JVM) horizontalmente mediante un [AWS Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html).El balanceador de cargas actúa como único punto de contacto para los clientes y distribuye el tráfico entrante entre varios. JVMs De forma opcional, el balanceador de cargas puede distribuir el tráfico entre varias zonas de disponibilidad y aumentar la disponibilidad de. EnterpriseOne

El proceso descrito en este patrón configura el cifrado entre el navegador y el equilibrador de carga en lugar de cifrar el tráfico entre el equilibrador de carga y el. EnterpriseOne JVMs *Este enfoque se denomina descarga de SSL.* Al transferir el proceso de descifrado SSL del servidor EnterpriseOne web o de aplicaciones al Application Load Balancer, se reduce la carga para la aplicación. Tras la finalización del SSL en el equilibrador de cargas, el tráfico no cifrado se enruta a la aplicación en AWS.

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) es una solución de planificación de recursos empresariales (ERP) para organizaciones que fabrican, construyen, distribuyen, dan servicio o gestionan productos o activos físicos. JD Edwards EnterpriseOne es compatible con varios hardware, sistemas operativos y plataformas de bases de datos.

## Requisitos previos y limitaciones
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un rol de AWS Identity and Access Management (IAM) con permisos para realizar llamadas de servicio de AWS y gestionar los recursos de AWS
+ Un certificado SSL

**Versiones de producto**
+ Este patrón se probó con Oracle WebLogic 12c, pero también puede utilizar otras versiones.

## Arquitectura
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-architecture"></a>

Existen varios enfoques para realizar la descarga de SSL. Este patrón utiliza un equilibrador de carga de aplicación y un Oracle HTTP Server (OHS), como se ilustra en el siguiente diagrama.

![\[Descarga de SSL con un equilibrador de carga y OHS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/2ae2d0eb-b9f3-41f8-ad86-9af3aade7072.png)


El siguiente diagrama muestra el diseño de la JVM de JD Edwards EnterpriseOne, Application Load Balancer y Java Application Server (JAS).

![\[EnterpriseOne, el balanceador de cargas y el diseño de JVM JAS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/72ea35b0-2907-48b3-aeb7-0c5d9a3b831b.png)


## Tools (Herramientas)
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-tools"></a>

**Servicios de AWS**
+ [Los balanceadores de carga](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) de aplicaciones distribuyen el tráfico de aplicaciones entrante entre varios destinos, como Amazon Elastic Compute Cloud ( EC2 instancias de Amazon), en varias zonas de 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.
+ [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="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-best-practices"></a>
+ Para conocer las prácticas recomendadas de ACM, consulte la [documentación de ACM](https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html).

## Epics
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-epics"></a>

### Configuración y OHS WebLogic
<a name="set-up-weblogic-and-ohs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale y configure los componentes de Oracle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrador WebLogic  | 
| Habilite el WebLogic complemento a nivel de dominio. | El WebLogic complemento es necesario para equilibrar la carga. Para habilitar el complemento:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrador WebLogic  | 
| Edite el archivo de configuración . | El `mod_wl_ohs.conf` archivo configura las solicitudes de proxy de OHS a. WebLogic[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)<pre><VirtualHost *:8000><br /><Location /jde><br />WLSRequest On<br />SetHandler weblogic-handler<br />WebLogicHost localhost<br />WebLogicPort 8000<br />WLProxySSL On<br />WLProxySSLPassThrough On<br /></Location><br /></VirtualHost></pre> | JDE CNC, administrador WebLogic  | 
| Inicie la OHS mediante Enterprise Manager. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrador WebLogic  | 

### Configure el Equilibrador de carga de aplicación
<a name="configure-the-application-load-balancer"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Establezca un grupo de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)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). | Administrador de AWS | 
| Configure el equilibrador de carga. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | Administrador de AWS | 
| Adición un registro de DNS de Route 53 | (Opcional) Puede añadir un registro DNS de Amazon Route 53 para el subdominio. Este registro apuntaría a su equilibrador de carga de aplicación. Para obtener instrucciones, consulte la [documentación de Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). | Administrador de AWS | 

## Resolución de problemas
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| El servidor HTTP no aparece. | Si el **servidor HTTP** no aparece en la lista de **Navegación de destino** de la consola de Enterprise Manager, siga estos pasos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Cuando se haya creado la instancia y se hayan activado los cambios, podrá ver el servidor HTTP en el panel de **Navegación de destino**. | 

## Recursos relacionados
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-resources"></a>

**Documentación de AWS**
+ [Equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [Trabajar con zonas públicas alojadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html)
+ [Uso de zonas alojadas privadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)

**Documentación de Oracle**:
+ [Descripción general del complemento Oracle WebLogic Server Proxy](https://docs.oracle.com/middleware/1221/webtier/develop-plugin/overview.htm#PLGWL391)
+ [Instalación WebLogic del servidor mediante el instalador de infraestructuras](https://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/12_2_1/02-01-004-InstallWLSInfrastructure/installweblogicinfrastructure.html)
+ [Instalación y configuración del servidor HTTP de Oracle](https://docs.oracle.com/middleware/1221/core/install-ohs/toc.htm)

# Conéctese a los planos de datos y control del Servicio de Migración de Aplicaciones a través de una red privada
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network"></a>

*Dipin Jain y Mike Kuznetsov, Amazon Web Services*

## Resumen
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-summary"></a>

Este patrón explica cómo puede conectarse a un plano de AWS Application Migration Service datos y un plano de control en una red privada y segura mediante puntos finales de VPC de interfaz.

El servicio de migración de aplicaciones es una solución altamente automatizada lift-and-shift (rehospedaje) que simplifica, agiliza y reduce el costo de migrar aplicaciones a ellas. AWS Permite a las empresas volver a alojar una gran cantidad de servidores físicos, virtuales o en la nube sin problemas de compatibilidad, interrupciones en el rendimiento ni periodos de transición prolongados. Application Migration Service está disponible en la Consola de administración de AWS. Esto permite una integración perfecta con otros Servicios de AWS AWS CloudTrail, como Amazon CloudWatch e AWS Identity and Access Management (IAM).

Puede conectarse desde un centro de datos de origen a un plano de datos, es decir, a una subred que sirva como área de almacenamiento para la replicación de datos en la VPC de destino Site-to-Site VPN , a través de una conexión privada mediante servicios AWS Direct Connect o interconexión de VPC en Application Migration Service. También puede usar [puntos finales de VPC de interfaz](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) alimentados por AWS PrivateLink para conectarse a un plano de control del Servicio de migración de aplicaciones a través de una red privada. 

## Requisitos previos y limitaciones
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-prereqs"></a>

**Requisitos previos **
+ **Subred de área de almacenamiento: antes de configurar el Servicio de migración de aplicaciones, cree una subred para utilizarla como área de almacenamiento provisional** de los datos replicados desde sus servidores de origen AWS (es decir, un plano de datos). Debe especificar esta subred en la [Plantilla de configuración de replicación](https://docs.aws.amazon.com/mgn/latest/ug/template-vs-server.html) cuando acceda por primera vez a la consola del Servicio de migración de aplicaciones. Puede anular esta subred para servidores de origen específicos en la plantilla de configuración de replicación. Si bien puede utilizar una subred existente en su cuenta Cuenta de AWS, le recomendamos que cree una nueva subred dedicada para este fin.
+ **Requisitos de red: los** servidores de replicación que lanza Application Migration Service en la subred de su área de ensayo deben poder enviar datos al punto final de la API del Application Migration Service`https://mgn.<region>.amazonaws.com/`, donde `<region>` se encuentra el código del lugar en el Región de AWS que se está replicando (por ejemplo,). `https://mgn.us-east-1.amazonaws.com` El servicio Amazon Simple Storage Service (Amazon S3) es necesario para descargar el software Application Migration URLs Service.
  + El instalador del agente de AWS replicación debe tener acceso a la URL del bucket de Amazon Simple Storage Service (Amazon S3) Región de AWS del que esté utilizando con Application Migration Service.
  + La subred del área de almacenamiento debe tener acceso a Amazon S3.
  + Los servidores de origen en los que está instalado el agente de AWS replicación deben poder enviar datos a los servidores de replicación de la subred del área de ensayo y al punto final de la API del Servicio de Migración de Aplicaciones ubicado en. `https://mgn.<region>.amazonaws.com/`

En la siguiente tabla se muestran los puertos necesarios.


| 
| 
| Origen | Destino | Puerto | Para obtener más información, consulte | 
| --- |--- |--- |--- |
| Su centro de datos de origen | Servicio Amazon S3 URLs | 443 (TCP) | [Comunicación a través del puerto TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Su centro de datos de origen | Región de AWS: dirección de consola específica para Application Migration Service | 443 (TCP) | [Comunicación entre los servidores de origen y el Servicio de migración de aplicaciones a través del puerto TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Source-Manager-TCP-443) | 
| Su centro de datos de origen | Subred de área de almacenamiento | 1500 (TCP) | [Comunicación entre los servidores de origen y la subred del área de almacenamiento a través del puerto TCP 1500](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-1500) | 
| Subred de área de almacenamiento | Región de AWS: dirección de consola específica para Application Migration Service | 443 (TCP) | [Comunicación entre la subred del área de ensayo y el Servicio de migración de aplicaciones a través del puerto TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-443-Staging) | 
| Subred de área de almacenamiento | Servicio Amazon S3 URLs | 443 (TCP) | [Comunicación a través del puerto TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Subred de área de almacenamiento | Punto final de Amazon Elastic Compute Cloud (Amazon EC2) de la subred Región de AWS | 443 (TCP) | [Comunicación a través del puerto TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 

**Limitaciones**

El servicio de migración de aplicaciones no está disponible actualmente en todos Regiones de AWS los sistemas operativos.
+ [Compatible Regiones de AWS](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)
+ [Sistemas operativos compatibles](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)

## Arquitectura
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-architecture"></a>

El siguiente diagrama ilustra la arquitectura de red para una migración típica. Para obtener más información sobre esta arquitectura, consulte la [documentación del Servicio de migración de aplicaciones](https://docs.aws.amazon.com/mgn/latest/ug/Network-Settings-Video.html) y el [video sobre la arquitectura del servicio de migración de aplicaciones y la arquitectura de red](https://youtu.be/ao8geVzmmRo).

![\[Arquitectura de red para el Servicio de migración de aplicaciones para una migración típica\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/546598b2-8026-4849-a441-eaa2bc2bf6bb.png)


La siguiente vista detallada muestra la configuración de los puntos de conexión de VPC de la interfaz en el área de ensayo para conectar Amazon S3 y Servicio de migración de aplicaciones.

![\[Arquitectura de red para el servicio de migración de aplicaciones para una migración típica: vista detallada\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/bd0dfd42-4ab0-466f-b696-804dedcf4513.png)


## Tools (Herramientas)
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)simplifica, agiliza y reduce el costo de realojar las aplicaciones. AWS
+ [Los puntos finales de VPC de interfaz](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) le permiten conectarse a servicios alimentados por AWS PrivateLink sin necesidad de una puerta de enlace a Internet, un dispositivo NAT, una conexión VPN o una conexión. AWS Direct Connect Las instancias de su VPC no necesitan direcciones IP públicas para comunicarse con los recursos del servicio. El tráfico entre su VPC y el otro servicio no sale de la red de Amazon.

## Epics
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-epics"></a>

### Cree puntos de enlace para Application Migration Service EC2, Amazon y Amazon S3
<a name="create-endpoints-for-mgn-ec2-and-s3"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el punto de conexión de la interfaz para el Servicio de migración de aplicaciones. | El centro de datos de origen y la VPC del área de ensayo se conectan de forma privada al plano de control del Servicio de migración de aplicaciones a través del punto de conexión de la interfaz que se crea en la VPC del área de almacenamiento de destino. Para crear el punto de conexión:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Para obtener más información, consulte [Acceso y Servicio de AWS uso de un punto final de VPC de interfaz en la documentación de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html). | Líder de migración | 
| Configure el punto final de la interfaz para Amazon EC2. | La VPC del área de ensayo se conecta de forma privada a la API de EC2 Amazon a través del punto de enlace de interfaz que usted crea en la VPC del área de ensayo de destino. Para crear el punto de conexión, siga las instrucciones de la historia anterior.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html) | Líder de migración | 
| Configure el punto de conexión de interfaz para Amazon S3. | El centro de datos de origen y la VPC del área de ensayo se conectan de forma privada a la API de Amazon S3 a través del punto de conexión de interfaz que usted crea en la VPC del área de ensayo de destino. Para crear el punto de conexión, siga las instrucciones que se proporcionan en la primera historia.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Se utiliza un punto de conexión de interfaz porque las conexiones de punto de conexión de puerta de enlace no se pueden ampliar más allá de la VPC. (Para obtener más información, consulte la [documentación de AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html)). | Líder de migración | 
| Creación del punto de conexión de la puerta de enlace de Amazon S3. | Durante la fase de configuración, el servidor de replicación debe conectarse a un bucket de S3 para descargar las actualizaciones de software del servidor de AWS replicación. Sin embargo, los puntos de conexión de la interfaz Amazon S3 no admiten nombres de DNS privados* *y no hay forma de proporcionar un nombre de DNS de punto de conexión de Amazon S3 a un servidor de replicación. Para mitigar este problema, debe crear un punto de conexión de puerta de enlace de Amazon S3 en la VPC a la que pertenece la subred del área de ensayo y actualizar las tablas de rutas de la subred de almacenamiento provisional con las rutas pertinentes. Para obtener más información, consulte [Crear un punto final de puerta](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3) de enlace en la AWS PrivateLink documentación. | Administrador de la nube | 
| Configure el DNS en las instalaciones para resolver los nombres DNS privados de los puntos de conexión. | Los puntos finales de la interfaz de Application Migration Service y Amazon EC2 tienen nombres DNS privados que se pueden resolver en la VPC. Sin embargo, también debe configurar los servidores en las instalaciones para resolver los nombres DNS privados de estos puntos de conexión de la interfaz.Estos servidores se pueden configurar de varias formas. En este patrón, probamos esta funcionalidad reenviando las consultas de DNS locales al punto final de Amazon Route 53 Resolver entrada de la VPC del área de ensayo. Para obtener más información, consulte [Resolución de consultas de DNS entre VPCs y su red](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html) en la documentación de Route 53. | Ingeniero de migraciones | 

### Conéctese al plano de control del Servicio de migración de aplicaciones a través de un enlace privado
<a name="connect-to-the-mgn-control-plane-over-a-private-link"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale el agente de AWS replicación mediante AWS PrivateLink. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)A continuación se muestra un ejemplo para Linux:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Una vez establecida la conexión con el Servicio de migración de aplicaciones e instalado el Agente de AWS replicación, siga las instrucciones de la [documentación del Servicio de migración de aplicaciones](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html) para migrar los servidores de origen a la VPC y la subred de destino. | Ingeniero de migraciones | 

## Recursos relacionados
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-resources"></a>

**Documentación del Servicio de migración de aplicaciones**
+ [Conceptos](https://docs.aws.amazon.com/mgn/latest/ug/CloudEndure-Concepts.html)
+ [Flujo de trabajo de migración ](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html)
+ [Guía de inicio rápido](https://docs.aws.amazon.com/mgn/latest/ug/quick-start-guide-gs.html)
+ [Preguntas frecuentes](https://docs.aws.amazon.com/mgn/latest/ug/FAQ.html)
+ [Solución de problemas](https://docs.aws.amazon.com/mgn/latest/ug/troubleshooting.html)

**Recursos adicionales**
+ [Realojar sus aplicaciones en una arquitectura de varias cuentas AWS mediante puntos finales de interfaz de VPC (guía](https://docs.aws.amazon.com/prescriptive-guidance/latest/rehost-multi-account-architecture-interface-endpoints/) de orientación prescriptiva)AWS 
+ [AWS Application Migration Service — Una introducción técnica](https://www.aws.training/Details/eLearning?id=71732) (tutorial sobre formación y certificación)AWS 
+ [AWS Application Migration Service arquitectura y arquitectura de red](https://youtu.be/ao8geVzmmRo) (vídeo)

## Información adicional
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-additional"></a>

**Solución de problemas de** **instalaciones del agente de *AWS *replicación en servidores Linux**

Si recibe un error **gcc** en un servidor Amazon Linux, configure el repositorio de paquetes y utilice el siguiente comando:

```
## sudo yum groupinstall "Development Tools"
```

# Cree objetos de Infoblox con los recursos CloudFormation personalizados de AWS y Amazon SNS
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns"></a>

*Tim Sutton, Amazon Web Services*

## Resumen
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-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/)

El sistema de nombres de dominio (DNS), el protocolo de configuración dinámica de host (DHCP) y la administración de direcciones IP ([Infoblox DDI](https://www.infoblox.com/products/ddi/)) permiten centralizar y controlar de manera eficiente un entorno híbrido complejo. Con Infoblox DDI se pueden descubrir y registrar todos los activos de la red en una base de datos de Administrador de direcciones IP (IPAM) autorizada, además de administrar el DNS en las instalaciones y en la nube de Amazon Web Services (AWS) mediante los mismos dispositivos.

Este patrón describe cómo usar un recurso CloudFormation personalizado de AWS para crear objetos de Infoblox (por ejemplo, registros DNS u objetos de IPAM) mediante una llamada a la API WAPI de Infoblox. Para obtener más información sobre la WAPI de Infoblox, consulte la [documentación de la WAPI](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf) en la documentación de Infoblox.

Al utilizar el enfoque de este patrón, puede obtener una vista unificada de los registros de DNS y las configuraciones de IPAM para sus entornos de AWS y en las instalaciones, además de eliminar los procesos manuales que crean registros y aprovisionan sus redes. Se puede utilizar el enfoque de este patrón para los casos de uso siguientes:
+ Añadir un registro A después de crear una instancia de Amazon Elastic Compute Cloud (Amazon EC2) 
+ Cómo agregar un registro CNAME después de crear un Equilibrador de carga de aplicación
+ Cómo agregar un objeto de red después de crear una nube privada virtual (VPC)
+ Proporcionar el rango de redes siguiente y usar ese rango para crear subredes

También puede ampliar este patrón y utilizar otras funciones del dispositivo Infoblox, como agregar diferentes tipos de registros DNS o configurar Infoblox vDiscovery. 

El patrón usa un hub-and-spoke diseño en el que el hub requiere conectividad con el dispositivo Infoblox en la nube de AWS o en las instalaciones y usa AWS Lambda para llamar a la API de Infoblox. El radio se encuentra en la misma cuenta o en una cuenta diferente de la misma organización en AWS Organizations y llama a la función Lambda mediante un recurso CloudFormation personalizado de AWS.

## Requisitos previos y limitaciones
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-prereqs"></a>

**Requisitos previos **
+ Un dispositivo o una red de Infoblox existente, instalado en la nube de AWS, en las instalaciones o en ambos, y configurado con un usuario administrador que puede administrar las acciones de IPAM y DNS. Para obtener más información acerca de este tema, consulte [About admin accounts](https://docs.infoblox.com/display/nios86/About+Admin+Accounts) (Acerca de las cuentas de administrador) en la documentación de Infoblox. 
+ Una zona de DNS autorizada existente a la que desee agregar registros del dispositivo Infoblox. Para obtener más información al respecto, consulte [Configuring authoritative zones](https://docs.infoblox.com/display/nios86/Configuring+Authoritative+Zones) (Configurar zonas autorizadas) en la documentación de Infoblox.  
+ Dos cuentas de AWS activas en AWS Organizations. Una cuenta es la cuenta de hub y la otra es la cuenta de spoke.
+ Las cuentas de hub y spoke deben estar en la misma región de AWS. 
+ La VPC de la cuenta de hub debe conectarse al dispositivo Infoblox; por ejemplo, mediante AWS Transit Gateway o interconexión de VPC.
+ [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html), instalado y configurado localmente con AWS Cloud9 o AWS. CloudShell
+ Los archivos `ClientTest.yaml` y `Infoblox-Hub.zip` (adjuntos), descargados en el entorno local que contiene AWS SAM.

**Limitaciones**
+ El token de servicio del recurso CloudFormation personalizado de AWS debe provenir de la misma región en la que se creó la pila. Se recomienda utilizar una cuenta de hub en cada región, en lugar de crear un tema de Amazon Simple Notification Service (Amazon SNS) en una región y llamar a la función de Lambda en otra región.

**Versiones de producto**
+ Infoblox, versión 2.7

## Arquitectura
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-architecture"></a>

En los siguientes diagramas se muestra el flujo de este patrón. 

![\[Creación de objetos de Infoblox mediante recursos CloudFormation personalizados de AWS y Amazon SNS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8d609d3f-6f5e-4084-849f-ca191db8055e/images/3594a064-e103-4211-84b7-da67c41ebb15.png)


El diagrama muestra los siguientes componentes para la solución de este patrón:

1.  CloudFormation Los recursos personalizados de AWS le permiten escribir una lógica de aprovisionamiento personalizada en las plantillas que AWS CloudFormation ejecuta al crear, actualizar o eliminar pilas. Al crear una pila, AWS CloudFormation envía una `create` solicitud a un tema de SNS que supervisa una aplicación que se ejecuta en una EC2 instancia.

1. La notificación de Amazon SNS del recurso CloudFormation personalizado de AWS se cifra mediante una clave específica de AWS Key Management Service (AWS KMS) y el acceso está restringido a las cuentas de su organización en Organizations. El tema SNS inicia el recurso de Lambda que llama a la API WAPI de Infoblox.

1. Amazon SNS invoca las siguientes funciones de Lambda que toman la URL de la WAPI de Infoblox, el nombre de usuario y la contraseña () de AWS Secrets Manager Amazon Resource Names () como variables de entorno: ARNs 
   + `dnsapi.lambda_handler`— Recibe los `DNSValue` valores `DNSName``DNSType`, y del recurso CloudFormation personalizado de AWS y los utiliza para crear registros A de DNS y CNAME.
   + `ipaddr.lambda_handler`— Recibe los `Network Name` valores`VPCCIDR`, `Type``SubnetPrefix`, y del recurso CloudFormation personalizado de AWS y los utiliza para añadir los datos de la red a la base de datos de IPAM de Infoblox o para proporcionar al recurso personalizado la siguiente red disponible que se pueda utilizar para crear nuevas subredes.
   + `describeprefixes.lambda_handler`: Llama a la API de AWS `describe_managed_prefix_lists` mediante el filtro `"com.amazonaws."+Region+".s3"` para recuperar el `prefix ID` necesario.
**importante**  
Estas funciones Lambda están escritas en Python y son similares entre sí, pero se llaman de forma diferente. APIs

1. Puede implementar la red de Infoblox como dispositivos de red físicos, virtuales o basados en la nube.  Se puede implementar en las instalaciones o como un dispositivo virtual mediante una variedad de hipervisores, incluidos VMware ESXi Microsoft Hyper-V, Linux KVM y Xen. También puede implementar la cuadrícula de Infoblox en la nube de AWS con una Imagen de máquina de Amazon (AMI).

1. El diagrama muestra una solución híbrida para la red de Infoblox que proporciona DNS e IPAM a los recursos en la nube de AWS y en las instalaciones.

**Pila de tecnología**
+ AWS CloudFormation
+ IAM
+ AWS KMS
+ AWS Lambda
+ SAM de AWS
+ AWS Secrets Manager
+ Amazon SNS
+ Amazon VPC 

## Tools (Herramientas)
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-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 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.
+ [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 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.
+ [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 Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) es un marco de código abierto que permite crear aplicaciones sin servidor en la nube de AWS.
+ [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 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.

**Código**

Puede usar la CloudFormation plantilla de AWS de `ClientTest.yaml` muestra (adjunta) para probar el centro de Infoblox. Puede personalizar la CloudFormation plantilla de AWS para incluir los recursos personalizados de la siguiente tabla.


|  | 
| --- |
| Crear un registro A con el recurso personalizado de spoke de Infoblox | Valores devueltos: `infobloxref `: referencias de InfobloxRecurso de ejemplo:

```
ARECORDCustomResource:

  Type: "Custom::InfobloxAPI"

  Properties:

    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxDNSFunction

    DNSName: 'arecordtest.company.com'

    DNSType: 'ARecord' 

    DNSValue: '10.0.0.1'
``` | 
| --- |--- |
| crear un registro de CNAME con el recurso personalizado de spoke de Infoblox | **Valores devueltos**: `infobloxref `: referencias de Infoblox**Recurso de ejemplo**:<pre>CNAMECustomResource:<br /><br />  Type: "Custom::InfobloxAPI"<br /><br />  Properties:<br /><br />    ServiceToken: !Sub arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfoblox    <br /><br />    DNSFunction<br /><br />    DNSName: 'cnametest.company.com'<br /><br />    DNSType: 'cname' <br /><br />    DNSValue: 'aws.amazon.com'</pre> | 
| crear un objeto de red utilizando el recurso personalizado de spoke de Infoblox | **Valores devueltos**:`infobloxref `: referencias de Infoblox`network`: Rango de red (igual a `VPCCIDR`)**Recurso de ejemplo**:<pre>VPCCustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: VPC<br /><br />    NetworkName: My-VPC</pre> | 
| Recuperar la subred disponible siguiente mediante el recurso personalizado de spoke de Infoblox | **Valores devueltos**:`infobloxref`: referencias de Infoblox`network `: El rango de redes de la subred**Recurso de ejemplo**:<pre>Subnet1CustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  DependsOn: VPCCustomResource<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: Subnet<br /><br />    SubnetPrefix: !Ref SubnetPrefix<br /><br />NetworkName: My-Subnet</pre> | 

## Epics
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-epics"></a>

### Crear y configurar la VPC de la cuenta de hub
<a name="create-and-configure-the-hub-accountrsquor-s-vpc"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una VPC con una conexión al dispositivo Infoblox. | Inicie sesión en la consola de administración de AWS de su cuenta de hub y cree una VPC siguiendo los pasos de [Amazon VPC en la implementación de referencia de inicio rápido de la nube de AWS](https://aws-quickstart.github.io/quickstart-aws-vpc/) en los inicios rápidos de AWS.La VPC debe tener conectividad HTTPS con el dispositivo Infoblox y se recomienda utilizar una subred privada para esta conexión. | Administrador de red, administrador del sistema | 
| (Opcional) Cree los puntos de conexión de VPC para las subredes privadas.  | Los puntos de conexión de VPC proporcionan conectividad a los servicios públicos para las subredes privadas. Se necesitan los puntos de conexión siguientes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html)Para obtener más información acerca de la creación de puntos de conexión para las subredes privadas, consulte [VPC endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html) (Puntos de conexión de VPC) de la documentación de Amazon VPC. | Administrador de red, administrador del sistema | 

### Implementar el hub de Infoblox
<a name="deploy-the-infoblox-hub"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la plantilla SAM de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html) | Desarrollador, administrador del sistema | 
| Implemente la plantilla SAM de AWS. | El `sam deploy` comando toma los parámetros necesarios y los guarda en el `samconfig.toml` archivo, almacena la CloudFormation plantilla de AWS y las funciones de Lambda en un bucket de S3 y, a continuación, implementa la CloudFormation plantilla de AWS en su cuenta de hub.  El código de ejemplo siguiente muestra cómo implementar la plantilla AWS SAM:<pre>$ sam deploy --guided<br /><br />Configuring SAM deploy<br />======================<br />        Looking for config file [samconfig.toml] :  Found<br />        Reading default arguments  :  Success<br />        Setting default arguments for 'sam deploy'<br />        =========================================<br />        Stack Name [Infoblox-Hub]:<br />        AWS Region [eu-west-1]:<br />        Parameter InfobloxUsername:<br />        Parameter InfobloxPassword:<br />        Parameter InfobloxIPAddress [xxx.xxx.xx.xxx]:<br />        Parameter AWSOrganisationID [o-xxxxxxxxx]:<br />        Parameter VPCID [vpc-xxxxxxxxx]:<br />        Parameter VPCCIDR [xxx.xxx.xxx.xxx/16]:<br />        Parameter VPCSubnetID1 [subnet-xxx]:<br />        Parameter VPCSubnetID2 [subnet-xxx]:<br />        Parameter VPCSubnetID3 [subnet-xxx]:<br />        Parameter VPCSubnetID4 []: <br />        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy<br />        Confirm changes before deploy [Y/n]: y<br />        #SAM needs permission to be able to create roles to connect to the resources in your template<br />Allow SAM CLI IAM role creation [Y/n]: n<br />Capabilities [['CAPABILITY_NAMED_IAM']]:<br />        Save arguments to configuration file [Y/n]: y<br />        SAM configuration file [samconfig.toml]:<br />        SAM configuration environment [default]: </pre>Debe utilizar la opción `--guided` cada vez, ya que las credenciales de inicio de sesión de Infoblox no se almacenan en el archivo `samconfig.toml`. | Desarrollador, administrador del sistema | 

## Recursos relacionados
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-resources"></a>
+ [Cómo empezar a WAPIs usar Postman (blog de Infoblox](https://blogs.infoblox.com/community/getting-started-with-wapis-using-postman/))
+ [Provisioning vNIOS for AWS Using the BYOL Model ](https://docs.infoblox.com/display/NAIG/Provisioning+vNIOS+for+AWS+Using+the+BYOL+Model)(Aprovisionar vNIOS para AWS mediante el modelo BYOL) (documentación de Infoblox)
+ [quickstart-aws-vpc](https://github.com/aws-quickstart/quickstart-aws-vpc)(repositorio) GitHub 
+ [describe\$1managed\$1prefix\$1lists](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_managed_prefix_lists) (documentación de AWS SDK para Python)

## Conexiones
<a name="attachments-8d609d3f-6f5e-4084-849f-ca191db8055e"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/8d609d3f-6f5e-4084-849f-ca191db8055e/attachments/attachment.zip)

# Cree una arquitectura IPAM jerárquica y multirregional mediante Terraform AWS
<a name="multi-region-ipam-architecture"></a>

*Donny Schreiber, Amazon Web Services*

## Resumen
<a name="multi-region-ipam-architecture-summary"></a>

La *administración de direcciones IP (IPAM)* es un componente esencial de la administración de redes y se vuelve cada vez más compleja a medida que las organizaciones escalan su infraestructura en la nube. Sin la IPAM adecuada, las organizaciones corren el riesgo de que se produzcan conflictos con las direcciones IP, se desperdicie espacio en las direcciones y se resuelvan problemas complejos que pueden provocar interrupciones y tiempo de inactividad en las aplicaciones. Este patrón demuestra cómo implementar una solución de IPAM integral para AWS entornos empresariales mediante Terraform. HashiCorp [Ayuda a las organizaciones a crear una arquitectura de IPAM jerárquica y multirregional que facilita la administración centralizada de las direcciones IP en todos los componentes de la organización. Cuentas de AWSAWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organization-structure)

Este patrón lo ayuda a implementar el [Administrador de direcciones IP de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) con una sofisticada jerarquía de grupos de cuatro niveles: grupo de nivel superior, grupos regionales, grupos de unidades de negocio y grupos específicos del entorno. Esta estructura permite realizar una gobernanza adecuada de las direcciones IP y, al mismo tiempo, permite delegar la administración de direcciones IP en los equipos correspondientes de la organización. La solución utiliza AWS Resource Access Manager (AWS RAM) para compartir sin problemas los grupos de administradores de direcciones IP en toda la organización. AWS RAM centraliza y estandariza las especificaciones de IPAM, que los equipos pueden utilizar en todas las cuentas gestionadas.

Este patrón lo ayuda a lograr lo siguiente:
+ Automatice la asignación de direcciones IP en todas las Regiones de AWS unidades de negocio y los entornos.
+ Aplicar las políticas de red de la organización mediante la validación con programación.
+ Escalar la infraestructura de red de manera eficiente a medida que evolucionan los requisitos de la empresa.
+ Reducir la sobrecarga operativa mediante la administración centralizada de los espacios de direcciones IP.
+ Acelerar las implementaciones de cargas de trabajo nativas en la nube con la asignación de rangos de CIDR de autoservicio.
+ Evitar gestionar los conflictos mediante la validación y los controles basados en políticas.

## Requisitos previos y limitaciones
<a name="multi-region-ipam-architecture-prereqs"></a>

**Requisitos previos **
+ Uno o más Cuentas de AWS, administrados como una organización en AWS Organizations.
+ Una cuenta de administración de redes o de centro de redes que servirá como administrador delegado del Administrador de direcciones IP.
+ 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).
+ La versión 1.5 o posterior de Terraform [instalada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ AWS Proveedor de Terraform, [configurado](https://registry.terraform.io/providers/hashicorp/aws/latest/docs).
+ Permisos para administrar el [administrador de direcciones IP](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html) y [las nubes privadas virtuales (VPCs)](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html) configuradas en AWS Identity and Access Management (IAM). [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/security-iam.html)

**Limitaciones**
+ El Administrador de direcciones IP está sujeto a las [cuotas de servicio](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html). La cuota de servicio predeterminada para los grupos es de 50 por ámbito. Al ejecutar esta implementación en 6 regiones, 2 unidades de negocio y 4 entornos, se crearían 67 grupos. Por lo tanto, podría ser necesario incrementar la cuota.
+ Al modificar o eliminar los grupos del Administrador de direcciones IP una vez asignados los recursos, podrían surgir problemas de dependencias. Primero debe [liberar la asignación](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) antes de poder eliminar el grupo.
+ En el Administrador de direcciones IP, la [supervisión de los recursos](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) puede experimentar un ligero retraso a la hora de reflejar los cambios en los recursos. Este retraso puede ser de 20 minutos aproximadamente.
+ El Administrador de direcciones IP no puede aplicar la unicidad de las direcciones IP en distintos ámbitos de forma automática.
+ Las etiquetas personalizadas deben cumplir con las [prácticas recomendadas en materia de etiquetado de AWS](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html). Por ejemplo, cada clave debe ser única y no puede empezar por `aws:`.
+ Hay ciertas [consideraciones y limitaciones](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org-considerations.html) a la hora de integrar el Administrador de direcciones IP con cuentas externas a su organización.

## Arquitectura
<a name="multi-region-ipam-architecture-architecture"></a>

**Arquitectura de destino**

*Configuración y jerarquía de grupos del Administrador de direcciones IP*

En el siguiente diagrama se ilustran los constructos lógicos de la arquitectura de destino. Un *ámbito* es el contenedor de nivel más alto del Administrador de direcciones IP. Cada ámbito representa el espacio de direcciones IP de una única red. Los *grupos* son conjuntos de rangos continuos de direcciones IP (o rangos de CIDR) dentro del ámbito. Los grupos lo ayudan a organizar las direcciones IP según sus necesidades de enrutamiento y seguridad. En este diagrama se ilustran cuatro niveles jerárquicos de grupos: un grupo de nivel superior, grupos regionales, grupos de unidades de negocio y grupos de entornos.

![\[Un alcance privado y cuatro niveles de grupos en una sola región de AWS en una cuenta de red.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/1e23b2a7-a274-4a19-9097-61d8a31dfbf8.png)


Esta solución establece una jerarquía clara de grupos del Administrador de direcciones IP:

1. El grupo de nivel superior comprende todo el espacio de direcciones IP de la organización, como `10.176.0.0/12`.

1. Los grupos regionales son para las asignaciones específicas de una región, como `10.176.0.0/15` para `us-east-1`.

1. Los grupos de unidades de negocio son asignaciones específicas de dominio dentro de cada uno de ellos. Región de AWS Por ejemplo, la unidad de negocios de finanzas de la región `us-east-1` podría tener `10.176.0.0/16`.

1. Los grupos de entornos son asignaciones con una finalidad específica para diferentes entornos. Por ejemplo, la unidad de negocios de finanzas de la región `us-east-1` podría tener `10.176.0.0/18` para un entorno de producción.

Esta topología de implementación distribuye geográficamente los recursos del Administrador de direcciones IP y, al mismo tiempo, mantiene el control centralizado. Sus características son las siguientes:
+ El administrador de direcciones IP se implementa en un único servidor principal. Región de AWS
+ Las regiones adicionales se registran como [regiones operativas](https://docs.aws.amazon.com/vpc/latest/ipam/mod-ipam-region.html), donde el Administrador de direcciones IP puede administrar los recursos.
+ Cada región operativa recibe un grupo de direcciones dedicado del grupo de nivel superior.
+ Los recursos de todas las regiones operativas se administran de forma centralizada a través del Administrador de direcciones IP en la región principal.
+ Cada grupo regional tiene una propiedad de configuración regional vinculada a su región que lo ayuda a asignar los recursos de forma adecuada.

*Validación avanzada del rango de CIDR*

Esta solución está diseñada para evitar que se implementen configuraciones que no sean válidas. Al implementar los grupos a través de Terraform, se valida lo siguiente durante la fase de planificación de Terraform:
+ Valida que todos los rangos de CIDR del entorno estén contenidos dentro de los rangos de CIDR de las unidades de negocio principales
+ Confirma que todos los rangos de CIDR de la unidad de negocio estén contenidos dentro de los rangos de CIDR regionales principales
+ Verifica que todos los rangos de CIDR regionales estén contenidos en los rangos de CIDR de nivel superior
+ Comprueba si hay rangos de CIDR solapados dentro del mismo nivel jerárquico
+ Valida la asignación adecuada de los entornos a sus respectivas unidades de negocio

*Asignación de rangos de CIDR*

El siguiente diagrama muestra un ejemplo de cómo los desarrolladores o administradores pueden crear direcciones IP nuevas VPCs y asignarlas desde los niveles del grupo.

![\[Un alcance privado y cuatro niveles de grupos en una sola región de AWS en una cuenta de red.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/7c3de2e3-e71b-4fc0-abcd-7e88cfab5c87.png)


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

1. A través de la Consola de administración de AWS infraestructura como código (IaC) o mediante la infraestructura como código (IaC), un desarrollador o administrador solicita el siguiente rango de CIDR disponible en el grupo de `AY3` entornos. AWS CLI

1. El Administrador de direcciones IP asigna el siguiente rango de CIDR disponible en ese grupo a la VPC `AY3-4`. Este rango de CIDR ya no se puede utilizar.

**Automatización y escala**

Esta solución está diseñada para ofrecer escalabilidad de la siguiente manera:
+ **Expansión regional**: para agregar nuevas regiones, amplíe la configuración de Terraform con entradas adicionales del grupo regional.
+ **Crecimiento de las unidades de negocio**: para admitir las nuevas unidades de negocio, agréguelas al mapa de configuración de las unidades de negocio.
+ **Flexibilidad del entorno**: configure distintos tipos de entornos, como entornos de desarrollo o producción, en función de las necesidades de la organización.
+ **Soporte multicuenta**: comparta grupos entre todas las cuentas de su organización a través de. AWS RAM
+ **Aprovisionamiento automatizado de VPC**: intégrelo con los flujos de trabajo de aprovisionamiento de VPC para automatizar la asignación de rangos de CIDR.

La estructura jerárquica también permite diferentes escalas de delegación y control, como las siguientes:
+ Los administradores de red pueden administrar los grupos regionales y de nivel superior.
+ Es posible que los equipos de TI de las unidades de negocio hayan delegado el control de sus grupos respectivos.
+ Los equipos de aplicaciones pueden consumir direcciones IP de los grupos de entornos designados.

**nota**  
También puede integrar esta solución con el [Generador de cuentas de AWS Control Tower para Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html). Para obtener más información, consulte *Integración con AFT* en la sección [Información adicional](#multi-region-ipam-architecture-additional) de este patrón.

## Tools (Herramientas)
<a name="multi-region-ipam-architecture-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 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 shell de línea de comandos.
+ [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 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 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. El [Administrador de direcciones IP](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) es una característica de Amazon VPC. Le ayuda a planificar, rastrear y monitorear las direcciones IP de sus cargas de AWS trabajo.

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

**Repositorio de código**

El código de este patrón está disponible en el repositorio de [ejemplo de implementación de Terraform para el IPAM jerárquico](https://github.com/aws-samples/sample-amazon-vpc-ipam-terraform). AWS** GitHub** La estructura del repositorio incluye lo siguiente:
+ **Módulo raíz**: variables de entrada y orquestación de la implementación.
+ **Módulo de IPAM**: implementación básica de la arquitectura que se describe en este patrón.
+ **Módulo de etiquetas**: etiquetado estandarizado para todos los recursos.

## Prácticas recomendadas
<a name="multi-region-ipam-architecture-best-practices"></a>

Tenga en cuenta las siguientes prácticas recomendadas para la planificación de redes:
+ **Planifique primero**: planifique minuciosamente el espacio de direcciones IP antes de la implementación. Para obtener más información, consulte [Planificar el aprovisionamiento de direcciones IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html).
+ **Evite el solapamiento de rangos de CIDR**: asegúrese de que los rangos de CIDR de cada nivel no se solapen.
+ **Reserve espacio en el búfer**: asigne siempre rangos de CIDR más grandes de lo que necesite inmediatamente para adaptarse al crecimiento.
+ **Documente la asignación de direcciones IP**: mantenga la documentación de la estrategia de asignación de direcciones IP.

Tenga en cuenta las siguientes prácticas recomendadas para la implementación:
+ **Comience con entornos que no sean de producción**: haga implementaciones primero en entornos que no sean de producción.
+ **Utilice la administración de estados de Terraform**: implemente el almacenamiento y el bloqueo de estados remotos. Para obtener más información, consulte [State storage and locking](https://developer.hashicorp.com/terraform/language/state/backends) en la documentación de Terraform.
+ **Implemente el control de versiones**: controle las versiones de todo el código de Terraform.
+ **Implemente CI/CD la integración**: utilice los canales de integración continua y entrega continua (CI/CD) para realizar despliegues repetibles.

Tenga en cuenta las siguientes prácticas operativas recomendadas:
+ **Habilite la importación automática**: configure un grupo del Administrador de direcciones IP para detectar e importar automáticamente los recursos existentes. Siga las instrucciones que se indican en [Edición de un grupo de IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html) para activar la importación automática.
+ **Supervise la utilización de direcciones IP**: configure alarmas para los umbrales de utilización de direcciones IP. Para obtener más información, consulta [Supervisar el IPAM con Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html).
+ **Realice auditorías periódicas**: audite periódicamente el uso y el cumplimiento de las direcciones IP. Para obtener más información, consulte [Seguimiento del uso de direcciones IP en IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tracking-ip-addresses-ipam.html).
+ **Elimine las asignaciones sin utilizar**: libere las asignaciones de direcciones IP cuando se retiren los recursos. Para obtener más información, consulte Eliminar el [aprovisionamiento CIDRs de un grupo](https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html).

Tenga en cuenta las siguientes prácticas recomendadas en materia de seguridad:
+ **Implemente privilegios mínimos**: utilice los roles de IAM con los permisos mínimos necesarios. Para obtener más información, consulte [Prácticas recomendadas de seguridad en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) y [Identity and Access Management en IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html).
+ **Utilice políticas de control de servicios: implemente políticas** de control de servicios (SCPs) para imponer el uso del administrador de direcciones IP en su organización. Para obtener más información, consulte Exigir el [uso de IPAM para la creación de VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) con. SCPs
+ **Controle el uso compartido de recursos**: administre cuidadosamente el alcance del uso compartido de recursos del Administrador de direcciones IP en. AWS RAM Para obtener más información, consulte [Compartir un grupo de IPAM mediante AWS RAM](https://docs.aws.amazon.com/vpc/latest/ipam/share-pool-ipam.html).
+ **Implemente el etiquetado**: implemente el etiquetado obligatorio para todos los recursos relacionados con el Administrador de direcciones IP. Para obtener más información, consulte *Estrategia de etiquetado* en la sección [Información adicional](#multi-region-ipam-architecture-additional).

## Epics
<a name="multi-region-ipam-architecture-epics"></a>

### Configuración de una cuenta de administrador delegado para el Administrador de direcciones IP
<a name="set-up-a-delegated-administrator-account-for-ip-address-manager"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Habilite las AWS Organizations funciones. | Asegúrese de que AWS Organizations tiene todas las funciones habilitadas. Para obtener instrucciones, consulte [Habilitar todas las funciones para una organización AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) en la AWS Organizations documentación. | Administrador de AWS | 
| Habilite el uso compartido de recursos en AWS RAM. | Con el AWS CLI, introduzca el siguiente comando para habilitar el uso compartido de AWS RAM recursos en su organización:<pre>aws ram enable-sharing-with-aws-organization</pre>Para obtener más información, consulte [Habilitar el uso compartido de recursos AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs) en la AWS RAM documentación. | Administrador de AWS | 
| Designe un administrador para el Administrador de direcciones IP. | Desde la cuenta de administración de la organización AWS CLI, introduzca el siguiente comando, donde `123456789012` aparece el ID de la cuenta que administrará el Administrador de direcciones IP:<pre>aws ec2 enable-ipam-organization-admin-account \<br />    --delegated-admin-account-id 123456789012</pre>Generalmente, las cuentas de redes o centro de redes se usan como administrador delegado del Administrador de direcciones IP.Para obtener más información, consulte [Integrar el IPAM con las cuentas de una AWS organización](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html) en la documentación del Administrador de direcciones IP. | Administrador de AWS | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Defina la arquitectura de red. | Defina y documente la arquitectura de red, incluidos los rangos de CIDR de las regiones, unidades de negocio y entornos. Para obtener más información, consulte [Planificar el aprovisionamiento de direcciones IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html) en la documentación del Administrador de direcciones IP. | Ingeniero de redes | 
| Clonar el repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | DevOps ingeniero | 
| Configure las variables. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Ingeniero de redes, Terraform | 
| Implemente los recursos del Administrador de direcciones IP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Terraform | 
| Valide la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS general, ingeniero de redes | 

### Cree VPCs y configure la supervisión
<a name="create-vpcs-and-set-up-monitoring"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una VPC. | Siga los pasos que se indican en [Creación de una VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) en la documentación de Amazon VPC. Cuando llegue al paso donde debe elegir un rango de CIDR para la VPC, asigne el siguiente rango disponible de uno de los grupos regionales, de unidades de negocio y de entornos. | AWS general, administrador de redes, ingeniero de redes | 
| Valide la asignación de rangos de CIDR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS general, administrador de redes, ingeniero de redes | 
| Supervise el Administrador de direcciones IP. | Configure la supervisión y las alarmas relacionadas con la asignación de los recursos del Administrador de direcciones IP. Para obtener más información e instrucciones, consulta [Supervisar el IPAM con Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html) y [Supervisar el uso del CIDR por recurso](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) en la documentación del administrador de direcciones IP. | AWS general | 
| Imponga el uso del Administrador de direcciones IP. | Cree una política de control de servicios (SCP) AWS Organizations que exija a los miembros de su organización utilizar el administrador de direcciones IP al crear una VPC. Para obtener instrucciones, consulte [Exigir el uso de IPAM para la creación de VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) en la SCPs documentación del Administrador de direcciones IP. | AWS general, administrador de AWS | 

## Resolución de problemas
<a name="multi-region-ipam-architecture-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Se produce un error en Terraform y no se encuentra el recurso del Administrador de direcciones IP | Asegúrese de que la cuenta de administrador del administrador de direcciones IP esté debidamente delegada y de que su AWS proveedor esté autenticado en esa cuenta. | 
| Se produce un error en la asignación de rangos de CIDR | Compruebe que el rango de CIDR solicitado se ajuste al rango disponible del grupo del Administrador de direcciones IP y no se solape con las asignaciones existentes. | 
| AWS RAM problemas de uso compartido | Compruebe que el uso compartido de recursos esté habilitado en su AWS organización. Compruebe que el principal correcto, el Amazon Resource Name (ARN) de la organización, se utilice en el AWS RAM recurso compartido. | 
| Errores de validación de la jerarquía de grupos | Asegúrese de que los rangos de CIDR del grupo secundario estén correctamente contenidos dentro de los rangos de CIDR del grupo principal y no se solapen con los grupos del mismo nivel. | 
| Se ha superado el límite de cuota del Administrador de direcciones IP | Solicite un aumento de cuota para los grupos del Administrador de direcciones IP. Para obtener más información, consulte [Solicitud de aumento de cuota](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html) en la *Guía del usuario de Service Quotas*. | 

## Recursos relacionados
<a name="multi-region-ipam-architecture-resources"></a>

**Servicio de AWS documentación**
+ [Documentación del Administrador de direcciones IP de Amazon VPC](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)
+ [AWS Resource Access Manager documentación](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)
+ [AWS Organizations documentación](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)

**AWS publicaciones de blog**
+ [Administración de grupos de IP en todas VPCs las regiones mediante Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/networking-and-content-delivery/managing-ip-pools-across-vpcs-and-regions-using-amazon-vpc-ip-address-manager/)
+ [Network address management and auditing at scale with Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/aws/network-address-management-and-auditing-at-scale-with-amazon-vpc-ip-address-manager/)

**Videos y tutoriales**
+ [AWS re:Invent 2022: prácticas recomendadas para el diseño de Amazon VPC y la IPAM (0) NET31](https://www.youtube.com/watch?v=XrEHsy_8RYs)
+ [AWS re:Invent 2022: diseño de VPC avanzado y nuevas capacidades (01) NET4](https://www.youtube.com/watch?v=tbXTVpwx87o)

## Información adicional
<a name="multi-region-ipam-architecture-additional"></a>

**Integración con AFT**

Puede integrar esta solución con AWS Control Tower Account Factory for Terraform (AFT) para asegurarse de que las cuentas recién aprovisionadas reciban automáticamente las configuraciones de red adecuadas. Al implementar esta solución de IPAM en su cuenta central de red, las nuevas cuentas creadas a través de AFT pueden hacer referencia a los grupos de administradores de direcciones IP compartidos al crearlos. VPCs

El siguiente ejemplo de código muestra la integración de AFT en la personalización de una cuenta mediante AWS Systems Manager Parameter Store:

```
# Get the IP Address Manager pool ID from Parameter Store
data "aws_ssm_parameter" "dev_ipam_pool_id" {
  name = "/org/network/ipam/finance/dev/pool-id"
}

# Create a VPC using the IP Address Manager pool
resource "aws_vpc" "this" {
  ipv4_ipam_pool_id   = data.aws_ssm_parameter.dev_ipam_pool_id.value
  ipv4_netmask_length = 24
  
  tags = {
    Name = "aft-account-vpc"
  }
}
```

**Estrategia de etiquetado**

La solución implementa una estrategia de etiquetado integral para simplificar la administración de los recursos. En el siguiente ejemplo de código se muestra cómo se usa:

```
# Example tag configuration
module "tags" {
  source = "./modules/tags"
  
  # Required tags
  product_name  = "enterprise-network"
  feature_name  = "ipam"
  org_id        = "finance"
  business_unit = "network-operations"
  owner         = "network-team"
  environment   = "prod"
  repo          = "https://github.com/myorg/ipam-terraform"
  branch        = "main"
  cost_center   = "123456"
  dr_tier       = "tier1"
  
  # Optional tags
  optional_tags = {
    "project"    = "network-modernization"
    "stack_role" = "infrastructure"
  }
}
```

Estas etiquetas se aplican automáticamente a todos los recursos del Administrador de direcciones IP. Esto simplifica la coherencia de la gobernanza, la asignación de costos y la administración de recursos.

# Personaliza las CloudWatch alertas de Amazon para AWS Network Firewall
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall"></a>

*Jason Owens, Amazon Web Services*

## Resumen
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-summary"></a>

El patrón te ayuda a personalizar las CloudWatch alertas de Amazon generadas por AWS Network Firewall. Puede utilizar reglas predefinidas o crear reglas personalizadas que determinen el mensaje, los metadatos y la gravedad de las alertas. A continuación, puedes actuar en función de estas alertas o automatizar las respuestas de otros servicios de Amazon, como Amazon EventBridge.

En este patrón, se generan reglas de firewall compatibles con Suricata. [Suricata](https://suricata.io/) es un motor de detección de amenazas de código abierto. Primero debe crear reglas sencillas y, a continuación, probarlas para confirmar que las CloudWatch alertas se han generado y registrado. Una vez que haya probado correctamente las reglas, las modificará para definir los mensajes personalizados, los metadatos y la gravedad y, a continuación, volverá a probarlas para confirmar las actualizaciones.

## Requisitos previos y limitaciones
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ AWS Command Line Interface (AWS CLI) instalado y configurado en su estación de trabajo Linux, macOS o Windows. Para obtener más información, consulte [Instalación o actualización de la versión de AWS CLI más reciente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ AWS Network Firewall instalado y configurado para usar CloudWatch Logs. Para obtener más información, consulte [Registrar el tráfico de red desde AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html).
+ Una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en una subred privada de una nube privada virtual (VPC) que está protegida por Network Firewall.

**Versiones de producto**
+ Para la versión 1 de AWS CLI, utilice la versión 1.18.180 o posterior. Para la versión 2 de AWS CLI, utilice la 2.1.2 o una versión posterior.
+ El archivo classification.config de la versión 5.0.2 de Suricata. Para obtener una copia de este archivo de configuración, consulte la sección [Información adicional.](#customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional)

## Arquitectura
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-architecture"></a>

![\[Una solicitud de EC2 instancia genera una alerta en Network Firewall, que reenvía la alerta a CloudWatch\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/da6087a9-e942-4cfe-85e3-3b08de6f3ba5/images/778d85cd-bc87-4ed0-a161-d35eb5daa694.png)


El diagrama de la arquitectura muestra el flujo de trabajo siguiente:

1. [Una EC2 instancia de Amazon en una subred privada realiza una solicitud mediante [curl](https://curl.se/) o Wget.](https://www.gnu.org/software/wget/)

1. Network Firewall procesa el tráfico y genera una alerta.

1. Network Firewall envía las alertas registradas a CloudWatch Logs.

## Tools (Herramientas)
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-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 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.
+ [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html)es un firewall de red gestionado y activo y un servicio de detección y prevención de intrusiones para nubes privadas virtuales () en el. VPCs Nube de AWS 

**Otras herramientas**
+ [curl](https://curl.se/) es una herramienta y biblioteca de línea de comandos de código abierto.
+ [GNU Wget](https://www.gnu.org/software/wget/) es una herramienta de línea de comandos gratuita.

## Epics
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-epics"></a>

### Crear las reglas y el grupo de reglas del firewall
<a name="create-the-firewall-rules-and-rule-group"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree reglas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas de AWS, administrador de red | 
| Cree un grupo de reglas. | En AWS CLI, introduzca el siguiente comando. De este modo se crea el grupo de reglas.<pre>❯ aws network-firewall create-rule-group \<br />        --rule-group-name custom --type STATEFUL \<br />        --capacity 10 --rules file://custom.rules \<br />        --tags Key=environment,Value=development</pre>El siguiente es un ejemplo de salida. Anote el `RuleGroupArn`, que necesitará en un paso posterior.<pre>{<br />    "UpdateToken": "4f998d72-973c-490a-bed2-fc3460547e23",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }</pre> | Administrador de sistemas de AWS | 

### Actualizar la política de firewall
<a name="update-the-firewall-policy"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Obtenga el ARN de la política de firewall. | En AWS CLI, introduzca el siguiente comando. Esto devuelve el nombre de recurso de Amazon (ARN) de la política de firewall. Registre el ARN para su uso posterior en este patrón.<pre>❯ aws network-firewall describe-firewall \<br />    --firewall-name aws-network-firewall-anfw \<br />    --query 'Firewall.FirewallPolicyArn'</pre>A continuación se muestra un ejemplo de ARN que devuelve este comando.<pre>"arn:aws:network-firewall:us-east-2:1234567890:firewall-policy/firewall-policy-anfw"</pre> | Administrador de sistemas de AWS | 
| Actualice la política de firewall. | En un editor de texto, copie y pegue el siguiente código. Reemplace `<RuleGroupArn>` por el valor que registró en la sección Epics anterior. Guarde el archivo como `firewall-policy-anfw.json`.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "<RuleGroupArn>"<br />        }<br />    ]<br />}</pre>Introduzca el comando siguiente en la AWS CLI. Este comando requiere un [update token](https://docs.aws.amazon.com/cli/latest/reference/network-firewall/update-firewall-policy.html) (actualizar token) para agregar las nuevas reglas. El token se usa para confirmar que la política no ha cambiado desde la última vez que se recuperó.<pre>UPDATETOKEN=(`aws network-firewall describe-firewall-policy \<br />              --firewall-policy-name firewall-policy-anfw \<br />              --output text --query UpdateToken`)<br /> <br /> aws network-firewall update-firewall-policy \<br /> --update-token $UPDATETOKEN \<br /> --firewall-policy-name firewall-policy-anfw \<br /> --firewall-policy file://firewall-policy-anfw.json</pre> | Administrador de sistemas de AWS | 
| Confirme las actualizaciones de la política. | (Opcional) Si desea confirmar que se añadieron las reglas y ver el formato de la política, introduzca el comando siguiente en la AWS CLI.<pre>❯ aws network-firewall describe-firewall-policy \<br />  --firewall-policy-name firewall-policy-anfw \<br />  --query FirewallPolicy</pre>El siguiente es un ejemplo de salida.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom"<br />        }<br />    ]<br />}</pre> | Administrador de sistemas de AWS | 

### Probar la funcionalidad de las alertas
<a name="test-alert-functionality"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Genere alertas para las pruebas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas de AWS | 
| Valide que las alertas estén registradas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas de AWS | 

### Actualizar las reglas y el grupo de reglas del firewall
<a name="update-the-firewall-rules-and-rule-group"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice las reglas del firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas de AWS | 
| Actualice el grupo de reglas. | En AWS CLI, ejecute los siguientes comandos. Utilice el ARN de su política de firewall. Estos comandos obtienen un token de actualización y actualizan el grupo de reglas con los cambios de las reglas.<pre>❯ UPDATETOKEN=(`aws network-firewall \<br />                describe-rule-group \<br />--rule-group-arn arn:aws:network-firewall:us-east-2:123457890:stateful-rulegroup/custom \<br />--output text --query UpdateToken`)</pre><pre> ❯ aws network-firewall update-rule-group \<br />  --rule-group-arn arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom \<br />--rules file://custom.rules \<br />--update-token $UPDATETOKEN</pre>El siguiente es un ejemplo de salida.<pre>{<br />    "UpdateToken": "7536939f-6a1d-414c-96d1-bb28110996ed",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }<br />}</pre> | Administrador de sistemas de AWS | 

### Probar la funcionalidad de la alerta actualizada
<a name="test-the-updated-alert-functionality"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Genere una alerta para probarla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas de AWS | 
| Valide la alerta modificada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas de AWS | 

## Recursos relacionados
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-resources"></a>

**Referencias**
+ [Envía alertas desde AWS Network Firewall un canal de Slack (guía](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/send-alerts-from-aws-network-firewall-to-a-slack-channel.html)AWS prescriptiva)
+ [Ampliando la prevención de amenazas AWS con Suricata](https://aws.amazon.com/blogs/opensource/scaling-threat-prevention-on-aws-with-suricata/) (entrada del blog)AWS 
+ [Modelos de despliegue para AWS Network Firewall](https://aws.amazon.com/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/) (AWS entrada de blog)
+ [Suricata meta keyworks](https://suricata.readthedocs.io/en/suricata-6.0.1/rules/meta.html) (Claves meta de Suricata) (documentación de Suricata)

**Tutoriales y videos**
+ [AWS Network Firewall taller](https://networkfirewall.workshop.aws/)

## Información adicional
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional"></a>

A continuación se muestra el archivo de configuración de clasificación de Suricata 5.0.2. Estas clasificaciones se utilizan al crear las reglas de firewall.

```
# config classification:shortname,short description,priority
 
config classification: not-suspicious,Not Suspicious Traffic,3
config classification: unknown,Unknown Traffic,3
config classification: bad-unknown,Potentially Bad Traffic, 2
config classification: attempted-recon,Attempted Information Leak,2
config classification: successful-recon-limited,Information Leak,2
config classification: successful-recon-largescale,Large Scale Information Leak,2
config classification: attempted-dos,Attempted Denial of Service,2
config classification: successful-dos,Denial of Service,2
config classification: attempted-user,Attempted User Privilege Gain,1
config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1
config classification: successful-user,Successful User Privilege Gain,1
config classification: attempted-admin,Attempted Administrator Privilege Gain,1
config classification: successful-admin,Successful Administrator Privilege Gain,1
 
# NEW CLASSIFICATIONS
config classification: rpc-portmap-decode,Decode of an RPC Query,2
config classification: shellcode-detect,Executable code was detected,1
config classification: string-detect,A suspicious string was detected,3
config classification: suspicious-filename-detect,A suspicious filename was detected,2
config classification: suspicious-login,An attempted login using a suspicious username was detected,2
config classification: system-call-detect,A system call was detected,2
config classification: tcp-connection,A TCP connection was detected,4
config classification: trojan-activity,A Network Trojan was detected, 1
config classification: unusual-client-port-connection,A client was using an unusual port,2
config classification: network-scan,Detection of a Network Scan,3
config classification: denial-of-service,Detection of a Denial of Service Attack,2
config classification: non-standard-protocol,Detection of a non-standard protocol or event,2
config classification: protocol-command-decode,Generic Protocol Command Decode,3
config classification: web-application-activity,access to a potentially vulnerable web application,2
config classification: web-application-attack,Web Application Attack,1
config classification: misc-activity,Misc activity,3
config classification: misc-attack,Misc Attack,2
config classification: icmp-event,Generic ICMP event,3
config classification: inappropriate-content,Inappropriate Content was Detected,1
config classification: policy-violation,Potential Corporate Privacy Violation,1
config classification: default-login-attempt,Attempt to login by a default username and password,2
 
# Update
config classification: targeted-activity,Targeted Malicious Activity was Detected,1
config classification: exploit-kit,Exploit Kit Activity Detected,1
config classification: external-ip-check,Device Retrieving External IP Address Detected,2
config classification: domain-c2,Domain Observed Used for C2 Detected,1
config classification: pup-activity,Possibly Unwanted Program Detected,2
config classification: credential-theft,Successful Credential Theft Detected,1
config classification: social-engineering,Possible Social Engineering Attempted,2
config classification: coin-mining,Crypto Currency Mining Activity Detected,2
config classification: command-and-control,Malware Command and Control Activity Detected,1
```

# Despliega recursos en una AWS Wavelength zona mediante Terraform
<a name="deploy-resources-wavelength-zone-using-terraform"></a>

*Zahoor Chaudhrey y Luca Iannario, Amazon Web Services*

## Resumen
<a name="deploy-resources-wavelength-zone-using-terraform-summary"></a>

[AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html) lo ayuda a crear una infraestructura optimizada para aplicaciones de computación de periferia de acceso múltiple (MEC). *Las Wavelength Zones* son despliegues de AWS infraestructura que incorporan servicios de AWS cómputo y almacenamiento en las redes 5G de los proveedores de servicios de comunicaciones (CSP). El tráfico de aplicaciones de los dispositivos 5G llega a los servidores de aplicaciones que se ejecutan en zonas de Wavelength sin salir de la red de telecomunicaciones. Lo siguiente facilita la conectividad de red a través de Wavelength:
+ **Nubes privadas virtuales (VPCs)**: VPCs Cuenta de AWS pueden extenderse para abarcar varias zonas de disponibilidad, incluidas las Wavelength Zones. Las instancias de Amazon Elastic Compute Cloud (Amazon EC2) y los servicios relacionados aparecen como parte de tu VPC regional. VPCs se crean y administran en [Amazon Virtual Private Cloud (Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)).
+ **Puerta** de enlace del operador: una puerta de enlace del operador permite la conectividad desde la subred de la zona de longitud de onda a la red del CSP, Internet o Región de AWS a través de la red del CSP. Una puerta de enlace de operador tiene dos propósitos. Permite el tráfico entrante desde una red de CSP en una ubicación específica y permite el tráfico saliente a la red de telecomunicaciones e Internet.

Este patrón y el código Terraform asociado le ayudan a lanzar recursos, como EC2 instancias de Amazon, volúmenes de Amazon Elastic Block Store (Amazon EBS), subredes y una puerta de enlace VPCs portadora, en una Wavelength Zone.

## Requisitos previos y limitaciones
<a name="deploy-resources-wavelength-zone-using-terraform-prereqs"></a>

**Requisitos previos **
+ ¿Un activo Cuenta de AWS
+ Un entorno de desarrollo integrado (IDE)
+ [Optar](https://docs.aws.amazon.com/wavelength/latest/developerguide/get-started-wavelength.html#enable-zone-group) por la zona de Wavelength de destino
+ 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)
+ La versión 1.8.4 o posterior de Terraform [instalada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) (documentación de Terraform)
+ Terraform AWS Provider, versión 5.32.1 o posterior, [configurada](https://hashicorp.github.io/terraform-provider-aws/) (documentación de Terraform)
+ Git, [instalado](https://github.com/git-guides/install-git) (GitHub)
+ [Permisos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) para crear recursos de Amazon VPC, Wavelength y Amazon EC2 

**Limitaciones**

No todas son Regiones de AWS compatibles con Wavelength Zones. Para obtener más información, consulte [Zonas de Wavelength disponibles](https://docs.aws.amazon.com/wavelength/latest/developerguide/available-wavelength-zones.html) en la documentación de Wavelength.

## Arquitectura
<a name="deploy-resources-wavelength-zone-using-terraform-architecture"></a>

El siguiente diagrama muestra cómo puede crear una subred y AWS recursos en una Wavelength Zone. VPCs que contienen una subred en una Wavelength Zone pueden conectarse a una puerta de enlace portadora. Una puerta de enlace de operador le permite conectarse a los siguientes recursos:
+ Dispositivos 4G/LTE y 5G en la red del operador de telecomunicaciones.
+ Acceso inalámbrico fijo para socios selectos de la zona de Wavelength. Para obtener más información, consulte Acceso [múltiple AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/multi-access.html).
+ Tráfico saliente a recursos públicos de Internet.

![\[Una puerta de enlace portadora conecta los recursos de AWS de la zona de Wavelength con la red CSP.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8c507de1-208c-4563-bb58-52388ab2fa6d/images/a4cc0699-0cbc-4f15-ab14-3ae569ced7f4.png)


## Tools (Herramientas)
<a name="deploy-resources-wavelength-zone-using-terraform-tools"></a>

**Servicios de AWS**
+ [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.
+ [AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)extiende la Nube de AWS infraestructura a las redes 5G de los proveedores de telecomunicaciones. Le ayuda a crear aplicaciones que ofrecen latencias extremadamente bajas para dispositivos móviles y usuarios finales.

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

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [Creating AWS Wavelength Infrastructure using](https://github.com/aws-samples/terraform-wavelength-infrastructure) Terraform. El código de Terraform implementa la siguiente infraestructura y recursos:
+ Una VPC
+ Una zona de Wavelength
+ Una subred pública en la zona de Wavelength
+ Una puerta de enlace de operador de la zona de Wavelength
+ Una EC2 instancia de Amazon en la Wavelength Zone

## Prácticas recomendadas
<a name="deploy-resources-wavelength-zone-using-terraform-best-practices"></a>
+ Antes de la implementación, confirme que utiliza las últimas versiones de Terraform y la AWS CLI.
+ Utilice una canalización de integración y entrega continuas (CI/CD) para implementar la IaC. Para obtener más información, consulte [las prácticas recomendadas para administrar los archivos de estado de Terraform en AWS CI/CD Pipeline](https://aws.amazon.com/blogs/devops/best-practices-for-managing-terraform-state-files-in-aws-ci-cd-pipeline/) en los blogs. AWS 

## Epics
<a name="deploy-resources-wavelength-zone-using-terraform-epics"></a>

### Aprovisione la infraestructura
<a name="provision-the-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Introduzca el siguiente comando para clonar en su entorno el repositorio [AWS Wavelength Creating Infrastructure using Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure).`git clone git@github.com:aws-samples/terraform-wavelength-infrastructure.git` | DevOps ingeniero | 
| Actualice las variables. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingeniero, Terraform | 
| Inicialice la configuración. | Introduzca el comando siguiente para inicializar el directorio de trabajo.<pre>terraform init</pre> | DevOps ingeniero, Terraform | 
| Obtenga una vista previa del plan Terraform. | Introduzca el siguiente comando para comparar el estado objetivo con el estado actual de su AWS entorno. Este comando genera una vista previa de los recursos que se configurarán.<pre>terraform plan</pre> | DevOps ingeniero, Terraform | 
| Compruébelo e impleméntelo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingeniero, Terraform | 

### Validar y limpiar
<a name="validate-and-clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique la implementación de la infraestructura. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | AWS DevOps, DevOps ingeniero | 
| (Opcional) Limpieza de la infraestructura. | Si necesita eliminar todos los recursos que aprovisionó Terraform, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingeniero, Terraform | 

## Resolución de problemas
<a name="deploy-resources-wavelength-zone-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Conectividad con EC2 las instancias de Amazon en Región de AWS. | Consulte [Solución de problemas de conexión a la instancia de Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) o [Solución de problemas de conexión a la instancia de Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-windows-instances.html). | 
| Conectividad con las EC2 instancias de Amazon en la Wavelength Zone. | Consulte [Solucionar problemas de conectividad SSH o RDP con mis EC2 instancias lanzadas en una Wavelength Zone](https://repost.aws/knowledge-center/ec2-wavelength-zone-connection-errors). | 
| Capacidad en la zona de Wavelength. | Consulte [Cuotas y consideraciones para las zonas de Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/wavelength-quotas.html). | 
| Conectividad móvil o de operador desde la red del operador a la Región de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | 

## Recursos relacionados
<a name="deploy-resources-wavelength-zone-using-terraform-resources"></a>
+ [¿Qué es AWS Wavelength?](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)
+ [¿Cómo AWS Wavelength funciona?](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html)
+ [Resiliencia en AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/disaster-recovery-resiliency.html)

# Migración de registros DNS de forma masiva a una zona alojada privada de Amazon Route 53
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

Los ingenieros de redes y los administradores de la nube necesitan una forma eficaz y sencilla de añadir registros del Sistema de nombres de dominio (DNS) a las zonas alojadas privadas en Amazon Route 53. El uso de un enfoque manual para copiar las entradas de una hoja de cálculo de Microsoft Excel a las ubicaciones adecuadas de la consola de Route 53 es tedioso y propenso a errores. Este patrón describe un enfoque automatizado que reduce el tiempo y el esfuerzo necesarios para añadir varios registros. También proporciona un conjunto de pasos repetibles para la creación de varias zonas alojadas.

Este patrón utiliza Amazon Simple Storage Service (Amazon S3) para almacenar registros. Para trabajar con los datos de manera eficiente, el patrón usa el formato JSON debido a su simplicidad y su capacidad para admitir un diccionario de Python (tipo de datos `dict`).

**nota**  
Si puede generar un archivo de zona desde su sistema, considere utilizar la [característica de importación de Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) como alternativa.

## Requisitos previos y limitaciones
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Requisitos previos **
+ Una hoja de cálculo de Excel que contiene registros de zonas alojadas privadas
+ Familiaridad con distintos tipos de registros DNS, como el registro A, el registro Name Authority Pointer (NAPTR) y el registro SRV (consulte [Tipos de registros DNS compatibles](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html))
+ Familiaridad con el lenguaje Python y sus bibliotecas

**Limitaciones**
+ El patrón no proporciona una cobertura amplia para todos los escenarios de casos de uso. Por ejemplo, la llamada [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) no usa todas las propiedades disponibles de la API.
+ En la hoja de cálculo de Excel, se supone que el valor de cada fila es único. Se espera que aparezcan varios valores para cada nombre completo del dominio (FQDN) en la misma fila. Si eso no es cierto, debe modificar el código proporcionado en este patrón para realizar la concatenación necesaria.
+ El patrón utiliza AWS SDK para Python (Boto3) para llamar directamente al servicio Route 53. Puede mejorar el código para utilizar un CloudFormation contenedor de AWS para los `update_stack` comandos `create_stack` y, además, utilizar los valores de JSON para rellenar los recursos de la plantilla.

## Arquitectura
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**Pila de tecnología**
+ Zonas alojadas privadas de Route 53 para enrutar el tráfico
+ Amazon S3 para almacenar el archivo JSON de salida

![\[Flujo de trabajo para migrar registros de DNS en bloque a una zona alojada privada de Route 53.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


El flujo de trabajo consta de los siguientes pasos, tal como se ilustra en el diagrama anterior y se describe en la sección *Epics*:

1. Cargue una hoja de cálculo de Excel que contenga la información del conjunto de registros en un bucket de S3.

1. Cree y ejecute un script de Python que convierta los datos de Excel al formato JSON.

1. Lea los registros del bucket de S3 y limpie los datos.

1. Cree conjuntos de registros en su zona alojada privada.

## Tools (Herramientas)
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html): Amazon Route 53 es un servicio web de DNS escalable y de alta disponibilidad que se utiliza para gestionar el registro de dominio, enrutamiento de DNS y comprobación de estado.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos. Puede utilizar Amazon S3 para almacenar y recuperar cualquier cantidad de datos en cualquier momento y desde cualquier parte de la web.

## Epics
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Prepare los datos para la automatización
<a name="prepare-data-for-automation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un archivo de Excel para sus registros. | Utilice los registros que ha exportado desde su sistema actual para crear una hoja de cálculo de Excel que contenga las columnas necesarias para un registro, como el nombre de dominio completo (FQDN), el tipo de registro, el tiempo de vida (TTL) y el valor. En el caso de los registros NAPTR y SRV, el valor es una combinación de varias propiedades, por lo que debe utilizar el método de Excel `concat` para combinar estas propiedades.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Ingeniero de datos, con conocimientos de Excel | 
| Verifique el entorno de trabajo. | En el IDE, cree un archivo Python para convertir la hoja de trabajo de entrada de Excel al formato JSON. (En lugar de un IDE, también puedes usar un SageMaker bloc de notas de Amazon para trabajar con código Python).Compruebe que la versión de Python que está utilizando sea la 3.7 o posterior.<pre> python3 --version</pre>Instale el paquete **pandas**.<pre> pip3 install pandas --user</pre> | AWS general | 
| Convierta los datos de la hoja de cálculo de Excel a JSON. | Cree un archivo Python que contenga el siguiente código para convertirlo de Excel a JSON.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>donde `Book1` es el nombre de la hoja de cálculo de Excel y `my.json` el nombre del archivo JSON de salida. | Ingeniero de datos, con conocimientos de Python | 
| Cargue el archivo JSON en un bucket de S3. | Cargue el archivo `my.json` en un bucket de S3. Para obtener más información, consulte [Creación de un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) en la documentación de Amazon S3. | Desarrollador de aplicaciones | 
| FqdnName | RecordType | Valor | TTL | 
| something.example.org | A | 1.1.1.1 | 900 | 

### Insertar registros
<a name="insert-records"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una zona alojada privada. | Use la API [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) y el siguiente código de ejemplo de Python para crear una zona alojada privada. Sustituya los parámetros `hostedZoneName`, `vpcRegion` y `vpcId` por sus propios valores.<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>También puede usar una herramienta de infraestructura como código (IaC), como AWS, CloudFormation para reemplazar estos pasos por una plantilla que cree una pila con los recursos y propiedades adecuados. | Ingeniero en la nube, administrador de redes, con habilidades de Python | 
| Recupere detalles en formato de diccionario de Amazon S3. | Use el siguiente código para leer el bucket de S3 y obtener los valores de JSON como un diccionario de Python. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>donde `json_content` contiene el diccionario de Python. | Desarrollador de aplicaciones, con conocimientos de Python | 
| Limpie los valores de datos para los espacios y caracteres Unicode. | Como medida de seguridad para garantizar la exactitud de los datos, utilice el siguiente código para realizar una operación de extracción de los valores incluidos en `json_content`. Este código elimina los caracteres de espacio al principio y al final de cada cadena. También utiliza el método `replace` para eliminar los espacios duros (que no se rompan) (los caracteres `\xa0`).<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | Desarrollador de aplicaciones, con conocimientos de Python | 
| Insertar registros. | Use el siguiente código como parte del bucle `for` anterior.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>Dónde `xxxxxxx` es el ID de la zona alojada del primer paso de esta épica. | Desarrollador de aplicaciones, con conocimientos de Python | 

## Recursos relacionados
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Referencias**
+ [Creación de registros mediante la importación de un archivo de zona](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (documentación de Amazon Route 53)
+ [método create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (documentación de Boto3)
+ [método change\$1resource\$1record\$1sets ](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets)(documentación de Boto3)

**Tutoriales y videos**
+ [El tutorial de Python](https://docs.python.org/3/tutorial/) (documentación de Python)
+ [Diseño de DNS con Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube vídeo, *charlas técnicas en línea de AWS*)

# Cómo modificar los encabezados HTTP al migrar de F5 a un equilibrador de carga de aplicación en AWS
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws"></a>

*Sachin Trivedi, Amazon Web Services*

## Resumen
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-summary"></a>

Cuando migra una aplicación que utiliza un equilibrador de carga de F5 a Amazon Web Services (AWS) y quiere usar un equilibrador de carga de aplicación en AWS, la migración de las reglas de F5 para las modificaciones de encabezados es un problema habitual. Un Application Load Balancer no admite modificaciones de encabezados, pero puedes usar Amazon CloudFront como red de entrega de contenido (CDN) y Lambda @Edge para modificar encabezados.

Este patrón describe las integraciones necesarias y proporciona un código de muestra para la modificación del encabezado mediante AWS CloudFront y Lambda @Edge.

## Requisitos previos y limitaciones
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-prereqs"></a>

**Requisitos previos **
+ Aplicación en las instalaciones que usa un equilibrador de carga de F5 con una configuración que reemplaza el valor del encabezado HTTP mediante el uso de `if, else`. Para obtener más información sobre esta configuración, consulte [Encabezado HTTP](https://clouddocs.f5.com/api/irules/HTTP__header.html) en la documentación del producto de F5. 

**Limitaciones**
+ Este patrón se aplica a la personalización del encabezado del equilibrador de carga de F5. Para otros equilibradores de carga de terceros, por favor consulte la documentación del equilibrador de carga para obtener información de soporte.
+ Las funciones de Lambda que utilice para Lambda@Edge deben estar en la región Este de EE. UU. (Norte de Virginia).

## Arquitectura
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-architecture"></a>

El siguiente diagrama muestra la arquitectura de AWS, incluyendo el flujo de integración entre la CDN y otros componentes de AWS.

![\[Arquitectura para la modificación de encabezados mediante Amazon CloudFront y Lambda @Edge\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)


## Tools (Herramientas)
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-tools"></a>

**Servicios de AWS**
+ [Equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) ─ Un equilibrador de carga de aplicación es un servicio de equilibrio de carga totalmente gestionado por AWS que funciona en la séptima capa del modelo de interconexión de sistemas abiertos (OSI). Equilibra el tráfico entre varios destinos y admite solicitudes de enrutamiento avanzadas basadas en encabezados y métodos HTTP, cadenas de consulta y enrutamiento basado en el host o en la ruta.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html): Amazon CloudFront es un servicio web que acelera la distribución de su contenido web estático y dinámico, como .html, .css, .js y archivos de imagen, a sus usuarios. CloudFront entrega su contenido a través de una red mundial de centros de datos denominados ubicaciones perimetrales para reducir la latencia y mejorar el rendimiento.
+ [Lambda @Edge ─](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) Lambda @Edge es una extensión de AWS Lambda que le permite ejecutar funciones para personalizar el contenido que se entrega. CloudFront Puede crear funciones en la región EE.UU. Este (Virginia del Norte) y, después, asociarlas a una CloudFront distribución para replicar automáticamente el código en todo el mundo, sin aprovisionar ni administrar servidores. Esto reduce la latencia y mejora la experiencia del usuario.

**Código**

El siguiente código de ejemplo proporciona un plan para modificar los encabezados de CloudFront respuesta. Siga las instrucciones de la sección *Epics* para implementar el código.

```
exports.handler = async (event, context) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;


    const headerNameSrc = 'content-security-policy';
    const headerNameValue = '*.xyz.com';


    if (headers[headerNameSrc.toLowerCase()]) {
        headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
        }];
        console.log(`Response header "${headerNameSrc}" was set to ` +
                    `"${headers[headerNameSrc.toLowerCase()][0].value}"`);
    }
    else {
            headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
            }];
    }
    return response;
};
```

## Epics
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-epics"></a>

### Crear una distribución
<a name="create-a-cdn-distribution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una distribución CloudFront web.  | En este paso, crea una CloudFront distribución para indicar desde CloudFront dónde quiere que se entregue el contenido y los detalles sobre cómo realizar el seguimiento y gestionar la entrega del contenido.Para crear una distribución mediante la consola, inicie sesión en la consola de administración de AWS, abra la [CloudFront consola](https://console.aws.amazon.com/cloudfront/v3/home) y, a continuación, siga los pasos de la [CloudFront documentación](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html). | Administrador de la nube | 

### Creación e implementación de la funcion Lambda@Edge
<a name="create-and-deploy-the-lambda-edge-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear e implementar la funcion Lambda@Edge. | Puede crear una función Lambda @Edge mediante un esquema para modificar CloudFront los encabezados de respuesta. (Hay otros blueprints disponibles para diferentes casos de uso; para obtener más información, consulte las funciones de [ejemplo de Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) en CloudFront la documentación). Para crear una función de Lambda@Edge:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.html) | Administrador de AWS | 
| Implemente la función de Lambda@Edge. | Siga las instrucciones del [paso 4](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-add-trigger) del *tutorial: Creación de una función Lambda @Edge sencilla* de la CloudFront documentación de Amazon para configurar el CloudFront disparador e implementar la función. | Administrador de AWS | 

## Recursos relacionados
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-resources"></a>

**CloudFront documentación**
+ [Comportamiento de solicitudes y respuestas para orígenes personalizados](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html) 
+ [Trabajo con distribuciones](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html) 
+ [Funciones de ejemplo de Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) 
+ [Personalización en la periferia con Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)
+ [Tutorial: Creación de una función de Lambda@Edge sencilla](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html)

# Cree un informe con los hallazgos de Network Access Analyzer sobre el acceso entrante a Internet en múltiples Cuentas de AWS
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts"></a>

*Mike Virgilio, Amazon Web Services*

## Resumen
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-summary"></a>

El acceso entrante no intencionado a AWS los recursos a través de Internet puede suponer un riesgo para el perímetro de datos de una organización. El [Analizador de acceso a la red](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html) es una característica de Amazon Virtual Private Cloud (Amazon VPC) que ayuda a identificar el acceso de red no deseado a sus recursos en Amazon Web Services (AWS). Puede utilizar el Analizador de acceso a la red para especificar sus requisitos de acceso a la red e identificar posibles rutas de red que no cumplan los requisitos especificados. Puede utilizar el Analizador de acceso a la red para hacer lo siguiente:

1. Identifique AWS los recursos a los que se puede acceder a Internet a través de pasarelas de Internet.

1. Compruebe que sus nubes privadas virtuales (VPCs) estén segmentadas adecuadamente, por ejemplo, aislando los entornos de producción y desarrollo y separando las cargas de trabajo transaccionales.

Network Access Analyzer analiza las condiciones de accesibilidad end-to-end de la red y no solo un componente individual. Para determinar si un recurso es accesible desde Internet, Network Access Analyzer evalúa la puerta de enlace de Internet, las tablas de enrutamiento de VPC, las listas de control de acceso a la red (ACLs), las direcciones IP públicas en las interfaces de red elásticas y los grupos de seguridad. Si alguno de estos componentes impide el acceso a Internet, en Analizador de acceso a la red no genera ningún resultado. Por ejemplo, si una instancia de Amazon Elastic Compute Cloud (Amazon EC2) tiene un grupo de seguridad abierto que permite el tráfico desde, `0/0` pero la instancia se encuentra en una subred privada que no se puede enrutar desde ninguna puerta de enlace de Internet, Network Access Analyzer no generará ningún hallazgo. Esto proporciona resultados de alta fidelidad para que pueda identificar los recursos a los que realmente se puede acceder desde Internet.

Cuando ejecuta el Analizador de acceso a la red, utiliza los [Ámbitos de acceso a la red](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html#concepts) para especificar sus requisitos de acceso a la red. Esta solución identifica las rutas de red entre una puerta de enlace de Internet y una interfaz de red elástica. En este patrón, se implementa la solución de forma centralizada Cuenta de AWS en la organización, gestionada por ellas AWS Organizations, y esta analiza todas las cuentas de la organización Región de AWS, si las hay.

Esta solución se diseñó teniendo en cuenta lo siguiente:
+ Las AWS CloudFormation plantillas reducen el esfuerzo necesario para implementar los AWS recursos en este patrón.
+ Puede ajustar los parámetros de las CloudFormation plantillas y del script **naa-script.sh** en el momento de la implementación para personalizarlos para su entorno.
+ Los scripts de Bash aprovisionan y analizan automáticamente los alcances de acceso a la red para varias cuentas, en paralelo.
+ Un script de Python procesa los resultados, extrae los datos y, a continuación, consolida los resultados. Puede optar por revisar el informe consolidado de los resultados del Analizador de acceso a la red en formato CSV o en AWS Security Hub CSPM. Un ejemplo del informe CSV está disponible en la sección de [Información adicional](#create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional) de este patrón.
+ Puede corregir los resultados o excluirlos de futuros análisis agregándolos al archivo **naa-exclusions.csv**.

## Requisitos previos y limitaciones
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-prereqs"></a>

**Requisitos previos **
+ Y Cuenta de AWS para alojar servicios y herramientas de seguridad, gestionados como una cuenta de miembro de una organización en AWS Organizations. En este patrón, esta cuenta se denomina cuenta de seguridad.
+ En la cuenta de seguridad, debe tener una subred privada con acceso saliente a Internet. Para obtener instrucciones, consulte [Crear una subred](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html) en la documentación de Amazon VPC. Puede establecer el acceso a Internet mediante una [puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) o un [punto de conexión de VPC de interfaz](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html).
+ Acceso a la cuenta AWS Organizations de administración o a una cuenta para la que se hayan delegado permisos de CloudFormation administrador. Para obtener instrucciones, consulte [Registrar un administrador delegado](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) en la CloudFormation documentación.
+ Habilite el acceso confiable entre AWS Organizations y. CloudFormation Para obtener instrucciones, consulte [Habilitar el acceso confiable con AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) en la CloudFormation documentación.
+ Si vas a subir los resultados a Security Hub CSPM, Security Hub CSPM debe estar habilitado en la cuenta y en el lugar donde Región de AWS se aprovisiona la instancia de Amazon. EC2 Para obtener más información, consulte [Configuración AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html).

**Limitaciones**
+ Las rutas de red entre cuentas no se analizan actualmente debido a las limitaciones de las característica del Analizador de acceso a la red.
+ El objetivo Cuentas de AWS debe gestionarse como una organización en. AWS Organizations**Si no la utiliza AWS Organizations, puede actualizar la CloudFormation plantilla **naa-execrole.yaml** y el script naa-script.sh para su entorno.** En su lugar, proporciona una lista de las regiones en las que desea Cuenta de AWS IDs ejecutar el script.
+ La CloudFormation plantilla está diseñada para implementar la EC2 instancia de Amazon en una subred privada con acceso saliente a Internet. El AWS Systems Manager agente (agente SSM) requiere acceso saliente para llegar al punto final del servicio Systems Manager, y usted necesita acceso saliente para clonar el repositorio de código e instalar las dependencias. Si quieres usar una subred pública, debes modificar la plantilla **naa-resources.yaml** para asociar una [dirección IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) elástica a la instancia de Amazon. EC2 

## Arquitectura
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-architecture"></a>

**Arquitectura de destino**

*Opción 1: Acceder a los resultados de un bucket de Amazon S3*

![\[Diagrama de arquitectura del acceso al informe de resultados del Analizador de acceso a la red en un bucket de Amazon S3\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/d0b08437-e5b0-47a1-abdd-040c67b5da8f.png)


El diagrama muestra el proceso siguiente:

1. Si ejecutas la solución manualmente, el usuario se autentica en la EC2 instancia de Amazon mediante el Administrador de sesiones y, a continuación, ejecuta el script **naa-script.sh**. Este script del intérprete de comandos lleva a cabo los pasos del 2 al 7.

   Si ejecuta la solución automáticamente, el script **naa-script.sh** se iniciará automáticamente según la programación que haya definido en la expresión cron. Este script del intérprete de comandos lleva a cabo los pasos del 2 al 7. Para obtener más información, consulte *Automatizar y escalar* al final de esta sección.

1. La EC2 instancia de Amazon descarga el archivo **naa-exception.csv** más reciente del bucket de Amazon S3. Este archivo se utiliza más adelante en el proceso, cuando el Script de Python procesa las exclusiones.

1. La EC2 instancia de Amazon asume la función `NAAEC2Role` AWS Identity and Access Management (IAM), que otorga permisos para acceder al bucket de Amazon S3 y para asumir las funciones de `NAAExecRole` IAM en las demás cuentas de la organización.

1. La EC2 instancia de Amazon asume la función de `NAAExecRole` IAM en la cuenta de administración de la organización y genera una lista de las cuentas de la organización.

1. La EC2 instancia de Amazon asume la función de `NAAExecRole` IAM en las cuentas de los miembros de la organización (denominadas *cuentas de carga* de trabajo en el diagrama de arquitectura) y realiza una evaluación de seguridad en cada cuenta. Los resultados se almacenan como archivos JSON en la EC2 instancia de Amazon.

1. La EC2 instancia de Amazon usa un script de Python para procesar los archivos JSON, extraer los campos de datos y crear un informe CSV.

1. La EC2 instancia de Amazon carga el archivo CSV en el bucket de Amazon S3.

1. Una EventBridge regla de Amazon detecta la carga del archivo y utiliza un tema de Amazon SNS para enviar un correo electrónico en el que se notifica al usuario que el informe está completo.

1. El usuario descarga el archivo CSV del bucket de Amazon S3. El usuario importa los resultados a la plantilla de Excel y revisa los resultados.

*Opción 2: acceda a los resultados en AWS Security Hub CSPM*

![\[Diagrama de arquitectura del acceso a los resultados del Analizador de acceso a la red a través de AWS Security Hub\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/9cb4f059-dfb6-4a33-9f8d-159fe5df0d64.png)


El diagrama muestra el proceso siguiente:

1. Si ejecutas la solución manualmente, el usuario se autentica en la EC2 instancia de Amazon mediante el Administrador de sesiones y, a continuación, ejecuta el script **naa-script.sh**. Este script del intérprete de comandos lleva a cabo los pasos del 2 al 7.

   Si ejecuta la solución automáticamente, el script **naa-script.sh** se iniciará automáticamente según la programación que haya definido en la expresión cron. Este script del intérprete de comandos lleva a cabo los pasos del 2 al 7. Para obtener más información, consulte *Automatizar y escalar* al final de esta sección.

1. La EC2 instancia de Amazon descarga el archivo **naa-exception.csv** más reciente del bucket de Amazon S3. Este archivo se utiliza más adelante en el proceso, cuando el Script de Python procesa las exclusiones.

1. La EC2 instancia de Amazon asume la función de `NAAEC2Role` IAM, que otorga permisos para acceder al bucket de Amazon S3 y para asumir las funciones de `NAAExecRole` IAM en las demás cuentas de la organización.

1. La EC2 instancia de Amazon asume la función de `NAAExecRole` IAM en la cuenta de administración de la organización y genera una lista de las cuentas de la organización.

1. La EC2 instancia de Amazon asume la función de `NAAExecRole` IAM en las cuentas de los miembros de la organización (denominadas *cuentas de carga* de trabajo en el diagrama de arquitectura) y realiza una evaluación de seguridad en cada cuenta. Los resultados se almacenan como archivos JSON en la EC2 instancia de Amazon.

1. La EC2 instancia de Amazon usa un script de Python para procesar los archivos JSON y extraer los campos de datos para importarlos a Security Hub CSPM.

1. La EC2 instancia de Amazon importa los resultados del Network Access Analyzer a Security Hub CSPM.

1. Una EventBridge regla de Amazon detecta la importación y utiliza un tema de Amazon SNS para enviar un correo electrónico en el que se notifica al usuario que el proceso se ha completado.

1. El usuario consulta los resultados en Security Hub CSPM.

**Automatizar y escalar**

Puede programar esta solución para que ejecute el script **naa-script.sh** automáticamente según una programación personalizada. Para establecer una programación personalizada, modifique el parámetro en la plantilla **naa-resources.yaml.** CloudFormation `CronScheduleExpression` Por ejemplo, el valor predeterminado de `0 0 * * 0` ejecuta la solución todos los domingos a medianoche. Un valor de `0 0 * 1-12 0` ejecutaría la solución a medianoche del primer domingo de cada mes. Para obtener más información sobre el uso de expresiones cron, consulte [Expresiones cron y de frecuencia](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) en la documentación de Systems Manager.

Si desea ajustar la programación una vez implementada la pila `NAA-Resources`, puede editarla manualmente en `/etc/cron.d/naa-schedule`.

## Tools (Herramientas)
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-tools"></a>

**Servicios de AWS**
+ [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.
+ [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 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.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)proporciona una visión completa del estado de su seguridad en AWS. También le ayuda a comparar su AWS entorno con los estándares y las mejores prácticas del sector de la seguridad.
+ [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 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, una capacidad de Administrador de sistemas.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de análisis de cuentas [múltiples GitHub de Network Access Analyzer](https://github.com/aws-samples/network-access-analyzer-multi-account-analysis). El repositorio de código contiene los siguientes archivos:
+ **naa-script.sh**: este script bash se utiliza para iniciar un análisis del Network Access Analyzer de varios Cuentas de AWS, en paralelo. Como se define en la CloudFormation plantilla **naa-resources.yaml**, este script se implementa automáticamente en la carpeta `/usr/local/naa` de la instancia de Amazon. EC2 
+ **naa-resources.yaml**: utilizas esta CloudFormation plantilla para crear una pila en la cuenta de seguridad de la organización. Esta plantilla implementa todos los recursos necesarios para esta cuenta a fin de respaldar la solución. Esta pila debe implementarse antes que la plantilla **naa-execrole.yaml**.
**nota**  
Si esta pila se elimina y se vuelve a implementar, debe volver a crear el conjunto de pilas `NAAExecRole` para recuperar las dependencias entre cuentas entre los roles de IAM.
+ **naa-execrole.yaml**: usa esta CloudFormation plantilla para crear un conjunto de pilas que despliegue la función de IAM en todas las cuentas de la organización, incluida la cuenta de administración. `NAAExecRole`
+ **naa-processfindings.py**: la secuencia de comandos **naa-script.sh** llama automáticamente a esta secuencia de comandos de Python para procesar las salidas JSON de Network Access Analyzer, excluir cualquier recurso de funcionalidad comprobada en el archivo **naa-exclusions.csv** y, a continuación, generar un archivo CSV con los resultados consolidados o importarlos a Security Hub CSPM.

## Epics
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-epics"></a>

### Preparación para la implementación
<a name="prepare-for-deployment"></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/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Revise las plantillas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Crea las CloudFormation pilas
<a name="create-the-cfnshort-stacks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Aprovisione recursos en la cuenta de seguridad. | Con la plantilla **naa-resources.yaml**, se crea una CloudFormation pila que despliega todos los recursos necesarios en la cuenta de seguridad. [Para obtener instrucciones, consulta Cómo crear una pila en la documentación.](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) CloudFormation Tenga en cuenta lo siguiente al implementar esta plantilla:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Facilitar el rol de IAM en las cuentas de los miembros. | En la cuenta AWS Organizations de administración o en una cuenta con permisos de administrador delegados CloudFormation, utilice la plantilla **naa-execrole.yaml** para crear un conjunto de pilas. CloudFormation El conjunto de pilas implementa el rol de IAM de `NAAExecRole` para todas las cuentas de miembros de la organización. Para obtener instrucciones, consulta Cómo [crear un](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html#stacksets-orgs-associate-stackset-with-org) conjunto de pilas con permisos administrados por el servicio en la documentación. CloudFormation Tenga en cuenta lo siguiente al implementar esta plantilla:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Facilite el rol de IAM en la cuenta de administración. | Con la plantilla **naa-execrole.yaml**, se crea una CloudFormation pila que implementa la función de `NAAExecRole` IAM en la cuenta de administración de la organización. El conjunto de pilas que creó anteriormente no implementa el rol de IAM en la cuenta de administración. [Para obtener instrucciones, consulta Cómo crear una pila en la documentación.](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) CloudFormation Tenga en cuenta lo siguiente al implementar esta plantilla:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Realice el análisis
<a name="perform-the-analysis"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Personalice el script del intérprete de comandos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Analice las cuentas de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opción 1: Recupere los resultados del bucket de Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opción 2: Revise los resultados en Security Hub CSPM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Corregir y excluir los resultados
<a name="remediate-and-exclude-findings"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Corrija los resultados. | Corrija cualquier resultado que desee abordar. Para obtener más información y las mejores prácticas sobre cómo crear un perímetro alrededor de sus AWS identidades, recursos y redes, consulte Cómo [crear un perímetro de datos en AWS](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html) (AWS documento técnico). | AWS DevOps | 
| Excluya los recursos con rutas de red de funcionalidad comprobada. | Si el Analizador de acceso a la red genera resultados sobre los recursos a los que se debería acceder desde Internet, puede agregar estos recursos a una lista de exclusión. La próxima vez que se ejecute el Analizador de acceso a la red, no generará ningún resultado para ese recurso.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Opcional) Actualizar el script naa-script.sh
<a name="optional-update-the-naa-script-sh-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice el script naa-script.sh. | Si quiere actualizar el script **naa-script.sh** a la última versión del repositorio, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine todos los recursos implementados. | Puede dejar los recursos implementados en las cuentas.Si desea desaprovisionar todos los recursos, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

## Resolución de problemas
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se puede conectar a la EC2 instancia de Amazon mediante el administrador de sesiones. | El agente SSM debe poder comunicarse con el punto de conexión de Systems Manager. Haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | 
| Al implementar el conjunto de pilas, la CloudFormation consola le solicitará que lo haga`Enable trusted access with AWS Organizations to use service-managed permissions`. | Esto indica que no se ha habilitado el acceso de confianza entre AWS Organizations y CloudFormation. Se requiere acceso de confianza para implementar el conjunto de pilas gestionado por servicios. Seleccione el botón para activar el acceso de confianza. Para obtener más información, consulte [Habilitar el acceso confiable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) en la CloudFormation documentación. | 

## Recursos relacionados
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-resources"></a>
+ [Nuevo: Amazon VPC Network Access Analyzer (entrada de blog](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/))AWS 
+ [AWS Re:inForce 2022: valide los controles efectivos de acceso a la red el (02 AWS ) (vídeo) NIS2](https://youtu.be/aN2P2zeQek0)
+ [Demostración - Análisis de la ruta de datos de ingreso a Internet en toda la organización mediante un Analizador de acceso a la red](https://youtu.be/1IFNZWy4iy0) (video)

## Información adicional
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional"></a>

**Ejemplo de salida de consola**

En el siguiente ejemplo se muestra el resultado de generar la lista de cuentas de destino y analizar las cuentas de destino.

```
[root@ip-10-10-43-82 naa]# ./naa-script.sh
download: s3://naa-<account ID>-us-east-1/naa-exclusions.csv to ./naa-exclusions.csv

AWS Management Account: <Management account ID>

AWS Accounts being processed...
<Account ID 1> <Account ID 2> <Account ID 3>

Assessing AWS Account: <Account ID 1>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 2>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 3>, using Role: NAAExecRole
Processing account: <Account ID 1> / Region: us-east-1
Account: <Account ID 1> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 2> / Region: us-east-1
Account: <Account ID 2> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 3> / Region: us-east-1
Account: <Account ID 3> / Region: us-east-1 – Detecting Network Analyzer scope...
Account: <Account ID 1> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 1> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 2> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 2> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 3> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 3> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
```

**Ejemplos de informes CSV**

Las siguientes imágenes son ejemplos de la producción de CSV.

![\[Ejemplo 1 del informe CSV generado por esta solución.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/55e02e61-054e-4da6-aaae-c9a8b6f4f272.png)


![\[Ejemplo 2 del informe CSV generado por esta solución.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/95f980ad-92c1-4392-92d4-9c742755aab2.png)


# Configurar la resolución de DNS para redes híbridas en un entorno de cuentas múltiples AWS
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment"></a>

*Anvesh Koganti, Amazon Web Services*

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

Este patrón proporciona una solución integral para configurar la resolución de DNS en entornos de redes híbridas que incluyen varias cuentas de Amazon Web Services (AWS). Permite la resolución de DNS bidireccional entre las redes locales y el entorno a través de puntos finales. AWS Amazon Route 53 Resolver El patrón presenta dos soluciones para permitir la resolución de DNS en una [arquitectura centralizada de varias cuentas](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html#multi-account-centralized):
+ La *configuración básica* no utiliza los perfiles de Route 53. Ayuda a optimizar los costos de las implementaciones pequeñas y medianas de menor complejidad.
+ La *configuración mejorada* utiliza los perfiles de Route 53 para simplificar las operaciones. Es la mejor opción para implementaciones de DNS más grandes o complejas.

**nota**  
Consulte la sección *Limitaciones* para conocer las limitaciones y cuotas del servicio antes de la implementación. Al tomar la decisión, tenga en cuenta factores como los gastos generales de administración, los costos, la complejidad operativa y la experiencia del equipo.

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

**Requisitos previos **
+ Un entorno de AWS varias cuentas con Amazon Virtual Private Cloud (Amazon VPC) implementado en cuentas de carga de trabajo y de servicios compartidos (preferiblemente configuradas [a través de la Torre de Control de AWS AWS siguiendo las prácticas recomendadas](https://docs.aws.amazon.com/controltower/latest/userguide/aws-multi-account-landing-zone.html) para la estructura de cuentas).
+ Conectividad híbrida existente (AWS Direct Connect o AWS Site-to-Site VPN) entre su red local y el entorno. AWS 
+ Emparejamiento de Amazon VPC o Nube de AWS WAN para conectividad de red de capa 3 entre. AWS Transit Gateway VPCs (Esta conectividad es necesaria para el tráfico de aplicaciones. No es necesaria para que funcione la resolución de DNS. La resolución de DNS funciona independientemente de la conectividad de red entre los VPCs.)
+ Servidores DNS que se ejecutan en el entorno en las instalaciones.

**Limitaciones**
+ Los puntos finales, las reglas y los perfiles de Route 53 Resolver son construcciones regionales y, en el caso de las organizaciones globales, es posible que deban replicarse en varios Regiones de AWS .
+ Para obtener una lista completa de las cuotas de servicio de Route 53 Resolver, las zonas alojadas privadas y los perfiles, consulte la sección [Quotas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) en la documentación de Route 53.

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

**Pila de tecnología de destino**
+ Puntos de conexión entrantes y salientes de Route 53
+ Reglas de Route 53 Resolver para el reenvío condicional
+ AWS Resource Access Manager (AWS RAM)
+ Zona alojada privada de Route 53

**Arquitectura de destino**

**Puntos de conexión entrantes y salientes**

En el siguiente diagrama, se muestra el flujo de resolución de DNS desde el entorno local AWS hasta el entorno local. Esta es la configuración de conectividad para las resoluciones salientes en las que el dominio se aloja en las instalaciones. A continuación se presenta información general del proceso que implica la configuración de esto. Para más información, consulte la sección [Epics](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Implemente puntos de conexión de Route 53 Resolver salientes en la VPC de servicios compartidos.

1. Cree reglas de Route 53 Resolver (reglas de reenvío) en la cuenta de servicios compartidos para los dominios alojados en las instalaciones.

1. Comparta las reglas y VPCs asócielas con otras cuentas que alojen los recursos necesarios para resolver los dominios alojados de forma local. Esto se puede hacer de maneras distintas según el caso de uso, como se describe más adelante en esta sección.

![\[Puntos de conexión entrantes y salientes en un flujo de resolución de DNS desde AWS a las instalaciones.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/d69d4cad-5e2c-4481-9370-2708e8a4f8c1.png)


Una vez configurada la conectividad, los pasos necesarios para la resolución saliente son los siguientes:

1. La instancia de Amazon Elastic Compute Cloud (Amazon EC2) envía una solicitud de resolución de DNS `db.onprem.example.com` al solucionador de Route 53 de la VPC a la dirección de la VPC\$12.

1. Route 53 Resolver comprueba las reglas del Resolver y reenvía la solicitud al servidor DNS local IPs mediante el punto final de salida.

1. El punto final saliente reenvía la solicitud al DNS local. IPs El tráfico pasa por la conectividad de red híbrida establecida entre la VPC de servicios compartidos y el centro de datos en las instalaciones.

1. El servidor DNS en las instalaciones responde al punto de conexión saliente, que luego reenvía la respuesta al solucionador de Route 53 Resolver de la VPC. El Resolver devuelve la respuesta a la instancia. EC2 

El siguiente diagrama muestra el flujo de resolución de DNS desde el entorno local hasta AWS. Esta es la configuración de conectividad para las resoluciones entrantes en las que el dominio se aloja en AWS. A continuación se presenta información general del proceso que implica la configuración de esto. Para más información, consulte la sección [Epics](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Implemente puntos de conexión entrantes de Resolver en la VPC de servicios compartidos.

1. Cree zonas alojadas privadas en la cuenta de servicios compartidos (enfoque centralizado).

1. Asocie las zonas alojadas privadas a la VPC de servicios compartidos. Comparta y asocie estas zonas con varias cuentas VPCs para la resolución de VPC-to-VPC DNS. Esto se puede hacer de maneras distintas según el caso de uso, como se describe más adelante en esta sección.

![\[Puntos de conexión entrantes y salientes en un flujo de resolución de DNS desde las instalaciones hacia AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/a6f5348c-2041-453e-8939-2b4ee0b7ebd8.png)


Una vez configurada la conectividad, los pasos necesarios para la resolución entrante son los siguientes:

1. El recurso en las instalaciones envía una solicitud de resolución de DNS para `ec2.prod.aws.example.com` al servidor DNS en las instalaciones.

1. El servidor DNS en las instalaciones reenvía la solicitud al punto de conexión de Resolver entrante de la VPC de servicios compartidos a través de la conexión de red híbrida.

1. El punto de conexión de Resolver entrante busca la solicitud en la zona alojada privada asociada con la ayuda Route 53 Resolver de VPC y obtiene la dirección IP adecuada.

1. Estas direcciones IP se devuelven al servidor DNS en las instalaciones, que devuelve la respuesta al recurso en las instalaciones.

Esta configuración permite que los recursos locales resuelvan los nombres de dominio AWS privados al enrutar las consultas a través de los puntos finales entrantes hasta la zona alojada privada adecuada. En esta arquitectura, las zonas alojadas privadas están centralizadas en una VPC de servicios compartidos, lo que permite la administración central del DNS por parte de un solo equipo. Estas zonas se pueden asociar VPCs a muchas para abordar el caso de uso de la resolución de VPC-to-VPC DNS. Como alternativa, puede delegar la propiedad y la administración del dominio DNS en cada una de ellas Cuenta de AWS. En ese caso, cada cuenta administra sus propias zonas alojadas privadas y asocia cada zona a la VPC central de servicios compartidos para lograr una resolución unificada con el entorno en las instalaciones. Este enfoque descentralizado queda fuera del alcance de este patrón. Para obtener más información, consulte [Escalar la administración de DNS en varias cuentas y VPCs](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html) en el documento técnico *Opciones de DNS en la nube híbrida para Amazon VPC*.

Al establecer los flujos de resolución de DNS fundamentales mediante puntos de conexión de Resolver, debe determinar cómo administrar el uso compartido y la asociación de las reglas de Resolver y las zonas alojadas privadas en sus Cuentas de AWS. Puede abordarlo de dos maneras: mediante el uso compartido autogestionado, AWS RAM para compartir las reglas de Resolver y las asociaciones directas de zonas alojadas privadas, como se detalla en la sección *Configuración básica*, o mediante los perfiles de Route 53, como se explica en la sección *Configuración mejorada*. La elección depende de las preferencias de administración del DNS y de los requisitos operativos de su organización. Los siguientes diagramas de arquitectura ilustran un entorno escalado que incluye varias cuentas VPCs diferentes, lo que representa una implementación empresarial típica.

**Configuración básica**

En la configuración básica, la implementación de la resolución de DNS híbrida en un AWS entorno con varias cuentas se utiliza AWS RAM para compartir las reglas de reenvío de Resolver y las asociaciones de zonas alojadas privadas para gestionar las consultas de DNS entre las instalaciones y los recursos. AWS Este método utiliza puntos de conexión de Route 53 Resolver centralizados en una VPC de servicios compartidos que está conectada a la red en las instalaciones para gestionar la resolución de DNS entrante y saliente de manera eficiente.
+ Para la resolución de llamadas salientes, las reglas de reenvío de Resolver se crean en la cuenta de Shared Services y, a continuación, se comparten con otras personas mediante. Cuentas de AWS AWS RAM Este uso compartido está limitado a cuentas en la misma región. A continuación, las cuentas de destino pueden asociar estas reglas a las suyas VPCs y habilitar los recursos que contienen VPCs para resolver los nombres de dominio locales.
+ Para la resolución entrante, las zonas alojadas privadas se crean en la cuenta de servicios compartidos y se asocian a la VPC de servicios compartidos. Luego, estas zonas se pueden asociar VPCs a otras cuentas mediante la API de Route 53 o la AWS Command Line Interface (AWS CLI). AWS SDKs Los recursos asociados VPCs pueden entonces resolver los registros de DNS definidos en las zonas alojadas privadas, lo que crea una vista de DNS unificada en todo el AWS entorno.

En el diagrama siguiente se muestran los flujos de resolución de DNS en esta configuración básica.

![\[Uso de una configuración básica para la resolución de DNS híbridas en un entorno de AWS de varias cuentas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/258e4bcd-e9c6-43b5-bab8-856ca22206b9.png)


Esta configuración funciona bien cuando se trabaja con una infraestructura de DNS a una escala limitada. Sin embargo, su administración puede resultar difícil a medida que crece el entorno. La sobrecarga operativa que supone administrar la forma en que se comparten y se asocian VPCs individualmente las reglas de las zonas alojadas privadas y del Resolver aumenta considerablemente con la escala. Además, las cuotas de servicio, como el límite de asociación de 300 VPC por zona alojada privada, pueden convertirse en factores restrictivos en las implementaciones a gran escala. La configuración mejorada aborda estos desafíos.

**Configuración mejorada**

Los perfiles de Route 53 ofrecen una solución simplificada para administrar la resolución de DNS en redes híbridas en varias Cuentas de AWS. En lugar de administrar las zonas alojadas privadas y las reglas de Resolver de forma individual, puede agrupar las configuraciones de DNS en un único contenedor que se pueda compartir y aplicar fácilmente en varias cuentas VPCs y cuentas de una región. Esta configuración mantiene la arquitectura centralizada del punto de conexión de Resolver en una VPC de servicios compartidos y, al mismo tiempo, simplifica considerablemente la administración de las configuraciones de DNS.

En el diagrama siguiente se muestran los flujos de resolución de DNS en una configuración mejorada.

![\[Uso de una configuración avanzada con los perfiles de Route 53 para la resolución de DNS híbridas en un entorno de AWS de varias cuentas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/55b9681d-ddb4-4a55-b4ec-fc9afa9870fa.png)


Los perfiles de Route 53 le permiten empaquetar las asociaciones de zonas alojadas privadas, las reglas de reenvío de Resolver y las reglas de firewall de DNS en una sola unidad que se puede compartir. Puede crear perfiles en la cuenta de Shared Services y compartirlos con las cuentas de los miembros mediante AWS RAM. Cuando se comparte un perfil y se aplica a Target VPCs, el servicio gestiona automáticamente todas las asociaciones y configuraciones necesarias. Esto reduce de manera significativa los gastos generales operativos de la administración del DNS y proporciona una escalabilidad excelente para los entornos en crecimiento.

**Automatización y escala**

Utilice herramientas de infraestructura como código (IaC), como CloudFormation Terraform, para aprovisionar y administrar automáticamente los puntos finales, las reglas, las zonas alojadas privadas y los perfiles de Route 53 Resolver. Integre la configuración de DNS con flujos de integración continua y entrega continua (CI/CD) para lograr coherencia, repetibilidad y actualizaciones rápidas.

## Tools (Herramientas)
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-tools"></a>

**Servicios de AWS**
+ [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 los gastos operativos y ofrecer visibilidad y auditabilidad.
+ [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)responde de forma recursiva a las consultas de DNS procedentes de AWS los recursos y está disponible de forma predeterminada en todos ellos. VPCs Puede crear puntos de enlace de Resolver y reglas de reenvío condicional para resolver los espacios de nombres DNS entre su centro de datos local y el suyo. VPCs
+ Una [zona alojada privada de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) es un contenedor que aloja información acerca de cómo desea que responda Route 53 a las consultas de DNS de un dominio y sus subdominios.
+ [Los perfiles de Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html) le permiten aplicar y gestionar configuraciones de Route 53 relacionadas con el DNS en muchas VPCs y diferentes Cuentas de AWS configuraciones de forma simplificada.

## Prácticas recomendadas
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-best-practices"></a>

En esta sección, se proporcionan algunas de las prácticas recomendadas para la optimización de Route 53 Resolver. Representan un subconjunto de las prácticas recomendadas de Route 53. Para obtener información completa, consulte [Best practices for Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices.html).

**Evite las configuraciones en bucle con los puntos finales de Resolver**
+ Diseñe la arquitectura de DNS para evitar el enrutamiento recursivo y planifique con detenimiento las asociaciones de VPC. Cuando una VPC aloja un punto de conexión entrante, evite asociarlo a las reglas de Resolver que podrían crear referencias circulares.
+  AWS RAM Utilízalos estratégicamente cuando compartas los recursos de DNS entre cuentas para mantener limpias las rutas de enrutamiento.

Para más información, consulte [Avoid loop configurations with Resolver endpoints](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoints.html) en la documentación de Route 53.

**Escalado de puntos de conexión de Resolver**
+ En el caso de los entornos que requieren un número elevado de consultas por segundo (QPS), tenga en cuenta que hay un límite de 10 000 QPS por ENI en un punto de conexión. ENIs Se pueden añadir más a un punto final para escalar el QPS del DNS.
+ Amazon CloudWatch proporciona `InboundQueryVolume` y `OutboundQueryVolume` métricas (consulta la [CloudWatch documentación](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-resolver-with-cloudwatch.html)). Le recomendamos que configure reglas de supervisión que le avisen si el umbral supera un valor determinado (por ejemplo, el 80 % de 10 000 QPS).
+ Configure reglas de grupos de seguridad con estado para los puntos de conexión de Resolver para evitar que los límites de seguimiento de la conexión provoquen una limitación de las consultas de DNS durante un tráfico de gran volumen. Para obtener más información sobre cómo funciona el seguimiento de conexiones en los grupos de seguridad, consulte el [seguimiento de conexiones de los grupos de EC2 seguridad de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html) en la EC2 documentación de Amazon.

Para más información, consulte [Resolver endpoint scaling](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-scaling.html) en la documentación de Route 53.

**Cómo proporcionar alta disponibilidad para puntos de enlace de Resolver**
+ Cree puntos de conexión de entrada con las direcciones IP al menos en dos zonas de disponibilidad para la redundancia.
+ Aprovisionamiento de interfaces de red adicionales para garantizar la disponibilidad durante el mantenimiento o los picos de tráfico.

Para más información, consulte [High availability for Resolver endpoints](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-high-availability.html) en la documentación de Route 53.

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

### Implementación de puntos de conexión de Route 53 Resolver
<a name="deploy-r53r-endpoints"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un punto de conexión entrante. | 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 las consultas de 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 la nube, administrador de AWS | 
| Implemente un punto de conexión saliente. | 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 la nube, administrador de AWS | 

### Configuración y uso compartido de zonas alojadas privadas de Route 53
<a name="configure-and-share-r53-private-hosted-zones"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una zona alojada privada para un dominio alojado en AWS. | Esta zona contiene los registros DNS de los recursos AWS de un dominio hospedado (por ejemplo`prod.aws.example.com`) que deben resolverse desde el entorno local. 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.Al crear una zona alojada privada, debe asociar una VPC a la zona alojada que es responsabilidad de la misma cuenta. Seleccione la VPC de servicios compartidos para este fin. | Administrador de la nube, administrador de AWS | 
| Configuración básica: asocie la zona alojada privada a otras VPCs cuentas. | Si utiliza la configuración básica (consulte la sección [Arquitectura](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):Para permitir que los recursos de la cuenta VPCs del miembro resuelvan los registros DNS de esta zona alojada privada, debe asociar los suyos VPCs a la zona alojada. Debe autorizar la asociación y, a continuación, crearla mediante programación. Para obtener instrucciones, consulte [Associating an Amazon VPC and a private hosted zone that you created with different Cuentas de AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html) en la documentación de Route 53. | Administrador de la nube, administrador de AWS | 
| Configuración mejorada: configure y comparta los perfiles de Route 53. | Si utiliza la configuración mejorada (consulte la sección [Arquitectura](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)Según la estructura de su organización y los requisitos de DNS, es posible que deba crear y administrar varios perfiles para cuentas o cargas de trabajo distintas. | Administrador de la nube, administrador de AWS | 

### Configuración y uso compartido de las reglas de reenvío de Route 53 Resolver
<a name="configure-and-share-r53r-forwarding-rules"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una regla de reenvío para un dominio alojado en las instalaciones | Esta regla indicará a Route 53 Resolver que reenvíe las consultas de DNS para los dominios en las instalaciones (como `onprem.example.com`) a los solucionadores de DNS en las instalaciones. Para crear esta regla, necesitará las direcciones IP de los solucionadores de DNS en las instalaciones y el ID del punto de conexión saliente. Para obtener instrucciones, consulte [Creación de reglas de reenvío](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-creating-rules.html) en la documentación de Route 53. | Administrador de la nube, administrador de AWS | 
| Configuración básica: comparte y asocia la regla de reenvío a la tuya VPCs en otras cuentas. | Si utiliza la configuración básica:Para que la regla de reenvío entre en vigor, debes compartir y asociar la regla a la tuya VPCs en otras cuentas. Luego, Route 53 Resolver toma en cuenta la regla al resolver un dominio. Para obtener instrucciones, consulte [Compartir reglas de Resolver con otras Cuentas de AWS personas y usar reglas compartidas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-sharing.html) y [Asociar reglas de reenvío a una VPC](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-associating-rules.html) en la documentación de Route 53. | Administrador de la nube, administrador de AWS | 
| Configuración mejorada: configure y comparta los perfiles de Route 53. | Si utiliza la configuración mejorada:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)Según la estructura de su organización y los requisitos de DNS, es posible que deba crear y administrar varios perfiles para cuentas o cargas de trabajo distintas. | Administrador de la nube, administrador de AWS | 

### Configure los resolutores de DNS locales para la integración AWS
<a name="configure-on-premises-dns-resolvers-for-aws-integration"></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 AWS desde el entorno local para su resolución, debe configurar el reenvío condicional en los solucionadores de DNS locales para que apunten a la dirección IP del punto final entrante. Esto indica a los solucionadores de DNS que reenvíen todas las consultas de DNS del dominio AWS hospedado (por ejemplo, para`prod.aws.example.com`) a la dirección IP del punto final de entrada para que Route 53 Resolver las resuelva.  | Administrador de red | 

### Verifique la resolución del end-to-end DNS en un entorno híbrido
<a name="verify-end-to-end-dns-resolution-in-a-hybrid-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la resolución de DNS desde AWS el entorno local. | Desde una instancia en una VPC que tenga la regla de reenvío asociada, haga una consulta de DNS para un dominio alojado en las instalaciones (por ejemplo, para `db.onprem.example.com`). | Administrador de red | 
| Pruebe la resolución de DNS desde el entorno local hasta. AWS | Desde un servidor local, realice la resolución de DNS para un dominio AWS hospedado (por ejemplo, para). `ec2.prod.aws.example.com` | Administrador de red | 

## Recursos relacionados
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-resources"></a>
+ [Opciones de DNS en la nube híbrida para Amazon VPC (documento técnico](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/hybrid-cloud-dns-options-for-vpc.html))AWS 
+ [Working with private hosted zones](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) (documentación de Route 53)
+ [Getting started with Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) (documentación de Route 53)
+ [Simplifique la administración del DNS en un entorno de varias cuentas con Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (entrada del blog)AWS 
+ [Unifique la administración de DNS mediante perfiles de Amazon Route 53 con múltiples VPCs y Cuentas de AWS](https://aws.amazon.com/blogs/aws/unify-dns-management-using-amazon-route-53-profiles-with-multiple-vpcs-and-aws-accounts/) (AWS entrada de blog)
+ [Migración de su entorno DNS multicuenta a los perfiles de Amazon Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/migrating-your-multi-account-dns-environment-to-amazon-route-53-profiles/) (AWS entrada del blog)
+ [Uso de los perfiles de Amazon Route 53 para AWS entornos escalables con varias cuentas](https://aws.amazon.com/blogs/networking-and-content-delivery/using-amazon-route-53-profiles-for-scalable-multi-account-aws-environments/) (AWS entrada del blog)

 

# Verifique que los equilibradores de carga ELB requieran la terminación de TLS
<a name="verify-that-elb-load-balancers-require-tls-termination"></a>

*Priyanka Chaudhary, Amazon Web Services*

## Resumen
<a name="verify-that-elb-load-balancers-require-tls-termination-summary"></a>

En la nube de Amazon Web Services (AWS), Elastic Load Balancing (ELB) distribuye automáticamente el tráfico entrante de las aplicaciones entre varios destinos, como instancias de Amazon Elastic Compute Cloud EC2 (Amazon), contenedores, direcciones IP y funciones de AWS Lambda. Los equilibradores de carga emplean oyentes para definir los puertos y protocolos que usa el equilibrador de carga para aceptar el tráfico de los usuarios. Los balanceadores de carga de aplicaciones toman las decisiones de enrutamiento en la capa de aplicación y utilizan los protocolos. HTTP/HTTPS Los equilibradores de carga clásicos toman las decisiones de enrutamiento en la capa de transporte, mediante los protocolos TCP o Secure Sockets Layer (SSL), o en la capa de aplicación, mediante HTTP/HTTPS.

Este patrón proporciona un control de seguridad que examina varios tipos de eventos para los equilibradores de carga de aplicaciones y los equilibradores de carga clásicos. Cuando se invoca la función, AWS Lambda inspecciona el evento y se asegura de que el equilibrador de carga sea compatible.

La función inicia un evento de Amazon CloudWatch Events en las siguientes llamadas a la API: [CreateLoadBalancer[CreateLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerListeners.html)](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancer.html), [DeleteLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DeleteLoadBalancerListeners.html), [CreateLoadBalancerPolicy](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerPolicy.html), [SetLoadBalancerPoliciesOfListener](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_SetLoadBalancerPoliciesOfListener.html), [CreateListener[DeleteListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DeleteListener.html)](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateListener.html), y [ModifyListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ModifyListener.html). Cuando el evento detecta uno de estos APIs, llama a AWS Lambda, que ejecuta un script de Python. El script de Python evalúa si el oyente contiene un certificado SSL y si la política que se aplica utiliza seguridad de la capa de transporte (TLS). Si se determina que la política de SSL es distinta de TLS, la función envía una notificación de Amazon Simple Notification Service (Amazon SNS) al usuario con la información pertinente. 

## Requisitos previos y limitaciones
<a name="verify-that-elb-load-balancers-require-tls-termination-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa

**Limitaciones**
+ Este control de seguridad no comprueba los equilibradores de carga existentes, a menos que se realice una actualización en los dispositivos de escucha del equilibrador de carga.
+ Este control de seguridad es regional. Debe implementarlo en cada región de AWS que desee supervisar.

## Arquitectura
<a name="verify-that-elb-load-balancers-require-tls-termination-architecture"></a>

**Arquitectura de destino**

![\[Asegurarse de que los equilibradores de carga requieran la terminación de TLS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/da99cda2-ac34-4791-a2bd-d37264d8d3d9/images/af92b3c8-32bb-45eb-a2a8-d8276fb3e824.png)


**Automatización y escala**
+ Si utiliza [AWS Organizations](https://aws.amazon.com/organizations/), puede utilizar [AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) para implementar esta plantilla en varias cuentas que desee supervisar.

## Tools (Herramientas)
<a name="verify-that-elb-load-balancers-require-tls-termination-tools"></a>

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

Este patrón incluye los siguientes archivos adjuntos:
+ `ELBRequirestlstermination.zip`: el código de Lambda para el control de seguridad.
+ `ELBRequirestlstermination.yml`— La CloudFormation plantilla que configura el evento y la función Lambda.

## Epics
<a name="verify-that-elb-load-balancers-require-tls-termination-epics"></a>

### Configuración del bucket de S3
<a name="set-up-the-s3-bucket"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Defina el bucket de S3. | En la [consola Amazon S3](https://console.aws.amazon.com/s3/), elija o cree un bucket de S3 para alojar el archivo .zip de código de Lambda. Este bucket de S3 debe estar en la misma región de AWS que el equilibrador de carga que desea evaluar. Un nombre de bucket de S3 es globalmente único y todas las cuentas de AWS comparten el espacio de nombres. El nombre de bucket de S3 no puede incluir barras a la izquierda. | Arquitecto de la nube | 
| Cargue el código de Lambda. | Cargue el código de Lambda (archivo `ELBRequirestlstermination.zip`) que se proporciona en la sección *Adjuntos* en el bucket de S3. | Arquitecto de la nube | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Lance la CloudFormation plantilla de AWS. | Abra la [ CloudFormation consola de AWS](https://console.aws.amazon.com/cloudformation/) en la misma región de AWS que su bucket de S3 e implemente la plantilla adjunta`ELBRequirestlstermination.yml`. Para obtener más información sobre la implementación de CloudFormation plantillas de AWS, consulte [Crear una pila en la CloudFormation consola de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) en la CloudFormation documentación. | Arquitecto de la nube | 
| Complete los parámetros de la plantilla. | Al lanzar la plantilla, se le solicitará la siguiente información:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/verify-that-elb-load-balancers-require-tls-termination.html) | Arquitecto de la nube | 

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


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

## Recursos relacionados
<a name="verify-that-elb-load-balancers-require-tls-termination-resources"></a>
+ [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)
+ [¿Qué es AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) (documentación de AWS Lambda)
+ [¿Qué es un equilibrador de carga clásico?](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) (documentación del ELB)
+ [¿Qué es un equilibrador de carga de aplicación?](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) (documentación del ELB)

## Conexiones
<a name="attachments-da99cda2-ac34-4791-a2bd-d37264d8d3d9"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/da99cda2-ac34-4791-a2bd-d37264d8d3d9/attachments/attachment.zip)

# Visualización de los registros y las métricas de AWS Network Firewall mediante Splunk
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk"></a>

*Ivo Pinto, Amazon Web Services*

## Resumen
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-summary"></a>

Muchas organizaciones utilizan [Splunk Enterprise](https://www.splunk.com/en_us/products/splunk-enterprise.html) como una herramienta centralizada de agregación y visualización de registros y métricas de diferentes fuentes. Este patrón le ayuda a configurar Splunk para obtener registros y métricas de [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) de [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) mediante el complemento Splunk para AWS. 

Para ello, cree un rol de AWS Identity and Access Management (IAM) de solo lectura. El complemento Splunk para AWS utiliza esta función para acceder CloudWatch. Debe configurar el complemento Splunk para que AWS extraiga métricas y registros. CloudWatch Por último, debe crear visualizaciones en Splunk a partir de los datos de registro y las métricas recuperados.

## Requisitos previos y limitaciones
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-prereqs"></a>

**Requisitos previos **
+ Una cuenta de [Splunk](https://www.splunk.com/)
+ Una instancia de Splunk Enterprise, versión 8.2.2 o posterior 
+ Una cuenta de AWS activa
+ Network Firewall, [instalado](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html) y [configurado](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) para enviar CloudWatch registros a Logs

**Limitaciones**
+ Splunk Enterprise debe implementarse como un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) en la nube de AWS.
+ La recopilación de datos mediante un rol de IAM detectado automáticamente para Amazon EC2 no está permitida en las regiones de AWS China.

## Arquitectura
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-architecture"></a>

![\[Arquitectura de registro de AWS Network Firewall y Splunk\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c6ce254a-841f-4bed-8f9f-b35e99f22e56/images/3dd420e9-70af-4a42-b24d-c54872c55e0b.png)


En el siguiente diagrama se ilustra lo siguiente:

1. Network Firewall publica CloudWatch registros en Logs.

1. Splunk Enterprise recupera métricas y registros de. CloudWatch

Para rellenar métricas y registros de ejemplo en esta arquitectura, una carga de trabajo genera tráfico que pasa a través del punto de conexión de Network Firewall para ir a Internet. Esto se logra mediante el uso de tablas de [rutas](https://docs.aws.amazon.com/network-firewall/latest/developerguide/vpc-config.html#vpc-config-route-tables). Si bien este patrón utiliza una única instancia de Amazon EC2 como carga de trabajo, se puede aplicar a cualquier arquitectura siempre que Network Firewall esté configurado para enviar registros a CloudWatch Logs.

Esta arquitectura también utiliza una instancia de Splunk Enterprise en otra nube privada virtual (VPC). Sin embargo, la instancia de Splunk puede estar en otra ubicación, por ejemplo, en la misma VPC que la carga de trabajo, siempre que pueda llegar a. CloudWatch APIs

## Tools (Herramientas)
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-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, aplicaciones y servicios de AWS para que pueda supervisarlos y archivarlos de forma segura.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 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 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.

**Otras herramientas**
+ [Splunk](https://www.splunk.com/) le permite monitorear, visualizar y analizar los datos de registro.

## Epics
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-epics"></a>

### Creación de un rol de IAM
<a name="create-an-iam-role"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de la política de IAM. | Siga las instrucciones de la sección [Creación de políticas mediante el editor JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) para crear la política de IAM que conceda acceso de solo lectura a los datos y las métricas de los CloudWatch registros. CloudWatch Pegue la siguiente política de en el editor JSON.<pre>{<br />    "Statement": [<br />        {<br />            "Action": [<br />                "cloudwatch:List*",<br />                "cloudwatch:Get*",<br />                "network-firewall:List*",<br />                "logs:Describe*",<br />                "logs:Get*",<br />                "logs:List*",<br />                "logs:StartQuery",<br />                "logs:StopQuery",<br />                "logs:TestMetricFilter",<br />                "logs:FilterLogEvents",<br />                "network-firewall:Describe*"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": "*"<br />        }<br />    ],<br />    "Version": "2012-10-17"<br />}</pre> | Administrador de AWS | 
| Cree un rol de IAM nuevo. | Siga las instrucciones de [Crear un rol para delegar permisos a un servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) para crear el rol de IAM al que utiliza el complemento Splunk para AWS para acceder. CloudWatch En **Políticas de permisos**, elija la política que creó anteriormente. | Administrador de AWS | 
| Asigne el rol de IAM a las instancias de EC2 en el clúster de Splunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador de AWS | 

### Instale el complemento de Splunk para AWS.
<a name="install-the-splunk-add-on-for-aws"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale el complemento . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador de Splunk | 
| Configure las credenciales de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Para más información, consulte [Find an IAM role within your Splunk platform instance](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Find_an_IAM_role_within_your_Splunk_platform_instance) en la documentación de Splunk. | Administrador de Splunk | 

### Configure el acceso de Splunk a CloudWatch
<a name="configure-splunk-access-to-cloudwatch"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la recuperación de los registros de Network Firewall desde los CloudWatch registros. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)De manera predeterminada, Splunk recupera los datos del registro cada 10 minutos. Se trata de un parámetro configurable en **Advanced Settings**. Para obtener más información, consulte [Configurar una entrada de CloudWatch registros mediante Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_Logs_input_using_Splunk_Web) en la documentación de Splunk. | Administrador de Splunk | 
| Configure la recuperación de las métricas de Network Firewall desde CloudWatch. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)De manera predeterminada, Splunk recupera los datos de las métricas cada 5 minutos. Se trata de un parámetro configurable en **Advanced Settings**. Para obtener más información, consulte [Configurar una CloudWatch entrada mediante Splunk Web en la documentación de Splunk](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_input_using_Splunk_Web). | Administrador de Splunk | 

### Creación de visualizaciones de Splunk mediante consultas
<a name="create-splunk-visualizations-by-using-queries"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Vea las direcciones IP de origen principal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador de Splunk | 
| Vea las estadísticas de los paquetes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador de Splunk | 
| Vea los puertos de origen más utilizados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador de Splunk | 

## Recursos relacionados
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-resources"></a>

**Documentación de AWS**
+ [Creación de un rol para delegar permisos a un servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) (documentación de IAM)
+ [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start) (documentación de IAM)
+ [Logging and monitoring in AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-monitoring.html) (documentación de Network Firewall)
+ [Route table configurations for AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/route-tables.html) (documentación de Network Firewall)

**Publicaciones del blog de AWS**
+ [AWS Network Firewall deployment models](https://aws.amazon.com/pt/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/)

**AWS Marketplace**
+ [Splunk Enterprise Amazon Machine Image (AMI)](https://aws.amazon.com/marketplace/pp/prodview-l6oos72bsyaks)

# Más patrones
<a name="networking-more-patterns-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)
+ [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)
+ [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)
+ [Cree un portal para microinterfaces mediante Angular AWS Amplify y Module Federation](create-amplify-micro-frontend-portal.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 controles de acceso basados en atributos de detección para subredes públicas mediante AWS Config](deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.md)
+ [Implementación de controles de acceso preventivos basados en atributos para las subredes públicas](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Habilite conexiones cifradas para instancias de base de datos de PostgreSQL en Amazon RDS](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [Amplíe VRFs su alcance a AWS mediante AWS Transit Gateway Connect](extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.md)
+ [Migre una carga de trabajo de F5 BIG-IP a F5 BIG-IP VE en Nube de AWS](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.md)
+ [Migración de los controladores de entrada NGINX al activar el Modo automático de Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.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)
+ [Impedir el acceso a Internet de las cuentas mediante una política de control de servicios](prevent-internet-access-at-the-account-level-by-using-a-service-control-policy.md)
+ [Enviar alertas desde AWS Network Firewall a un canal de Slack](send-alerts-from-aws-network-firewall-to-a-slack-channel.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 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)
+ [Utilice las consultas de BMC Discovery para extraer datos de migración para planificar la migración](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.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)

# Entrega de contenido
<a name="contentdelivery-pattern-list"></a>

**Topics**
+ [Envíe AWS WAF registros a Splunk mediante AWS Firewall Manager Amazon Data Firehose](send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.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)
+ [Más patrones](contentdelivery-more-patterns-pattern-list.md)

# Envíe AWS WAF registros a Splunk mediante AWS Firewall Manager Amazon Data Firehose
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose"></a>

*Michael Friedenthal, Aman Kaur Gandhi, y JJ Johnson, Amazon Web Services*

## Resumen
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-summary"></a>

Históricamente, había dos formas de mover los datos a Splunk: una arquitectura de inserción o una arquitectura de extracción. Una *arquitectura de extracción* ofrece garantías de entrega de los datos mediante reintentos, pero requiere recursos dedicados en Splunk que recopilen los datos. Las arquitecturas de extracción no suelen funcionar en tiempo real debido a las encuestas. Una *arquitectura de inserción* suele tener una latencia más baja, es más escalable y reduce la complejidad y los costos operativos. Sin embargo, no garantiza la entrega y, por lo general, requiere agentes.

La integración de Splunk con Amazon Data Firehose proporciona datos de streaming en tiempo real a Splunk a través de un recopilador de eventos HTTP (HEC). Esta integración ofrece las ventajas de las arquitecturas de inserción y extracción: garantiza la entrega de datos mediante reintentos, es prácticamente en tiempo real, es de baja latencia y tiene poca complejidad. El HEC envía los datos de forma rápida y eficiente a través de HTTP o HTTPS directamente a Splunk. HECs están basados en fichas, lo que elimina la necesidad de codificar las credenciales en una aplicación o en los archivos auxiliares.

En una AWS Firewall Manager política, puede configurar el registro de todo el tráfico de ACL AWS WAF web en todas sus cuentas y, a continuación, puede utilizar una transmisión de entrega de Firehose para enviar los datos de registro a Splunk para su supervisión, visualización y análisis. Esta solución proporciona los siguientes beneficios:
+ Administración y registro centralizados del tráfico de ACL AWS WAF web en todas sus cuentas
+ Integración de Splunk con una sola Cuenta de AWS
+ Escalabilidad
+ Entrega de datos de registro prácticamente en tiempo real
+ Optimización de costos mediante el uso de una solución sin servidor, de forma que no tenga que pagar por los recursos no utilizados.

## Requisitos previos y limitaciones
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS que forma parte de una organización en AWS Organizations.
+ Debe tener los siguientes permisos para habilitar el registro con Firehose:
  + `iam:CreateServiceLinkedRole`
  + `firehose:ListDeliveryStreams`
  + `wafv2:PutLoggingConfiguration`
+ AWS WAF y su web ACLs debe estar configurada. Para obtener instrucciones, consulte [Primeros pasos con AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html).
+ AWS Firewall Manager debe estar configurado. Para obtener instrucciones, consulte los [AWS Firewall Manager prerequisites](https://docs.aws.amazon.com/waf/latest/developerguide/fms-prereq.html).
+ Se AWS WAF deben configurar las políticas de seguridad de Firewall Manager para. Para obtener instrucciones, consulte [Introducción a las AWS Firewall ManagerAWS WAF políticas](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html).
+ Splunk debe configurarse con un punto de conexión HTTP público al que pueda acceder Firehose.

**Limitaciones**
+  Cuentas de AWS Deben gestionarse en una sola organización en AWS Organizations.
+ La ACL web debe estar en la misma región que la transmisión de entrega. Si vas a capturar registros para Amazon CloudFront, crea el flujo de entrega Firehose en la región EE.UU. Este (Norte de Virginia),. `us-east-1`
+ El complemento Splunk para Firehose está disponible para las implementaciones de pago de Splunk Cloud, las implementaciones distribuidas de Splunk Enterprise y las implementaciones de Splunk Enterprise de instancia única. Este complemento no es compatible con las implementaciones de prueba gratuitas de Splunk Cloud.

## Arquitectura
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-architecture"></a>

**Pila de tecnología de destino**
+ Firewall Manager
+ Firehose
+ Amazon Simple Storage Service (Amazon S3)
+ AWS WAF
+ Splunk

**Arquitectura de destino**

La siguiente imagen muestra cómo puede utilizar el Firewall Manager para registrar de forma centralizada todos los AWS WAF datos y enviarlos a Splunk a través de Firehose.

![\[Diagrama de arquitectura que muestra cómo enviar datos de registro de AWS WAF a Splunk a través de Amazon Data Firehose.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/3dfeaae0-985a-42b8-91c4-ece081f0b51b/images/669169b1-caa4-419b-9988-19806ded54eb.png)


1. La AWS WAF web ACLs envía los datos de registro del firewall al Firewall Manager.

1. Firewall Manager envía los datos de registro a Firehose.

1. El flujo de entrega de Firehose reenvía los datos de registro a Splunk y a un bucket de S3. El bucket de S3 actúa como respaldo en caso de que se produzca un error en el flujo de entrega de Firehose.

**Automatización y escala**

Esta solución está diseñada para escalar y adaptarse a todos los AWS WAF sitios ALCs web de la organización. Puedes configurar todas las páginas web ACLs para que usen la misma instancia de Firehose. Sin embargo, si quiere configurar y usar varias instancias de Firehose, puede hacerlo.

## Tools (Herramientas)
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-tools"></a>

**Servicios de AWS**
+ [AWS Firewall Manager](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html)es un servicio de administración de seguridad que le ayuda a configurar y administrar de forma centralizada las reglas de firewall en todas sus cuentas y aplicaciones en AWS Organizations.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) le ayuda a entregar [datos de streaming](https://aws.amazon.com/streaming-data/) en tiempo real a otros Servicios de AWS puntos de enlace HTTP personalizados y puntos de enlace HTTP propiedad de proveedores de servicios externos compatibles, como Splunk.
+ [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 WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) es un firewall de aplicación web que lo ayuda a supervisar las solicitudes HTTP y HTTPS que se reenvían a los recursos de su aplicación web protegida.

**Otras herramientas**
+ [Splunk](https://docs.splunk.com/Documentation) le permite monitorear, visualizar y analizar los datos de registro.

## Epics
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-epics"></a>

### Configurar Splunk
<a name="configure-splunk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale la aplicación Splunk para. AWS | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrador de seguridad, administrador de Splunk | 
| Instala el complemento para. AWS WAF | Repita las instrucciones anteriores para instalar el **complemento AWS Web Application Firewall** para Splunk. | Administrador de seguridad, administrador de Splunk | 
| Instale y configure el complemento Splunk para Firehose. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrador de seguridad, administrador de Splunk | 

### Creación de un flujo de entrega de Firehose
<a name="create-the-akf-delivery-stream"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Conceda a Firehose acceso a un destino de Splunk | Configure la política de acceso que permite a Firehose acceder a un destino de Splunk y hacer una copia de seguridad de los datos de registro en un bucket de S3. Para más información, consulte [Concesión a Firehose de acceso a un destino de Splunk](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-splunk). | Administrador de seguridad | 
| Cree un flujo de entrega de Firehose. | En la misma cuenta ACLs para la que administras la web AWS WAF, crea un flujo de entrega en Firehose. Es obligatorio contar con un rol de IAM al crear un flujo de entrega. Firehose asume ese rol de IAM y obtiene acceso al bucket de S3 especificado. Para obtener instrucciones, consulte [Crear un flujo de entrega](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html). Tenga en cuenta lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html)Repita este proceso para cada token que haya configurado en el recopilador de eventos HTTP. | Administrador de seguridad | 
| Pruebe el flujo de entrega. | Pruebe el flujo de entrega para comprobar que está configurado correctamente. Para obtener instrucciones, consulte [Prueba con Splunk](https://docs.aws.amazon.com/firehose/latest/dev/test-drive-firehose.html#test-drive-destination-splunk) en la documentación de Kinesis Data Firehose. | Administrador de seguridad | 

### Configurar Firewall Manager para registrar datos
<a name="configure-firewall-manager-to-log-data"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure las políticas de Firewall Manager. | Las políticas de Firewall Manager deben configurarse para permitir el registro y reenviar los registros al flujo de entrega correcto de Firehose. Para obtener más información e instrucciones, consulta [Cómo configurar el registro de una AWS WAF política](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config). | Administrador de seguridad | 

## Recursos relacionados
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-resources"></a>

**AWS resources**
+ [Registro del tráfico de ACL web](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) (AWS WAF documentación)
+ [Configuración del registro para una AWS WAF política](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config) (AWS WAF documentación)
+ [Tutorial: envío de registros de flujos de VOC a Splunk con Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/vpc-splunk-tutorial.html) (documentación de Firehose)
+ [How do I push VPC flow logs to Splunk using Amazon Data Firehose?](https://aws.amazon.com/premiumsupport/knowledge-center/push-flow-logs-splunk-firehose/) (Centro de AWS conocimiento)
+ [Alimentación de datos en Splunk mediante Amazon Data Firehose (entrada](https://aws.amazon.com/blogs/big-data/power-data-ingestion-into-splunk-using-amazon-kinesis-data-firehose/) del blog)AWS 

**Documentación de Splunk**
+ [Splunk Add-on for Amazon Data Firehose](https://docs.splunk.com/Documentation/AddOns/released/Firehose/About)

# Sirva contenido estático en un bucket de Amazon S3 a través de una VPC mediante Amazon CloudFront
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront"></a>

*Angel Emmanuel Hernandez Cebrian, Amazon Web Services*

## Resumen
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-summary"></a>

Cuando publicas contenido estático alojado en Amazon Web Services (AWS), el enfoque recomendado es utilizar un depósito de Amazon Simple Storage Service (S3) como origen y utilizar CloudFront Amazon para distribuir el contenido. Esta solución tiene dos ventajas principales: la comodidad de almacenar en caché el contenido estático en ubicaciones periféricas y la posibilidad de definir [listas de control de acceso web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) (web ACLs) para la CloudFront distribución, lo que le ayuda a proteger las solicitudes de contenido con una configuración y una sobrecarga administrativa mínimas.

Sin embargo, el enfoque estándar recomendado tiene una limitación arquitectónica común. En algunos entornos, puede ser deseable que los dispositivos de firewall virtual se implementen en una nube privada virtual (VPC) para inspeccionar todo el contenido, incluido el contenido estático. El enfoque estándar no dirige el tráfico a través de la VPC para su inspección. Este patrón proporciona una solución arquitectónica alternativa. Se sigue utilizando una CloudFront distribución para ofrecer contenido estático en un bucket de S3, pero el tráfico se enruta a través de la VPC mediante un Application Load Balancer. A continuación, una función de AWS Lambda recupera y devuelve el contenido del bucket de S3.

## Requisitos previos y limitaciones
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Contenido estático del sitio web alojado en un bucket de S3.

**Limitaciones**
+ Los recursos de este patrón deben estar en una sola región de AWS, pero se pueden aprovisionar en diferentes cuentas de AWS.
+ Los límites se aplican al tamaño máximo de solicitud y respuesta que la función de Lambda puede, respectivamente, recibir y enviar. Para obtener más información, consulte *Límites* en [Funciones de Lambda como destinos](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (documentación de Elastic Load Balancing).
+ Al usar este enfoque, es importante encontrar un buen equilibrio entre el rendimiento, la escalabilidad, la seguridad y la rentabilidad. A pesar de la alta escalabilidad de Lambda, si el número de invocaciones simultáneas de Lambda supera la cuota máxima, algunas solicitudes se limitarán. Para más información, consulte las cuotas de Lambda (documentación de Lambda). También debe tener en cuenta los precios de uso de Lambda. Para minimizar las invocaciones a Lambda, asegúrese de definir correctamente la caché de la distribución. CloudFront Para obtener más información, consulte [Optimización del almacenamiento en caché y la disponibilidad (documentación)CloudFront .](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html)

## Arquitectura
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-architecture"></a>

**Pila de tecnología de destino**
+ CloudFront
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Equilibrador de carga de aplicación
+ Lambda
+ Amazon S3

**Arquitectura de destino**

La siguiente imagen muestra la arquitectura sugerida cuando es necesario utilizarla CloudFront para servir contenido estático desde un bucket de S3 a través de una VPC.

![\[El tráfico fluye a través de los equilibradores de carga de aplicación en la VPC hacia la función de Lambda.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e0dd6928-4fe0-47ab-954f-9de5563349d8/images/b42c7dd9-4a72-4998-bf88-195c8f90ed3e.png)


1. El cliente solicita la URL de CloudFront distribución para incluir un archivo de sitio web concreto en el bucket de S3.

1. CloudFront envía la solicitud a AWS WAF. AWS WAF filtra la solicitud mediante la web ACLs aplicada a la CloudFront distribución. Si se determina que la solicitud es válida, el flujo continúa. Si se determina que la solicitud no es válida, el cliente recibe un error 403.

1. CloudFront comprueba su caché interna. Si hay una clave válida que coincida con la solicitud entrante, el valor asociado se devuelve al cliente como respuesta. Si no es así, el flujo continúa.

1. CloudFront reenvía la solicitud a la URL del Application Load Balancer especificado.

1. El equilibrador de carga de aplicación tiene un oyente asociado a un grupo objetivo basado en una función de Lambda. El equilibrador de carga de aplicación invoca la función de Lambda.

1. La función de Lambda se conecta al bucket de S3, realiza una operación `GetObject` en él y devuelve el contenido como respuesta.

**Automatización y escala**

Para automatizar la implementación de contenido estático mediante este enfoque, cree CI/CD canalizaciones para actualizar los buckets de Amazon S3 que alojan sitios web.

La función de Lambda escala automáticamente para gestionar las solicitudes concurrentes, dentro de las cuotas y limitaciones del servicio. Para obtener más información, consulte [Escalado de función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html) y [Cuotas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) (documentación de Lambda). Para los demás servicios y características de AWS, como CloudFront el Application Load Balancer, AWS los escala automáticamente.

## Tools (Herramientas)
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-tools"></a>
+ [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.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuye el tráfico entrante de aplicaciones o redes entre varios destinos. En este patrón, se emplea un [equilibrador de carga de aplicación](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html), aprovisionado mediante Elastic Load Balancing, para dirigir el tráfico a la función de Lambda.
+ [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 le 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.

## Epics
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-epics"></a>

### Se utiliza CloudFront para ofrecer contenido estático de Amazon S3 a través de una VPC
<a name="use-cloudfront-to-serve-static-content-from-amazon-s3-through-a-vpc"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una VPC. | Cree una VPC para alojar los recursos implementados en este patrón, como el equilibrador de carga de aplicación y la función de Lambda.  Para obtener instrucciones, consulte [Crear una VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) (documentación de Amazon VPC). | Arquitecto de la nube | 
| Cree una ACL web de AWS WAF. | Cree una ACL web de AWS WAF. Más adelante en este patrón, se aplica esta ACL web a la CloudFront distribución. Para obtener instrucciones, consulte [Crear una ACL web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html) (documentación de AWS WAF). | Arquitecto de la nube | 
| Crear la función de Lambda. | Cree la función de Lambda que sirva el contenido estático alojado en el bucket de S3 como sitio web. Use el código que se proporciona en la sección de [Información adicional](#serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional) de este patrón. Personalice el código para identificar su bucket de S3 de destino. | AWS general | 
| Cargar la función de Lambda. | Introduzca el siguiente comando para cargar el código de la función de Lambda en un archivo .zip en Lambda.<pre>aws lambda update-function-code \<br />--function-name  \ <br />--zip-file fileb://lambda-alb-s3-website.zip</pre> | AWS general | 
| Cree un Equilibrador de carga de aplicación. | Cree un equilibrador de carga de aplicación con acceso a Internet que apunte a la función de Lambda. Para obtener instrucciones, consulte [Crear un grupo de destino para la función de Lambda](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#register-lambda-function) (documentación de Elastic Load Balancing). Para una configuración de alta disponibilidad, cree el equilibrador de carga de aplicación y adjúntelo a subredes privadas en distintas zonas de disponibilidad. | Arquitecto de la nube | 
| Cree una CloudFront distribución. | Cree una CloudFront distribución que apunte al Application Load Balancer que creó.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.html) | Arquitecto de la nube | 

## Recursos relacionados
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-resources"></a>

**Documentación de AWS**
+ [Optimización del almacenamiento en caché y la disponibilidad](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html) (CloudFront documentación)
+ [Funciones de Lambda como destinos](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (documentación de Elastic Load Balancing)
+ [Cuotas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) (documentación de Lambda)

**Sitios web de servicios de AWS**
+ [Equilibrador de carga de aplicación](https://aws.amazon.com/es/elasticloadbalancing/application-load-balancer/)
+ [Lambda](https://aws.amazon.com/en/lambda/)
+ [CloudFront](https://aws.amazon.com/en/cloudfront/)
+ [Amazon S3](https://aws.amazon.com/en/s3/)
+ [AWS WAF](https://aws.amazon.com/en/waf/)
+ [Amazon VPC](https://aws.amazon.com/en/vpc/)

## Información adicional
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional"></a>

**Código**

El siguiente ejemplo de función de Lambda está escrito en Node.js. Esta función de Lambda actúa como un servidor web que realiza una operación `GetObject` en un bucket de S3 que contiene los recursos del sitio web. 

```
/**

 * This is an AWS Lambda function created for demonstration purposes.

 * It retrieves static assets from a defined Amazon S3 bucket.

 * To make the content available through a URL, use an Application Load Balancer with a Lambda integration.
 * 
 * Set the S3_BUCKET environment variable in the Lambda function definition.
 */

var AWS = require('aws-sdk');

exports.handler = function(event, context, callback) {

    var bucket = process.env.S3_BUCKET;    
    var key = event.path.replace('/', '');
    
    if (key == '') {
        key = 'index.html';
    }

    // Fetch from S3
    var s3 = new AWS.S3();
    return s3.getObject({Bucket: bucket, Key: key},
       function(err, data) {

            if (err) {
                return err;
            }

            var isBase64Encoded = false;
            var encoding = 'utf8';
            
            if (data.ContentType.indexOf('image/') > -1) {
                isBase64Encoded = true;
                encoding = 'base64'
            }
    
            var resp = {
                statusCode: 200,
                headers: {
                    'Content-Type': data.ContentType,
                },
                body: new Buffer(data.Body).toString(encoding),
                isBase64Encoded: isBase64Encoded
            };

            callback(null, resp);
        }
    );
};
```

# Más patrones
<a name="contentdelivery-more-patterns-pattern-list"></a>

**Topics**
+ [Comprueba la versión de registro de acceso, HTTPS y TLS en una CloudFront distribución de Amazon](check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version.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)
+ [Implementación de controles de acceso preventivos basados en atributos para las subredes públicas](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Despliega recursos en una AWS Wavelength zona mediante Terraform](deploy-resources-wavelength-zone-using-terraform.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)
+ [Configuración de un router de celdas sin servidor para una arquitectura basada en celdas](serverless-cell-router-architecture.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)
+ [Visualización de los registros y las métricas de AWS Network Firewall mediante Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)