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.
Utilisez des outils d’automatisation comme GitHub Actions pour gérer votre cycle de vie d’appareil IoT. Ce tutoriel illustre un flux de travail GitHub Actions qui connecte un appareil à un hub IoT à l’aide d’Azure Device Provisioning Service (DPS).
Dans ce tutoriel, vous allez apprendre à :
- Enregistrez les informations d’identification sous forme de secrets de référentiel.
- Créez un flux de travail pour provisionner des ressources du service IoT Hub et Device Provisioning.
- Exécutez le flux de travail et surveillez un appareil simulé au fur et à mesure qu’il se connecte à IoT Hub.
Prerequisites
Un abonnement Azure
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
L'interface CLI de Azure
Utilisez l’environnement Bash dans Azure Cloud Shell.
Ou, si vous préférez exécuter des commandes de référence CLI localement, installez Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Un compte GitHub avec un dépôt que vous possédez ou un référentiel où vous disposez d’un accès administrateur. Pour plus d’informations, consultez Prise en main de GitHub.
1 - Créer des secrets de référentiel
Le flux de travail que vous définissez dans la section suivante nécessite l’accès à votre abonnement Azure pour créer et gérer des ressources. Vous ne souhaitez pas placer ces informations dans un fichier non protégé dans lequel elles peuvent être découvertes. Nous utilisons plutôt des secrets de référentiel pour stocker ces informations, mais la rendre toujours accessible en tant que variable d’environnement dans le flux de travail. Pour plus d’informations, consultez Utilisation des secrets dans GitHub Actions.
Seuls les propriétaires et administrateurs du référentiel peuvent gérer les secrets du dépôt.
Créer un principal de service
Au lieu de fournir vos informations d’identification d’accès personnel, nous créons un principal de service, puis ajoutons ces informations d’identification en tant que secrets de référentiel. Utilisez Azure CLI pour créer un principal de service. Pour plus d’informations, consultez Créer un principal de service Azure avec Azure CLI.
Utilisez la commande az ad sp create-for-rbac pour créer un principal de service avec un accès contributeur à un groupe de ressources spécifique. Remplacez
<SUBSCRIPTION_ID>et<RESOURCE_GROUP_NAME>par vos propres informations.Cette commande nécessite des rôles d’administrateur d’accès propriétaire ou utilisateur dans l’abonnement.
az ad sp create-for-rbac --name github-actions-sp --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>Copiez les éléments suivants à partir de la sortie de la commande de création du principal de service à utiliser dans la section suivante :
- ClientId.
- clientSecret. Cette valeur est un mot de passe généré pour le principal de service auquel vous ne pouvez pas accéder à nouveau.
- TenantId.
Utilisez la commande az role assignment create pour attribuer deux rôles d’accès supplémentaires au principal du service : Contributeur aux données du service Device Provisioning et Contributeur aux données IoT Hub. Remplacez
<SP_CLIENT_ID>par la valeur clientId que vous avez copiée à partir de la sortie de la commande précédente.az role assignment create --assignee "<SP_CLIENT_ID>" --role "Device Provisioning Service Data Contributor" --resource-group "<RESOURCE_GROUP_NAME>"az role assignment create --assignee "<SP_CLIENT_ID>" --role "IoT Hub Data Contributor" --resource-group "<RESOURCE_GROUP_NAME>"
Enregistrer les informations d’identification du principal de service sous forme de secrets
Sur GitHub.com, accédez aux paramètres de votre référentiel.
Sélectionnez Secrets dans le menu de navigation, puis sélectionnez Actions.
Sélectionnez New repository secret (Nouveau secret de dépôt).
Créez un secret pour votre identifiant du principal de service.
-
Nom :
APP_ID - Secret : collez le clientId que vous avez copié à partir de la sortie de la commande de création du principal de service.
-
Nom :
Sélectionnez Ajouter un secret, puis sélectionnez Nouveau secret de référentiel pour ajouter un deuxième secret.
Créez un secret pour votre mot de passe de principal de service.
-
Nom :
SECRET - Secret : collez le clientSecret que vous avez copié à partir de la sortie de la commande de création du principal de service.
-
Nom :
Sélectionnez Ajouter un secret, puis sélectionnez Nouveau secret de référentiel pour ajouter le secret final.
Créez un secret pour votre instance Azure.
-
Nom :
TENANT - Secret : collez le tenantId que vous avez copié à partir de la sortie de la commande de création du principal de service.
-
Nom :
Sélectionnez Ajouter un secret.
2 - Créer un flux de travail
Un flux de travail GitHub Actions définit les tâches qui s’exécutent une fois qu’un événement déclenche le flux de travail. Un flux de travail contient un ou plusieurs travaux qui peuvent s’exécuter en parallèle ou séquentiellement. Pour plus d’informations, consultez Présentation des actions GitHub.
Pour ce tutoriel, nous créons un flux de travail qui contient des travaux pour chacune des tâches suivantes :
- Provisionnez une instance IoT Hub et une instance DPS.
- Liez les instances IoT Hub et DPS les unes aux autres.
- Créez une inscription individuelle sur l’instance DPS et inscrivez un appareil auprès du hub IoT à l’aide de l’authentification par clé symétrique via l’inscription DPS.
- Simulez l’appareil pendant cinq minutes et surveillez les événements IoT Hub.
Les flux de travail sont des fichiers YAML situés dans le .github/workflows/ répertoire d’un référentiel.
Dans votre dépôt GitHub, accédez à l’onglet Actions .
Dans le volet Actions , sélectionnez Nouveau flux de travail.
Dans la page Choisir un flux de travail, vous pouvez choisir des modèles prédéfinis à utiliser. Nous allons créer un propre flux de travail pour ce tutoriel, donc sélectionnez Configurer un flux de travail vous-même.
GitHub crée un fichier de flux de travail pour vous. Notez qu’il se trouve dans le
.github/workflows/répertoire. Donnez au nouveau fichier un nom explicite, par exempledps-tutorial.yml.Ajoutez le paramètre de nom pour donner un nom à votre flux de travail.
name: DPS TutorialAjoutez le paramètre on.workflow_dispatch . Le
onparamètre définit lorsqu’un flux de travail s’exécute. Leworkflow_dispatchparamètre indique que nous voulons déclencher manuellement le flux de travail. Avec ce paramètre, nous pourrions définirinputsqui sera passé au flux de travail à chaque exécution, mais nous n’utilisons pasinputspour ce tutoriel.on: workflow_dispatchDéfinissez les variables d’environnement pour les ressources que vous créez dans le flux de travail. Ces variables sont disponibles pour tous les travaux du flux de travail. Vous pouvez également définir des variables d’environnement pour des travaux individuels ou pour des étapes individuelles au sein des travaux.
Remplacez les valeurs d’espace réservé par vos propres valeurs. Vérifiez que vous spécifiez le même groupe de ressources auquel le principal de service a accès.
env: HUB_NAME: <Globally unique IoT hub name> DPS_NAME: <Desired Device Provisioning Service name> DEVICE_NAME: <Desired device name> RESOURCE_GROUP: <Solution resource group where resources will be created>Définissez des variables d’environnement pour les secrets que vous avez créés dans la section précédente.
SP_USER: ${{ secrets.APP_ID }} SP_SECRET: ${{ secrets.SECRET }} SP_TENANT: ${{ secrets.TENANT }}Ajoutez le paramètre de travaux au fichier de flux de travail.
jobs:Définissez la première tâche de notre flux de travail, que nous appelons la tâche
provision. Ce travail configure les instances IoT Hub et DPS :provision: runs-on: ubuntu-latest steps: - name: Provision Infra run: | az --version az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az iot hub create -n "$HUB_NAME" -g "$RESOURCE_GROUP" az iot dps create -n "$DPS_NAME" -g "$RESOURCE_GROUP"Pour plus d’informations sur les commandes exécutées dans ce travail, consultez :
Définissez une tâche pour
configureles instances DPS et IoT Hub. Notez que ce travail utilise le paramètre needs, ce qui signifie que cette tâche ne s’exécute pas tant que la tâche répertoriée n’a pas terminé sa propre exécution avec succès.configure: runs-on: ubuntu-latest needs: provision steps: - name: Configure Infra run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az iot dps linked-hub create --dps-name "$DPS_NAME" --hub-name "$HUB_NAME"Pour plus d’informations sur les commandes exécutées dans ce travail, consultez :
Définissez un travail appelé
registerqui crée une inscription individuelle, puis utilisez cette inscription pour inscrire un appareil auprès d’IoT Hub.register: runs-on: ubuntu-latest needs: configure steps: - name: Create enrollment run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az extension add --name azure-iot az iot dps enrollment create -n "$DPS_NAME" --eid "$DEVICE_NAME" --attestation-type symmetrickey --auth-type login - name: Register device run: | az iot device registration create -n "$DPS_NAME" --rid "$DEVICE_NAME" --auth-type loginNote
Ce travail et d’autres utilisent le paramètre
--auth-type logindans certaines commandes pour indiquer que l’opération doit utiliser le principal de service à partir de la session Microsoft Entra actuelle. L’alternative--auth-type keyne nécessite pas la configuration du principal de service, mais elle est moins sécurisée.Pour plus d’informations sur les commandes exécutées dans ce travail, consultez :
- az iot dps enrollment create
- az iot device registration create - Cette commande crée un enregistrement d'appareil IoT.
Définir une tâche pour
simulateun appareil IoT qui se connecte au hub IoT et envoie des exemples de messages de télémétrie.simulate: runs-on: ubuntu-latest needs: register steps: - name: Simulate device run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az extension add --name azure-iot az iot device simulate -n "$HUB_NAME" -d "$DEVICE_NAME"Pour plus d’informations sur les commandes exécutées dans ce travail, consultez :
Définissez une tâche sur le point de terminaison IoT Hub pour les événements
monitoret surveillez les messages provenant de l’appareil simulé. Notez que les travaux de simulation et de surveillance définissent tous les deux le travail d’inscription dans leurneedsparamètre. Cette configuration signifie qu’une fois le travail d’inscription terminé, ces deux travaux s’exécutent en parallèle.monitor: runs-on: ubuntu-latest needs: register steps: - name: Monitor d2c telemetry run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az extension add --name azure-iot az iot hub monitor-events -n "$HUB_NAME" -yPour plus d’informations sur les commandes exécutées dans ce travail, consultez :
- Utilisez la commande az iot hub monitor-events pour surveiller les événements de votre hub IoT Azure.
Le fichier de flux de travail complet doit ressembler à cet exemple, avec vos informations remplaçant les valeurs d’espace réservé dans les variables d’environnement :
name: DPS Tutorial on: workflow_dispatch env: HUB_NAME: <Globally unique IoT hub name> DPS_NAME: <Desired Device Provisioning Service name> DEVICE_NAME: <Desired device name> RESOURCE_GROUP: <Solution resource group where resources will be created> SP_USER: ${{ secrets.APP_ID }} SP_SECRET: ${{ secrets.SECRET }} SP_TENANT: ${{ secrets.TENANT }} jobs: provision: runs-on: ubuntu-latest steps: - name: Provision Infra run: | az --version az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az iot hub create -n "$HUB_NAME" -g "$RESOURCE_GROUP" az iot dps create -n "$DPS_NAME" -g "$RESOURCE_GROUP" configure: runs-on: ubuntu-latest needs: provision steps: - name: Configure Infra run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az iot dps linked-hub create --dps-name "$DPS_NAME" --hub-name "$HUB_NAME" register: runs-on: ubuntu-latest needs: configure steps: - name: Create enrollment run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az extension add --name azure-iot az iot dps enrollment create -n "$DPS_NAME" --eid "$DEVICE_NAME" --attestation-type symmetrickey --auth-type login - name: Register device run: | az iot device registration create -n "$DPS_NAME" --rid "$DEVICE_NAME" --auth-type login simulate: runs-on: ubuntu-latest needs: register steps: - name: Simulate device run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az extension add --name azure-iot az iot device simulate -n "$HUB_NAME" -d "$DEVICE_NAME" monitor: runs-on: ubuntu-latest needs: register steps: - name: Monitor d2c telemetry run: | az login --service-principal -u "$SP_USER" -p "$SP_SECRET" --tenant "$SP_TENANT" az extension add --name azure-iot az iot hub monitor-events -n "$HUB_NAME" -yEnregistrez, validez et envoyez (push) ce nouveau fichier dans votre dépôt GitHub.
3 - Exécuter le flux de travail
Accédez à l’onglet Actions de votre dépôt GitHub.
Dans le volet Actions , sélectionnez Didacticiel DPS, qui est le nom que nous avons défini dans le fichier de flux de travail, puis sélectionnez la zone de liste déroulante Exécuter le flux de travail .
Modifiez la branche si vous avez créé votre flux de travail dans une branche autre que principale, puis sélectionnez Exécuter le flux de travail.
Une nouvelle exécution de flux de travail est en cours d'exécution. Sélectionnez le nom pour afficher les détails de l’exécution.
Dans le résumé du flux de travail, vous pouvez regarder à mesure que chaque travail commence et se termine. Sélectionnez n’importe quel nom de travail pour afficher ses détails. Le travail d’appareil simulé s’exécute pendant cinq minutes et envoie des données de télémétrie à IoT Hub. Pendant ce temps, sélectionnez le travail simulé pour surveiller les messages envoyés à partir de l’appareil et le travail de surveillance pour surveiller ces messages reçus par IoT Hub.
Lorsque toutes les tâches se terminent correctement, vous devez voir des coches vertes à côté de chacune.
Nettoyer les ressources
Si vous ne souhaitez pas continuer à utiliser ces ressources créées dans ce didacticiel, supprimez-les en procédant comme suit.
Utilisez Azure CLI :
Répertoriez les ressources de votre groupe de ressources.
az resource list --resource-group <RESOURCE_GROUP_NAME>Pour supprimer des ressources individuelles, utilisez l’ID de ressource.
az resource delete --resource-group <RESOURCE_GROUP_NAME> --ids <RESOURCE_ID>Si vous souhaitez supprimer l’ensemble du groupe de ressources et toutes les ressources qu’il contient, exécutez la commande suivante :
az group delete --resource-group <RESOURCE_GROUP_NAME>
Utilisez le portail Azure :
- Dans le portail Azure, accédez au groupe de ressources où vous avez créé les nouvelles ressources.
- Vous pouvez supprimer l’ensemble du groupe de ressources ou sélectionner les ressources individuelles que vous souhaitez supprimer, puis sélectionner Supprimer.
Étapes suivantes
Découvrez comment provisionner des instances DPS avec d’autres outils d’automatisation.