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 | 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
Uma AWSconta
ativa. Um diretor do AWS Identity and Access Management (IAM) com IAM acesso suficiente para criar AWS recursos para esse padrão. Para obter mais informações, consulte Funções do IAM.
Instale a Amazon Command Line Interface (AWSCLI) e configure AWS CLI para realizar a AWS CDK implantação.
Visual Studio 2022
baixado e instalado ou Visual Studio Code baixado e instalado. AWSConfiguração do Toolkit for Visual Studio.
. NETCore 3.1 ou posterior
(necessário para AWS CDK aplicativos C#) Amazon.Lambda.Tools
instalado.
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çãoInfrastructureProvision
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 emlinux/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](images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)
Fluxo de criação da pilha de locatários
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.
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.
Depois que o DynamoDB armazena o registro, um stream do DynamoDB inicia a função downstream da Lambda Tenant Infrastructure.
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.
AWS CloudFormation cria a infraestrutura do inquilino com base no CloudFormation modelo e nos parâmetros de entrada.
Cada configuração de infraestrutura do inquilino tem um CloudWatch alarme, um alarme de cobrança e um evento de alarme.
O evento de alarme se torna uma mensagem para um SNS tópico, que é criptografada pela AWS KMS chave do inquilino.
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
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.
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.
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.
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.
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
Épicos
Tarefa | Descrição | Habilidades 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.
| 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.
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.
| AWSadministrador, AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Clonar o repositório. | Clone o repositório Abra a Os seguintes recursos são criados como parte dessa pilha:
| AWSadministrador, AWS DevOps |
Revise o CloudFormation modelo. | Na 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 Abra o Observe que os seguintes NuGet pacotes foram adicionados como dependências ao
| Desenvolvedor de aplicativos, AWS DevOps |
Revise a InfraProvisioning função de inquilino. | Acesse Abra Abra o Observe que os seguintes NuGet pacotes foram adicionados como dependências ao
| Desenvolvedor de aplicativos, AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie a solução. | Para criar a solução, siga estas etapas:
Observação: Certifique-se de atualizar o pacote | 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
Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.
| 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.
Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.
| 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.
Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.
| AWSadministrador, AWS DevOps |
Implante todos os AWS recursos usando AWSCDK. | Para implantar todos os AWS recursos, execute o comando a seguir.
Se você criou um AWS perfil para as credenciais, use o comando com seu perfil.
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.
| AWSadministrador, AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Criar um novo locatário. | Para criar o novo locatário, envie a seguinte solicitação curl.
Altere o espaço reservado
O exemplo a seguir mostra a saída.
| 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.
| 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
| 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.
Altere o espaço reservado
O exemplo a seguir mostra a saída.
| 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:
| Desenvolvedor de aplicativos, AWS administrador, AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Destruir o ambiente. | Antes da limpeza da pilha, certifique-se do seguinte:
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.
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:
APIGateway
Serve como ponto de REST API entrada para a pilha do plano de controle.
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 doTenant 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 tabelaTenant 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.
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.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 paraREMOVE
, ele iniciará a exclusão de uma pilha existente com base no campo do registro do streamTenant Name
.S3 bucket
Isso é para armazenar o CloudFormation modelo.
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 LambdaTenant 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á anexadotenantcluster-
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
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.