Integração de inquilinos na arquitetura SaaS para o modelo de silo usando C# e AWS CDK - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Integração de inquilinos na arquitetura SaaS para o modelo de silo usando C# e AWS CDK

Criado por Tabby Ward (AWS), Susmitha Reddy Gankidi () e Vijai Anand Ramalingam (AWS) AWS

Repositório de códigos: Tennat Onboarding Silo

Ambiente: PoC ou piloto

Tecnologias: Modernização; DevOps

Workload: código aberto

AWSserviços: AWS CloudFormation; Amazon DynamoDB; Amazon DynamoDB Streams; Lambda; Amazon Gateway AWS API

Resumo

Os aplicativos de software como serviço (SaaS) podem ser criados com uma variedade de modelos arquitetônicos diferentes. O modelo de silo se refere a uma arquitetura em que os locatários recebem recursos dedicados.

Os aplicativos SaaS dependem de um modelo simples para introduzir novos locatários em seu ambiente. Isso geralmente requer a orquestração de vários componentes para provisionar e configurar com êxito todos os elementos necessários para criar um novo locatário. Esse processo, na arquitetura SaaS, é chamado de integração de locatários. A integração deve ser totalmente automatizada para cada ambiente SaaS, utilizando a infraestrutura como código em seu processo de integração.

Esse padrão orienta você por meio de um exemplo de criação de um inquilino e provisionamento de uma infraestrutura básica para o locatário na Amazon Web Services (). AWS O padrão usa C# e o AWS Cloud Development Kit (AWSCDK).

Como esse padrão cria um alarme de cobrança, recomendamos implantar a pilha na região Leste dos EUA (Norte da Virgínia) ou us-east-1. AWS Para obter mais informações, consulte a AWSdocumentação.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • AWSCDKusa AWS CloudFormation, portanto, os AWS CDK aplicativos estão sujeitos às cotas CloudFormation de serviço. Para obter mais informações, consulte AWS CloudFormation cotas

  • A CloudFormation pilha de inquilinos é criada com uma função CloudFormation de serviço infra-cloudformation-role com caracteres curinga nas ações (sns* esqs*), mas com recursos restritos ao prefixo. tenant-cluster Para um caso de uso de produção, avalie essa configuração e forneça somente o acesso necessário a esse perfil de serviço. A função InfrastructureProvision Lambda também usa um caractere curinga (cloudformation*) para provisionar a CloudFormation pilha, mas com recursos restritos ao prefixo. tenant-cluster

  • Este exemplo de código docker usa --platform=linux/amd64 para forçar imagens baseadas em linux/amd64. Isso é para garantir que os artefatos finais da imagem sejam adequados para o Lambda que, por padrão, usa a arquitetura x86-64. Se você precisar alterar a arquitetura Lambda de destino, certifique-se de alterar os Dockerfiles e os códigos. AWS CDK Para obter mais informações, consulte a postagem do blog Migrando funções AWS Lambda para processadores Graviton2 baseados em AWS ARM.

  • O processo de exclusão da pilha não limpará CloudWatch os registros (grupos de registros e registros) gerados pela pilha. Você deve limpar manualmente os registros por meio do console AWS de gerenciamento da Amazon CloudWatch ou por meio doAPI.

Esse padrão é configurado como exemplo. Para uso em produção, avalie as seguintes configurações e faça alterações com base nos requisitos da sua empresa:

  • O bucket do AWSSimple Storage Service (Amazon S3) neste exemplo não tem versionamento habilitado para simplificar. Avalie e atualize a configuração conforme necessário.

  • Este exemplo configura REST API endpoints do Amazon API Gateway sem autenticação, autorização ou limitação para simplificar. Para uso em produção, recomendamos integrar o sistema à infraestrutura de segurança da empresa. Avalie essa configuração e adicione as configurações de segurança exigidas conforme necessário.

  • Neste exemplo de infraestrutura de locatários, o Amazon Simple Notification Service (AmazonSNS) e o Amazon Simple Queue Service (AmazonSQS) têm apenas configurações mínimas. O AWSKey Management Service (AWSKMS) de cada locatário abre para a Amazon CloudWatch e SNS os serviços da Amazon na conta para consumo com base na política de AWS KMS chaves. A configuração é apenas um exemplo de espaço reservado. Ajuste as configurações conforme necessário com base no seu caso de uso de negócios.

  • Toda a configuração, que inclui, mas não está limitada ao uso de API endpoints e inquilinos de back-end AWS CloudFormation, abrange apenas o caso básico do Happy Path. Avalie e atualize a configuração com a lógica de repetição necessária, a lógica adicional de tratamento de erros e a lógica de segurança com base nas necessidades de sua empresa.

  • O código de exemplo é testado com up-to-date cdk-nag para verificar as políticas no momento da redação deste artigo. Novas políticas podem ser aplicadas no futuro. Essas novas políticas podem exigir que você modifique manualmente a pilha com base nas recomendações antes que a pilha possa ser implantada. Revise o código existente para garantir que ele esteja alinhado aos requisitos da sua empresa.

  • O código depende do AWS CDK para gerar um sufixo aleatório em vez de depender de nomes físicos atribuídos estáticos para a maioria dos recursos criados. Essa configuração é para garantir que esses recursos sejam exclusivos e não entrem em conflito com outras pilhas. Para obter mais informações, consulte a AWSCDKdocumentação. Ajuste isso com base nos requisitos da sua empresa.

  • Este exemplo de pacotes de código. NETO Lambda se insere em imagens baseadas em Docker e é executado com o tempo de execução da imagem de contêiner fornecido pelo Lambda. O runtime da imagem do contêiner tem vantagens para mecanismos padrão de transferência e armazenamento (registros de contêiner) e ambientes de teste locais mais precisos (por meio da imagem do contêiner). Você pode mudar o projeto para usar o Lambda fornecido. NETtempos de execução para reduzir o tempo de criação das imagens do Docker, mas você precisará configurar mecanismos de transferência e armazenamento e garantir que a configuração local corresponda à configuração do Lambda. Ajuste o código de acordo com os requisitos comerciais dos usuários.

Versões do produto

  • AWSCDKversão 2.45.0 ou posterior

  • Visual Studio 2022

Arquitetura

Pilha de tecnologia

  • Amazon API Gateway

  • AWS CloudFormation

  • Amazon CloudWatch

  • Amazon DynamoDB

  • AWSIdentity and Access Management (IAM)

  • AWS KMS

  • AWSLambda

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

Arquitetura

O diagrama a seguir mostra o fluxo de criação da pilha de locatários. Para obter mais informações sobre o ambiente de gerenciamento e as pilhas de tecnologia do locatário, consulte a seção Informações adicionais.

Fluxo de trabalho para criar um inquilino e provisionar uma infraestrutura básica para o inquilino em. AWS

Fluxo de criação da pilha de locatários

  1. O usuário envia uma POST API solicitação com a nova carga útil do inquilino (nome do inquilino, descrição do inquilino) JSON para um servidor hospedado REST API pelo Amazon Gateway. API O API Gateway processa a solicitação e a encaminha para a função de back-end do Lambda Tenant Onboarding. Neste exemplo, não há autorização nem autenticação. Em uma configuração de produção, isso API deve ser integrado ao sistema de segurança da infraestrutura SaaS.

  2. A função de integração do locatário verifica a solicitação. Em seguida, ele tenta armazenar o registro do inquilino, que inclui o nome do inquilino, o identificador único universal gerado pelo inquilino (UUID) e a descrição do inquilino, na tabela de integração de inquilinos do Amazon DynamoDB. 

  3. Depois que o DynamoDB armazena o registro, um stream do DynamoDB inicia a função downstream da Lambda Tenant Infrastructure.

  4. A função do Lambda Tenant Infrastructure atua com base no stream recebido do DynamoDB. Se o stream for para o INSERT evento, a função usa a NewImage seção do stream (registro de atualização mais recente, campo Nome do inquilino) para invocar CloudFormation a criação de uma nova infraestrutura de locatário usando o modelo armazenado no bucket do S3. O CloudFormation modelo exige o parâmetro Nome do inquilino. 

  5. AWS CloudFormation cria a infraestrutura do inquilino com base no CloudFormation modelo e nos parâmetros de entrada.

  6. Cada configuração de infraestrutura do inquilino tem um CloudWatch alarme, um alarme de cobrança e um evento de alarme.

  7. O evento de alarme se torna uma mensagem para um SNS tópico, que é criptografada pela AWS KMS chave do inquilino.

  8. O SNS tópico encaminha a mensagem de alarme recebida para a SQS fila, que é criptografada pela chave de criptografia AWS KMS for do locatário.

Outros sistemas podem ser integrados SQS à Amazon para realizar ações com base nas mensagens na fila. Neste exemplo, para manter o código genérico, as mensagens recebidas permanecem na fila e exigem exclusão manual.

Fluxo de exclusão da pilha de locatários

  1. O usuário envia uma DELETE API solicitação com a nova carga útil do inquilino (nome do inquilino, descrição do inquilino) JSON para o servidor hospedado REST API pelo Amazon API Gateway, que processará a solicitação e encaminhará para a função de integração do inquilino. Neste exemplo, não há autorização nem autenticação. Em uma configuração de produção, isso API será integrado ao sistema de segurança da infraestrutura SaaS.

  2. A função de integração do locatário verificará a solicitação e, em seguida, tentará excluir o registro do locatário (nome do locatário) da tabela de integração do locatário. 

  3. Depois que o DynamoDB exclui o registro com sucesso (o registro existe na tabela e é excluído), um stream do DynamoDB inicia a função downstream do Lambda Tenant Infrastructure.

  4. A função do Lambda Tenant Infrastructure atua com base no registro de stream recebido do DynamoDB. Se o stream for para o REMOVE evento, a função usa a OldImage seção do registro (informações do registro e campo Nome do inquilino, antes da última alteração, que é exclusão) para iniciar a exclusão de uma pilha existente com base nas informações desse registro.

  5. AWS CloudFormation exclui a pilha de inquilinos de destino de acordo com a entrada.

Ferramentas

AWSserviços

  • O Amazon API Gateway ajuda você a criar, publicar, manter, monitorar e proteger RESTHTTP, WebSocket APIs em qualquer escala.

  • AWSO Cloud Development Kit (AWSCDK) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura de AWS nuvem em código.

  • AWSCDKO Toolkit é um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu aplicativo AWS Cloud Development Kit (AWSCDK).

  • AWSA interface de linha de comando (AWSCLI) é uma ferramenta de código aberto que ajuda você a interagir com AWS serviços por meio de comandos em seu shell de linha de comando.

  • AWS CloudFormationajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas AWS as contas e regiões.

  • O Amazon DynamoDB é um serviço SQL sem banco de dados totalmente gerenciado que fornece desempenho rápido, previsível e escalável.

  • AWSO Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

  • AWSO Key Management Service (AWSKMS) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados.

  • AWSO Lambda é um serviço de computação que ajuda você a executar código sem precisar provisionar ou gerenciar servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

  • O Amazon Simple Notification Service (AmazonSNS) ajuda você a coordenar e gerenciar a troca de mensagens entre editores e clientes, incluindo servidores web e endereços de e-mail.

  • O Amazon Simple Queue Service (AmazonSQS) fornece uma fila hospedada segura, durável e disponível que ajuda você a integrar e desacoplar sistemas e componentes de software distribuídos.

  • AWSO Toolkit for Visual Studio é um plug-in para o ambiente de desenvolvimento integrado do Visual Studio IDE (). O Toolkit for Visual Studio oferece suporte ao desenvolvimento, depuração e implantação. NETaplicativos que usam AWS serviços.

Outras ferramentas

  • O Visual Studio inclui compiladores, ferramentas de conclusão de código, designers gráficos e outros recursos que oferecem suporte ao desenvolvimento de software. IDE

Código

O código desse padrão está no repositório de exemplos de integração de locatários no SaaS Architecture for Silo Model Example. APG

Épicos

TarefaDescriçãoHabilidades necessárias

Verifique a instalação do Node.js.

Para verificar se o Node.js está instalado em sua máquina local, execute o comando a seguir.

node --version
AWSadministrador, AWS DevOps

Instale o AWS CDK kit de ferramentas.

Para instalar o AWS CDK Toolkit em sua máquina local, execute o comando a seguir.

npm install -g aws-cdk

Se o npm não estiver instalado, você poderá instalá-lo no site Node.js.

AWSadministrador, AWS DevOps

Verifique a versão do AWS CDK kit de ferramentas.

Para verificar se a versão do AWS CDK Toolkit está instalada corretamente em sua máquina, execute o comando a seguir.  

cdk --version
AWSadministrador, AWS DevOps
TarefaDescriçãoHabilidades necessárias

Clonar o repositório.

Clone o repositório e navegue até a pasta \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example.

Abra a \src\TenantOnboardingInfra.sln solução no Visual Studio 2022. Abra o arquivo TenantOnboardingInfraStack.cs e revise o código.

Os seguintes recursos são criados como parte dessa pilha:

  • Tabela do DynamoDB

  • Bucket S3 (faça upload do CloudFormation modelo para o bucket S3.)

  • Função de execução do Lambda

  • Função do Lambda

  • APIGateway API

  • Fonte do evento para a função do Lambda

AWSadministrador, AWS DevOps

Revise o CloudFormation modelo.

Na \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template pastainfra.yaml, abra e revise o CloudFormation modelo. Esse modelo será hidratado com o nome do locatário recuperado da tabela de integração do locatário do DynamoDB.

O modelo fornece a infraestrutura específica do locatário. Neste exemplo, ele provisiona a AWS KMS chaveSNS, AmazonSQS, Amazon e o CloudWatch alarme.

Desenvolvedor de aplicativos, AWS DevOps

Analise a função de integração do locatário.

Abra Function.cs e revise o código da função de integração do inquilino, que é criada com o Projeto AWS Lambda do Visual Studio (. NETModelo Core- C#) com o. NETProjeto 6 (Imagem do contêiner).

Abra o Dockerfile arquivo e revise o código. Dockerfile é um arquivo de texto que consiste em instruções para criar a imagem do contêiner Lambda.

Observe que os seguintes NuGet pacotes foram adicionados como dependências ao TenantOnboardingFunction projeto:

  • Amazon.Lambda.APIGatewayEvents

  • AWSSDK.DynamoDBv2

  • Newtonsoft.Json

Desenvolvedor de aplicativos, AWS DevOps

Revise a InfraProvisioning função de inquilino.

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

Abra Function.cs e revise o código da função de provisionamento da infraestrutura do locatário, que é criada com o Projeto Lambda AWS do Visual Studio (. NETModelo Core- C#) com o. NETProjeto 6 (Imagem do contêiner).

Abra o Dockerfile arquivo e revise o código.

Observe que os seguintes NuGet pacotes foram adicionados como dependências ao InfraProvisioningFunction projeto:

  • Amazon.Lambda.DynamoDBEvents

  • AWSSDK.DynamoDBv2

  • AWSSDK.Cloudformation

Desenvolvedor de aplicativos, AWS DevOps
TarefaDescriçãoHabilidades necessárias

Crie a solução.

Para criar a solução, siga estas etapas:

  1. Abra a \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra.sln solução no Visual Studio 2022.  

  2. Abra o menu contextual (botão direito do mouse) da solução e escolha Criar solução.

Observação: Certifique-se de atualizar o pacote Amazon.CDK.Lib NuGet para a versão mais recente do projeto \tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra antes de criar a solução.

Desenvolvedor de aplicativos

Inicialize o AWS CDK ambiente.

Abra o prompt de comando do Windows e navegue até a pasta raiz do AWS CDK aplicativo em que o cdk.json arquivo está disponível (\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example). Execute o comando a seguir para inicializar.

cdk bootstrap

Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.

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

Liste as AWS CDK pilhas.

Para listar todas as pilhas a serem criadas como parte desse projeto, execute o comando a seguir.

cdk ls cdk ls --profile <profile name>

Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.

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

Analise quais AWS recursos serão criados.

Para revisar todos os AWS recursos que serão criados como parte desse projeto, execute o comando a seguir.

cdk diff

Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.

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

Implante todos os AWS recursos usando AWSCDK.

Para implantar todos os AWS recursos, execute o comando a seguir.

cdk deploy --all --require-approval never

Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.

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

Depois que a implantação for concluída, copie a seção API URL de saídas no prompt de comando, que é mostrada no exemplo a seguir.

Outputs: TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/
AWSadministrador, AWS DevOps
TarefaDescriçãoHabilidades necessárias

Criar um novo locatário.

Para criar o novo locatário, envie a seguinte solicitação curl.

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

Altere o espaço reservado <TenantOnboardingAPIEndpoint* from CDK Output> para o valor real de AWSCDK, conforme mostrado no exemplo a seguir.

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

O exemplo a seguir mostra a saída.

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

Verifique os detalhes do locatário recém-criado no DynamoDB.

Para verificar os detalhes do locatário recém-criado no DynamoDB, execute as etapas a seguir.

  1. Abra o AWS Management Console e navegue até o serviço Amazon DynamoDB.

  2. No painel de navegação à esquerda, escolha Explorar itens e escolha a tabela TenantOnboarding.

    Observação: o nome do inquilino será prefixado com. tenantcluster- Para obter mais informações, consulte a seção Informações adicionais.

  3. Verifique se um novo item foi criado com os detalhes do locatário.

Desenvolvedor de aplicativos, AWS administrador, AWS DevOps

Verifique a criação da pilha para o novo locatário.

Verifique se a nova pilha foi criada e provisionada com sucesso com a infraestrutura para o inquilino recém-criado, de acordo com o modelo. CloudFormation

  1. Abra o CloudFormation console.

  2. No painel de navegação à esquerda, selecione Pilhas e verifique se uma pilha com o nome do locatário foi criada com sucesso.

  3. Escolha a pilha de locatários recém-criada e depois a guia Recursos. Observe o recurso de alarme e o SQS recurso da Amazon.

  4. Abra um novo terminal com AWS as credenciais configuradas e aponte para a região correta. Para acionar um alarme de teste, digite o código a seguir, substituindo <alarm resource name> pelo nome do recurso de alarme anotado na etapa 3.

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

    O exemplo a seguir mostra o código com o nome do recurso de alarme.

    aws cloudwatch set-alarm-state --alarm-name tenantcluster-tenant123-alarm --state-value ALARM --state-reason 'Test setup'
  5. Abra o console e navegue até o SQS console da Amazon. Escolha o nome do SQS recurso da Amazon identificado na etapa 3. Siga as instruções da AWS documentação para receber e excluir a mensagem de teste do alarme que foi acionado na etapa 4.

Desenvolvedor de aplicativos, AWS administrador, AWS DevOps

Exclua a pilha de locatários.

Para excluir a pilha de locatários, envie a seguinte solicitação curl.

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

Altere o espaço reservado <TenantOnboardingAPIEndpoint* from CDK Output> para o valor real de AWS CDK e altere <Tenant Name from previous step> para o valor real da etapa anterior de criação do inquilino, conforme mostrado no exemplo a seguir.

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

O exemplo a seguir mostra a saída.

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

Verifique a exclusão da pilha para o locatário existente.

Para verificar se a pilha de locatários existente foi excluída, execute as etapas a seguir:

  1. Abra o console e navegue até o CloudFormation console.

  2. No painel de navegação à esquerda, verifique se a pilha existente com o nome do inquilino não está mais no console (se o CloudFormation console estiver configurado para mostrar somente pilhas ativas) ou se está em processo de exclusão. Se a pilha não estiver mais no CloudFormation console, use a lista suspensa para alterar a configuração do console de Ativo para Excluído para ver a pilha excluída e verificar se a pilha foi excluída com sucesso.

Desenvolvedor de aplicativos, AWS administrador, AWS DevOps
TarefaDescriçãoHabilidades necessárias

Destruir o ambiente.

Antes da limpeza da pilha, certifique-se do seguinte:

  • Todos os registros no DynamoDB são removidos por meio da operação anterior de exclusão de locatários ou por meio do console do DynamoDB ou. API Cada exclusão do registro do inquilino iniciará a limpeza de sua contraparte. AWS CloudFormation  

  • Todas as AWS CloudFormation pilhas baseadas em locatários são limpas (caso a lógica de limpeza do gatilho do DynamoDB falhe) no console. AWS CloudFormation

Após a conclusão do teste, AWS CDK pode ser usado para destruir todas as pilhas e recursos relacionados executando o comando a seguir.

cdk destroy --all;

Se você criou um AWS perfil para as credenciais, use o perfil.

Confirme a solicitação de exclusão da pilha para excluir a pilha.

AWSadministrador, AWS DevOps

Limpe os Amazon CloudWatch Logs.

O processo de exclusão da pilha não limpará CloudWatch os registros (grupos de registros e registros) que foram gerados pela pilha. Limpe manualmente os CloudWatch recursos usando o CloudWatch console ou API o.

Desenvolvedor de aplicativos AWS DevOps, AWS administrador

Recursos relacionados

Mais informações

Pilha de tecnologias de ambiente de gerenciamento

O CDK código escrito em. NETé usado para provisionar a infraestrutura do plano de controle, que consiste nos seguintes recursos:

  1. APIGateway

    Serve como ponto de REST API entrada para a pilha do plano de controle.

  2. Função do Lambda de integração do locatário

    Essa função Lambda é iniciada pelo API Gateway usando o método m.

    Uma API solicitação de POST método resulta na inserção (tenant name,tenant description) na tabela do Tenant Onboarding DynamoDB.

    Neste exemplo de código, o nome do locatário também é usado como parte do nome da pilha do locatário e dos nomes dos recursos dentro dessa pilha. Isso é para facilitar a identificação desses recursos. Esse nome de locatário deve ser exclusivo em toda a configuração para evitar conflitos ou erros. A configuração detalhada da validação de entrada é explicada na documentação das IAMfunções e na seção Limitações.

    O processo de persistência na tabela do DynamoDB só será bem-sucedido se o nome do locatário não for usado em nenhum outro registro na tabela.

    O nome do locatário nesse caso é a chave de partição dessa tabela, pois somente a chave de partição pode ser usada como uma expressão da condição PutItem.

    Se o nome do locatário nunca tiver sido registrado antes, o registro será salvo na tabela com sucesso.

    No entanto, se o nome do locatário já for usado por um registro existente na tabela, a operação falhará e iniciará uma exceção do DynamoDB. ConditionalCheckFailedException A exceção será usada para retornar uma mensagem de falha (HTTP BadRequest) indicando que o nome do locatário já existe.

    Uma API solicitação de DELETE método removerá o registro de um nome de inquilino específico da tabela Tenant Onboardin g.

    A exclusão do registro do DynamoDB neste exemplo será bem-sucedida mesmo que o registro não exista.

    Se o registro de destino existir e for excluído, ele criará um registro de stream do DynamoDB. Caso contrário, nenhum registro downstream será criado.

  3. Integração de locatários no DynamoDB, com o Amazon DynamoDB Streams habilitado

    Isso registra as informações de metadados do locatário, e qualquer registro salvo ou excluído enviará um stream downstream para a Tenant Infrastructure função do Lambda. 

  4. A Função do Lambda da infraestrutura do locatário

    Essa função do Lambda é iniciada pelo registro de stream do DynamoDB da etapa anterior. Se o registro for de um INSERT evento, ele será invocado AWS CloudFormation para criar uma nova infraestrutura de locatário com o CloudFormation modelo armazenado em um bucket do S3. Se o registro for para REMOVE, ele iniciará a exclusão de uma pilha existente com base no campo do registro do stream Tenant Name.

  5. S3 bucket

    Isso é para armazenar o CloudFormation modelo.

  6. IAMfunções para cada função do Lambda e uma função de serviço para CloudFormation

    Cada função do Lambda tem sua IAM função exclusiva com permissões de privilégio mínimo para realizar sua tarefa. Por exemplo, a função do Tenant On-boarding Lambda tem acesso de leitura/gravação ao DynamoDB, e a função do Lambda Tenant Infrastructure só pode ler o stream do DynamoDB.

    Uma função CloudFormation de serviço personalizada é criada para o provisionamento da pilha de inquilinos. Essa função de serviço contém permissões adicionais para provisionamento de CloudFormation pilhas (por exemplo, a AWS KMS chave). Isso divide as funções entre o Lambda CloudFormation e evita todas as permissões em uma única função (função do Lambda de infraestrutura).

    As permissões que permitem ações poderosas (como criar e excluir CloudFormation pilhas) são bloqueadas e permitidas somente em recursos que começam com. tenantcluster- A exceção é por causa AWS KMS de sua convenção de nomenclatura de recursos. O nome do inquilino ingerido do API será anexado tenantcluster- junto com outras verificações de validação (alfanumérico somente com hífen e limitado a menos de 30 caracteres para caber na maioria dos nomes de recursos). AWS Isso garante que o nome do locatário não resulte acidentalmente na interrupção das pilhas ou dos recursos da infraestrutura principal.

Pilha de tecnologia para locatários

Um CloudFormation modelo é armazenado no bucket do S3. O modelo fornece a AWS KMS chave específica do inquilino, um CloudWatch alarme, um SNS tópico, uma SQS fila e uma política. SQS

A AWS KMS chave é usada para criptografia de dados pela Amazon SNS e pela Amazon SQS para suas mensagens. As práticas de segurança para AwsSolutions- SNS2 e AwsSolutions - SQS2 recomendam que você configure a Amazon SNS e a Amazon SQS com criptografia. No entanto, CloudWatch os alarmes não funcionam com a Amazon SNS ao usar uma chave AWS gerenciada, então você deve usar uma chave gerenciada pelo cliente nesse caso. Para obter mais informações, consulte o Centro de AWS Conhecimento.

A SQS política é usada na SQS fila da Amazon para permitir que o SNS tópico criado entregue a mensagem à fila. Sem a SQS política, o acesso será negado. Para obter mais informações, consulte a SNSdocumentação da Amazon.