Java 使用GCE的API插入新实例
我编写了一个代码,使用JavaAPI在GCE中创建实例 但是这个代码不起作用,我得到以下错误Java 使用GCE的API插入新实例,java,api,google-compute-engine,Java,Api,Google Compute Engine,我编写了一个代码,使用JavaAPI在GCE中创建实例 但是这个代码不起作用,我得到以下错误 403 Forbidden { "code" : 403, "errors" : [ { "domain" : "global", "message" : "Insufficient Permission", "reason" : "insufficientPermissions" } ], "message" : "Insufficient Permission
403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
我的代码发布在下面。它有任何错误或需要任何库来导入吗?请帮助我
我导入的库是
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.DataStoreFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.compute.Compute;
import com.google.api.services.compute.ComputeScopes;
import com.google.api.services.compute.model.Instance;
import com.google.api.services.compute.model.InstanceList;
import com.google.api.services.compute.model.NetworkInterface;
import com.google.api.services.compute.model.Operation;
import com.google.api.services.compute.model.Zone;
import com.google.api.services.compute.model.ZoneList;
private static void createInstance(String projectId, JsonFactory jsonFactory,Compute compute) throws IOException {
Instance instance = new Instance();
instance.setFactory(jsonFactory);
// Select a machine type.
String machine = "https://www.googleapis.com/compute/v1/projects/hindproj/global/machineTypes/n1-standard-1";
instance.setMachineType(machine);
// Get a name from the user.
String name = "v1";
instance.setName(name);
// Use the default network. Could select here if needed.
List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();
NetworkInterface iface = new NetworkInterface();
iface.setFactory(jsonFactory);
iface.setName("eth0");
iface.setNetwork("https://www.googleapis.com/compute/v1/projects/hindproj/global/networks/default");//( COMPUTE_API + "/projects/" + projectId + "/networks/default");
networkInterfaces.add(iface);
instance.setNetworkInterfaces(networkInterfaces);
// Select a zone.
String zone = "https://www.googleapis.com/compute/v1/projects/hindproj/zones/us-central1-b";
instance.setZone(zone);
Compute.Instances.Insert ins = compute.instances().insert(projectId,zoneName, instance);
// Finally, let's run it.
Operation op = ins.execute();
System.out.println(op.toPrettyString());
System.out.println(instance.toPrettyString());
}
import com.google.api.client.auth.oauth2.Credential;
导入com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
导入com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
导入com.google.api.client.googleapis.auth.oauth2.googleaauthorizationcodeflow;
导入com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
导入com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
导入com.google.api.client.http.HttpTransport;
导入com.google.api.client.json.JsonFactory;
导入com.google.api.client.json.jackson2.JacksonFactory;
导入com.google.api.client.util.store.DataStoreFactory;
导入com.google.api.client.util.store.FileDataStoreFactory;
导入com.google.api.services.compute.compute;
导入com.google.api.services.compute.ComputeScopes;
导入com.google.api.services.compute.model.Instance;
导入com.google.api.services.compute.model.InstanceList;
导入com.google.api.services.compute.model.NetworkInterface;
导入com.google.api.services.compute.model.Operation;
导入com.google.api.services.compute.model.Zone;
导入com.google.api.services.compute.model.ZoneList;
私有静态void createInstance(字符串projectId、JsonFactory、JsonFactory、Compute Compute)引发IOException{
实例实例=新实例();
setFactory(jsonFactory);
//选择一种机器类型。
字符串机器=”https://www.googleapis.com/compute/v1/projects/hindproj/global/machineTypes/n1-standard-1";
setMachineType(machine);
//从用户处获取名称。
String name=“v1”;
instance.setName(name);
//使用默认网络。如果需要,可以选择此处。
List networkInterfaces=new ArrayList();
NetworkInterface iface=新的NetworkInterface();
iface.setFactory(jsonFactory);
iface.setName(“eth0”);
iface.setNetwork(“https://www.googleapis.com/compute/v1/projects/hindproj/global/networks/default/(COMPUTE_API+“/projects/”+projectd+“/networks/default”);
网络接口。添加(iface);
实例.setNetworkInterfaces(networkInterfaces);
//选择一个区域。
字符串区域=”https://www.googleapis.com/compute/v1/projects/hindproj/zones/us-central1-b";
实例.setZone(zone);
Compute.Instances.Insert ins=Compute.Instances().Insert(projectId,zoneName,instance);
//最后,让我们运行它。
操作op=ins.execute();
System.out.println(op.toPrettyString());
System.out.println(instance.toPrettyString());
}
机器类型资源是分区的,而不是全局的。试一试它是否缺少启动磁盘?您是否使用了正确的ComputeScopes(ComputeScopes.COMPUTE而不是ComputeScopes.COMPUTE\u READONLY)呢?我们看不到创建计算实例的代码,但是设置只读范围可能会产生与您相同的错误。