如何使用 java 在资源组中创建 IoTHub 资源?
How to create an IoTHub resource in a resource group using java?
我可以使用 java 库在 azure 中创建资源组,但不知道如何在该组中创建 IoTHub 资源。
我试过使用 genericResources,但它抛出了缺少 Sku 信息的异常。不幸的是,在创建 genericResources 时没有设置 SKU 信息的方法。
错误:com.microsoft.azure.CloudException:缺少 Sku 信息。
目前,Azure Management library for java并未涵盖Azure门户中的所有服务。不幸的是,我们现在不能用它来管理 IOT hub。
我做了一些测试,发现了 2 个可选的解决方法:
使用 Azure REST API 到 create an IOT hub resource
使用 Azure Java SDK 通过模板部署 IOT 中心资源:
模板:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string"
},
"location": {
"type": "string"
},
"sku_name": {
"type": "string"
},
"sku_units": {
"type": "string"
},
"d2c_partitions": {
"type": "string"
},
"features": {
"type": "string"
}
},
"resources": [
{
"apiVersion": "2019-07-01-preview",
"type": "Microsoft.Devices/IotHubs",
"name": "[parameters('name')]",
"location": "[parameters('location')]",
"properties": {
"eventHubEndpoints": {
"events": {
"retentionTimeInDays": 1,
"partitionCount": "[parameters('d2c_partitions')]"
}
},
"features": "[parameters('features')]"
},
"sku": {
"name": "[parameters('sku_name')]",
"capacity": "[parameters('sku_units')]"
}
}
]
}
Java代码:
import com.microsoft.azure.management.Azure;
import com.microsoft.azure.management.resources.DeploymentMode;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
public static void DeployTest(Azure azure) {
try(InputStream templatein = new BufferedInputStream(new FileInputStream( "D:\iottemplate\template.json"));
StringWriter templateWriter = new StringWriter();
){
// Read the template.json file
IOUtils.copy(templatein, templateWriter);
// Convert template to JSON object
JSONObject templateNode = new JSONObject(templateWriter.toString());
// Add default value for parameters
JSONObject parameterValue = templateNode.optJSONObject("parameters");
parameterValue.optJSONObject("sku_name").put("defaultValue","B1");
parameterValue.optJSONObject("sku_units").put("defaultValue","1");
parameterValue.optJSONObject("d2c_partitions").put("defaultValue","4");
parameterValue.optJSONObject("location").put("defaultValue","southeastasia");
parameterValue.optJSONObject("features").put("defaultValue","None");
parameterValue.optJSONObject("name").put("defaultValue","jackiottest567");
// Deploy
azure.deployments().define("CreateIOTHub")
.withNewResourceGroup("JackIotTest1", Region.ASIA_SOUTHEAST)
.withTemplate(templateNode.toString())
.withParameters("{}")
.withMode(DeploymentMode.INCREMENTAL)
.create();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我可以使用 java 库在 azure 中创建资源组,但不知道如何在该组中创建 IoTHub 资源。
我试过使用 genericResources,但它抛出了缺少 Sku 信息的异常。不幸的是,在创建 genericResources 时没有设置 SKU 信息的方法。
错误:com.microsoft.azure.CloudException:缺少 Sku 信息。
目前,Azure Management library for java并未涵盖Azure门户中的所有服务。不幸的是,我们现在不能用它来管理 IOT hub。
我做了一些测试,发现了 2 个可选的解决方法:
使用 Azure REST API 到 create an IOT hub resource
使用 Azure Java SDK 通过模板部署 IOT 中心资源:
模板:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string"
},
"location": {
"type": "string"
},
"sku_name": {
"type": "string"
},
"sku_units": {
"type": "string"
},
"d2c_partitions": {
"type": "string"
},
"features": {
"type": "string"
}
},
"resources": [
{
"apiVersion": "2019-07-01-preview",
"type": "Microsoft.Devices/IotHubs",
"name": "[parameters('name')]",
"location": "[parameters('location')]",
"properties": {
"eventHubEndpoints": {
"events": {
"retentionTimeInDays": 1,
"partitionCount": "[parameters('d2c_partitions')]"
}
},
"features": "[parameters('features')]"
},
"sku": {
"name": "[parameters('sku_name')]",
"capacity": "[parameters('sku_units')]"
}
}
]
}
Java代码:
import com.microsoft.azure.management.Azure;
import com.microsoft.azure.management.resources.DeploymentMode;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
public static void DeployTest(Azure azure) {
try(InputStream templatein = new BufferedInputStream(new FileInputStream( "D:\iottemplate\template.json"));
StringWriter templateWriter = new StringWriter();
){
// Read the template.json file
IOUtils.copy(templatein, templateWriter);
// Convert template to JSON object
JSONObject templateNode = new JSONObject(templateWriter.toString());
// Add default value for parameters
JSONObject parameterValue = templateNode.optJSONObject("parameters");
parameterValue.optJSONObject("sku_name").put("defaultValue","B1");
parameterValue.optJSONObject("sku_units").put("defaultValue","1");
parameterValue.optJSONObject("d2c_partitions").put("defaultValue","4");
parameterValue.optJSONObject("location").put("defaultValue","southeastasia");
parameterValue.optJSONObject("features").put("defaultValue","None");
parameterValue.optJSONObject("name").put("defaultValue","jackiottest567");
// Deploy
azure.deployments().define("CreateIOTHub")
.withNewResourceGroup("JackIotTest1", Region.ASIA_SOUTHEAST)
.withTemplate(templateNode.toString())
.withParameters("{}")
.withMode(DeploymentMode.INCREMENTAL)
.create();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}