Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez utiliser un workflow GitHub Actions pour construire et déployer automatiquement votre code de fonction sur Azure en utilisant le Azure/functions-actionfichier .
Pour déployer en utilisant GitHub Actions, suivez ces trois étapes clés :
- Créez une identité managée attribuée par l’utilisateur dans Azure avec un identifiant fédéré qui fait confiance à votre dépôt GitHub, et attribuez-lui le rôle de Contributeur du site web dans votre application de fonction.
- Ajoutez l'ID client, l'ID de locataire et l'ID d'abonnement de l'identité comme secrets de dépôt dans GitHub.
- Ajoutez un fichier YAML de workflow à votre dépôt qui l’utilise
azure/loginavec OpenID Connect (OIDC) pour authentifier, puis appelezAzure/functions-actionpour déployer.
Lorsque vous utilisez le portail Azure pour activer GitHub Actions, Fonctions effectue automatiquement ces tâches, à la fois dans votre abonnement Azure et dans votre dépôt GitHub.
Créer une configuration de workflow pour Azure Functions
Vous maintenez un fichier YAML (.yml) qui définit la configuration du workflow dans le /.github/workflows/ chemin de votre dépôt. Cette définition contient les actions et les paramètres qui composent le flux de travail, qui est spécifique au langage de développement de vos fonctions.
Choisissez une méthode pour créer votre fichier de workflow à l’aide du sélecteur en haut de l’article :
| Method | Idéal pour | Prise en charge OIDC |
|---|---|---|
| Modèle de flux de travail | Contrôle total : copier un modèle prêt OIDC et le personnaliser | Nécessite une configuration |
| portail Azure | Configuration la plus simple : Portal peut créer pour vous l’identité, les identifiants et le fichier de workflow | Configuré pour vous |
| Marché GitHub | GitHub-first : commencer par les modèles intégrés du marché GitHub | Nécessite une modification de configuration et de gabarit |
Vue d’ensemble de l'authentification
GitHub Actions doit s’authentifier avec Azure pour déployer votre code. Cet article utilise OpenID Connect (OIDC), qui est la méthode d’authentification recommandée. L’OIDC utilise des identifiants fédérés pour créer une relation de confiance entre votre dépôt GitHub et une identité managée attribuée par l’utilisateur dans Microsoft Entra. Aucun secret n’est stocké sur GitHub.
Exemple d’authentification OIDC
L’exemple en ligne suivant montre le modèle principal d’authentification et de déploiement OIDC utilisé dans tous les modèles 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 }}
Considérations d’authentification OIDC sur GitHub Actions
- L’OIDC utilise la fédération des identités de charge de travail et ne prend en charge que les identités managées attribuées par l’utilisateur.
- Lorsque vous activez un déploiement basé sur GitHub Actions dans le portail Azure, l’authentification OIDC est utilisée par défaut.
- Avec OIDC, l'ID client, l'ID de locataire et l'ID d'abonnement de l'identité gérée sont stockés comme des secrets du dépôt GitHub.
- Utilisez le contrôle d’accès basé sur les rôles Azure (Azure RBAC) pour limiter l’accès uniquement aux ressources Azure nécessaires à votre déploiement.
Prérequis
Un compte Azure avec un abonnement actif. Créez un compte gratuitement.
Un compte GitHub. Si vous n’en avez pas, inscrivez-vous gratuitement.
Code source du Project dans un dépôt GitHub.
Une compréhension de base des flux de travail GitHub Actions. Si vous débutez sur GitHub Actions, consultez Comprendre GitHub Actions.
Une application fonctionnelle hébergée sur Azure (uniquement en code ou basée sur conteneur).
(Déploiements de conteneurs uniquement) Un registre de conteneurs existant, tel que Azure Container Registry.
- Azure CLI, lorsque vous développez localement. Vous pouvez également utiliser la Azure CLI dans Azure Cloud Shell.
Créer une identité managée pour le déploiement GitHub Actions
OpenID Connect (OIDC) est la méthode d’authentification recommandée pour les déploiements GitHub Actions sur Azure Functions. Avec OIDC, vous configurez une identité managée attribuée par l’utilisateur dans Azure et créez une relation de confiance avec votre dépôt GitHub. Le workflow peut alors s’authentifier avec Azure sans stocker les identifiants comme secrets.
Utilisez la commande az identity create pour créer une identité managée affectée par l’utilisateur :
az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \ --query "{clientId: clientId, tenantId: tenantId}" -o tableRemplacez
<RESOURCE_GROUP>par le nom de votre groupe de ressources.À partir de la sortie, notez les
clientIdvaleurs ettenantId. Obtenez aussi votre ID d’abonnement :az account show --query "{subId: id}" -o tableVous aurez besoin de ces trois valeurs plus tard, lorsque vous ajoutez des identifiants à GitHub.
Utilisez la commande create d’assignation de rôle d’az pour assigner le
Website Contributorrôle à l’identité gérée, portée à votre application de fonction :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_IDRemplacez
<APP_NAME>et<RESOURCE_GROUP>par les noms de votre application et de votre groupe de ressources, respectivement.Utilisez la commande create d’identité fédérée d’identification d’az pour créer un identifiant fédéré qui fait confiance aux jetons de votre dépôt 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://AzureADTokenExchangeRemplacez
<RESOURCE_GROUP>,<GITHUB_ORG>,<REPO_NAME>et<BRANCH_NAME>par vos valeurs. Le sujet doit correspondre à la branche qui déclenche votre flux de travail.(Optionnel) Si vous déployez un conteneur depuis Azure Container Registry, attribuez également le
acrpullrôle à l'identité gérée :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>Remplacez
<SUBSCRIPTION_ID>,<RESOURCE_GROUP>et<REGISTRY_NAME>par vos valeurs.
Ajouter des identifiants à GitHub
Utilisez les valeurs que vous avez copiées lors de la création de l’identité gérée.
Dans GitHub, accédez à votre dépôt.
Va dans Paramètres>Secrets et variables>Actions.
Dans l’onglet Secrets , sélectionnez Nouveau secret de dépôt.
Créez chacun des secrets suivants :
Nom Value AZURE_CLIENT_IDLa clientIdde l’identité géréeAZURE_TENANT_IDLa tenantIdde l’identité géréeAZURE_SUBSCRIPTION_IDL’ID d’abonnement contenant votre application fonctionnelle
Pour les déploiements de conteneurs depuis un registre privé, il faut aussi des secrets spécifiques à chaque registre. Pour plus d’informations, voir Action de connexion Docker.
Créer le flux de travail à partir d’un modèle
La meilleure façon de créer manuellement une configuration de flux de travail consiste à commencer à partir du modèle officiellement pris en charge.
Choisissez Windows ou Linux pour vous assurer que vous obtenez le modèle pour le système d’exploitation approprié.
Utilisez le modèle de workflow OIDC spécifique à chaque langage issu du dépôt d’actions Azure Functions. Copiez le contenu complet du fichier dans un nouveau fichier nommé
.github/workflows/deploy-function-app.ymldans votre dépôt :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'Dans le modèle, mettez à jour les
env:variables de votre projet. Chaque modèle nécessiteAZURE_FUNCTIONAPP_NAME. Les autres variables dépendent de votre langage :Variable Obligatoire Description AZURE_FUNCTIONAPP_NAMEOui Votre nom d’application de fonction dans Azure DOTNET_VERSIONOui La version .NET de votre projet (par exemple, 10.0.x)AZURE_FUNCTIONAPP_PROJECT_PATHNo Chemin vers le dossier de votre projet. Par défaut : .(racine du dépôt)Les modèles OIDC incluent déjà l’étape
azure/loginde l’authentification OIDC. Vérifiez que les référencessecrets.AZURE_CLIENT_ID,secrets.AZURE_TENANT_ID, etsecrets.AZURE_SUBSCRIPTION_IDcorrespondent aux secrets du dépôt que vous avez créés.Ajoutez ce nouveau fichier YAML dans le chemin d’accès
/.github/workflows/de votre référentiel.
Créer la configuration du flux de travail dans le portail
Lorsque vous utilisez le portail pour activer GitHub Actions, Fonctions gère toute la configuration automatiquement. Vous n’avez pas besoin de créer manuellement une identité gérée, de configurer des identifiants ou d’écrire un fichier de workflow. Fonctions effectue les tâches suivantes pour vous :
Dans votre abonnement Azure :
- Crée une identité managée attribuée par l’utilisateur et lui attribue le rôle de Contributeur du site web dans votre application de fonction.
- Ajoute une accréditation fédérée à l’identité gérée pour l’authentification OIDC GitHub.
Dans votre dépôt GitHub :
- Ajoute les valeurs de l’ID client, de l’ID d’abonnement et de l’ID de locataire comme secrets GitHub Actions.
- Crée un fichier de workflow basé sur votre pile d’applications et le valide dans
.github/workflows.
Pendant la création d’application de fonction
Vous pouvez commencer rapidement avec GitHub Actions via l’onglet Déploiement lorsque vous créez une fonction dans Azure portail. Pour ajouter un flux de travail GitHub Actions lorsque vous créez une application de fonction :
Dans le portail Azure, sélectionnez Déploiement dans le flux Create Function App.
Activez Déploiement continu si vous souhaitez que chaque mise à jour de code déclenche une transmission push de code vers Azure portail.
Dans les paramètres GitHub, sélectionnez Autoriser la connexion de votre compte GitHub. Connectez-vous avec le compte GitHub qui a accès à l’écriture à votre dépôt.
Entrez votre GitHub organisation, référentiel et branche.
Optionnellement, sélectionnez Fichier Aperçu pour voir à quoi ressemble le fichier de workflow avant qu’il ne soit généré et ajouté à votre dépôt.
Terminez la configuration de votre application de fonction. Votre dépôt GitHub inclut désormais un nouveau fichier de flux de travail dans
/.github/workflows/.
Pour une application de fonction existante
Pour ajouter un flux de travail GitHub Actions à une application de fonction existante :
Allez dans votre application de fonctions dans le portail Azure et sélectionnezCentre de déploiement de >.
Sélectionnez Déploiement continu (CI/CD). Pour Source, sélectionnez GitHub. Si vous ne voyez pas la création de messages par défaut avec GitHub Actions, sélectionnez Change provider, choisissez GitHub Actions, puis OK.
Si vous n'avez pas déjà autorisé l'accès à GitHub, sélectionnez Autoriser. Fournissez vos informations d’identification GitHub et sélectionnez Sign in. Pour autoriser un autre compte GitHub, sélectionnez Change Account et connectez-vous avec un autre compte.
Sélectionnez votre GitHub Organization, Repository et Branch. Pour déployer en utilisant GitHub Actions, vous devez avoir un accès d’écriture à ce dépôt.
Pour l’option Workflow, sélectionnez Ajouter un workflow. Cette option crée un nouveau fichier de workflow dans
/.github/workflows/. Pour utiliser un flux de travail existant, sélectionnez Utiliser le flux de travail disponible et choisissez votre fichier de flux de travail.Dans les paramètres d'authentification, choisissez Identité attribuée par l'utilisateur pour utiliser OpenID Connect (OIDC), ce qui est recommandé car il ne nécessite pas de stocker des secrets dans GitHub. Sélectionnez votre abonnement et le nom d’identité (Nouveau ) suggéré. Une nouvelle identité gérée attribuée par l’utilisateur est créée et accorde l’accès au rôle de contributeur du site web . Si vous utilisez une identité existante, vous devez d’abord lui accorder l’accès au rôle de Contributeur du site web .
Important
Lorsque vous sélectionnez Authentification de base, votre profil publié, qui contient des secrets partagés, est stocké dans GitHub Secrets. Vous devez également activer l’authentification SCM de base, ce qui rend votre application moins sécurisée.
Sélectionnez Fichierpreview pour afficher le fichier de flux de travail qui est ajouté à votre dépôt de GitHub dans
.github/workflows/.Sélectionnez Enregistrer pour ajouter le fichier de flux de travail à votre référentiel. Sélectionnez l’onglet Journaux pour consulter l’état des déploiements actuels et précédents.
Créez le fichier de configuration de flux de travail
Vous pouvez créer le fichier de configuration de flux de travail GitHub Actions à partir des modèles Azure Functions directement à partir de votre référentiel GitHub.
Dans GitHub, accédez à votre dépôt.
Sélectionnez Actions et Nouveau flux de travail.
Recherchez des fonctions.
Dans les flux de travail d’application functions affichés créés par Microsoft Azure, recherchez celui qui correspond à votre langage de code et sélectionnez Configure.
Dans le fichier YAML nouvellement créé, mettez à jour le paramètre
env.AZURE_FUNCTIONAPP_NAMEavec le nom de votre ressource d’application de fonction dans Azure. Vous devrez peut-être aussi mettre à jour le paramètre qui définit la version du langage utilisée par votre application, par exempleDOTNET_VERSIONpour C# ouPYTHON_VERSIONpour les applications Python.Les modèles par défaut peuvent utiliser l’authentification de publication du profil au lieu de l’OIDC recommandé. Pour passer à l’OIDC et s’aligner sur les comportements du portail, effectuez les modifications suivantes :
Supprimez les
publish-profileparamètres ,scm-do-build-during-deployment, etenable-oryx-builddeAzure/functions-action.Supprimez le
environmentparamètre du poste (si présent), car le sujet de la certification fédérée doit correspondre au déclencheur de branchement.Ajoutez une
azure/loginétape avant l’étapeAzure/functions-action:- 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 }}Ajoutez les autorisations suivantes à la tâche :
permissions: id-token: write contents: read
Vérifiez que le nouveau fichier de workflow est enregistré avec un nom approprié dans
/.github/workflows/et sélectionnez Commit modifications.
action de Azure Functions
L’action Azure Functions (Azure/functions-action) définit la façon dont votre code est publié dans une application de fonction existante dans Azure, ou dans un emplacement spécifique dans votre application.
Paramètres
Le tableau suivant décrit les paramètres d’entrée pris en charge par Azure/functions-action:
| Paramètre | Description |
|---|---|
| app-name | (Obligatoire) Le nom de votre application de fonctions dans Azure. |
| paquet | (Obligatoire) Le chemin vers votre projet pour publier. Par défaut : . (tous les fichiers du dépôt). |
| Construction à distance | Définissez pour true activer une action de compilation depuis Kudu lors du déploiement dans une application Flex Consumption. La construction d’Oryx est toujours réalisée ; Ne définissez pas aussi scm-faire-build-pendant-déploiement ou enable-oryx-build. Valeur par défaut : false. |
| SCM-do-build-during-deployment | Permettre au site Kudu d’effectuer des opérations de pré-déploiement telles que des builds à distance. Réglez pour true que Kudu construise votre projet pendant le déploiement. Valeur par défaut : false. Pour plus d’informations, consultez SCM_DO_BUILD_DURING_DEPLOYMENT. |
| enable-oryx-build | Permettre à Kudu de résoudre les dépendances de projet en utilisant Oryx. Réglez à la fois cela et scm-do-build-during-deployment pour true utiliser Oryx au lieu du workflow. Valeur par défaut : false. Linux uniquement. |
| slot-name | Le créneau de déploiement pour déployer. Par défaut : emplacement de production. |
| publish-profile | Nom du secret GitHub qui contient votre profil de publication. Ce n’est pas nécessaire avec l’authentification OIDC recommandée. |
| Sku | Réglez sur lors flexconsumption de l’authentification avec publish-profile sur un plan Flex Consumption. Ce n’est pas nécessaire avec l’authentification OIDC ou d’autres plans d’hébergement. |
| respect-pom-xml | (Java uniquement) Régler pour true dériver l’artefact de déploiement à partir de pom.xml. Lorsque true, définissez le package à .. Valeur par défaut : false. |
| respect-funcignore | Réglez pour true honorer votre fichier .funcignore et exclure les chemins listés. Valeur par défaut : false. |
Le tableau suivant montre quels paramètres sont pris en charge pour chaque plan d’hébergement :
| Paramètre | Flex Consumption | Prime élastique | Dedicated | Consumption |
|---|---|---|---|---|
| app-name | Obligatoire | Obligatoire | Obligatoire | Obligatoire |
| paquet | Obligatoire | Obligatoire | Obligatoire | Obligatoire |
| Construction à distance | Optional | — | — | — |
| SCM-do-build-during-deployment | — | Optional | Optional | Optional |
| enable-oryx-build | — | Optionnel (Linux) | Optionnel (Linux) | Optionnel (Linux) |
| slot-name | Non pris en charge | Optional | Optional | Optional |
| publish-profile | Non recommandé | Non recommandé | Non recommandé | Non recommandé |
| Sku | Publication de profil uniquement | — | — | — |
| respect-pom-xml | Optionnel (Java) | Optionnel (Java) | Optionnel (Java) | Optionnel (Java) |
| respect-funcignore | Optional | Optional | Optional | Optional |
Méthodes de déploiement
Lorsque vous utilisez GitHub Actions, la méthode de déploiement dépend de votre plan d’hébergement :
| Plan d’hébergement | Méthode de déploiement |
|---|---|
| Consommation flexible | Un déploiement |
| Prime élastique | Déployer zip |
| Dédié (App Service) | Déployer zip |
| Consommation | Windows : Zip deploy Linux : URL de package externe* |
* La possibilité d'exécuter vos applications sur Linux dans le cadre d'un plan de consommation est prévue pour être abandonnée. Pour plus d’informations, consultez Hébergement du plan de consommation Azure Functions.
Pour plus d’informations, consultez Technologies de déploiement dans Azure Functions.