Pular para o conteúdo

FastAPI para DynamoDB

O gerador connection conecta um FastAPI a um projeto Python DynamoDB, configurando o desenvolvimento local para que ambos iniciem juntos automaticamente.

Antes de usar este gerador, certifique-se de ter:

  1. Um projeto FastAPI (gerado com py#api --framework=fastapi), consulte o guia py#api
  2. Um projeto py#dynamodb
Terminal window
pnpm nx g @aws/nx-plugin:connection
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Selecione seu projeto FastAPI como origem e seu projeto DynamoDB como destino.

ParâmetroTipoPadrãoDescrição
sourceProject Obrigatóriostring-O projeto de origem
targetProject Obrigatóriostring-O projeto de destino para conectar
sourceComponent string-O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.
targetComponent string-O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.
preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

O gerador atualiza o project.json do FastAPI para adicionar uma dependência de seu target dev ao target dev do projeto DynamoDB, e adiciona o pacote DynamoDB como uma dependência do workspace. Nenhum arquivo de código-fonte é modificado.

Importe classes de entidade do pacote DynamoDB e use-as dentro de seus manipuladores de rota:

packages/my_api/my_api/api.py
from my_scope.my_table.entities.example import ExampleModel
@app.get("/examples")
def list_examples():
return list(ExampleModel.scan())

Para permitir que funções Lambda acessem a tabela DynamoDB, conceda as permissões necessárias em sua infraestrutura.

Chame grantReadWriteData no construto da tabela. Isso concede tanto as permissões do DynamoDB quanto do KMS exigidas pela função de execução do Lambda:

packages/infra/src/stacks/application-stack.ts
import { MyTable } from '@my-scope/common-constructs';
const table = new MyTable(this, 'Table');
const api = new Api(this, 'Api', {
integrations: Api.defaultIntegrations(this).build(),
});
Object.entries(api.integrations).forEach(([, integration]) => {
table.grantReadWriteData(integration.handler);
});

O gerador connection configura o target dev do seu projeto para depender do target dev do projeto DynamoDB. O DynamoDB Local será iniciado automaticamente junto com seu projeto ao executar dev.

A variável de ambiente LOCAL_DEV=true é definida automaticamente, então is_local() retorna True e suas entidades PynamoDB se conectam à instância local do DynamoDB em vez da AWS.