Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Azure Functions fornece suporte integrado para desenvolver, implantar e gerenciar Aplicativos de Função em contêineres em Aplicativos de Contêiner do Azure. Use os Aplicativos de Contêiner do Azure para seus aplicativos do Functions quando precisar executar no mesmo ambiente que outros microsserviços, APIs, sites, fluxos de trabalho ou quaisquer programas hospedados em contêiner. Saiba mais sobre como executar o Azure Functions em Aplicativos de Contêiner.
Observação
Embora o Durable Functions ofereça suporte a vários provedores de armazenamento ou back-ends, o dimensionamento automático de aplicativos hospedados em Aplicativos de Contêiner do Azure só está disponível com o back-end do Microsoft SQL (MSSQL). Se outro back-end for usado, será necessário definir a contagem mínima de réplicas como maior que zero.
Neste artigo, você aprenderá a:
- Crie uma imagem do Docker a partir de um projeto local do Durable Functions.
- Crie um Aplicativo de Contêiner do Azure e recursos relacionados.
- Implante a imagem no Aplicativo de Contêiner do Azure e configure a autenticação.
Pré-requisitos
- Visual Studio Code instalado.
- SDK do .NET 8.0.
- Docker e ID do Docker
- CLI do Azureversão 2.47 ou posterior.
- Ferramentas principais do Azure Functions
- Conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Uma ferramenta de teste HTTP que mantém seus dados seguros. Para obter mais informações, consulte Ferramentas de teste HTTP.
Criar um projeto local de Funções Duráveis
No Visual Studio Code, crie um projeto de funções duráveis isolado do .NET configurado para usar o back-end MSSQL.
Teste o aplicativo localmente e retorne a este artigo.
Adicionar arquivos relacionados ao Docker
Crie um Dockerfile na raiz do projeto que descreva o ambiente mínimo necessário para executar o aplicativo de função em um contêiner.
No diretório raiz do projeto, crie um novo arquivo chamado Dockerfile.
Copie/cole o seguinte conteúdo no Dockerfile.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env COPY . /src/dotnet-function-app RUN cd /src/dotnet-function-app && \ mkdir -p /home/site/wwwroot && \ dotnet publish *.csproj --output /home/site/wwwroot # To enable ssh & remote debugging on app service change the base image to the one below # FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]Salve o arquivo.
Adicione um arquivo .dockerignore com o seguinte conteúdo:
local.settings.jsonSalve o arquivo .dockerignore .
Criar a imagem do contentor
Crie a imagem do Docker. Encontre a lista completa de imagens base suportadas para o Azure Functions na Base de Funções do Azure da Microsoft | Hub do Docker
Inicie o daemon do Docker.
Faça login no Docker com o
docker logincomando.Quando solicitado, inicie sessão com o seu nome de utilizador e palavra-passe. Uma mensagem "Login bem-sucedido" confirma que você está conectado.
Navegue até o diretório raiz do projeto.
Execute o seguinte comando para criar a imagem, substituindo
<DOCKER_ID>pelo ID da conta do Docker Hub:dockerId=<DOCKER_ID> imageName=IMAGE_NAME> imageVersion=v1.0.0 docker build --tag $dockerId/$imageName:$imageVersion .Observação
Se você estiver executando em um Mac da série M, use
--platform linux/amd64em vez disso.Envie a imagem para o Docker:
docker push $dockerId/$imageName:$imageVersionDependendo da velocidade da rede, o envio inicial da imagem pode levar alguns minutos. Enquanto espera, prossiga para a próxima seção.
Criar recursos do Azure
Crie os recursos do Azure necessários para executar Funções Duráveis em um aplicativo de contêiner.
- Grupo de recursos do Azure: Grupo de recursos que contém todos os recursos criados.
- Ambiente do Aplicativo de Contêiner do Azure: Ambiente que hospeda o aplicativo de contêiner.
- Aplicativo de contêiner do Azure: A imagem que contém o aplicativo Durable Functions é implantada neste aplicativo.
- Conta de Armazenamento do Azure: Exigido pelo aplicativo de função para armazenar dados relacionados ao aplicativo, como o código do aplicativo.
Configuração inicial
Num novo terminal, inicie sessão na sua subscrição do Azure:
az login az account set -s <subscription_name>Execute os comandos necessários para configurar a extensão da CLI dos Aplicativos de Contêiner do Azure:
az upgrade az extension add --name containerapp --upgrade az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Criar aplicativo de contêiner e recursos relacionados
Um perfil de carga de trabalho determina a quantidade de recursos de computação e memória disponíveis para os aplicativos de contêiner implantados em um ambiente. Crie um perfil de carga de trabalho de consumo para suporte de escala até zero e pagamento por uso.
Defina as variáveis de ambiente.
location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> containerAppEnv=<CONTAINER_APP_ENVIRONMNET_NAME> functionApp=<APP_NAME> vnet=<VNET_NAME>Crie um grupo de recursos.
az group create --name $resourceGroup --location $locationCrie o ambiente do aplicativo de contêiner.
az containerapp env create \ --enable-workload-profiles \ --resource-group $resourceGroup \ --name $containerAppEnv \ --location $location \Crie um aplicativo de contêiner com base na imagem Durable Functions.
az containerapp create --resource-group $resourceGroup \ --name $functionApp \ --environment $containerAppEnv \ --image $dockerId/$imageName:$imageVersion \ --ingress external \ --kind functionapp \ --query properties.outputs.fqdnAnote o URL do aplicativo, que deve ser semelhante ao
https://<APP_NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io.
Criar bases de dados
Crie uma conta de Armazenamento do Azure, que é exigida pelo aplicativo de função.
az storage account create --name $storage --location $location --resource-group $resourceGroup --sku Standard_LRSNo portal do Azure, crie um banco de dados SQL do Azure para persistir as informações de estado. Durante a criação:
- Habilitar os serviços e recursos do Azure para acessar este servidor (em Rede)
- Defina o valor para Agrupamento de banco de dados (em Configurações adicionais) como
Latin1_General_100_BIN2_UTF8.
Observação
Abster-se de habilitar a configuração Permitir que os serviços e recursos do Azure acessem esse servidor para cenários de produção. Os aplicativos de produção devem implementar abordagens mais seguras, como restrições de firewall mais fortes ou configurações de rede virtual.
Configurar autenticação baseada em identidade
As identidades gerenciadas tornam seu aplicativo mais seguro, eliminando segredos de seu aplicativo, como credenciais nas cadeias de conexão. Embora você possa escolher entre identidade gerenciada atribuída ao sistema e atribuída pelo usuário, a identidade gerenciada atribuída pelo usuário é recomendada, pois não está vinculada ao ciclo de vida do aplicativo.
Nesta seção, você configura a identidade gerenciada atribuída pelo usuário para o Armazenamento do Azure.
Defina as variáveis de ambiente.
subscription=<SUBSCRIPTION_ID> identity=<IDENTITY_NAME>Crie um recurso de identidade gerenciado.
echo "Creating $identity" az identity create -g $resourceGroup -n $identity --location "$location"Atribua a identidade do usuário ao aplicativo de contêiner.
echo "Assigning $identity to app" az containerapp identity assign --resource-group $resourceGroup --name $functionApp --user-assigned $identityDefina o escopo das permissões RBAC (controle de acesso baseado em função).
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"Obtenha a identidade do
clientIdusuário.# Get the identity's ClientId clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)Atribua a função Proprietário de Dados do Blob de Armazenamento para acessar a conta de armazenamento.
echo "Assign Storage Blob Data Owner role to identity" az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
Configurar definições da aplicação
Observação
Não há suporte para autenticação no banco de dados MSSQL usando identidade gerenciada ao hospedar um aplicativo Durable Functions em Aplicativos de Contêiner do Azure. Por enquanto, este guia faz a autenticação usando cadeias de conexão.
No recurso do banco de dados SQL no portal do Azure, navegue até Configurações>Cadeias de conexão para localizar a cadeia de conexão.
A cadeia de conexão deve ter um formato semelhante a:
dbserver=<SQL_SERVER_NAME> sqlDB=<SQL_DB_NAME> username=<DB_USER_LOGIN> password=<DB_USER_PASSWORD> connStr="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$sqlDB;Persist Security Info=False;User ID=$username;Password=$password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"Se você esquecer a senha da etapa anterior de criação do banco de dados, poderá redefini-la no recurso do SQL Server.
Armazene a cadeia de conexão do banco de dados SQL como um segredo chamado sqldbconnection no aplicativo contêiner.
az containerapp secret set \ --resource-group $resourceGroup \ --name $functionApp \ --secrets sqldbconnection=$connStrAdicione as seguintes configurações ao aplicativo:
az containerapp update \ -n $functionApp \ -g $resourceGroup \ --set-env-vars SQLDB_Connection=secretref:sqldbconnection \ AzureWebJobsStorage__accountName=$storage \ AzureWebJobsStorage__clientId=$clientId \ AzureWebJobsStorage__credential=managedidentity \ FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
Teste localmente
Utilize uma ferramenta de teste HTTP para enviar uma solicitação para o endpoint de gatilho HTTP
POST, que deve ser algo semelhante a:https://<APP NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io/api/DurableFunctionsOrchestrationCSharp1_HttpStartA resposta é o resultado inicial da função HTTP, informando que a orquestração de Funções Duráveis foi iniciada com êxito. Embora a resposta inclua alguns URLs úteis, ela ainda não exibe o resultado final da orquestração.
Copie/cole o valor do URL na barra de endereço do seu navegador
statusQueryGetUrie pressione Enter. Como alternativa, você pode continuar a usar a ferramenta de teste HTTP para emitir aGETsolicitação.A solicitação consulta a instância de orquestração para obter o status. Você deve ver que a instância terminou e as saídas ou resultados do aplicativo Durable Functions.
{ "name":"HelloCities", "instanceId":"7f99f9474a6641438e5c7169b7ecb3f2", "runtimeStatus":"Completed", "input":null, "customStatus":null, "output":"Hello, Tokyo! Hello, London! Hello, Seattle!", "createdTime":"2023-01-31T18:48:49Z", "lastUpdatedTime":"2023-01-31T18:48:56Z" }
Próximos passos
Saiba mais sobre:
- Aplicativos de Contêiner do Azure que hospedam o Azure Functions.
- Arquitetura, configuração e comportamento da carga de trabalho do provedor de armazenamento MSSQL.
- O back-end de armazenamento gerenciado pelo Azure, Agendador de Tarefas Duráveis.