Implemente para o Funções do Azure usando o GitHub Actions

Pode usar um fluxo de trabalho GitHub Actions para construir e implementar automaticamente o seu código de função no Azure usando o Azure/functions-actionarquivo .

Para implementar utilizando o GitHub Actions, complete estes três passos principais:

  1. Crie uma identidade gerida atribuída pelo utilizador no Azure com uma credencial federada que confie no seu repositório GitHub, e atribua-lhe o papel de Contribuidor do Website na sua aplicação funcional.
  2. Adicione o ID do cliente, o ID do tenant e o ID da subscrição da identidade como segredos do repositório no GitHub.
  3. Adicione um ficheiro YAML de workflow ao seu repositório que use azure/login com OpenID Connect (OIDC) para autenticar, e depois chamadas Azure/functions-action para deploy.

Quando utiliza o portal Azure para ativar o GitHub Actions, o Functions executa automaticamente estas tarefas, tanto na sua subscrição do Azure como no seu repositório GitHub.

Crie uma configuração de fluxo de trabalho para o Funções do Azure

Manténs um ficheiro YAML (.yml) que define a configuração do fluxo de trabalho no /.github/workflows/ caminho do teu repositório. Esta definição contém as ações e parâmetros que compõem o fluxo de trabalho, que é específico para a linguagem de desenvolvimento de suas funções.

Escolha um método para criar o seu ficheiro de fluxo de trabalho usando o seletor no topo do artigo:

Método Melhor para Suporte OIDC
Modelo de fluxo de trabalho Controlo total: copiar um template pronto para OIDC e personalizá-lo Requer configuração
portal do Azure Configuração mais simples: o portal pode criar a identidade, credenciais e ficheiro de fluxo de trabalho por si Configurado para ti
Marketplace GitHub GitHub-first: comece pelos templates integrados do marketplace do GitHub Requer configuração e modificação de modelos

Descrição geral da autenticação

O GitHub Actions deve autenticar-se com o Azure para implementar o seu código. Este artigo utiliza o OpenID Connect (OIDC), que é o método de autenticação recomendado. O OIDC utiliza credenciais federadas para criar uma relação de confiança entre o seu repositório GitHub e uma identidade gerida atribuída pelo utilizador no Microsoft Entra. Nenhum segredo está guardado no GitHub.

Exemplo de autenticação OIDC

O seguinte exemplo inline mostra o padrão central de autenticação e implementação OIDC usado em todos os modelos de workflow:

permissions:
  id-token: write
  contents: read

steps:
  - name: 'Login via OIDC'
    uses: azure/login@v3
    with:
      client-id: ${{ secrets.AZURE_CLIENT_ID }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

  - name: 'Deploy to Azure Functions'
    uses: Azure/functions-action@v1
    with:
      app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
      package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}

Considerações de autenticação OIDC no GitHub Actions

  • O OIDC utiliza federação de identidade de carga de trabalho e apenas suporta identidades geridas atribuídas pelo utilizador.
  • Quando ativas uma implementação baseada no GitHub Actions no portal Azure, a autenticação OIDC é usada por defeito.
  • Com o OIDC, o ID do cliente, o ID do tenant e o ID de subscrição da identidade gerida são armazenados como segredos do repositório GitHub.
  • Use o controlo de acesso baseado em papéis do Azure (Azure RBAC) para limitar o acesso apenas aos recursos do Azure necessários para a sua implementação.

Pré-requisitos

  • Uma conta no Azure com uma subscrição ativa. Crie uma conta gratuitamente.

  • Uma conta no GitHub. Se não tiver uma, inscreva-se gratuitamente.

  • Código-fonte do Project num repositório GitHub.

  • Uma compreensão básica dos fluxos de trabalho do GitHub Actions. Se és novo no GitHub Actions, vê Compreender GitHub Actions.

  • Uma aplicação de funções funcional alojada no Azure (apenas código ou baseada em contentores).

  • (Apenas implantações de contentores) Um container registry existente, como Azure Container Registry.

  • CLI do Azure, quando se desenvolve localmente. Também pode usar a CLI do Azure no Azure Cloud Shell.

Crie uma identidade gerida para a implementação do GitHub Actions

O OpenID Connect (OIDC) é o método de autenticação recomendado para implementações do GitHub Actions no Funções do Azure. Com o OIDC, configura uma identidade gerida atribuída pelo utilizador no Azure e cria uma relação de confiança com o seu repositório GitHub. O fluxo de trabalho pode então autenticar-se com o Azure sem guardar credenciais como segredos.

  1. Use o comando az identity create para criar uma identidade gerenciada atribuída pelo usuário:

    az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \
    --query "{clientId: clientId, tenantId: tenantId}" -o table
    

    Substitua <RESOURCE_GROUP> pelo nome do seu grupo de recursos.

  2. A partir da saída, note os clientId valores de e tenantId . Também obtenha o seu ID de subscrição:

    az account show --query "{subId: id}" -o table
    

    Precisas destes três valores mais tarde, quando adicionares credenciais ao GitHub.

  3. Use o comando az role assignment create para atribuir o Website Contributor papel à identidade gerida, com âmbito para a sua aplicação de função:

    IDENTITY_PRINCIPAL=$(az identity show --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> --query 'principalId' -o tsv)
    FUNCTION_APP_ID=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query 'id' -o tsv)
    az role assignment create --assignee $IDENTITY_PRINCIPAL --role "Website Contributor" --scope $FUNCTION_APP_ID
    

    Substitua <APP_NAME> e <RESOURCE_GROUP> pelos nomes da sua aplicação e do grupo de recursos, respetivamente.

  4. Use o comando create de identidade federada da az para criar uma credencial federada que confie nos tokens do seu repositório GitHub:

    az identity federated-credential create \
        --identity-name myGitHubDeployIdentity \
        --resource-group <RESOURCE_GROUP> \
        --name github-deploy-credential \
        --issuer https://token.actions.githubusercontent.com \
        --subject repo:<GITHUB_ORG>/<REPO_NAME>:ref:refs/heads/<BRANCH_NAME> \
        --audiences api://AzureADTokenExchange
    

    Substitua <RESOURCE_GROUP>, <GITHUB_ORG>, <REPO_NAME>, e <BRANCH_NAME> pelos seus valores. O sujeito deve corresponder ao ramo que desencadeia o teu fluxo de trabalho.

  5. (Opcional) Se estiver a implementar um contentor do Azure Container Registry, atribua também o acrpull papel à identidade gerida:

    IDENTITY_PRINCIPAL=$(az identity show --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> --query 'principalId' -o tsv)
    az role assignment create --assignee $IDENTITY_PRINCIPAL --role acrpull \
        --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME>
    

    Substitua <SUBSCRIPTION_ID>, <RESOURCE_GROUP> e <REGISTRY_NAME> pelos teus valores.

Adicionar credenciais ao GitHub

Use os valores que copiou quando criou a identidade gerida.

  1. Em GitHub, vai ao teu repositório.

  2. Vai a Definições>Segredos e variáveis>Ações.

  3. No separador Segredos , selecione Novo segredo de repositório.

  4. Crie cada um dos seguintes segredos:

    Name Value
    AZURE_CLIENT_ID A clientId da identidade gerida
    AZURE_TENANT_ID A tenantId da identidade gerida
    AZURE_SUBSCRIPTION_ID O ID de subscrição que contém a tua aplicação de funções

Para implementações de contentores a partir de um registo privado, também precisa de segredos específicos de cada registo. Para mais informações, consulte Ação de Login no Docker.

Criar o fluxo de trabalho a partir de um modelo

A melhor maneira de criar manualmente uma configuração de fluxo de trabalho é começar a partir do modelo oficialmente suportado.

  1. Escolha Windows ou Linux para garantir que obtém o modelo para o sistema operativo correto.

    Implementações para Windows usam runs-on: windows-latest. Implementações containerizadas requerem Linux.

  2. Use o modelo de workflow OIDC específico da linguagem do repositório de ações do Funções do Azure. Copie o conteúdo completo do ficheiro para um novo ficheiro nomeado .github/workflows/deploy-function-app.yml no seu repositório:

    name: Build and deploy .NET project to Azure Function App using OIDC
    
    on:
      push:
        branches: [ main ]
      workflow_dispatch:
    
    env:
      AZURE_FUNCTIONAPP_NAME: 'APP_NAME'         # Set this to your function app name on Azure 
      AZURE_FUNCTIONAPP_PROJECT_PATH: '.'        # Set this to the path to your function app project, defaults to the repository root. The deploy action will package the contents of this path.
      DOTNET_VERSION: '10.0.x'                   # Set this to the .NET version of your project
      BUILD_ARTIFACT_NAME: 'released-package'    # Set this according to your team's naming convention
      
    jobs:
      build:
        runs-on: windows-latest # Assumes your target function app is Windows-based
        permissions:
          id-token: write  # Required for OIDC
          contents: read   # Required for actions/checkout
        defaults:
          run:
            shell: bash
            working-directory: ${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}
        steps:
          - name: 'Checkout repository'
            uses: actions/checkout@v6
    
          - name: 'Set up .NET version: ${{ env.DOTNET_VERSION }}'
            uses: actions/setup-dotnet@v5
            with:
              dotnet-version: ${{ env.DOTNET_VERSION }}
    
          # Perform additional steps such as running tests, if needed
    
          - name: 'Build and prepare .NET project for deployment'
            run: dotnet publish --configuration Release --output ./output
    
          - name: Upload artifact for the deployment job
            uses: actions/upload-artifact@v7
            with:
              name: ${{ env.BUILD_ARTIFACT_NAME }}
              path: ${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/output
              include-hidden-files: true  # Required for .NET projects
      
      deploy:
        runs-on: windows-latest # Assumes your target function app is Windows-based
        needs: build
        permissions:
          id-token: write  # Required for OIDC
        steps:
          - name: 'Download artifact from build job'
            uses: actions/download-artifact@v8
            with:
              name: ${{ env.BUILD_ARTIFACT_NAME }}
              path: '${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/downloaded-artifact'
         
          - name: 'Log in to Azure with AZ CLI'
            uses: azure/login@v3
            with:
              client-id: ${{ vars.AZURE_CLIENT_ID }}
              tenant-id: ${{ vars.AZURE_TENANT_ID }}
              subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
            
          - name: 'Run the Azure Functions action'
            uses: Azure/functions-action@v1
            id: deploy-to-function-app
            with:
              app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
              package: '${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/downloaded-artifact'
    
  3. No modelo, atualize as env: variáveis do seu projeto. Cada modelo requer AZURE_FUNCTIONAPP_NAME. As outras variáveis dependem da tua linguagem:

    Variável Required Description
    AZURE_FUNCTIONAPP_NAME Yes O nome da tua function app no Azure
    DOTNET_VERSION Yes A versão .NET do seu projeto (por exemplo, 10.0.x)
    AZURE_FUNCTIONAPP_PROJECT_PATH No Caminho para a pasta do teu projeto. Padrão: . (raiz do repositório)
  4. Os modelos OIDC já incluem o azure/login passo com autenticação OIDC. Verifique se os secrets.AZURE_CLIENT_ID, secrets.AZURE_TENANT_ID, e secrets.AZURE_SUBSCRIPTION_ID as referências correspondem aos segredos do repositório que criou.

  5. Adicione este novo ficheiro YAML no caminho /.github/workflows/ do seu repositório.

Criar a configuração do fluxo de trabalho no portal

Quando usas o portal para ativar o GitHub Actions, o Functions trata de toda a configuração automaticamente. Não precisa de criar manualmente uma identidade gerida, configurar credenciais ou escrever um ficheiro de workflow. A Functions realiza estas tarefas por si:

Na sua subscrição do Azure:

  • Cria uma identidade gerida atribuída pelo utilizador e atribui-lhe o papel de Contribuidor do Website na tua aplicação de funções.
  • Adiciona uma credencial federada à identidade gerida para autenticação OIDC do GitHub.

No teu repositório GitHub:

  • Adiciona os valores do ID do cliente, ID da subscrição e ID do tenant como segredos do GitHub Actions.
  • Cria um ficheiro de fluxo de trabalho baseado na sua pilha de aplicações e faz commit para .github/workflows.

Durante a criação do aplicativo de função

Podes começar rapidamente com o GitHub Actions através do separador Deployment quando crias uma função no portal do Azure. Para adicionar um fluxo de trabalho GitHub Actions quando crias uma nova aplicação funcional:

  1. No portal Azure, selecione Implementação no fluxo de Criar Aplicação de Função.

  2. Ativa Continuous Deployment se quiseres que cada atualização de código desencadeie um push de código para Azure portal.

  3. Nas definições do GitHub, selecione Autorizar para ligar a sua conta no GitHub. Inicia sessão com a conta do GitHub que tem acesso de escrita ao teu repositório.

  4. Introduza a sua organização, repositório e branch do GitHub.

  5. Opcionalmente, selecione Ficheiro de Pré-visualização para ver como o ficheiro de workflow se apresenta antes de ser gerado e adicionado ao seu repositório.

  6. Conclua a configuração do seu aplicativo de função. O seu repositório de GitHub inclui agora um novo ficheiro de workflow em /.github/workflows/.

Para um aplicativo de função existente

Para adicionar um fluxo de trabalho GitHub Actions a uma aplicação de funções existente:

  1. Vá à sua aplicação de funções no portal do Azure e selecioneCentro de Implementação de >.

  2. Selecione Implantação Contínua (CI/CD). Em Source, selecione GitHub. Se não vires a Construção de Mensagens por defeito com GitHub Actions, seleciona Change provider, escolhe GitHub Actions e seleciona OK.

  3. Se ainda não autorizou o acesso ao GitHub, selecione Autorizar. Forneça as suas credenciais de GitHub e selecione Iniciar sessão. Para autorizar uma conta GitHub diferente, selecione Alterar Conta e inicie sessão com outra conta.

  4. Selecione o seu GitHub Organization, Repository e Branch. Para implementar através do GitHub Actions, deve ter acesso de escrita a este repositório.

  5. Para a opção de fluxo de trabalho, selecione Adicionar um fluxo de trabalho. Esta opção cria um novo ficheiro de workflow em /.github/workflows/. Para usar um fluxo de trabalho existente, selecione Usar fluxo de trabalho disponível e escolha o seu ficheiro de workflow.

  6. Nas definições de Autenticação, escolha Identidade atribuída pelo utilizador para usar o OpenID Connect (OIDC), o que é recomendado porque não exige que armazene segredos no GitHub. Selecione a sua subscrição e o nome de identidade (Novo) sugerido. É criada uma nova identidade gerida atribuída pelo utilizador, que recebe acesso ao papel de Contribuidor do Website . Se usar uma identidade existente, deve primeiro conceder-lhe acesso ao papel de Contribuidor do Website .

    Importante

    Quando seleciona Autenticação Básica, o seu perfil de publicação, que contém segredos partilhados, é armazenado no GitHub Secrets. Deve também ativar a autenticação SCM básica, o que torna a sua aplicação menos segura.

  7. Seleciona Preview file para ver o ficheiro de workflow que é adicionado ao teu repositório de GitHub em .github/workflows/.

  8. Selecione Salvar para adicionar o arquivo de fluxo de trabalho ao repositório. Selecione o separador Logs para ver o estado das implementações atuais e anteriores.

Criar o arquivo de configuração do fluxo de trabalho

Podes criar o ficheiro de configuração do fluxo de trabalho GitHub Actions a partir dos templates do Funções do Azure diretamente a partir do teu repositório GitHub.

  1. Em GitHub, vai ao teu repositório.

  2. Selecione Ações e Novo fluxo de trabalho.

  3. Pesquise funções.

    Captura de ecrã de pesquisa por modelos de funções do GitHub Actions.

  4. Nos fluxos de trabalho da aplicação de funções apresentados criados por Microsoft Azure, encontre aquele que corresponde à sua linguagem de código e selecione Configure.

  5. No ficheiro YAML recém-criado, atualize o parâmetro env.AZURE_FUNCTIONAPP_NAME com o nome do recurso da sua aplicação de função em Azure. Também pode precisar de atualizar o parâmetro que define a versão da linguagem usada pela sua aplicação, como DOTNET_VERSION para C# ou PYTHON_VERSION aplicações Python.

  6. Os templates predefinidos podem usar autenticação de publicar perfil em vez do OIDC recomendado. Para mudar para OIDC e alinhar com os comportamentos do portal, faça as seguintes alterações:

    • Remova os publish-profileparâmetros , scm-do-build-during-deployment, e enable-oryx-build de Azure/functions-action.

    • Remova a environment definição do trabalho (se existir), uma vez que o sujeito da credencial federada deve corresponder ao disparador da ramificação.

    • Adicione um azure/login passo antes do Azure/functions-action passo:

      - name: 'Login via OIDC'
        uses: azure/login@v3
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      
      - name: 'Run Azure Functions Action'
        uses: Azure/functions-action@v1
        with:
          app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
          package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
      
    • Adicione as seguintes permissões ao trabalho:

      permissions:
        id-token: write
        contents: read
      
  7. Verifique se o novo ficheiro de workflow está guardado com um nome apropriado em /.github/workflows/ e selecione Commit alterações.

Funções do Azure ação

A ação Funções do Azure (Azure/functions-action) define como o seu código é publicado para uma aplicação de funções existente em Azure, ou para um slot específico na sua aplicação.

Parâmetros

A tabela seguinte descreve os parâmetros de entrada suportados por Azure/functions-action:

Parâmetro Description
nome do aplicativo (Obrigatório) O nome da tua aplicação de funções no Azure.
embalagem (Obrigatório) O caminho para o seu projeto de publicação. Padrão: . (todos os ficheiros no repositório).
Construção remota Defina para true permitir uma ação de compilação do Kudu ao ser implementado numa aplicação Flex Consumption. A construção do Oryx é sempre realizada; Também não definas scm-fazer-build-during-deployment ou enable-oryx-build. Padrão: false.
scm-do-build-during-deployment Permitir que o site Kudu realize operações pré-implantação, como compilações remotas. Defina para true que o Kudu construa o seu projeto durante a implementação. Padrão: false. Para obter mais informações, veja SCM_DO_BUILD_DURING_DEPLOYMENT.
enable-oryx-build Permitir que o Kudu resolva dependências de projetos usando o Oryx. Defina isto e o scm-do-build-during-deployment para true usar o Oryx em vez do fluxo de trabalho. Padrão: false. Apenas Linux.
nome do slot O slot de implementação para implementar. Padrão: slot de produção.
publicar-perfil O nome do segredo do GitHub que contém o teu perfil de publicação. Não é necessário ao usar a autenticação OIDC recomendada.
SKU Defina para flexconsumption autenticar com o perfil de publicação num plano Flex Consumption. Não é necessário com autenticação OIDC ou outros planos de alojamento.
respeito-pom-xml (Java apenas) Defina para true derivar o artefacto de implantação a partir de pom.xml. Quando true, defina o pacote para .. Padrão: false.
respeitar-funcignore Define para true honrar o teu ficheiro .funcignore e excluir os caminhos listados. Padrão: false.

A tabela seguinte mostra quais os parâmetros suportados para cada plano de alojamento:

Parâmetro Consumo Flexível Elástico Premium Dedicado Consumo
nome do aplicativo Required Required Required Required
embalagem Required Required Required Required
Construção remota Optional
scm-do-build-during-deployment Optional Optional Optional
enable-oryx-build Opcional (Linux) Opcional (Linux) Opcional (Linux)
nome do slot Não suportado Optional Optional Optional
publicar-perfil Não recomendado Não recomendado Não recomendado Não recomendado
SKU Apenas publicar perfil
respeito-pom-xml Opcional (Java) Opcional (Java) Opcional (Java) Opcional (Java)
respeitar-funcignore Optional Optional Optional Optional

Métodos de implantação

Quando usa o GitHub Actions, o método de implementação depende do seu plano de alojamento:

Plano de alojamento Método de implantação
Consumo Flexível Uma implantação
Elástico Premium Deploy Zip
Dedicado (Serviço de Aplicativo) Deploy Zip
Consumo Windows: Zip deploy
Linux: URL do pacote externo*

* A capacidade de executar seus aplicativos no Linux em um plano de consumo está planejada para a aposentadoria. Para mais informações, consulte o Plano de Consumo para Alojamento do Funções do Azure.

Para mais informações, consulte Tecnologias de implementação em Funções do Azure.

Próximos passos