이 자습서에서는 Azure IoT 작업 클러스터에 OPC UA 자산을 수동으로 추가합니다. 이러한 자산은 Azure IoT 작업 클러스터의 MQTT 브로커에 메시지를 게시합니다. 일반적으로 OT 사용자는 이러한 단계를 완료합니다.
자산은 디바이스, 컴퓨터, 시스템, 프로세스 중 하나를 나타내는 물리적 디바이스 또는 논리 엔터티입니다. 예를 들어 물리적 자산이라 하면 펌프, 모터, 탱크, 생산 라인이 가리킬 수 있습니다. 정의한 논리 자산에는 속성이 있거나, 데이터 요소를 스트리밍하거나, 이벤트를 생성할 수 있습니다.
OPC UA 서버는 자산과 통신하는 소프트웨어 애플리케이션입니다. OPC UA 태그는 OPC UA 서버가 노출하는 데이터 포인트입니다. OPC UA 태그는 자산의 상태, 성능, 품질, 조건에 대한 실시간 데이터 또는 기록 데이터를 제공할 수 있습니다.
이 자습서에서는 운영 환경 웹 UI를 사용하여 자산을 만듭니다. Azure CLI를 사용하여 이러한 작업 중 일부를 완료할 수도 있습니다.
필수 구성 요소
Kubernetes 클러스터에 배포된 보안 설정을 사용하는 Azure IoT Operations 인스턴스입니다. 인스턴스를 만들려면 다음 중 하나를 사용하여 Azure IoT 작업을 배포합니다.
- 빠른 시작: K3s를 사용하여 GitHub Codespaces에서 Azure IoT 작업 실행에서는 자습서에 사용할 수 있는 Azure IoT 작업 인스턴스를 배포하는 간단한 지침을 제공합니다. 그런 다음, 보안 설정을 사용하도록 설정하려면 Azure IoT Operations에서 보안 설정 사용의 단계를 따릅니다.
- 배포 개요에서는 Azure Kubernetes Service 엣지에센셜 또는 K3s를 사용하여 Ubuntu를 사용하여 Windows에 Azure IoT 작업 인스턴스를 배포하는 방법에 대한 자세한 지침을 제공합니다. 배포 문서의 단계에 따라 보안 설정 배포를 수행합니다.
보안 설정을 사용하도록 설정하면 Azure IoT Operations 인스턴스를 포함하는 리소스 그룹에는 다음 리소스도 포함됩니다.
- Kubernetes 클러스터에 동기화할 비밀을 저장하는 Azure Key Vault 인스턴스입니다.
- Azure IoT Operations가 Azure Key Vault 인스턴스에 액세스하는 데 사용하는 사용자 할당 관리 ID입니다.
- 데이터 흐름과 같은 Azure IoT Operations 구성 요소가 Azure Event Hubs와 같은 클라우드 엔드포인트에 연결하는 데 사용할 수 있는 사용자 할당 관리 ID입니다.
보안 설정을 구성할 때 Key Vault 비밀 책임자 역할로 비밀을 관리할 수 있는 권한을 사용자 계정에 부여해야 합니다.
작업 환경 웹 UI에 로그인하려면 Kubernetes - Azure Arc 인스턴스를 포함하는 리소스 그룹에 대한 기여자 권한이 있는 Microsoft Entra ID 계정이 필요합니다. 자세한 내용은 운영 환경 웹 UI를 참조하세요.
특별한 언급이 없는 한, 이 자습서의 콘솔 명령은 Bash 또는 PowerShell 환경에서 실행할 수 있습니다.
어떤 문제를 해결할 수 있나요?
OPC UA 서버가 노출하는 데이터는 구조가 복잡하고 이해하기 어려울 수 있습니다. Azure IoT Operations는 OPC UA 자산을 태그, 이벤트, 속성으로 모델링하는 방법을 제공합니다. 이 모델링을 통해 데이터를 더 쉽게 이해하고 MQTT 브로커 및 데이터 흐름과 같은 다운스트림 프로세스에서 데이터를 사용할 수 있습니다.
또한 이 자습서에서는 Azure Key Vault에 저장된 자격 증명을 사용하여 시뮬레이션된 OPC UA 서버에 인증하는 방법을 설명합니다.
OPC PLC 시뮬레이터 배포
이 자습서에서는 OPC PLC 시뮬레이터를 사용하여 샘플 데이터를 생성합니다. OPC PLC 시뮬레이터를 배포하려면 다음을 수행합니다.
GitHub 리포지토리에서 opc-plc-tutorial-deployment.yaml 파일을 다운로드합니다. 명령줄을 사용하여 다운로드하려면 다음 명령을 실행합니다.
wget https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/refs/heads/main/samples/quickstarts/opc-plc-tutorial-deployment.yaml -O opc-plc-tutorial-deployment.yaml
텍스트 편집기
opc-plc-tutorial-deployment.yaml
에서 다운로드한 파일을 열고 시뮬레이터의 암호를 변경합니다. 암호는 매개 변수를 사용하여 설정됩니다--defaultpassword
. 암호 값을 적어 두세요. 나중에 필요합니다. 그런 다음 변경 내용을 저장합니다.클러스터에 OPC PLC 시뮬레이터를 배포하려면 다음 명령을 실행합니다.
kubectl apply -f opc-plc-tutorial-deployment.yaml
다음 코드 조각은 적용한 YAML 파일을 보여 줍니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: opc-plc-000000
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: opcplc-000000
template:
metadata:
labels:
app.kubernetes.io/component: opcplc-000000
spec:
containers:
- name: opc-plc
image: mcr.microsoft.com/iotedge/opc-plc:latest
args:
- "--plchostname=opcplc-000000"
- "--portnum=50000"
- "--certdnsnames=opcplc-000000"
- "--unsecuretransport"
- "--showpnjsonph"
- "--slownodes=5"
- "--slowrate=10"
- "--fastnodes=10"
- "--fasttypelowerbound=212"
- "--fasttypeupperbound=273"
- "--fasttyperandomization=True"
- "--veryfastrate=1000"
- "--guidnodes=1"
- "--appcertstoretype=FlatDirectory"
- "--dontrejectunknownrevocationstatus"
- "--disableanonymousauth"
- "--defaultuser=contosouser"
- "--defaultpassword=contosouserpassword"
ports:
- containerPort: 50000
volumeMounts:
- name: opc-plc-default-application-cert
mountPath: /app/pki/own
- name: opc-plc-trust-list
mountPath: /app/pki/trusted
volumes:
- name: opc-plc-default-application-cert
secret:
secretName: opc-plc-default-application-cert
- name: opc-plc-trust-list
secret:
secretName: opc-plc-trust-list
serviceAccountName: opcplc-000000-service-account
---
apiVersion: v1
kind: Service
metadata:
name: opcplc-000000
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
type: ClusterIP
selector:
app.kubernetes.io/component: opcplc-000000
ports:
- port: 50000
protocol: TCP
targetPort: 50000
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: opc-plc-self-signed-issuer
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: opc-plc-default-application-cert
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
secretName: opc-plc-default-application-cert
duration: 2160h # 90d
renewBefore: 360h # 15d
issuerRef:
name: opc-plc-self-signed-issuer
kind: Issuer
commonName: OpcPlc
dnsNames:
- opcplc-000000
- opcplc-000000.azure-iot-operations.svc.cluster.local
- opcplc-000000.azure-iot-operations
uris:
- urn:OpcPlc:opcplc-000000
usages:
- digital signature
- key encipherment
- data encipherment
- server auth
- client auth
privateKey:
algorithm: RSA
size: 2048
encodeUsagesInRequest: true
isCA: false
---
apiVersion: v1
kind: Secret
metadata:
name: opc-plc-trust-list
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
data: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: opcplc-000000-service-account
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: opc-plc-000000-secret-access-role
namespace: azure-iot-operations
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: opc-plc-000000-secret-access-rolebinding
namespace: azure-iot-operations
subjects:
- kind: ServiceAccount
name: opcplc-000000-service-account
namespace: azure-iot-operations
roleRef:
kind: Role
name: opc-plc-000000-secret-access-role
apiGroup: rbac.authorization.k8s.io
상호 신뢰 설정
OPC PLC 시뮬레이터가 OPC UA용 커넥터에 데이터를 보내려면 먼저 이들 간에 상호 신뢰를 설정해야 합니다. 이 자습서에서는 OPC PLC 시뮬레이터 및 OPC UA용 커넥터가 자체 서명된 인증서를 사용하여 OPC UA용 커넥터와의 상호 신뢰를 설정합니다.
- 시뮬레이터의 애플리케이션 인스턴스 인증서는 Kubernetes 비밀에
opc-plc-default-application-cert
저장됩니다. - OPC UA의 애플리케이션 인스턴스 인증서 커넥터는 Kubernetes 비밀에
aio-opc-opcuabroker-default-application-cert
저장됩니다.
중요합니다
프로덕션 환경에서 엔터프라이즈급 애플리케이션 인스턴스 인증서를 사용하여 상호 신뢰를 설정합니다. 자세한 내용은 엔터프라이즈급 애플리케이션 인스턴스 인증서 구성을 참조하세요.
시뮬레이터의 신뢰 목록에 커넥터의 인증서 추가
각 OPC UA 서버에는 신뢰 목록을 관리하기 위한 고유한 메커니즘이 있습니다. 커넥터의 인증서를 시뮬레이터의 신뢰 목록에 추가하려면 다음 명령을 실행합니다.
cert=$(kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d)
data=$(kubectl create secret generic temp --from-literal=opcuabroker.crt="$cert" --dry-run=client -o jsonpath='{.data}')
kubectl patch secret opc-plc-trust-list -n azure-iot-operations -p "{\"data\": $data}"
$cert = kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) }
$data = kubectl create secret generic temp --from-literal=opcuabroker.crt="$cert" --dry-run=client -o jsonpath='{.data}'
kubectl patch secret opc-plc-trust-list -n azure-iot-operations -p "{""data"": $data}"
커넥터의 신뢰 목록에 시뮬레이터 인증서 추가
모든 OPC UA 서버 유형에는 애플리케이션 인스턴스 인증서를 관리하기 위한 고유한 메커니즘이 있습니다. 시뮬레이터의 인증서를 opcplc-000000.crt
라는 파일로 다운로드하려면 다음 명령을 실행합니다.
kubectl -n azure-iot-operations get secret opc-plc-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcplc-000000.crt
kubectl -n azure-iot-operations get secret opc-plc-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) } > opcplc-000000.crt
커넥터의 신뢰 목록에 시뮬레이터의 인증서를 추가하려면 다음을 수행합니다.
작업 환경 웹 UI로 이동하여 Microsoft Entra ID 자격 증명으로 로그인합니다.
사이트를 선택합니다. 새 배포를 진행하는 경우, 사이트는 아직 없습니다. 이전에 만든 클러스터를 찾으려면 할당되지 않은 인스턴스 보기를 선택합니다. 운영 환경에서 인스턴스는 Azure IoT 작업을 배포한 클러스터를 나타냅니다.
Azure IoT Operations를 배포한 인스턴스를 선택합니다.
팁
인스턴스가 표시되지 않으면 올바른 Microsoft Entra ID 테넌트에 있지 않을 수 있습니다. 운영 환경의 오른쪽 위 메뉴에서 테넌트를 변경할 수 있습니다.
자산 엔드포인트를 선택한 다음, 인증서 및 비밀 관리:
인증서 페이지에서신뢰 목록을 선택한 다음, 새 인증서를 추가합니다.
인증서 업로드를
opcplc-000000.crt
선택하고 이전에 다운로드한 파일을 선택합니다. 그런 다음 , 업로드를 선택합니다.적용을 선택합니다.
시뮬레이터의 애플리케이션 인스턴스 인증서는 이제 OPC UA의 신뢰 목록에 대한 커넥터에 있습니다.
자산 엔드포인트 추가
이 단계에서는 작업 환경을 사용하여 OPC PLC 시뮬레이터에 연결할 수 있는 자산 엔드포인트를 추가합니다. 자산 엔드포인트를 추가하려면 다음을 수행합니다.
자산 엔드포인트를 선택한 다음, 자산 엔드포인트 만들기를 선택합니다.
다음 엔드포인트 정보를 입력합니다.
필드 값 엔드포인트 이름 설정 opc-ua-connector-0
OPC UA 서버 URL opc.tcp://opcplc-000000:50000
사용자 인증 모드 Username password
동기화된 비밀 이름 plc-credentials
이 자습서에서는 작업 환경 웹 UI에서 Azure Key Vault 인스턴스에 새 비밀을 추가합니다. 비밀은 Kubernetes 클러스터에 자동으로 동기화됩니다.
사용자 이름 참조를 추가하려면 참조 추가, 새로 만들기를 선택합니다.
plcusername
을(를) 비밀 이름으로 입력하고contosouser
을(를) 비밀 값으로 입력합니다. 그런 다음 적용을 선택합니다.암호 참조를 추가하려면 참조 추가, 새로 만들기를 선택합니다.
opc-plc-deployment.yaml 파일에 추가한 비밀 이름과 암호를 비밀 값으로 입력
plcpassword
합니다. 그런 다음 적용을 선택합니다.자산 엔드포인트 정의를 저장하려면 만들기를 선택합니다.
이 구성은 opc-ua-connector-0
이라는 새 자산 엔드포인트를 클러스터에 배포합니다. Azure Portal에서 자산 엔드포인트를 보거나 Kubernetes 클러스터에서 자산 엔드포인트를 보는 데 사용할 kubectl
수 있습니다.
kubectl get assetendpointprofile -n azure-iot-operations
리소스 그룹에 있는 Azure Key Vault 인스턴스에서 plcusername
및 plcpassword
비밀을 볼 수 있습니다. 당신의 Kubernetes 클러스터에 비밀이 동기화되며, kubectl get secret plc-credentials -n azure-iot-operations
명령을 사용하여 이를 확인할 수 있습니다.
동기화된 비밀 관리 페이지에서 작업 환경의 비밀을 볼 수도 있습니다.
자산 관리
운영 환경에서 인스턴스를 선택하면 자산 페이지에서 사용 가능한 자산 목록이 표시됩니다. 아직 자산이 없으면 이 목록은 비어 있습니다.
자산 만들기
자산을 만들려면 자산 만들기를 선택합니다. 그리고 다음 자산 정보를 입력합니다.
필드 | 값 |
---|---|
자산 엔드포인트 | opc-ua-connector-0 |
자산 이름입니다. | thermostat |
설명 | A simulated thermostat asset |
기본 MQTT 항목 | azure-iot-operations/data/thermostat |
기존 사용자 지정 속성을 제거하고 다음 사용자 지정 속성을 추가합니다. 이후 자습서의 Power BI 템플릿에서 해당 속성 이름을 쿼리하므로 정확한 속성 이름을 사용하는 데 주의해야 합니다.
속성 이름 | 속성 세부 정보 |
---|---|
일괄 처리 | 102 |
고객 | 콘토소 |
장비 | 보일러 |
isSpare | 맞다 |
위치 | 시애틀 |
다음을 선택하여 태그 추가 페이지로 이동합니다.
OPC UA 태그 만들기
태그 추가 페이지에서 두 개의 OPC UA 태그를 추가합니다. 각 태그를 추가하려면 태그 또는 CSV 추가를 선택한 다음 태그 추가를 선택합니다. 다음 표에 표시된 태그 세부 정보를 입력합니다.
노드 ID | 태그 이름 | 가시성 모드 |
---|---|---|
ns=3; s=SpikeData | 온도 | 없음 |
여기에 있는 노드 ID는 OPC UA 시뮬레이터와 관련이 있습니다. 노드는 지정된 범위 내에서 임의 값을 생성하며 간헐적으로 급증합니다.
관찰 모드는 None
, Gauge
, Counter
, Histogram
또는 Log
값 중 하나입니다.
기본 설정 관리를 선택하면 각 태그의 기본 샘플링 간격과 큐 크기를 변경할 수 있습니다.
다음을 선택하여 이벤트 추가 페이지로 이동한 후 다음을 선택하여 검토 페이지로 이동합니다.
검토
자산 및 태그 세부 정보를 검토하고 만들기를 선택하기 전에 필요한 모든 조정을 수행합니다.
이 구성은 thermostat
라는 새 자산을 클러스터에 배포합니다. Azure Portal의 리소스 그룹에서 자산을 볼 수 있습니다. 클러스터에서 로컬로 자산을 보는 데 사용할 kubectl
수도 있습니다.
kubectl get assets -n azure-iot-operations
Azure Portal에서 리소스 보기
Azure Portal에서 만든 자산 엔드포인트와 자산을 보려면 Azure IoT 작업 인스턴스가 포함된 리소스 그룹으로 이동합니다. Azure IoT 작업 리소스 그룹에서 온도 조절기 자산을 볼 수 있습니다. 숨겨진 형식 표시를 선택하면 자산 엔드포인트도 볼 수 있습니다.
포털을 사용하면 자산 세부 정보를 볼 수 있습니다. 자세한 내용을 보려면 JSON 보기를 선택합니다.
데이터 흐름 확인
mosquitto_sub 도구를 사용하여 데이터가 MQTT 브로커로 흐르는지 확인합니다. 이 예에서는 Kubernetes 클러스터 내에서 mosquitto_sub 도구를 실행합니다.
클러스터의 MQTT 브로커와 상호 작용하는 데 유용한 mosquitto_pub 및 mosquitto_sub 도구가 포함된 Pod를 배포하려면 다음 명령을 실행합니다.
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
다음 코드 조각은 적용한 YAML 파일을 보여 줍니다.
# Important: do not use in production environments # Create a service account apiVersion: v1 kind: ServiceAccount metadata: name: mqtt-client namespace: azure-iot-operations --- # Creates a pod with mosquitto-clients and mqttui utilities in your cluster apiVersion: v1 kind: Pod metadata: name: mqtt-client # The namespace must match the IoT MQ BrokerListener's namespace # Otherwise use the long hostname: aio-broker.azure-iot-operations.svc.cluster.local namespace: azure-iot-operations spec: # Use the "mqtt-client" service account which comes with default deployment # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations` serviceAccountName: mqtt-client containers: # Install mosquitto and mqttui utilities on Alpine linux - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] resources: limits: cpu: 500m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: broker-sat mountPath: /var/run/secrets/tokens - name: trust-bundle mountPath: /var/run/certs volumes: - name: broker-sat projected: sources: - serviceAccountToken: path: broker-sat audience: aio-internal # Must match audience in BrokerAuthentication expirationSeconds: 86400 - name: trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle # Default root CA cert
주의
이 구성은 안전하지 않습니다. 프로덕션 환경에서는 이 구성을 사용하지 마세요.
mqtt-client Pod가 실행 중일 때 다음 명령을 실행하여 만든 Pod에 셸 환경을 만듭니다.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
mqtt-client Pod의 Bash 셸에서 항목을 구독한
data/thermostat
도구를 사용하여 MQTT 브로커에 연결하려면 다음 명령을 실행합니다.mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
이 명령은
data/thermostat
를 눌러 중지할 때까지 계속 실행되며 항목에 도착하는 메시지를 표시합니다. 셸 환경을 종료하려면exit
를 입력합니다.
추가한 자동 온도 조절기 자산이 데이터를 게시하고 있는지 확인하려면, 토픽 azure-iot-operations/data
에서 메시지를 확인하십시오.
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (92 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:44.5030912Z","Value":48.17536741017152}}
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (90 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:45.50333Z","Value":98.22872507286887}}
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (92 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:46.503381Z","Value":12.533323356430426}}
데이터 흐름이 없는 경우 aio-opc-opc.tcp-1
Pod를 다시 시작합니다.
다음 명령을 사용하여
aio-opc-opc.tcp-1
Pod의 이름을 찾습니다.kubectl get pods -n azure-iot-operations
Pod의 이름은
aio-opc-opc.tcp-1-849dd78866-vhmz6
과 같습니다.다음 예제와 같은 명령을 사용하여
aio-opc-opc.tcp-1
Pod를 다시 시작합니다. 이전 단계의aio-opc-opc.tcp-1
Pod 이름을 사용합니다.kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
이전 자습서에서 추가한 샘플 태그는 다음 예와 같은 자산의 메시지를 생성합니다.
{
"temperature":{
"Value":24.86898871648548,
"SourceTimestamp":"2025-04-25T14:50:07.195274Z"
}
}
문제를 어떻게 해결했나요?
이 자습서에서는 자산 엔드포인트를 추가한 다음 자산과 태그를 정의했습니다. 자산과 태그는 MQTT 브로커 및 기타 다운스트림 프로세스에서 데이터를 더 쉽게 사용할 수 있도록 OPC UA 서버의 데이터를 모델링합니다.
Azure Key Vault에 저장된 자격 증명을 사용하여 OPC UA 서버에 인증했습니다. 이 방법은 자산 정의에서 자격 증명을 하드 코딩하는 것보다 더 안전합니다.
다음 자습서에서 정의한 자동 온도 조절기 자산을 사용합니다.
리소스 정리
다음 자습서를 진행하는 경우에는 모든 리소스를 유지해야 합니다.
Azure IoT 작업 배포를 제거하지만 클러스터는 유지하려면 az iot ops delete 명령을 사용합니다.
az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
이 빠른 시작을 위해 만든 모든 리소스를 삭제하려면 Azure IoT 작업을 배포한 Kubernetes 클러스터를 삭제한 다음, 해당 클러스터가 포함된 Azure 리소스 그룹을 제거합니다.
이러한 빠른 시작에서 Codespaces를 사용한 경우 GitHub에서 Codespace를 삭제합니다.