Google Cloud Client Library for Java:insertInstance()导致不可用的异常

Google Cloud Client Library for Java:insertInstance()导致不可用的异常,java,api,google-cloud-sdk,Java,Api,Google Cloud Sdk,我正在尝试使用Cloud API Client Library for Java创建一个实例。我使用控制台中的“等效REST”按钮浏览了不同的构建器类,查看可能缺少的项,但是现在调用insertInstance()返回了一个不可用的异常。在控制台中检查时,我发现没有创建任何内容。谁能帮我找到我做错了什么?所有的URL似乎都是正确的:当它们不正确时,我会得到一个有用的异常,其中有详细的错误 SETUP\u NO\u BOT常量是我的安装脚本的文本,它创建一个用户,从一个bucket复制文件,诸如此

我正在尝试使用Cloud API Client Library for Java创建一个实例。我使用控制台中的“等效REST”按钮浏览了不同的构建器类,查看可能缺少的项,但是现在调用
insertInstance()
返回了一个不可用的异常。在控制台中检查时,我发现没有创建任何内容。谁能帮我找到我做错了什么?所有的URL似乎都是正确的:当它们不正确时,我会得到一个有用的异常,其中有详细的错误

SETUP\u NO\u BOT
常量是我的安装脚本的文本,它创建一个用户,从一个bucket复制文件,诸如此类的东西。但是,这不应该是问题所在,因为那样的话,我会期望一个正在运行的VM在启动日志中出现错误

我能找到的所有示例都使用了较旧的
com.google.api.services
软件包或
com.google.cloud.compute.deprecated
软件包,并且都没有使用类似的类结构

如果我在URL中使用了错误的相同代码(现在由
getUrl()
调用生成),我会得到一个很好的错误返回。此版本始终返回503

    private Instance createInstance() {
        logger.debug("createInstance(): Creating boot disk based on \"{}\".", getBaseImage());
        AttachedDiskInitializeParams diskParams;
        if (ifSet(getBaseImageProject())) {
            diskParams = AttachedDiskInitializeParams.newBuilder()
                    .setSourceImage(getUrl(getBaseImageProject(), "images", getBaseImage()))
                    .setDiskSizeGb("10")
                    .setDiskType(getUrl(context, "diskTypes", "pd-standard"))
                    .build();
        }
        else {
            diskParams = AttachedDiskInitializeParams.newBuilder()
                    .setSourceImage(getUrl("images", getBaseImage()))
                    .setDiskSizeGb("10")
                    .setDiskType(getUrl(context, "diskTypes", "pd-standard"))
                    .build();
        }
        AttachedDisk disk = AttachedDisk.newBuilder()
                .setType("PERSISTENT")
                .setBoot(true)
                .setMode("READ_WRITE")
                .setAutoDelete(true)
                .setDeviceName(getName())
                .setInitializeParams(diskParams)
                .build();

        logger.debug("createInstance(): Creating network interface to network \"{}\".", getNetwork());
        AccessConfig accessConfig = AccessConfig.newBuilder()
                .setName("External NAT")
                .setType("ONE_TO_ONE_NAT")
                .setNetworkTier("PREMIUM")
                .build();
        NetworkInterface netIntf = NetworkInterface.newBuilder()
                .setNetwork(getUrl(context, "networks", getNetwork()))
                .setSubnetwork(getRegionalUrl(context, "subnetworks", "default"))
                .addAccessConfigs(accessConfig)
                .build();

        logger.debug("createInstane(): Creating startup script metadata.");
        Items metadataItems = Items.newBuilder()
                .setKey("startup-script")
                .setValue(SETUP_NO_BOT)
                .build();
        Metadata metadata = Metadata.newBuilder()
                .addItems(metadataItems)
                .build();

        logger.debug("createInstance(): Create the instance...");
        Instance inst = Instance.newBuilder()
                .setName(getName())
                .setZone(getUrl(context, "zones", context.getZone()))
                .setMachineType(getZonalUrl(context, "machineTypes", getMachineType()))
                .addDisks(disk)
                .setCanIpForward(false)
                .addNetworkInterfaces(netIntf)
                .setMetadata(metadata)
                .build();
        return gceUtil.createInstance(inst) ? gceUtil.getInstance(getName()) : null;
    }
createInstance非常简单:

    /**
     * Create an {@link Instance}.
     */
    public boolean createInstance(Instance instance) {
        logger.debug("createInstance(): project = \"{}\", zone = \"{}\".", getProjectName(), getZoneName());

        Operation response = instClient.insertInstance(ProjectZoneName.of(getProjectName(), getZoneName()), instance);

        return isHttp2xx(response);
    }

设法使它工作起来。项目中“全局”上的一些URL应该是分区的。同样可能的影响是网络接口既有网络又有子网连接。有点恼人,它只是抛出了一个500类异常,而不是一个正确的错误。设法让它工作。项目中“全局”上的一些URL应该是分区的。同样可能的影响是网络接口既有网络又有子网连接。有点恼人,它只是抛出了一个500类异常,而不是一个正确的错误。