Incorporación de inquilinos a la arquitectura SaaS para el modelo de silo mediante C# y AWS CDK - 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.

Incorporación de inquilinos a la arquitectura SaaS para el modelo de silo mediante C# y AWS CDK

Creada por Tabby Ward (AWS), Susmitha Reddy Gankidi () y Vijai Anand Ramalingam () AWS AWS

Repositorio de código: Tennat Onboarding Silo

Entorno: PoC o piloto

Tecnologías: modernización; DevOps

Carga de trabajo: código abierto

AWSservicios: Amazon DynamoDB AWS CloudFormation; Amazon DynamoDB Streams; Lambda; Amazon Gateway AWS API

Resumen

Las aplicaciones de software como servicio (SaaS) se pueden crear con una variedad de modelos arquitectónicos diferentes. El modelo de silo se refiere a una arquitectura en la que los inquilinos reciben recursos específicos.

Las aplicaciones SaaS se basan en un modelo sencillo para introducir nuevos inquilinos en su entorno. Esto suele requerir la orquestación de varios componentes para aprovisionar y configurar correctamente todos los elementos necesarios para crear un nuevo inquilino. Este proceso, en la arquitectura SaaS, se denomina incorporación de inquilinos. La incorporación debe automatizarse por completo en todos los entornos de SaaS y utilizar la infraestructura como código en el proceso de incorporación.

Este patrón lo guía a través de un ejemplo de creación de un arrendatario y aprovisionamiento de una infraestructura básica para el arrendatario en Amazon Web Services (AWS). El patrón usa C# y el AWS Cloud Development Kit (AWSCDK).

Como este patrón crea una alarma de facturación, recomendamos implementar la pila en la región EE. UU. Este (Norte de Virginia) o AWS us-east-1. Para obtener más información, consulte la AWS documentación.

Requisitos previos y limitaciones

Requisitos previos

Limitaciones 

  • AWSCDKusos AWS CloudFormation, por lo que AWS CDK las aplicaciones están sujetas a cuotas CloudFormation de servicio. Para obtener más información, consulte AWS CloudFormation cuotas

  • La CloudFormation pila de inquilinos se crea con un rol de CloudFormation servicio infra-cloudformation-role con caracteres comodín en las acciones (sns* ysqs*), pero con los recursos limitados al tenant-cluster prefijo. Para un caso de uso de producción, evalúe esta configuración y proporcione únicamente el acceso obligatorio a este rol de servicio. La función InfrastructureProvision Lambda también usa un carácter comodín (cloudformation*) para aprovisionar la CloudFormation pila, pero con los recursos limitados al prefijo. tenant-cluster

  • La compilación de docker de este ejemplo de código utiliza --platform=linux/amd64 para forzar imágenes basadas en linux/amd64. Esto es para garantizar que los artefactos de imagen finales sean adecuados para Lambda, que de forma predeterminada utiliza una arquitectura x86-64. Si necesita cambiar la arquitectura Lambda de destino, asegúrese de cambiar tanto los Dockerfiles como los códigos. AWS CDK Para obtener más información, consulte la entrada del blog Migración de funciones AWS Lambda a procesadores Graviton2 basados en AWS ARM.

  • El proceso de eliminación de la pila no limpiará CloudWatch los registros (grupos de registros y registros) generados por la pila. Debe limpiar los registros manualmente a través de la consola AWS de administración de Amazon CloudWatch o a través de laAPI.

Este patrón se configura a modo de ejemplo. Para su uso en producción, evalúe las siguientes configuraciones y realice los cambios en función de los requisitos de su empresa:

  • Para simplificar, el bucket de AWSSimple Storage Service (Amazon S3) de este ejemplo no tiene habilitado el control de versiones. Evalúe y actualice la configuración según sea necesario.

  • Para simplificar, en este ejemplo se configuran REST API los puntos de enlace de Amazon API Gateway sin autenticación, autorización ni limitación. Para uso en producción, recomendamos integrar el sistema con la infraestructura de seguridad empresarial. Evalúe esta configuración y añada la configuración de seguridad necesaria según sea necesario.

  • Para este ejemplo de infraestructura de arrendatarios, Amazon Simple Notification Service (AmazonSNS) y Amazon Simple Queue Service (AmazonSQS) solo tienen configuraciones mínimas. El Servicio de administración de AWS claves (AWSKMS) de cada inquilino se abre para que Amazon CloudWatch y SNS los servicios de Amazon de la cuenta los consuman en función de la política AWS KMS clave. La configuración es solo un marcador de posición de ejemplo. Ajuste las configuraciones según sea necesario en función de su caso de uso empresarial.

  • Toda la configuración, que incluye, entre otros, el aprovisionamiento y la eliminación de inquilinos mediante el uso de API puntos finales y back-end AWS CloudFormation, cubre únicamente el caso básico de «happy path». Evalúe y actualice la configuración con la lógica de reintentos necesaria, la lógica adicional de gestión de errores y la lógica de seguridad en función de las necesidades de su empresa.

  • El código de ejemplo se ha probado con up-to-date cdk-nag para comprobar las políticas en el momento de escribir este artículo. Es posible que se apliquen nuevas políticas en el futuro. Es posible que estas nuevas políticas requieran que modifique manualmente la pila en función de las recomendaciones antes de poder implementarla. Revise el código existente para asegurarse de que se ajusta a los requisitos de su empresa.

  • El código se basa en el AWS CDK para generar un sufijo aleatorio en lugar de depender de nombres físicos estáticos asignados a la mayoría de los recursos creados. Esta configuración sirve para garantizar que estos recursos sean únicos y no entren en conflicto con otras pilas. Para obtener más información, consulte la AWSCDKdocumentación. Ajústelo en función de los requisitos de su empresa.

  • Este ejemplo de paquetes de código. NETLambda crea artefactos en imágenes basadas en Docker y se ejecuta con el motor de ejecución de imágenes Container proporcionado por Lambda. El tiempo de ejecución de la imagen del contenedor presenta ventajas como mecanismo estándar de transferencia y almacenamiento (registros de contenedores) y entornos de prueba locales más precisos (a través de la imagen del contenedor). Puede cambiar el proyecto para usar la Lambda proporcionada. NETtiempos de ejecución para reducir el tiempo de compilación de las imágenes de Docker, pero luego tendrá que configurar los mecanismos de transferencia y almacenamiento y asegurarse de que la configuración local coincida con la configuración de Lambda. Ajuste el código para adaptarlo a los requisitos empresariales de los usuarios.

Versiones de producto

  • AWSCDKversión 2.45.0 o posterior

  • Visual Studio 2022

Arquitectura

Pila de tecnología

  • Amazon API Gateway

  • AWS CloudFormation

  • Amazon CloudWatch

  • Amazon DynamoDB

  • AWSIdentity and Access Management (IAM)

  • AWS KMS

  • AWSLambda

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

Arquitectura

En el siguiente diagrama se muestra el flujo de creación de la pila de inquilinos. Para obtener más información sobre los paquetes de tecnología del plano de control y del inquilino, consulte la sección de Información adicional.

Flujo de trabajo para crear un inquilino y aprovisionar una infraestructura básica para el inquilinoAWS.

Flujo de creación de pilas de inquilinos

  1. El usuario envía una POST API solicitud con la carga útil del nuevo inquilino (nombre del inquilino, descripción del inquilino) JSON a un alojamiento REST API de Amazon API Gateway. El API Gateway procesa la solicitud y la reenvía a la función de incorporación de inquilinos de Lambda de backend. En este ejemplo, no hay autorización ni autenticación. En una configuración de producción, API debe integrarse con el sistema de seguridad de la infraestructura SaaS.

  2. La función de incorporación de inquilinos verifica la solicitud. A continuación, intenta almacenar el registro del inquilino, que incluye el nombre del arrendatario, el identificador único universal del arrendatario generado (UUID) y la descripción del arrendatario, en la tabla de incorporación de arrendatarios de Amazon DynamoDB. 

  3. Una vez que DynamoDB almacena el registro, una transmisión de DynamoDB inicia la función de infraestructura de inquilinos de Lambda descendente.

  4. La función de Lambda de la infraestructura de inquilino actúa en función de la transmisión de DynamoDB recibida. Si la transmisión es para el INSERT evento, la función utiliza la NewImage sección de la transmisión (registro de última actualización, campo Nombre del inquilino) CloudFormation para crear una nueva infraestructura de arrendatario utilizando la plantilla que está almacenada en el bucket de S3. La CloudFormation plantilla requiere el parámetro Nombre del inquilino. 

  5. AWS CloudFormation crea la infraestructura del inquilino en función de la CloudFormation plantilla y los parámetros de entrada.

  6. Cada configuración de infraestructura arrendataria tiene una CloudWatch alarma, una alarma de facturación y un evento de alarma.

  7. El evento de alarma se convierte en un mensaje dirigido a un SNS tema, que se cifra con la AWS KMS clave del inquilino.

  8. El SNS tema reenvía el mensaje de alarma recibido a la SQS cola, que se cifra con la clave de cifrado del AWS KMS inquilino.

Se pueden integrar otros sistemas con Amazon SQS para realizar acciones basadas en los mensajes en cola. En este ejemplo, para mantener el código genérico, los mensajes entrantes permanecen en cola y es necesario eliminarlos manualmente.

Flujo de eliminación de pilas de inquilinos

  1. El usuario envía una DELETE API solicitud con la carga útil del nuevo inquilino (nombre del inquilino, descripción del inquilino) JSON al servidor REST API de Amazon API Gateway, que procesará la solicitud y la reenviará a la función de incorporación de inquilinos. En este ejemplo, no hay autorización ni autenticación. En una configuración de producción, se API integrará con el sistema de seguridad de la infraestructura SaaS.

  2. La función de incorporación de inquilinos verificará la solicitud y, a continuación, intentará eliminar el registro del inquilino (nombre del inquilino) de la tabla de incorporación de inquilinos. 

  3. Una vez que DynamoDB elimina el registro correctamente (el registro existe en la tabla y se elimina), una transmisión de DynamoDB inicia la función de infraestructura de inquilinos de Lambda descendente.

  4. La función de Lambda de la infraestructura de inquilino actúa en base a la transmisión de DynamoDB recibida. Si la transmisión es para el REMOVE evento, la función utiliza la OldImage sección del registro (información del registro y campo Nombre del inquilino, antes del último cambio, que es la eliminación) para iniciar la eliminación de una pila existente en función de la información de ese registro.

  5. AWS CloudFormation borra la pila de inquilinos de destino en función de la entrada.

Herramientas

AWSservicios

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

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

  • AWSCDKToolkit es un kit de desarrollo en la nube de línea de comandos que te ayuda a interactuar con tu aplicación AWS Cloud Development Kit (AWSCDK).

  • AWSLa interfaz de línea de comandos (AWSCLI) es una herramienta de código abierto que te ayuda a interactuar con AWS los servicios mediante comandos en tu consola de línea de comandos.

  • AWS CloudFormationle 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 AWS las cuentas y regiones.

  • Amazon DynamoDB es un servicio SQL sin base de datos totalmente gestionado que proporciona un rendimiento rápido, predecible y escalable.

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

  • AWSEl Servicio de administración de claves (AWSKMS) le ayuda a crear y controlar claves criptográficas para proteger sus datos.

  • AWSLambda es un servicio informático que le ayuda a ejecutar código sin necesidad de aprovisionar o 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) 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 (AmazonSNS) le ayuda a coordinar y gestionar el intercambio de mensajes entre editores y clientes, incluidos los servidores web y las direcciones de correo electrónico.

  • Amazon Simple Queue Service (AmazonSQS) proporciona una cola alojada segura, duradera y disponible que le ayuda a integrar y desacoplar sistemas y componentes de software distribuidos.

  • AWSToolkit for Visual Studio es un complemento para el entorno de desarrollo integrado de Visual Studio IDE (). El Toolkit for Visual Studio admite el desarrollo, la depuración y la implementación. NETaplicaciones que utilizan AWS servicios.

Otras herramientas

  • Visual Studio incluye compiladores, herramientas de finalización de código, diseñadores gráficos y otras funciones que respaldan el desarrollo de software. IDE

Código

El código de este patrón se encuentra en el repositorio Tenant Onboarding in SaaS Architecture for Silo APG Model Example.

Epics

TareaDescripciónHabilidades requeridas

Compruebe la instalación de Node.js.

Para comprobar que Node.js esté instalado en su equipo local, ejecute el siguiente comando.

node --version
AWSadministrador, AWS DevOps

Instale el AWS CDK kit de herramientas.

Para instalar AWS CDK Toolkit en su máquina local, ejecute el siguiente comando.

npm install -g aws-cdk

Si npm no está instalado, puede instalarlo desde el sitio Node.js.

AWSadministrador, AWS DevOps

Compruebe la versión del AWS CDK kit de herramientas.

Para comprobar que la versión del AWS CDK kit de herramientas está instalada correctamente en su máquina, ejecute el siguiente comando.  

cdk --version
AWSadministrador, AWS DevOps
TareaDescripciónHabilidades requeridas

Clonar el repositorio.

Clone el repositorio y navegue hasta la carpeta \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example.

Abra la solución \src\TenantOnboardingInfra.sln en Visual Studio 2022. Abra el archivo TenantOnboardingInfraStack.cs y revise el código.

Los siguientes recursos se crean como parte de esta pila:

  • Tabla de DynamoDB

  • depósito de S3 (cargue la CloudFormation plantilla en el depósito de S3).

  • Rol de ejecución de Lambda

  • Función de Lambda

  • APIPuerta de enlace API

  • Origen de eventos de la función de Lambda

AWSadministrador, AWS DevOps

Revise la CloudFormation plantilla.

En la \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template carpetainfra.yaml, abra y revise la CloudFormation plantilla. Esta plantilla se completará con el nombre del inquilino obtenido de la tabla de DynamoDB de incorporación de inquilinos.

La plantilla proporciona la infraestructura específica para cada inquilino. En este ejemplo, proporciona la AWS KMS clave, Amazon SNSSQS, Amazon y la CloudWatch alarma.

Desarrollador de aplicaciones, AWS DevOps

Revise la función de incorporación de inquilinos.

Abra Function.cs y revise el código de la función de incorporación de inquilinos, que se crea con el proyecto AWS Lambda de Visual Studio (. NETPlantilla Core (C#) con. NETPlano 6 (imagen del contenedor).

Abra Dockerfile y revise el código. Dockerfile es un archivo de texto que contiene instrucciones para crear la imagen del contenedor de Lambda.

Tenga en cuenta que los siguientes NuGet paquetes se agregan como dependencias al TenantOnboardingFunction proyecto:

  • Amazon.Lambda.APIGatewayEvents

  • AWSSDK.DynamoDBv2

  • Newtonsoft.Json

Desarrollador de aplicaciones, AWS DevOps

Revise la InfraProvisioning función Tenant.

Vaya a \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\InfraProvisioningFunction.

Abra Function.cs y revise el código de la función de aprovisionamiento de infraestructura arrendataria, que se creó con el proyecto AWS Lambda de Visual Studio (. NETPlantilla Core (C#) con. NETPlano 6 (imagen del contenedor).

Abra Dockerfile y revise el código.

Tenga en cuenta que los siguientes NuGet paquetes se agregan como dependencias al InfraProvisioningFunction proyecto:

  • Amazon.Lambda.DynamoDBEvents

  • AWSSDK.DynamoDBv2

  • AWSSDK.Cloudformation

Desarrollador de aplicaciones, AWS DevOps
TareaDescripciónHabilidades requeridas

Compilar la solución.

Para crear la solución, siga los pasos que se indican a continuación:

  1. Abra la solución \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra.sln en Visual Studio 2022.  

  2. Abra el menú contextual (clic derecho) de la solución y elija Build solution (Compilar solución).

Nota: Asegúrese de actualizar el paquete Amazon.CDK.Lib NuGet a la última versión del proyecto \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra antes de crear la solución.

Desarrollador de aplicaciones

Arranque el AWS CDK entorno.

Abre la línea de comandos de Windows y navega hasta la carpeta raíz de la AWS CDK aplicación donde está disponible el cdk.json archivo (\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example). Ejecute el siguiente comando para el arranque.

cdk bootstrap

Si ha creado un AWS perfil para las credenciales, utilice el comando con su perfil.

cdk bootstrap --profile <profile name>
AWSadministrador, AWS DevOps

Haz una lista de las AWS CDK pilas.

Para obtener una lista de todas las pilas que se van a crear como parte de este proyecto, ejecute el siguiente comando.

cdk ls cdk ls --profile <profile name>

Si ha creado un AWS perfil para las credenciales, utilice el comando con su perfil.

cdk ls --profile <profile name>
AWSadministrador, AWS DevOps

Revise qué AWS recursos se crearán.

Para revisar todos los AWS recursos que se crearán como parte de este proyecto, ejecute el siguiente comando.

cdk diff

Si ha creado un AWS perfil para las credenciales, utilice el comando con su perfil.

cdk diff --profile <profile name>
AWSadministrador, AWS DevOps

Despliegue todos los AWS recursos mediante AWSCDK.

Para implementar todos los AWS recursos, ejecute el siguiente comando.

cdk deploy --all --require-approval never

Si ha creado un AWS perfil para las credenciales, utilice el comando con su perfil.

cdk deploy --all --require-approval never --profile <profile name>

Una vez finalizada la implementación, copie los API URL datos de la sección de resultados de la línea de comandos, como se muestra en el siguiente ejemplo.

Outputs: TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/
AWSadministrador, AWS DevOps
TareaDescripciónHabilidades requeridas

Cree un nuevo inquilino.

Para crear el nuevo inquilino, envíe la siguiente solicitud de curl.

curl -X POST <TenantOnboardingAPIEndpoint* from CDK Output>tenant -d '{"Name":"Tenant123", "Description":"Stack for Tenant123"}'

Cambie el marcador <TenantOnboardingAPIEndpoint* from CDK Output> de posición por el valor real de AWSCDK, como se muestra en el siguiente ejemplo.

curl -X POST https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant -d '{"Name":"Tenant123", "Description":"test12"}'

En el siguiente ejemplo, se muestra el resultado.

{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}
Desarrollador de aplicaciones, AWS administrador, AWS DevOps

Compruebe los detalles del inquilino recién creado en DynamoDB.

Para comprobar los detalles del inquilino recién creado en DynamoDB, siga estos pasos.

  1. Abra AWS la consola de administración y navegue hasta el servicio Amazon DynamoDB.

  2. En el menú de navegación de la izquierda, elija Explorar elementos y elija la tabla TenantOnboarding.

    Nota: El nombre del inquilino irá precedido de tenantcluster-. Para obtener más información, consulte la sección Additional information (Información adicional).

  3. Compruebe que se ha creado un elemento nuevo con los detalles del inquilino.

Desarrollador de aplicaciones, administrador, AWS AWS DevOps

Verifique la creación de la pila para el nuevo inquilino.

Compruebe que la nueva pila se haya creado correctamente y se haya aprovisionado con la infraestructura para el inquilino recién creado de acuerdo con la CloudFormation plantilla.

  1. Abre la CloudFormation consola.

  2. En el menú de navegación de la izquierda, elija Pilas y compruebe que se haya creado correctamente una pila con el nombre del inquilino.

  3. Elija la pila de inquilinos de recién creada y, a continuación, elija la pestaña Resources (Recursos). Anote el recurso de alarma y el SQS recurso de Amazon.

  4. Abre una nueva terminal con AWS las credenciales configuradas y apunta a la región correcta. Para activar una alarma de prueba, introduzca el siguiente código, sustituyendo <alarm resource name> por el nombre del recurso de alarma indicado en el paso 3.

    aws cloudwatch set-alarm-state --alarm-name <alarm resource name> --state-value ALARM --state-reason 'Test setup'

    En el siguiente ejemplo se muestra el código con un nombre de recurso de alarma.

    aws cloudwatch set-alarm-state --alarm-name tenantcluster-tenant123-alarm --state-value ALARM --state-reason 'Test setup'
  5. Abre la consola y navega hasta la SQS consola de Amazon. Elija el nombre del SQS recurso de Amazon identificado en el paso 3. Siga las instrucciones de la AWS documentación para recibir y eliminar el mensaje de prueba de la alarma que se activó en el paso 4.

Desarrollador de aplicaciones, AWS administrador, AWS DevOps

Elimine la pila de inquilinos.

Para eliminar la nueva pila de inquilinos, envíe la siguiente solicitud de curl.

curl -X DELETE <TenantOnboardingAPIEndpoint* from CDK Output>tenant/<Tenant Name from previous step>

Cambie el marcador <TenantOnboardingAPIEndpoint* from CDK Output> de posición por el valor real y AWS CDK <Tenant Name from previous step> cámbielo por el valor real del paso anterior de creación del inquilino, como se muestra en el siguiente ejemplo.

curl -X DELETE https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant/Tenant123

En el siguiente ejemplo, se muestra el resultado.

{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}
Desarrollador de aplicaciones AWS DevOps, AWS administrador

Verifique la eliminación de la pila para el inquilino existente.

Para comprobar que se ha eliminado la pila de inquilinos existente, siga estos pasos:

  1. Abre la consola y navega hasta CloudFormation ella.

  2. En el panel de navegación de la izquierda, compruebe que la pila existente con el nombre del inquilino ya no esté en la CloudFormation consola (si la consola está configurada para mostrar solo las pilas activas) o que esté en proceso de borrarse. Si la pila ya no está en la CloudFormation consola, usa la lista desplegable para cambiar la configuración de la consola de Activa a Eliminada para ver la pila eliminada y comprobar que la pila se ha eliminado correctamente.

Desarrollador de aplicaciones, AWS administrador, AWS DevOps
TareaDescripciónHabilidades requeridas

Destruya el entorno.

Antes de limpiar la pila, asegúrese de lo siguiente:

  • Todos los registros de DynamoDB se eliminan mediante la operación de eliminación de inquilinos anterior o mediante la consola de DynamoDB o. API Cada vez que se elimine un registro arrendatario, se iniciará la limpieza del registro correspondiente. AWS CloudFormation  

  • Todas las AWS CloudFormation pilas basadas en inquilinos se limpian en la consola (en caso de que falle la lógica de limpieza del activador de DynamoDB). AWS CloudFormation

Una vez finalizadas las pruebas, se AWS CDK pueden utilizar para destruir todas las pilas y los recursos relacionados ejecutando el siguiente comando.

cdk destroy --all;

Si ha creado un AWS perfil para las credenciales, utilícelo.

Confirme la solicitud de eliminación de la pila para eliminarla.

AWSadministrador, AWS DevOps

Limpia Amazon CloudWatch Logs.

El proceso de eliminación de la pila no limpiará CloudWatch los registros (grupos de registros y registros) generados por la pila. Limpie los CloudWatch recursos manualmente mediante la CloudWatch consola o elAPI.

Desarrollador de aplicaciones AWS DevOps, AWS administrador

Recursos relacionados

Información adicional

Conjunto de tecnologías de plano de control

El CDK código escrito en. NETse utiliza para aprovisionar la infraestructura del plano de control, que consta de los siguientes recursos:

  1. APIPuerta de enlace

    Sirve como punto de REST API entrada para la pila de planos de control.

  2. Función de Lambda de incorporación de inquilinos

    APIGateway inicia esta función Lambda mediante el método m.

    Una API solicitud de POST método hace que (tenant name,tenant description) se inserte en la tabla de Tenant Onboarding DynamoDB.

    En este ejemplo de código, el nombre del inquilino también se usa como parte del nombre de la pila de inquilinos y de los nombres de los recursos de esa pila. Esto es para facilitar la identificación de estos recursos. El nombre de este inquilino debe ser único en la configuración para evitar conflictos o errores. La configuración detallada de la validación de entradas se explica en la documentación de IAMfunciones y en la sección de limitaciones.

    El proceso de persistencia en la tabla de DynamoDB solo tendrá éxito si el nombre del inquilino no se utiliza en ningún otro registro de la tabla.

    En este caso, el nombre del inquilino es la clave de partición de esta tabla, ya que solo la clave de partición se puede usar como expresión de condición PutItem.

    Si el nombre del inquilino nunca se registró antes, el registro se guardará correctamente en la tabla.

    Sin embargo, si un registro existente de la tabla ya utiliza el nombre del inquilino, la operación fallará e iniciará una excepción de DynamoDB ConditionalCheckFailedException. La excepción se utilizará para devolver un mensaje de error (HTTP BadRequest) que indique que el nombre del inquilino ya existe.

    Una API solicitud de DELETE método eliminará el registro del nombre de un inquilino específico de la tabla Tenant Onboardin g.

    La eliminación del registro de DynamoDB en este ejemplo se realizará correctamente aunque el registro no exista.

    Si el registro de destino existe y se elimina, se creará un registro de transmisión de DynamoDB. De lo contrario, no se creará ningún registro posterior.

  3. Incorporación de DynamoDB por parte del inquilino, con Amazon DynamoDB Streams habilitado

    Esto registra la información de los metadatos del inquilino y cualquier registro que se guarde o elimine enviará un flujo descendente a la función de Lambda Tenant Infrastructure

  4. Función de Lambda de infraestructura inquilina

    Esta función de Lambda la inicia el registro de flujo de DynamoDB del paso anterior. Si el registro es para un INSERT evento, se invoca AWS CloudFormation para crear una nueva infraestructura de inquilinos con la CloudFormation plantilla que está almacenada en un bucket de S3. Si el registro es para REMOVE, se inicia la eliminación de una pila existente en función del campo del registro de transmisión Tenant Name.

  5. S3 bucket

    Esto sirve para almacenar la CloudFormation plantilla.

  6. IAMfunciones para cada función de Lambda y una función de servicio para CloudFormation

    Cada función de Lambda tiene su IAM función única con permisos de mínimo privilegio para realizar su tarea. Por ejemplo, la función de Lambda Tenant On-boarding tiene acceso de lectura y escritura a DynamoDB y la función de Lambda Tenant Infrastructure solo puede leer el flujo de DynamoDB.

    Se crea un rol de CloudFormation servicio personalizado para el aprovisionamiento de la pila de inquilinos. Esta función de servicio contiene permisos adicionales para el aprovisionamiento de CloudFormation pilas (por ejemplo, la AWS KMS clave). Esto divide las funciones entre Lambda y CloudFormation evita todos los permisos en una sola función (función de Infraestructura Lambda).

    Los permisos que permiten realizar acciones poderosas (como crear y eliminar CloudFormation pilas) están bloqueados y solo se permiten en los recursos que comienzan con. tenantcluster- La excepción se AWS KMS debe a su convención de nomenclatura de recursos. El nombre del arrendatario introducido se API añadirá antes de otras comprobaciones de validación (alfanuméricas, solo con guiones y limitadas a menos de 30 caracteres para que quepan en la mayoría AWS de los nombres de los recursos). tenantcluster- Esto garantiza que el nombre del inquilino no provoque una interrupción accidental de los recursos o las pilas de la infraestructura principal.

Pila de tecnología para inquilinos

La CloudFormation plantilla se almacena en el depósito de S3. La plantilla proporciona la AWS KMS clave específica del inquilino, una CloudWatch alarma, un SNS tema, una SQS cola y una política. SQS

Amazon SNS y Amazon SQS utilizan la AWS KMS clave para cifrar los datos de sus mensajes. Las prácticas de seguridad para AwsSolutions AwsSolutions(SNS2y) SQS2 recomiendan que configure Amazon SNS y Amazon SQS con cifrado. Sin embargo, CloudWatch las alarmas no funcionan con Amazon SNS cuando se utiliza una clave AWS gestionada, por lo que debes utilizar una clave gestionada por el cliente en este caso. Para obtener más información, consulte el Centro de AWS conocimiento.

La SQS política se usa en la SQS cola de Amazon para permitir que el SNS tema creado entregue el mensaje a la cola. Sin la SQS política, se denegará el acceso. Para obtener más información, consulta la SNSdocumentación de Amazon.