Usar Funções nas Aplicações Fabric

As funções são funções TypeScript que correm no servidor dentro da tua aplicação Fabric. Use funções para lógica que não possam ser executadas no navegador, como trabalhar com segredos, aceder a dados privilegiados e chamar serviços a jusante com a identidade da aplicação.

Cada função é registada com um nome e exposta como um endpoint HTTP chamável. O seu frontend React chama a função através do cliente Rayfin tipado, por isso não precisa de implementar pedidos, roteamento ou gestão de tokens.

Note

Os comandos neste artigo utilizam uma versão de pré-visualização da CLI Rayfin.

Quando usar uma função

Usar uma função Rayfin para:

  • Chame uma API externa com um token de aplicação. Exemplos incluem Azure AI Foundry, Azure DevOps, Fabric, Armazenamento do Azure e Azure Key Vault.
  • Leia ou escreva a base de dados da aplicação com segurança ao nível das linhas imposta pelo servidor.
  • Mantenha chaves de API, nomes de implementação de modelos e outros segredos fora do código do cliente.
  • Execute a orquestração, como chamadas de fan-out, agregação ou instruções a IA, junto dos dados.

Pré-requisitos

Antes de começar, instale ou crie os seguintes recursos:

  • Node.js 20 ou mais tarde e npm.
  • Um andaime de aplicação Fabric criado com a CLI Rayfin.
  • Funções do Azure Core Tools, que o anfitrião local de funções utiliza para depuração.

Instalar o Funções do Azure Core Tools versão 4:

npm install --global azure-functions-core-tools@4

Crie uma aplicação com funções

Crie a estrutura base de uma aplicação e inicialize o respetivo projeto de funções:

npm create @microsoft/rayfin@latest

cd my-app

npx rayfin functions init

O rayfin functions init comando adiciona o projeto de funções, a sua configuração TypeScript e um ficheiro de função inicial à aplicação existente.

Constrói a aplicação com o GitHub Copilot

O andaime inclui as instruções do GitHub Copilot e as competências necessárias para trabalhar com o projeto. Abre o projeto no Visual Studio Code e descreve a aplicação que queres construir no GitHub Copilot Chat.

Por exemplo, use o seguinte prompt para construir um assistente de revisão de pull requests por IA:

Build an app that helps business analysts track sales performance across
regions. Show key metrics, let analysts ask questions about trends, and
use Functions to securely retrieve data from our sales API with application
authentication.

O GitHub Copilot pode gerar e atualizar os ficheiros e componentes necessários. Também pode pedir ao agente para executar a aplicação, depurar funções localmente e implementar a aplicação.

Compreender o layout do projeto

O comando de inicialização das funções atualiza rayfin/rayfin.yml e cria rayfin/functions. Uma aplicação típica com funções tem a seguinte estrutura:

my-app/
├── rayfin/
│   ├── rayfin.yml
│   ├── data/
│   │   ├── TripPlan.ts
│   │   └── schema.ts
│   └── functions/
│       ├── package.json
│       ├── tsconfig.json
│       └── src/
│           ├── function_app.ts
│           └── types.ts
└── src/
    └── services/

Os ficheiros servem os seguintes propósitos:

Path Purpose
rayfin/rayfin.yml Configura autenticação, dados, funções e serviços de alojamento estático.
rayfin/data/ Contém os modelos de dados e exportações de esquemas da aplicação.
rayfin/functions/package.json Define dependências e compila scripts para o projeto de funções.
rayfin/functions/tsconfig.json Configura a compilação de TypeScript das funções.
rayfin/functions/src/function_app.ts Contém as suas implementações de funções.
rayfin/functions/src/types.ts Contém os tipos AppFunctionsSchema gerados. Não edites este ficheiro manualmente.
src/ Contém o frontend React e quaisquer tipos de domínio ou wrappers partilhados.

Quando ativas funções, rayfin/rayfin.yml inclui o serviço de funções:

services:
  functions:
    enabled: true
    auth:
      type: application
    buildCommand: npm run build

Autenticação de aplicativos

As Funções Ativadas requerem autenticação explícita da aplicação em rayfin/rayfin.yml:

services:
  functions:
    enabled: true
    auth:
      type: application
    buildCommand: npm run build

Novo conjunto de estruturas de Functions auth.type: application.

Funções desativadas podem omitir auth. No entanto, se fornecer auth, deve incluir:

auth:
  type: application

O npx rayfin up completo e o fluxo normal npx rayfin dev validam esta definição antes de aplicar definições de projeto ao backend Fabric ou Docker.

Execute uma npx rayfin up completa para aplicar o modo de autenticação YAML a uma aplicação remota existente.

Caminhos de autenticação usados pelas Funções implementadas

As Funções Implementadas utilizam dois caminhos de autenticação separados:

Caminho de acesso Credential Identidade e permissões
Conexões externas através de ctx.Tokens.* Token de recurso fornecido pela plataforma Identidade da aplicação e suas permissões no recurso externo
Rayfin DB através de ctx.getDataClient() token Rayfin de Invocation Identidade do chamador e permissões na base de dados Rayfin

Para as aplicações atuais do Fabric, a identidade da aplicação é a proprietária do item BaaS.

As ligações externas utilizam, portanto, as permissões do proprietário do item, e não as permissões do utilizador da aplicação que invoca a função. Conceda à identidade da aplicação as permissões exigidas por cada recurso externo e API chamada pelo código de Funções.

Declarar um público ou implementar funções não concede à identidade da aplicação permissões sobre um recurso externo.

O login da aplicação e a autorização para invocar uma função são separados do acesso da identidade da aplicação a recursos externos.

O acesso à base de dados Rayfin utiliza sempre o token Rayfin e preserva a identidade do chamador e as permissões da base de dados. A definição services.functions.auth.type: application não altera o acesso da base de dados Rayfin à identidade da aplicação.

Para declarações de audiência, tokens de recursos, permissões e comportamento de desenvolvimento local, veja Ligar Funções a recursos externos.

Executar a aplicação localmente

Na pasta raiz da aplicação, inicie sessão:

cd my-app
npx rayfin login

Inicie o frontend e o anfitrião local das funções:

npm run dev

Num projeto com funções habilitadas, npm run dev mapeia para rayfin dev. Este comando aplica o esquema, inicia o host de funções locais e inicia o servidor de desenvolvimento Vite. Abra o URL local impresso no terminal e mantenha o terminal a funcionar enquanto desenvolve e depura a aplicação.

Para iniciar apenas o host de funções, por exemplo, quando executa o frontend separadamente, use o seguinte comando:

cd my-app
npx rayfin dev 

Implementar no Fabric

Implemente os dados, o site estático e as funções da aplicação:


npx rayfin up --workspace <workspace-name>

Substitua <WORKSPACE> pelo nome do espaço de trabalho Fabric alvo.

Adicionar funções a uma aplicação existente

A partir da raiz de uma aplicação Fabric existente, ativa a funcionalidade e inicializa o projeto de funções uma vez:


npx rayfin functions init

Após a inicialização, adicione implementações de funções a rayfin/functions/src/function_app.ts.

Limitações

  • Propriedade da função: Apenas o proprietário do item de funções de dados do utilizador pode modificar e publicar o código das funções.
  • Tempo de recarga para publicação: Espere pelo menos dois minutos após publicar antes de publicar novamente. Este período de espera aplica-se quando publica a partir do portal no navegador do Functions, da extensão do Visual Studio Code para as Funções de Dados do Utilizador, da ação de importação do Git ou dos pipelines de implementação.
  • Tamanho do pacote de implementação: O ficheiro Functions ZIP não pode exceder 30 MB.
  • Tamanho do payload do pedido: O serviço User Data Functions estabelece um máximo de 4 MB para todos os parâmetros do pedido em conjunto. Espera-se que este limite se aplique às Funções Rayfin, mas ainda não foi verificado.
  • Tempo de execução: Uma função pode funcionar durante até 240 segundos.
  • Retenção do registo de invocações: Os registos históricos de invocação são mantidos por padrão durante 30 dias.
  • Identidade da aplicação: A identidade da aplicação é atualmente o proprietário do item BaaS.

Para requisitos regionais de disponibilidade e mais detalhes sobre as limitações das funções de dados do utilizador, consulte Detalhes do serviço e limitações das funções de dados do utilizador do Fabric.