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

Execute este gerador@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
Monte seu comando5

Obrigatório

Obrigatório

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

Opções do gerador5 opções
sourceProjectObrigatóriostring

O projeto de origem

targetProjectObrigatóriostring

O projeto de destino para conectar

sourceComponentstring

O componente de origem a partir do qual conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.

targetComponentstring

O componente de destino ao qual conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.

preferInstallDependenciesbooleanPadrão: true

Se 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.