Öğretici: GitHub Actions ile Azure Cihaz Sağlama Hizmeti'ni otomatikleştirme
IoT cihaz yaşam döngünüzü yönetmek için GitHub Actions gibi otomasyon araçlarını kullanın. Bu öğreticide, Azure Cihaz Sağlama Hizmeti'ni (DPS) kullanarak bir cihazı IoT hub'ına bağlayan bir GitHub Actions iş akışı gösterilmektedir.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Kimlik doğrulama kimlik bilgilerini depo gizli dizileri olarak kaydedin.
- IoT Hub ve Cihaz Sağlama Hizmeti kaynaklarını sağlamak için bir iş akışı oluşturun.
- İş akışını çalıştırın ve IoT Hub'a bağlanırken simülasyon cihazını izleyin.
Önkoşullar
Bir Azure aboneliği
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure CLI
Veya CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yi yükleyin . Windows veya macOS üzerinde çalıştırıyorsanız Azure CLI'yi bir Docker kapsayıcısında çalıştırmayı göz önünde bulundurun.
Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın.
Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
Sahip olduğunuz depoya veya yönetici erişimine sahip olduğunuz depoya sahip bir GitHub hesabı. Daha fazla bilgi için bkz . GitHub'ı kullanmaya başlama.
1 - Depo gizli dizileri oluşturma
Sonraki bölümde tanımlayacağınız iş akışı, kaynakları oluşturmak ve yönetmek için Azure aboneliğinize erişim gerektirir. Bu bilgileri bulunabileceği korumasız bir dosyaya koymak istemezsiniz, bu nedenle bu bilgileri depolamak için depo gizli dizilerini kullanacağız ancak yine de iş akışında ortam değişkeni olarak erişilebilir hale getireceğiz. Daha fazla bilgi için bkz . Şifrelenmiş gizli diziler.
Yalnızca depo sahipleri ve yöneticileri depo gizli dizilerini yönetebilir.
Hizmet sorumlusu oluşturma
Kişisel erişim kimlik bilgilerinizi sağlamak yerine bir hizmet sorumlusu oluşturup bu kimlik bilgilerini depo gizli dizileri olarak ekleyeceğiz. Yeni bir hizmet sorumlusu oluşturmak için Azure CLI'yi kullanın. Daha fazla bilgi için bkz . Azure hizmet sorumlusu oluşturma.
Belirli bir kaynak grubuna katkıda bulunan erişimi olan bir hizmet sorumlusu oluşturmak için az ad sp create-for-rbac komutunu kullanın. ve
<RESOURCE_GROUP_NAME>
öğesini kendi bilgilerinizle değiştirin<SUBSCRIPTION_ID>
.Bu komut, abonelikte sahip veya kullanıcı erişim yöneticisi rolleri gerektirir.
az ad sp create-for-rbac --name github-actions-sp --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>
Sonraki bölümde kullanmak üzere hizmet sorumlusu oluşturma komutunun çıktısından aşağıdaki öğeleri kopyalayın:
- clientId.
- clientSecret. Bu, hizmet sorumlusu için oluşturulan ve yeniden erişemeyeceğiniz bir paroladır.
- TenantId.
Hizmet sorumlusuna iki erişim rolü daha atamak için az role assignment create komutunu kullanın: Cihaz Sağlama Hizmeti Veri Katkıda Bulunanı ve IoT Hub Veri Katkıda Bulunanı. değerini, önceki komutun çıkışından kopyaladığınız clientId değeriyle değiştirin
<SP_CLIENT_ID>
.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>"
Hizmet sorumlusu kimlik bilgilerini gizli dizi olarak kaydetme
GitHub.com deponuzun Ayarlar gidin.
Gezinti menüsünden Gizli Diziler'i ve ardından Eylemler'i seçin.
Yeni depo gizli dizisi'ni seçin.
Hizmet sorumlusu kimliğiniz için bir gizli dizi oluşturun.
- Ad:
APP_ID
- Gizli dizi: Hizmet sorumlusu oluşturma komutunun çıkışından kopyaladığınız clientId değerini yapıştırın.
- Ad:
Gizli dizi ekle'yi ve ardından yeni depo gizli dizisi'ni seçerek ikinci bir gizli dizi ekleyin.
Hizmet sorumlusu parolanız için bir gizli dizi oluşturun.
- Ad:
SECRET
- Gizli dizi: Hizmet sorumlusu oluşturma komutunun çıkışından kopyaladığınız clientSecret öğesini yapıştırın.
- Ad:
Gizli dizi ekle'yi ve ardından Son gizli diziyi eklemek için Yeni depo gizli dizisi'ni seçin.
Azure kiracınız için bir gizli dizi oluşturun.
- Ad:
TENANT
- Gizli dizi: Hizmet sorumlusu oluşturma komutunun çıkışından kopyaladığınız tenantId değerini yapıştırın.
- Ad:
Add secret (Gizli dizi ekle) öğesini seçin.
2 - İş akışı oluşturma
GitHub Actions iş akışı , bir olay tarafından tetiklendiğinde çalıştırılacak görevleri tanımlar. İş akışı, paralel veya sıralı olarak çalışabilen bir veya daha fazla iş içerir. Daha fazla bilgi için bkz . GitHub Actions'ı anlama.
Bu öğreticide, aşağıdaki görevlerin her biri için işleri içeren bir iş akışı oluşturacağız:
- IoT Hub örneği ve DPS örneği sağlama.
- IoT Hub ve DPS örneklerini birbirine bağlayın.
- DPS örneğinde tek bir kayıt oluşturun ve DPS kaydı aracılığıyla simetrik anahtar kimlik doğrulamasını kullanarak cihazı IoT hub'ına kaydedin.
- Cihazın simülasyonunu beş dakika boyunca yapın ve IoT hub olaylarını izleyin.
İş akışları, bir deponun .github/workflows/
dizininde bulunan YAML dosyalarıdır.
GitHub deponuzda Eylemler sekmesine gidin.
Eylemler bölmesinde Yeni iş akışı'nı seçin.
İş akışı seçin sayfasında, kullanılacak önceden oluşturulmuş şablonları seçebilirsiniz. Bu öğretici için kendi iş akışını oluşturacağız, bu nedenle İş akışını kendiniz ayarla'yı seçin.
GitHub sizin için yeni bir iş akışı dosyası oluşturur. Dizininde
.github/workflows/
olduğuna dikkat edin. Yeni dosyaya gibidps-tutorial.yml
anlamlı bir ad verin.İş akışınıza bir ad vermek için name parametresini ekleyin.
name: DPS Tutorial
on.workflow_dispatch parametresini ekleyin. parametresi,
on
bir iş akışının ne zaman çalıştırılacağını tanımlar. parametresi,workflow_dispatch
iş akışını el ile tetiklemek istediğimizi gösterir. Bu parametreyle, her çalıştırmada iş akışına geçirilecek bir parametre tanımlayabilirizinputs
, ancak bunları bu öğretici için kullanmayacağız.on: workflow_dispatch
İş akışında oluşturduğunuz kaynakların ortam değişkenlerini tanımlayın. Bu değişkenler iş akışındaki tüm işler tarafından kullanılabilir. Ayrıca, tek tek işler için veya işler içindeki tek tek adımlar için ortam değişkenleri tanımlayabilirsiniz.
Yer tutucu değerlerini kendi değerlerinizle değiştirin. Hizmet sorumlusunun erişimi olan kaynak grubunu belirttiğinizden emin olun.
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>
Önceki bölümde oluşturduğunuz gizli diziler için ortam değişkenlerini tanımlayın.
SP_USER: ${{ secrets.APP_ID }} SP_SECRET: ${{ secrets.SECRET }} SP_TENANT: ${{ secrets.TENANT }}
jobs parametresini iş akışı dosyasına ekleyin.
jobs:
İşi çağıracağımız
provision
iş akışımız için ilk işi tanımlayın. Bu iş IoT Hub ve DPS örneklerini sağlar: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"
Bu işte çalıştırılacak komutlar hakkında daha fazla bilgi için bkz:
DPS ve IoT Hub örneklerine
configure
bir iş tanımlayın. Bu işin needs parametresini kullandığına dikkat edin. Bu, listelenen iş kendi çalıştırmasını başarıyla tamamlayana kadar işin çalıştırmayacağı anlamına gelirconfigure
.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"
Bu işte çalıştırılacak komutlar hakkında daha fazla bilgi için bkz:
Tek bir kayıt oluşturacak adlı
register
bir iş tanımlayın ve ardından cihazı IoT Hub'a kaydetmek için bu kaydı kullanın.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
Not
Bu iş ve diğerleri, işlemin geçerli Microsoft Entra oturumundaki hizmet sorumlusunu kullanması gerektiğini belirtmek için bazı komutlarda parametresini
--auth-type login
kullanır. Alternatif olarak hizmet--auth-type key
sorumlusu yapılandırması gerekmez, ancak daha az güvenlidir.Bu işte çalıştırılacak komutlar hakkında daha fazla bilgi için bkz:
IoT hub'ına
simulate
bağlanacak ve örnek telemetri iletileri gönderecek bir IoT cihazına iş tanımlayın.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"
Bu işte çalıştırılacak komutlar hakkında daha fazla bilgi için bkz:
Olaylar için IoT hub uç noktasına bir iş
monitor
tanımlayın ve simülasyon cihazından gelen iletileri izleyin. Sanal ve izleme işlerinin her ikisinin de kendi parametresindeneeds
yazmaç işini tanımladığına dikkat edin. Bu yapılandırma, yazmaç işi başarıyla tamamlandıktan sonra her iki işin de paralel olarak çalıştırılacağı anlamına gelir.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" -y
Bu işte çalıştırılacak komutlar hakkında daha fazla bilgi için bkz:
İş akışı dosyasının tamamı aşağıdaki örnekteki gibi görünmelidir ve bilgileriniz ortam değişkenlerindeki yer tutucu değerlerin yerini almalıdır:
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" -y
Bu yeni dosyayı kaydedin, işleyin ve GitHub deponuza gönderin.
3 - İş akışını çalıştırma
GitHub deponuzun Eylemler sekmesine gidin.
Eylemler bölmesinde, iş akışı dosyasında tanımladığımız ad olan DPS Öğreticisi'ni seçin ve ardından İş akışı çalıştır açılan kutusunu seçin.
İş akışınızı main dışında bir dalda oluşturduysanız dalı değiştirin ve ardından İş akışını çalıştır'ı seçin.
Devam eden yeni bir iş akışı çalıştırması görüntülenir. Çalıştırmanın ayrıntılarını görüntülemek için adı seçin.
İş akışı özetinde, her işin başlayıp tamamlanmasını izleyebilirsiniz. Ayrıntılarını görüntülemek için herhangi bir iş adını seçin. Simülasyon cihazı işi beş dakika boyunca çalışır ve IoT Hub'a telemetri gönderir. Bu süre boyunca, cihazdan gönderilen iletileri izlemek için simülasyon işini ve IoT Hub tarafından alınan iletileri izlemek için izleme işini seçin.
Tüm işler başarıyla tamamlandığında, her birinin yeşil onay işaretlerini görmeniz gerekir.
Kaynakları temizleme
Bu öğreticide oluşturulan bu kaynakları kullanmaya devam etmeyecekseniz, aşağıdaki adımlarla bunları silin.
Azure CLI'yi kullanın:
Kaynak grubunuzdaki kaynakları listeleyin.
az resource list --resource-group <RESOURCE_GROUP_NAME>
Tek tek kaynakları silmek için kaynak kimliğini kullanın.
az resource delete --resource-group <RESOURCE_GROUP_NAME> --ids <RESOURCE_ID>
Kaynak grubunun tamamını ve içindeki tüm kaynakları silmek istiyorsanız aşağıdaki komutu çalıştırın:
az group delete --resource-group <RESOURCE_GROUP_NAME>
Azure portalı kullanın:
- Azure portalında yeni kaynakları oluşturduğunuz kaynak grubuna gidin.
- Kaynak grubunun tamamını silebilir veya kaldırmak istediğiniz kaynakları tek tek seçip Sil'i seçebilirsiniz.
Sonraki adımlar
Diğer otomasyon araçlarıyla DPS örneklerini sağlamayı öğrenin.