From 3a9461af7951b18a29985081c06f7fac1c6cdb7b Mon Sep 17 00:00:00 2001 From: davidE <116028030+david-emakenemi@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:23:40 -0700 Subject: [PATCH] Create adls-df.bicep --- samples/quickstarts/adls-df.bicep | 219 ++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 samples/quickstarts/adls-df.bicep diff --git a/samples/quickstarts/adls-df.bicep b/samples/quickstarts/adls-df.bicep new file mode 100644 index 0000000..09f3929 --- /dev/null +++ b/samples/quickstarts/adls-df.bicep @@ -0,0 +1,219 @@ +var opcuaSchemaContent = ''' +{ + "$schema": "Delta/1.0", + "type": "object", + "properties": { + "type": "struct", + "fields": [ + { + "name": "temperature", + "type": { + "type": "struct", + "fields": [ + { + "name": "SourceTimestamp", + "type": "string", + "nullable": true, + "metadata": {} + }, + { + "name": "Value", + "type": "integer", + "nullable": true, + "metadata": {} + }, + { + "name": "StatusCode", + "type": { + "type": "struct", + "fields": [ + { + "name": "Code", + "type": "integer", + "nullable": true, + "metadata": {} + }, + { + "name": "Symbol", + "type": "string", + "nullable": true, + "metadata": {} + } + ] + }, + "nullable": true, + "metadata": {} + } + ] + }, + "nullable": true, + "metadata": {} + }, + { + "name": "Tag 10", + "type": { + "type": "struct", + "fields": [ + { + "name": "SourceTimestamp", + "type": "string", + "nullable": true, + "metadata": {} + }, + { + "name": "Value", + "type": "integer", + "nullable": true, + "metadata": {} + }, + { + "name": "StatusCode", + "type": { + "type": "struct", + "fields": [ + { + "name": "Code", + "type": "integer", + "nullable": true, + "metadata": {} + }, + { + "name": "Symbol", + "type": "string", + "nullable": true, + "metadata": {} + } + ] + }, + "nullable": true, + "metadata": {} + } + ] + }, + "nullable": true, + "metadata": {} + } + ] + } +} +''' + + +param customLocationName string = '' +param defaultDataflowEndpointName string = 'default' +param defaultDataflowProfileName string = 'default' +param schemaRegistryName string = '' +param aioInstanceName string = '' + +param opcuaSchemaName string = 'opcua-output-delta' +param opcuaSchemaVer string = '1' +param persistentVCName string = '' + + +resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = { + name: customLocationName +} + +resource aioInstance 'Microsoft.IoTOperations/instances@2024-08-15-preview' existing = { + name: aioInstanceName +} + +resource defaultDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-08-15-preview' existing = { + parent: aioInstance + name: defaultDataflowEndpointName +} + +resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2024-08-15-preview' existing = { + parent: aioInstance + name: defaultDataflowProfileName +} + +resource schemaRegistry 'Microsoft.DeviceRegistry/schemaRegistries@2024-09-01-preview' existing = { + name: schemaRegistryName +} + +resource opcSchema 'Microsoft.DeviceRegistry/schemaRegistries/schemas@2024-09-01-preview' = { + parent: schemaRegistry + name: opcuaSchemaName + properties: { + displayName: 'OPC UA Delta Schema' + description: 'This is a OPC UA delta Schema' + format: 'Delta/1.0' + schemaType: 'MessageSchema' + } +} + +resource opcuaSchemaInstance 'Microsoft.DeviceRegistry/schemaRegistries/schemas/schemaVersions@2024-09-01-preview' = { + parent: opcSchema + name: opcuaSchemaVer + properties: { + description: 'Schema version' + schemaContent: opcuaSchemaContent + } +} + +// ADLS Gen2 Endpoint +resource adlsGen2Endpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-08-15-preview' = { + parent: aioInstance + name: 'adls-gen2-ep' + extendedLocation: { + name: customLocation.id + type: 'CustomLocation' + } + properties: { + endpointType: 'DataLakeStorage' + dataLakeStorageSettings: { + authentication: { + method: 'SystemAssignedManagedIdentity' + systemAssignedManagedIdentitySettings: {} + } + batching: { + latencySeconds: 5 + maxMessages: 1000 + } + host: 'https://schemastor.blob.core.windows.net' + } + } +} + +// ADLS dataflow +resource dataflow_adls 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2024-08-15-preview' = { + parent: defaultDataflowProfile + name: 'dataflow-adls' + extendedLocation: { + name: customLocation.id + type: 'CustomLocation' + } + properties: { + mode: 'Enabled' + operations: [ + { + operationType: 'Source' + sourceSettings: { + endpointRef: defaultDataflowEndpoint.name + dataSources: array('azure-iot-operations/data/thermostat') + } + } + { + operationType: 'BuiltInTransformation' + builtInTransformationSettings: { + map: [ + { + inputs: array('*') + output: '*' + } + ] + schemaRef: 'aio-sr://${opcuaSchemaName}:${opcuaSchemaVer}' + serializationFormat: 'Delta' // can also be 'Parquet' + } + } + { + operationType: 'Destination' + destinationSettings: { + endpointRef: adlsGen2Endpoint.name + dataDestination: 'aio' + } + } + ] + } +}