Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure İşlevleri ile Sunucusuz Modda Socket.IO için Web PubSub kullanarak sohbet uygulaması oluşturmayı öğreneceksiniz. Öğretici, çevrimiçi çalışırken kimlik tabanlı kimlik doğrulaması ile uygulamanızın güvenliğini sağlama konusunda size yol gösterir.
Proje kaynağı, Azure'da altyapıyı dağıtmak için Bicep'i ve kodu İşlev Uygulamasına dağıtmak için Core Tools'Azure İşlevleri kullanır.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
temel araçları Azure İşlevleri.
Örnek kodunu alma
Örnek kodu bulun: Socket.IO Sunucusuz Örnek (TS)
git clone https://github.com/Azure/azure-webpubsub.git
cd ./sdk/webpubsub-socketio-extension/examples/chat-serverless-typescript
Altyapı dağıtımı
Sohbet örneklerinin Azure'da birkaç hizmet dağıtması gerekir:
- Azure İşlev Uygulaması
- Socket.IO için Web PubSub
- Yönetilen Kimlik: Hizmetler arasında iletişim kurmak için kimlik
Altyapıyı dağıtmak için Bicep'i kullanırız. Dosya klasöründe bulunur ./infra . az komutuyla dağıtın:
az deployment sub create -n "<deployment-name>" -l "<deployment-location>" --template-file ./infra/main.bicep --parameters environmentName="<env-name>" location="<location>"
-
<deployment-name>: Dağıtımın adı. -
<deployment-location>: Dağıtım meta verilerinin konumu. Kaynakların dağıtıldığı konum olmadığını unutmayın. -
<env-name>: Ad, kaynak grubu adının ve kaynak adının bir parçasıdır. -
<location>: Kaynakların konumu.
Altyapının gözden geçirilmesi
Altyapı sürümünde, tüketim planında bir Azure İşlev Uygulaması ve İşlev Uygulamasının gerektirdiği İzleyici ve Depolama Hesabı'nı dağıtacağız. Ayrıca Sunucusuz Modda Socket.IO kaynak için bir Web PubSub dağıtırız.
Kimlik tabanlı kimlik doğrulaması amacıyla, kullanıcı tarafından atanan bir yönetilen kimlik dağıtacak, bunu hem İşlev Uygulamasına hem de Socket.IO kaynağına atayacağız ve ona bazı izinler verilmektedir:
- Depolama Blobu Veri Sahibi rolü: İşlev Uygulaması için erişim depolama alanı
- Ölçüm Yayımcısı rolünü izleme: İşlev Uygulaması için erişim izleyicisi
- Web PubSub Hizmeti Sahibi rolü: İşlev Uygulaması için Socket.IO için Web PubSub'a Erişme
Azure İşlevleri uygulamanızı Microsoft Entra oturum açma özelliğini kullanacak şekilde yapılandırmaya göre bir Hizmet Sorumlusu oluştururuz. Hizmet Sorumlusu için gizli dizi kullanmaktan kaçınmak için Federasyon kimliği kimlik bilgilerini kullanırız.
İşlev Uygulamasına örnek dağıtma
Örnek kodu İşlev Uygulamasına dağıtmak için bir bash betiği hazırladık:
# Deploy the project
./deploy/deploy.sh "<deployment-name>"
Dağıtım ayrıntılarını gözden geçirin
Örnek uygulamayı dağıtmak için iki adım gerçekleştirmemiz gerekir.
İşlev Uygulaması'nda kod yayımlama (Azure İşlevleri Çekirdek Araçları'nı kullanma)
func extensions sync npm install npm run build func azure functionapp publish <function-app-name>web PubSub'ı Socket.IO için yapılandırarak İşlev Uygulamasına istek gönderebilen bir hub ayarı ekleyin. İşlev Uygulamasının Web Kancası sağlayıcısının sınırlamasına göre İşlev tarafından doldurulan bir uzantı anahtarı almanız gerekir. Tetikleyici Bağlaması'nda daha fazla ayrıntı alın. Kimlik tabanlı kimlik doğrulamasını kullandığımız için hub ayarlarında, daha önce oluşturulan Hizmet Sorumlusunun clientId değeri olan hedef kaynağı atamanız gerekir.
code=$(az functionapp keys list -g <resource-group> -n <function-name> --query systemKeys.socketio_extension -o tsv) az webpubsub hub create -n <socketio-name> -g <resource-group> --hub-name "hub" --event-handler url-template="https://${<function-name>}.azurewebsites.net/runtime/webhooks/socketio?code=${code}" user-event-pattern="*" auth-type="ManagedIdentity" auth-resource="<service-principal-client-id>"
Örnek Uygulamayı Çalıştırma
Kod dağıtıldıktan sonra örneği denemek için web sitesini ziyaret edin:
https://<function-endpoint>/api/index
Sonraki adımlar
Ardından, uygulamayı adım adım yazmak için öğreticiyi izleyebilirsiniz: