이 문서에서는 Azure Functions를 사용하여 서버리스 모드에서 Socket.IO Web PubSub를 사용하여 채팅 앱을 빌드하는 방법을 알아봅니다. 이 자습서에서는 온라인으로 작업하는 동안 ID 기반 인증을 사용하여 앱을 보호하는 방법에 대해 안내합니다.
프로젝트 원본은 Bicep을 사용하여 Azure에 인프라를 배포하고, Azure Functions Core Tools는 함수 앱에 코드를 배포합니다.
필수 조건
활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
Azure Functions Core Tools.
샘플 코드 가져오기
샘플 코드 찾기: Socket.IO TS(서버리스 샘플)
git clone https://github.com/Azure/azure-webpubsub.git
cd ./sdk/webpubsub-socketio-extension/examples/chat-serverless-typescript
인프라 배포
채팅 샘플은 Azure에서 여러 서비스를 배포해야 합니다.
- Azure 함수 앱
- Web PubSub for Socket.IO
- 관리 ID: 서비스 간 통신을 위한 ID
Bicep을 사용하여 인프라를 배포합니다. 파일이 폴더에서 찾습니다 ./infra . az 명령을 사용하여 배포합니다.
az deployment sub create -n "<deployment-name>" -l "<deployment-location>" --template-file ./infra/main.bicep --parameters environmentName="<env-name>" location="<location>"
-
<deployment-name>: 배포의 이름입니다. -
<deployment-location>: 배포 메타데이터의 위치입니다. 리소스가 배포되는 위치는 아닙니다. -
<env-name>: 이름은 리소스 그룹 이름 및 리소스 이름의 일부입니다. -
<location>: 리소스의 위치입니다.
인프라 검토
인프라 릴리스에서는 사용 계획에 Azure 함수 앱과 함수 앱에 필요한 모니터 및 스토리지 계정을 배포합니다. 또한 서버리스 모드에서 Socket.IO 리소스용 Web PubSub를 배포합니다.
ID 기반 인증을 위해 사용자 할당 관리 ID를 배포하고, 함수 앱과 Socket.IO 리소스 모두에 할당하고, 몇 가지 권한을 부여합니다.
- Storage Blob 데이터 소유자 역할: 함수 앱에 대한 스토리지 액세스
- 메트릭 게시자 역할 모니터링: 함수 앱에 대한 액세스 모니터
- Web PubSub 서비스 소유자 역할: 함수 앱용 Socket.IO 대한 Web PubSub 액세스
Microsoft Entra 로그인을 사용하도록 Azure Functions 앱 구성에 따라 서비스 주체를 만듭니다. 서비스 주체에 대한 비밀을 사용하지 않도록 페더레이션 ID 자격 증명을 사용합니다.
함수 앱에 샘플 배포
함수 앱에 샘플 코드를 배포하는 bash 스크립트를 준비했습니다.
# Deploy the project
./deploy/deploy.sh "<deployment-name>"
배포 세부 정보 검토
샘플 앱을 배포하려면 두 단계를 수행해야 합니다.
함수 앱에 코드 게시(Azure Functions 핵심 도구 사용)
func extensions sync npm install npm run build func azure functionapp publish <function-app-name>함수 앱에 요청을 보낼 수 있는 허브 설정을 추가하도록 Socket.IO Web PubSub를 구성합니다. 함수 앱의 웹후크 공급자 제한에 따라 함수로 채워진 확장 키를 가져와야 합니다. 트리거 바인딩에서 자세한 정보를 가져옵니다. 또한 ID 기반 인증을 사용할 때 허브 설정에서 이전에 만든 서비스 주체의 clientId인 대상 리소스를 할당해야 합니다.
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>"
샘플 앱 실행
코드가 배포된 후 웹 사이트를 방문하여 샘플을 시도합니다.
https://<function-endpoint>/api/index
다음 단계
다음으로 자습서에 따라 앱을 단계별로 작성할 수 있습니다.