Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure Functions permite conectar Azure serviços e outros recursos a funções sem precisar escrever seu próprio código de integração. Essas associações, que representam a entrada e a saída, são declaradas na definição de função. Dados de associações são fornecidos à função como parâmetros. Um gatilho é um tipo especial de associação de entrada. Embora uma função tenha apenas um gatilho, ela pode ter várias associações de entrada e de saída. Para saber mais, consulte Azure Functions conceitos de gatilhos e associações.
Este artigo mostra como usar Visual Studio Code para conectar Azure Cosmos DB à função criada no artigo de início rápido anterior. A associação de saída que você adiciona a essa função grava dados da solicitação HTTP em um documento JSON armazenado em um contêiner Azure Cosmos DB.
Antes de começar, você deve concluir o quickstart: Criar uma função C# em Azure usando Visual Studio Code. Se você já tiver limpado recursos no final desse artigo, siga as etapas novamente para recriar o aplicativo de funções e os recursos relacionados no Azure.
Antes de começar, você deve concluir o quickstart: Criar uma função JavaScript em Azure usando Visual Studio Code. Se você já tiver limpado recursos no final desse artigo, siga as etapas novamente para recriar o aplicativo de funções e os recursos relacionados no Azure.
Observação
Este artigo oferece suporte a Node.js v4 para funções.
Antes de começar, você deve concluir o quickstart: Criar uma função python em Azure usando Visual Studio Code. Se você já tiver limpado recursos no final desse artigo, siga as etapas novamente para recriar o aplicativo de funções e os recursos relacionados no Azure.
Configurar seu ambiente
Antes de começar, instale a extensão Azure Databases para Visual Studio Code.
Criar sua conta do Azure Cosmos DB
Agora, você cria uma conta do Azure Cosmos DB como um tipo de conta serverless. Esse modo baseado em consumo torna Azure Cosmos DB uma opção forte para cargas de trabalho sem servidor.
No Visual Studio Code, selecione View>Command Palette..., e então, na paleta de comandos, busque por
Azure Databases: Create Server...Forneça as seguintes informações nos prompts:
Rápido Seleção Selecione um servidor de banco de dados Azure Escolha Core (NoSQL) para criar um banco de dados de documento que você pode consultar usando uma sintaxe SQL ou um Copilot de Consulta (Preview) convertendo prompts de linguagem natural em consultas. Saiba mais sobre o Azure Cosmos DB. Nome da Conta Insira um nome exclusivo para identificar sua conta do Azure Cosmos DB. O nome da conta pode usar apenas letras minúsculas, números e hifens (-) e deve ter de 3 a 31 caracteres. Selecione um modelo de capacidade Selecione Serverless para criar uma conta no modo serverless. Selecione um grupo de recursos para novos recursos Escolha o grupo de recursos em que o aplicativo de funções foi criado no artigo anterior. Selecione uma localização para novos recursos Selecione uma localização geográfica para hospedar sua conta do Azure Cosmos DB. Use o local mais próximo de você ou de seus usuários para obter acesso mais rápido aos seus dados. Depois que a nova conta for provisionada, uma mensagem será exibida na área de notificação.
Criar um banco de dados e um contêiner do Azure Cosmos DB
Selecione o ícone Azure na barra de atividades, expanda Resources>Azure Cosmos DB, clique com o botão direito do mouse (Ctrl+select no macOS) em sua conta e selecione Create banco de dados... .
Forneça as seguintes informações nos prompts:
Rápido Seleção Nome do banco de dados Digite my-database.Insira uma ID para sua coleção Digite my-container.Insira a chave de partição para a coleção Digite /idcomo a chave de partição.Selecione OK para criar o contêiner e o banco de dados.
Atualizar as configurações do aplicativo de funções
No artigo de início rápido anterior, você criou um aplicativo de funções no Azure. Neste artigo, você atualizará seu aplicativo para gravar documentos JSON no contêiner do Azure Cosmos DB que você criou. Para se conectar à sua conta do Azure Cosmos DB, você deve adicionar seu connection string às configurações do aplicativo. Em seguida, baixe a nova configuração para o arquivo local.settings.json para que você possa se conectar à sua conta do Azure Cosmos DB ao executar localmente.
No Visual Studio Code, clique com o botão direito do mouse (Ctrl+select no macOS) em sua nova conta do Azure Cosmos DB e selecione Copy Connection String.
Pressione F1 para abrir a paleta de comandos e, em seguida, pesquise e execute o comando
Azure Functions: Add New Setting....Escolha o aplicativo de função que você criou no artigo anterior. Forneça as seguintes informações nos prompts:
Rápido Seleção Insira o nome da configuração do novo aplicativo Digite CosmosDbConnectionString.Inserir valor para "CosmosDbConnectionString" Cole a cadeia de conexão que você copiou da sua conta do Azure Cosmos DB. Você também pode configurar a identidade do Microsoft Entra como alternativa. Isso cria uma configuração de aplicativo chamada connection
CosmosDbConnectionStringem seu aplicativo de funções no Azure. Agora, você pode baixar essa configuração no arquivo local.settings.json.Pressione F1 novamente para abrir a paleta de comandos e, em seguida, pesquise e execute o comando
Azure Functions: Download Remote Settings....Escolha o aplicativo de função que você criou no artigo anterior. Selecione Sim para todos para substituir as configurações locais existentes.
Isso baixa todas as configurações do Azure para seu projeto local, incluindo a nova configuração de cadeia de conexão. A maioria das configurações baixadas não é usada durante a execução local.
Registrar extensões de vinculação
Como você está usando uma associação de saída do Azure Cosmos DB, você deve ter a extensão de associações correspondente instalada antes de executar o project.
Com exceção dos gatilhos de timer e HTTP, as associações são implementadas como pacotes de extensão. Execute o seguinte comando dotnet add package na janela Terminal para adicionar o pacote de extensão Azure Cosmos DB ao project.
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
O seu projeto foi configurado para usar extension bundles, que irá instalar automaticamente um conjunto predefinido de pacotes de extensão.
O uso de pacotes de extensão está habilitado no arquivo host.json na raiz do project, que aparece da seguinte maneira:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
},
"extensions": {
"cosmosDB": {
"connectionMode": "Gateway"
}
}
}
O seu projeto foi configurado para usar extension bundles, que irá instalar automaticamente um conjunto predefinido de pacotes de extensão.
O uso de pacotes de extensão está habilitado no arquivo host.json na raiz do project, que aparece da seguinte maneira:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
Agora, você pode adicionar a vinculação de saída do Azure Cosmos DB ao projeto.
Adicionar uma associação de saída
Em um projeto de biblioteca de classes C#, as associações são definidas como atributos de associação no método de uma função.
Abra o arquivo HttpExample.cs project e adicione as seguintes classes:
public class MultiResponse
{
[CosmosDBOutput("my-database", "my-container",
Connection = "CosmosDbConnectionSetting", CreateIfNotExists = true)]
public MyDocument Document { get; set; }
public IActionResult HttpResponse { get; set; }
}
public class MyDocument {
public string id { get; set; }
public string message { get; set; }
}
A classe MyDocument define um objeto que é gravado no banco de dados. O connection string da conta Storage é definido pela propriedade Connection. Nesse caso, você pode omitir Connection porque já está usando a conta de storage padrão.
A classe MultiResponse permite que você escreva na coleção especificada no Azure Cosmos DB e retorne uma mensagem de sucesso HTTP. Como você precisa retornar um objeto MultiResponse, também precisa atualizar a assinatura do método.
Os atributos específicos indicam o nome do contêiner e do nome do banco de dados pai. O connection string de sua conta do Azure Cosmos DB é definido pelo CosmosDbConnectionString.
Os atributos de associação são definidos diretamente no código da função. A configuração de saída Azure Cosmos DB descreve os campos necessários para uma associação de saída Azure Cosmos DB.
Para esse cenário MultiResponse, você precisa adicionar uma associação de saída extraOutputs à função.
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
Adicione as seguintes propriedades à configuração de associação:
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
Os atributos de associação são definidos diretamente no arquivo function_app.py. Use o decorador cosmos_db_output para adicionar uma associação de saída Azure Cosmos DB:
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database",
container_name="my-container", connection="CosmosDbConnectionString")
Neste código, arg_name identifica o parâmetro de associação referenciado em seu código, database_name e container_name são os nomes de banco de dados e coleção nos quais a associação grava, e connection é o nome de uma configuração de aplicativo que contém o connection string da conta do Azure Cosmos DB, que está na configuração CosmosDbConnectionString no arquivo local.settings.json.
Adicionar o código que usa a associação de saída
Substitua o método existente Run pelo seguinte código:
[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
var message = "Welcome to Azure Functions!";
// Return a response to both HTTP trigger and Azure Cosmos DB output binding.
return new MultiResponse()
{
Document = new MyDocument
{
id = System.Guid.NewGuid().ToString(),
message = message
},
HttpResponse = new OkObjectResult(message)
};
}
Adicione o código que usa o objeto de associação de saída extraInputs em context para enviar um documento JSON para a função de associação de saída nomeada, sendToCosmosDb. Adicione esse código antes da instrução return.
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
Neste ponto, sua função deve ser a seguinte:
const { app, output } = require('@azure/functions');
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
app.http('HttpExampleToCosmosDB', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
if (!name) {
return { status: 404, body: 'Missing required data' };
}
// Output to Database
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
const responseMessage = name
? 'Hello, ' +
name +
'. This HTTP triggered function executed successfully.'
: 'This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.';
// Return to HTTP client
return { body: responseMessage };
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
},
});
Este código agora retorna um objeto MultiResponse que contém um documento e uma resposta HTTP.
Atualize function_app.py para corresponder ao código a seguir. Adicione o parâmetro outputDocument à definição de função e outputDocument.set() abaixo da instrução if name::
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", container_name="my-container", connection="CosmosDbConnectionString")
def test_function(req: func.HttpRequest, msg: func.Out[func.QueueMessage],
outputDocument: func.Out[func.Document]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
logging.info('Python Cosmos DB trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
outputDocument.set(func.Document.from_dict({"id": name}))
msg.set(name)
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
O documento {"id": "name"} é criado na coleção de banco de dados especificada na associação.
Executar a função localmente
Visual Studio Code integra-se às ferramentas Azure Functions Core para permitir que você execute esse project no computador de desenvolvimento local antes de publicar no Azure. Se você ainda não tiver o Core Tools instalado localmente, será solicitado que você o instale na primeira vez que executar o project.
Para chamar sua função, pressione F5 para iniciar o projeto de aplicativo de funções. O painel Terminal exibirá a saída do Core Tools. Seu aplicativo é iniciado no painel Terminal. Você pode ver o ponto de extremidade de URL de sua função disparada por HTTP localmente.
Se você ainda não tiver o Core Tools instalado, selecione Install para instalar o Core Tools quando solicitado to do assim.
Se você tiver problemas para executar no Windows, verifique se o terminal padrão para Visual Studio Code não está definido como WSL Bash.Com as Ferramentas Principais em execução, vá para a área Azure: Funções. Em Functions, expanda Local Project>Funções. Clique com o botão direito do mouse (Windows) ou clique em CTRL - (macOS) na função
HttpExamplee escolha Função Executar Agora... .
Em Insira o corpo da solicitação, pressione ENTER para enviar uma mensagem à função.
Quando a função é executada localmente e retorna uma resposta, uma notificação é exibida no Visual Studio Code. As informações sobre a execução da função são mostradas no painel Terminal.
Pressione Ctrl + C para parar o Core Tools e desconectar o depurador.
Executar a função localmente
Como no artigo anterior, pressione F5 para iniciar o projeto do aplicativo de funções e as Core Tools.
Com as Ferramentas Principais em execução, vá para a área Azure: Funções. Em Functions, expanda Local Project>Funções. Clique com o botão direito do mouse (CTRL-clique no Mac) na função
HttpExamplee escolha Executar Função Agora... .
Em Enter request body você vê o valor do corpo da mensagem de solicitação de
{ "name": "Azure" }. Pressione a tecla Enter para enviar esta mensagem de solicitação para sua função.Depois que uma resposta for retornada, clique em CTRL + C para interromper o Core Tools.
Verificar se o documento JSON foi criado
No portal do Azure, volte para a sua conta do Azure Cosmos DB e selecione Data Explorer.
Expanda o banco de dados e o contêiner, depois selecione Itens para listar os documentos criados em seu contêiner.
Verifique se um novo documento JSON foi criado pela vinculação de saída.
Reimplementar e verificar o aplicativo atualizado
No Visual Studio Code, pressione F1 para abrir a paleta de comandos. Na paleta de comandos, pesquise e selecione
Azure Functions: Deploy to function app....Escolha o aplicativo de funções que você criou no primeiro artigo. Como você está reimplantando seu projeto para o mesmo aplicativo, selecione Deploy para descartar o aviso sobre a substituição de arquivos.
Após a conclusão da implantação, você poderá usar novamente o recurso Executar Função Agora... para disparar a função no Azure. Esse comando recupera automaticamente a chave de acesso da função e a usa ao chamar o endpoint do gatilho HTTP.
Novamente verifique os documentos criados em seu contêiner Azure Cosmos DB para verificar se a associação de saída gera novamente um novo documento JSON.
Limpar os recursos
Em Azure, recursos se refere a aplicativos de funções, funções, contas de armazenamento e assim por diante. Eles são agrupados em grupos de recursos e você pode excluir tudo junto ao excluir o grupo.
Você criou recursos para concluir esses guias de início rápido. Você pode ser cobrado por esses recursos, dependendo do status de conta e preço do serviço. Caso não precise mais dos recursos, é possível excluí-los desta maneira:
No Visual Studio Code, pressione F1 para abrir a paleta de comandos. Na paleta de comandos, pesquise e selecione
Azure: Open in portal.Escolha seu aplicativo de funções e pressione ENTER. A página do aplicativo de funções é aberta no Azure portal.
Na guia Visão geral, selecione o link nomeado ao lado de Grupo de recursos.
Na página Grupo de recursos, revise a lista de recursos incluídos e verifique se eles são aqueles que você deseja excluir.
Selecione Excluir grupo de recursos e siga as instruções.
A exclusão poderá levar alguns minutos. Ao ser concluída, uma notificação será exibida por alguns segundos. Também é possível selecionar o ícone de sino na parte superior da página para exibir a notificação.
Próximas etapas
Você atualizou sua função disparada por HTTP para gravar documentos JSON em um contêiner do Azure Cosmos DB. Agora você pode saber mais sobre como desenvolver funções usando Visual Studio Código: