如何使用Java在资源组中创建IoTHub资源?

时间:2019-08-13 22:08:29

标签: java azure azure-iot-hub

我能够使用Java库在Azure中创建资源组,但无法在该组中创建IoTHub资源。

我尝试使用genericResources,但是它抛出缺少Sku信息的异常。不幸的是,无法在genericResources创建中设置SKU信息。

Error:com.microsoft.azure.CloudException:缺少Sku信息。

1 个答案:

答案 0 :(得分:0)

当前,Azure Management library for java并未涵盖Azure门户中的所有服务。不幸的是,我们现在无法使用它来管理IOT集线器。

我做了一些测试,发现了2个可选的解决方法:

  1. 使用Azure REST API来create an IOT hub resource

  2. 使用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();
    }
}