Automatice la implementación de aplicaciones anidadas mediante SAM de AWS - Recomendaciones de AWS

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

Automatice la implementación de aplicaciones anidadas mediante SAM de AWS

Creado por Dr. Rahul Sharad Gaikwad (AWS), Dmitry Gulin (AWS), Ishwar Chaauthaiwale (AWS) y Tabby Ward (AWS)

Repositorio de código: -sample aws-sam-nested-stack

Entorno: PoC o piloto

Tecnologías: modernización; sin servidor; DevOps

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

Servicios de AWS: Repositorio de aplicaciones sin servidor de AWS

Resumen

En Amazon Web Services (AWS), el AWS Serverless Application Model (AWS SAM) es un marco de código abierto que proporciona una sintaxis abreviada para expresar funciones, API, bases de datos y asignaciones de orígenes de eventos. Con solo unas pocas líneas para cada recurso, puede definir la aplicación que desee y modelarla mediante YAML. Durante la implementación, SAM transforma y expande la sintaxis de SAM en una CloudFormation sintaxis de AWS que puede usar para crear aplicaciones sin servidor con mayor rapidez.

SAM de AWS simplifica el desarrollo, la implementación y la administración de aplicaciones sin servidor en la plataforma AWS. Proporciona un marco estandarizado, una implementación más rápida, capacidades de pruebas locales, administración de recursos, una integración perfecta con las herramientas de desarrollo y una comunidad de apoyo. Estas características lo convierten en una herramienta valiosa para crear aplicaciones sin servidor de manera eficiente y eficaz.

Este patrón utiliza plantillas SAM de AWS para automatizar la implementación de aplicaciones anidadas. Una aplicación anidada es una aplicación dentro de otra aplicación. Las aplicaciones principales llaman a las aplicaciones secundarias. Se trata de componentes con acoplamiento flexible de una arquitectura sin servidor. 

Con aplicaciones anidadas, puede crear rápidamente arquitecturas sin servidor altamente sofisticadas mediante la reutilización de servicios o componentes que se crean y mantienen de forma independiente, pero que se componen con SAM de AWS y Repositorio de aplicaciones sin servidor. Las aplicaciones anidadas le ayudan a crear aplicaciones más potentes, evitar la duplicación del trabajo y garantizar la coherencia y las prácticas recomendadas en todos sus equipos y organizaciones. Para mostrar las aplicaciones anidadas, el patrón implementa un ejemplo de aplicación de carrito de compras sin servidor de AWS.

Requisitos previos y limitaciones

Requisitos previos 

  • Una cuenta de AWS activa

  • Una nube privada virtual (VPC) y subredes existentes

  • Un entorno de desarrollo integrado, como AWS Cloud9 o Visual Studio Code (para obtener más información, consulte Herramientas para crear en AWS)

  • Biblioteca de ruedas de Python instalada con pip install wheel, si aún no está instalada

Limitaciones

  • El número máximo de aplicaciones que se pueden anidar en una aplicación sin servidor es de 200.

  • El número máximo de parámetros que puede tener una aplicación anidada es 60.

Versiones de producto

  • Esta solución se basa en la versión 1.21.1 de la interfaz de la línea de comandos de SAM de AWS (CLI de SAM de AWS), pero esta arquitectura debería funcionar con versiones posteriores de la CLI de SAM de AWS.

Arquitectura

Pila de tecnología de destino

  • Amazon API Gateway

  • SAM de AWS

  • Amazon Cognito

  • Amazon DynamoDB

  • AWS Lambda

  • Cola de Amazon Simple Queue Service (Amazon SQS)

Arquitectura de destino

El siguiente diagrama muestra cómo se realizan las solicitudes de los usuarios a los servicios de compras mediante llamadas a las API. La solicitud del usuario, incluida toda la información necesaria, se envía a Amazon API Gateway y al autorizador de Amazon Cognito, que ejecuta los mecanismos de autenticación y autorización de las API.

Cuando se agrega, elimina o actualiza un elemento en DynamoDB, se coloca un evento en DynamoDB Streams, que a su vez inicia una función de Lambda. Para evitar la eliminación inmediata de elementos antiguos como parte de un flujo de trabajo sincrónico, los mensajes se colocan en una cola de SQS, lo que inicia una función de trabajo para eliminarlos.

Operaciones POST y PUT desde API Gateway hasta funciones Lambda, DynamoDB y Product Service.

En esta configuración de solución, la CLI de AWS SAM sirve de interfaz para las CloudFormation pilas de AWS. Las plantillas SAM de AWS implementan automáticamente aplicaciones anidadas. La plantilla SAM principal llama a las plantillas secundarias y la CloudFormation pila principal implementa las pilas secundarias. Cada pila secundaria crea los recursos de AWS que se definen en las CloudFormation plantillas de AWS SAM.

Proceso de cuatro pasos mediante AWS SAM CLI con una pila principal y tres secundarias CloudFormation .
  1. Genere e implemente las pilas.

  2. La CloudFormation pila de autenticación contiene Amazon Cognito.

  3. La CloudFormation pila de productos contiene una función Lambda y Amazon API Gateway

  4. La CloudFormation pila de compras contiene una función Lambda, Amazon API Gateway, la cola SQS y la base de datos Amazon DynamoDB.

Herramientas

Herramientas

  • Amazon API Gateway le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket API a cualquier escala.

  • AWS le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.

  • Amazon Cognito ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.

  • Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • AWS Serverless Application Model (AWS SAM) es un marco de código abierto que permite crear aplicaciones sin servidor en la nube de AWS.

  • Amazon Simple Queue Service (Amazon SQS) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.

Código

El código de este patrón está disponible en el repositorio de muestras de GitHub AWS SAM Nested Stack.

Epics

TareaDescripciónHabilidades requeridas

Instalar la CLI de SAM de AWS.

Para instalar la CLI de SAM de AWS, siga las instrucciones de la documentación de SAM de AWS.

DevOps ingeniero

Configure las credenciales de AWS.

Para configurar las credenciales de AWS para que la CLI de SAM de AWS pueda realizar llamadas a los servicios de AWS en su nombre, ejecute el comando aws configure y siga las instrucciones.

$aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:

Para obtener más información sobre cómo configurar sus credenciales, consulte credenciales de autenticación y acceso.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Clone el repositorio de código de SAM de AWS.

  1. Introduzca el siguiente comando para clonar el repositorio de pilas de muestras anidadas de AWS para este patrón.

    git clone https://github.com/aws-samples/aws-sam-nested-stack-sample.git
  2. Acceda al directorio clonado ejecutando el siguiente comando.

    cd aws-sam-nested-stack-sample
DevOps ingeniero

Implemente plantillas para iniciar el proyecto.

Ejecute el comando SAM init para iniciar el proyecto. Cuando se le pida que elija una fuente de plantilla, elija Custom Template Location.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Revise las plantillas de aplicaciones SAM de AWS.

Revise las plantillas de las aplicaciones anidadas. En este ejemplo se utilizan las siguientes plantillas de aplicaciones anidadas:

  • auth.yaml: esta plantilla configura los recursos relacionados con la autenticación, como Amazon Cognito y Almacén de parámetros de AWS Systems Manager.

  • product-mock.yaml: esta plantilla implementa recursos relacionados con el producto, como las funciones de Lambda y Amazon API Gateway.

  • shoppingcart-service.yaml: esta plantilla configura los recursos relacionados con los carritos de compras, como AWS Identity and Access Management (IAM), tablas de DynamoDB y funciones de Lambda.

DevOps ingeniero

Revise la plantilla principal.

Revise la plantilla que invocará las plantillas de aplicación anidadas. En este ejemplo, la plantilla principal es template.yml. Todas las aplicaciones independientes están anidadas en la plantilla principal única template.yml.

DevOps ingeniero

Compile y cree el código de la plantilla SAM de AWS.

Ejecute el siguiente comando utilizando la CLI de SAM de AWS.

sam build
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente las aplicaciones.

Para lanzar el código de plantilla SAM que crea las CloudFormation pilas de aplicaciones anidadas y despliega el código en el entorno de AWS, ejecute el siguiente comando.

sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

El comando aparecerá con algunas preguntas. Responda a todas las preguntas con y.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Verifique las pilas.

Para revisar las CloudFormation pilas de AWS y los recursos de AWS que se definieron en las plantillas de AWS SAM, haga lo siguiente:

  1. Inicie sesión en la consola de administración de AWS y navegue hasta la CloudFormationconsola.

  2. Compruebe que las pilas principal y secundaria estén en la lista.

    En este ejemplo, sam-shopping-cart es la pila principal que llama a las pilas anidadas de Auth, Product y Shopping.

    La pila de productos proporciona el enlace URL de Product API Gateway como salida.

DevOps ingeniero

Recursos relacionados

Referencias

Tutoriales y videos

Información adicional

Una vez colocado todo el código, el ejemplo tiene la siguiente estructura de directorios:

  • sam_stacks: esta carpeta contiene la capa shared.py. Una capa es un archivo que contiene bibliotecas, un tiempo de ejecución personalizado u otras dependencias. Con las capas, puede utilizar las bibliotecas en la función sin necesidad de incluirlas en el paquete de implementación.

  • product-mock-service— Esta carpeta contiene todos los archivos y funciones de Lambda relacionados con el producto.

  • shopping-cart-service— Esta carpeta contiene todas las funciones y archivos de Lambda relacionados con las compras.