【问题标题】:GCP API Client Libraries Java Examples - com.google.api.services.deploymentmanager.DeploymentManagerGCP API 客户端库 Java 示例 - com.google.api.services.deploymentmanager.DeploymentManager
【发布时间】:2021-07-08 14:33:38
【问题描述】:

我希望使用部署管理器自动配置谷歌云资源。只有我想使用 JAVA API 库而不是 gcloud。

具体需要使用 DeploymentManager 配置以下组件。

  1. 云 SQL - MSSQL
  2. 云运行服务
  3. 带有连接器的 VPC 网络用于将 Cloud Run 连接到 Cloud SQL。

我认为com.google.api.services.deploymentmanager.DeploymentManager 是起点,但我不太确定。

这是我目前所拥有的


        Builder builder = new Builder(
                com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(),
                new com.google.api.client.json.gson.GsonFactory(), null);
        builder.setApplicationName("spatial-cat-319209");
        builder.setDeploymentManagerRequestInitializer(new DeploymentManagerRequestInitializer());
        DeploymentManager deploymentManager = builder.build();

        deploymentManager.deployments().list("spatial-cat-319209").entrySet().stream().forEach(entry -> {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        });
        
        System.out.println(System.getProperty("GOOGLE_APPLICATION_CREDENTIALS"));
        System.out.println(System.getenv("GOOGLE_APPLICATION_CREDENTIALS"));
        
        deploymentManager.deployments().list("spatial-cat-319209").execute();

我在最后一行收到以下错误:

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
GET https://deploymentmanager.googleapis.com/deploymentmanager/v2/projects/spatial-cat-319209/global/deployments
{
  "code": 401,
  "errors": [
    {
      "domain": "global",
      "location": "Authorization",
      "locationType": "header",
      "message": "Login Required.",
      "reason": "required"
    }
  ],
  "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
  "status": "UNAUTHENTICATED"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:118)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:37)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:428)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1111)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:514)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:455)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:565)

我确实有环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向包含服务帐户密钥的文件(使用gcloud auth application-default login 命令生成)

任何见解都会非常有帮助。

【问题讨论】:

    标签: java api google-cloud-platform client google-deployment-manager


    【解决方案1】:

    好的,看来我已经使用下面的代码了。

    我已经通过 processbuilder 和 DeploymentManager API 演示了如何使用 gcloud 命令。我必须使用 GoogleCredentials 来读取服务帐户密钥文件并将其传递给 HttpCredentialsAdapter。

    很难找到,但this guide 派上了用场。发布一个链接,供以后偶然发现的人参考。

    让我知道这是否可以以更好的方式完成。

            GoogleCredentials googleCredentials = GoogleCredentials
                    .fromStream(new FileInputStream(System.getenv("GOOGLE_APPLICATION_CREDENTIALS")));
            HttpRequestInitializer httpRequestInitializer = new HttpCredentialsAdapter(googleCredentials);
    
            Builder builder = new Builder(
                    com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(),
                    com.google.api.client.json.gson.GsonFactory.getDefaultInstance(), httpRequestInitializer);
            builder.setApplicationName("spatial-cat-319209");
            builder.setDeploymentManagerRequestInitializer(new DeploymentManagerRequestInitializer());
            DeploymentManager deploymentManager = builder.build();
    
            deploymentManager.deployments().list("spatial-cat-319209").entrySet().stream().forEach(entry -> {
                System.out.println(entry.getKey() + " = " + entry.getValue());
            });
    
            System.out.println(System.getProperty("GOOGLE_APPLICATION_CREDENTIALS"));
            System.out.println(System.getenv("GOOGLE_APPLICATION_CREDENTIALS"));
            System.out.println("Listing deployments in project using gcloud command ...");
            // Runtime.getRuntime().exec("gcloud deployment-manager deployments list");
            ProcessBuilder processBuilder = new ProcessBuilder();
            Process process = processBuilder.command("powershell", "gcloud", "deployment-manager", "deployments", "list")
                    .start();
            InputStreamReader isr = new InputStreamReader(process.getInputStream());
            BufferedReader rdr = new BufferedReader(isr);
            String line = "";
            while ((line = rdr.readLine()) != null) {
                System.out.println(line);
            }
    
            isr = new InputStreamReader(process.getErrorStream());
            rdr = new BufferedReader(isr);
            while ((line = rdr.readLine()) != null) {
                System.out.println(line);
            }
            int rc = process.waitFor(); // Wait for the process to complete
            System.out.println("Return Code = " + rc);
    
            System.out.println("Listing deployments in project using DeploymentManager API...");
    
            DeploymentsListResponse deploymentsListResponse = deploymentManager.deployments().list("spatial-cat-319209")
                    .execute();
    
            System.out.println("Number of deployments = " + deploymentsListResponse.size());
            deploymentsListResponse.forEach((depl, a) -> System.out.println(depl + " - " + a));
    
            System.out.println("Done");
    
    

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 2020-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多