Google 云 - 计算引擎,使用实例模板插入实例
Google Cloud - Compute Engine, Insert Instance with Instance Template
我想通过 java google-api-客户端使用 InstanceTemplate 创建一个实例。执行该操作后,新实例将显示在 GCP 的计算引擎前端中,并已创建。 10-15 秒后实例消失。
按照参考手册,我无法理解为什么我的代码不起作用。
https://cloud.google.com/compute/docs/reference/rest/v1/instances/insert
Compute.Instances.Insert insert = compute
.instances()
.insert("{{project-id}}","europe-west1-c",instance)
.setSourceInstanceTemplate("/compute/v1/projects/{{project-id}}/global/instanceTemplates/instance-template-1")
.setZone("europe-west1-c")
.setProject("{{project-id}}");
Operation op = insert.execute();
实例对象看起来像这样:
Instance instance = new Instance();
instance.setName(instanceName);
instance.setMachineType("zones/europe-west1-c/machineTypes/g1-small");
Gradle 依赖项
compile 'com.google.api-client:google-api-client:1.31.2'
compile group: 'com.google.apis', name: 'google-api-services-compute', version: 'v1-rev235-1.25.0'
来自 GCP 的日志:
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"status": {
"code": 3,
"message": "INVALID_PARAMETER"
},
"authenticationInfo": {
"principalEmail": "compute-dev-me@{{project-id}}.iam.gserviceaccount.com"
},
"requestMetadata": {
"callerIp": "12.34.56.78",
"callerSuppliedUserAgent": "redacted/0.1 Google-API-Java-Client/1.31.2 Google-HTTP-Java-Client/1.37.0 (gzip),gzip(gfe)"
},
"serviceName": "compute.googleapis.com",
"methodName": "v1.compute.instances.insert",
"resourceName": "projects/{{project-id}}/zones/europe-west1-c/instances/test-mit-richtig",
"request": {
"@type": "type.googleapis.com/compute.instances.insert"
}
},
"insertId": "-duwg4fde7a2",
"resource": {
"type": "gce_instance",
"labels": {
"instance_id": "redacted-number",
"zone": "europe-west1-c",
"project_id": "{{project-id}}"
}
},
"timestamp": "2021-02-xxTxx:xx:xx.565227Z",
"severity": "ERROR",
"logName": "projects/{{project-id}}/logs/cloudaudit.googleapis.com%2Factivity",
"operation": {
"id": "operation-1613xxxx41-xxxxxxxx-xxxxxxxx-xxxxxxx",
"producer": "compute.googleapis.com",
"last": true
},
"receiveTimestamp": "2021-02-xxTxx:xx:xx.569578819Z"
}
查看日志后,如果您收到 无效参数 错误代码。在您的参数中,您将实例名称设置如下:
instance.setName(instanceName);
GCE 实例有一个 naming convention,其中名称必须以小写字母开头,后跟一串字符或连字符,不能以连字符结尾。在您的情况下,您的代码中有一个大写 n(实例Name)。如下设置应该可以解决问题:
instance.setName(instancename);
我在你的日志中注意到的另一件事是项目 ID 显示为 {{project-id}},如果你没有编辑它(如果它有很好的做法,但您应该指定代码的编辑部分以帮助理解日志)。
-----评论后编辑-----
检查 Google Cloud Platform 上的 activity 选项卡后,我们发现这是由服务帐户权限引起的。
在下面的 link 中,您可以找到有关创建和启用 Service Accounts 的信息。
我想通过 java google-api-客户端使用 InstanceTemplate 创建一个实例。执行该操作后,新实例将显示在 GCP 的计算引擎前端中,并已创建。 10-15 秒后实例消失。
按照参考手册,我无法理解为什么我的代码不起作用。
https://cloud.google.com/compute/docs/reference/rest/v1/instances/insert
Compute.Instances.Insert insert = compute
.instances()
.insert("{{project-id}}","europe-west1-c",instance)
.setSourceInstanceTemplate("/compute/v1/projects/{{project-id}}/global/instanceTemplates/instance-template-1")
.setZone("europe-west1-c")
.setProject("{{project-id}}");
Operation op = insert.execute();
实例对象看起来像这样:
Instance instance = new Instance();
instance.setName(instanceName);
instance.setMachineType("zones/europe-west1-c/machineTypes/g1-small");
Gradle 依赖项
compile 'com.google.api-client:google-api-client:1.31.2'
compile group: 'com.google.apis', name: 'google-api-services-compute', version: 'v1-rev235-1.25.0'
来自 GCP 的日志:
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"status": {
"code": 3,
"message": "INVALID_PARAMETER"
},
"authenticationInfo": {
"principalEmail": "compute-dev-me@{{project-id}}.iam.gserviceaccount.com"
},
"requestMetadata": {
"callerIp": "12.34.56.78",
"callerSuppliedUserAgent": "redacted/0.1 Google-API-Java-Client/1.31.2 Google-HTTP-Java-Client/1.37.0 (gzip),gzip(gfe)"
},
"serviceName": "compute.googleapis.com",
"methodName": "v1.compute.instances.insert",
"resourceName": "projects/{{project-id}}/zones/europe-west1-c/instances/test-mit-richtig",
"request": {
"@type": "type.googleapis.com/compute.instances.insert"
}
},
"insertId": "-duwg4fde7a2",
"resource": {
"type": "gce_instance",
"labels": {
"instance_id": "redacted-number",
"zone": "europe-west1-c",
"project_id": "{{project-id}}"
}
},
"timestamp": "2021-02-xxTxx:xx:xx.565227Z",
"severity": "ERROR",
"logName": "projects/{{project-id}}/logs/cloudaudit.googleapis.com%2Factivity",
"operation": {
"id": "operation-1613xxxx41-xxxxxxxx-xxxxxxxx-xxxxxxx",
"producer": "compute.googleapis.com",
"last": true
},
"receiveTimestamp": "2021-02-xxTxx:xx:xx.569578819Z"
}
查看日志后,如果您收到 无效参数 错误代码。在您的参数中,您将实例名称设置如下:
instance.setName(instanceName);
GCE 实例有一个 naming convention,其中名称必须以小写字母开头,后跟一串字符或连字符,不能以连字符结尾。在您的情况下,您的代码中有一个大写 n(实例Name)。如下设置应该可以解决问题:
instance.setName(instancename);
我在你的日志中注意到的另一件事是项目 ID 显示为 {{project-id}},如果你没有编辑它(如果它有很好的做法,但您应该指定代码的编辑部分以帮助理解日志)。
-----评论后编辑-----
检查 Google Cloud Platform 上的 activity 选项卡后,我们发现这是由服务帐户权限引起的。
在下面的 link 中,您可以找到有关创建和启用 Service Accounts 的信息。