Google cloud platform 如何在Google cloud run api中以编程方式获取当前项目id

Google cloud platform 如何在Google cloud run api中以编程方式获取当前项目id,google-cloud-platform,google-cloud-pubsub,google-cloud-run,Google Cloud Platform,Google Cloud Pubsub,Google Cloud Run,我有一个容器化的API,在CloudRun中运行。如何获取云运行正在执行的当前项目ID?我试过: 我在日志中的textpayload中看到了它,但我不确定如何在post函数中读取textpayload?我收到的发布订阅消息缺少此信息 我已经阅读了查询元数据api的内容,但对于如何从api内部再次执行该操作还不是很清楚。有链接吗 还有别的办法吗 编辑: 在下面的一些评论之后,我在.net API中运行了这段代码,运行在云运行中 private string GetProject

我有一个容器化的API,在CloudRun中运行。如何获取云运行正在执行的当前项目ID?我试过:

  • 我在日志中的textpayload中看到了它,但我不确定如何在post函数中读取textpayload?我收到的发布订阅消息缺少此信息
  • 我已经阅读了查询元数据api的内容,但对于如何从api内部再次执行该操作还不是很清楚。有链接吗
还有别的办法吗

编辑:

在下面的一些评论之后,我在.net API中运行了这段代码,运行在云运行中

        private string GetProjectid()
        {
            var projectid = string.Empty;
            try {
                var PATH = "http://metadata.google.internal/computeMetadata/v1/project/project-id";
                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("Metadata-Flavor", "Google");
                    projectid = client.GetStringAsync(PATH).Result.ToString();
                }

                Console.WriteLine("PROJECT: " + projectid);
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message + " --- " + ex.ToString());
            }
            return projectid;
        }
更新,它工作。我的构建推送失败了,我没有看到。谢谢大家

  • 我遵循了教程

  • 我在
    requirements.txt
    模块中添加了
    gcloud

       Flask==1.1.1
       pytest==5.3.0; python_version > "3.0"
       pytest==4.6.6; python_version < "3.0"
       gunicorn==19.9.0
       gcloud
    
  • 我查看了日志:

      Hello (pubsub message).
      This is the project my-project-id.
    

  • 通过向
    http://metadata.google.internal/computeMetadata/v1/project/project-id
    带有
    元数据风格:Google
    标题

    例如,在Node.js中:

    index.js

    const express = require('express');
    const axios = require('axios');
    const app = express();
    
    const axiosInstance = axios.create({
      baseURL: 'http://metadata.google.internal/',
      timeout: 1000,
      headers: {'Metadata-Flavor': 'Google'}
    });
    
    app.get('/', (req, res) => {
      let path = req.query.path || 'computeMetadata/v1/project/project-id';
      axiosInstance.get(path).then(response => {
        console.log(response.status)
        console.log(response.data);
        res.send(response.data);
      });
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
      console.log('Hello world listening on port', port);
    });
    
    package.json

    {
      "name": "metadata",
      "version": "1.0.0",
      "description": "Metadata server",
      "main": "app.js",
      "scripts": {
        "start": "node index.js"
      },
      "author": "",
      "license": "Apache-2.0",
      "dependencies": {
        "axios": "^0.18.0",
        "express": "^4.16.4"
      }
    }
    

    应该可以使用
    Google.Api.Gax
    ()中的
    平台
    类。
    Google.Api.Gax
    包通常作为其他Google.NET包(如
    Google.Cloud.Storage.V1

    var projectId = Google.Api.Gax.Platform.Instance().ProjectId;
    
    在GAE平台上,您还可以简单地检查环境变量
    GOOGLE_CLOUD_项目
    GCLOUD_项目

    var projectId = Environment.GetEnvironmentVariable("GOOGLE_CLOUD_PROJECT")
                 ?? Environment.GetEnvironmentVariable("GCLOUD_PROJECT");
    

    以下是获取当前项目ID的Java代码片段:

                String url = "http://metadata.google.internal/computeMetadata/v1/project/project-id";
                HttpURLConnection conn = (HttpURLConnection)(new URL(url).openConnection());
                conn.setRequestProperty("Metadata-Flavor", "Google");
                try {
                    InputStream in = conn.getInputStream();
                    projectId = new String(in.readAllBytes(), StandardCharsets.UTF_8);
                } finally {
                    conn.disconnect();
                }               
    

    http://metadata.google.internal/computeMetadata/v1/project/project-id
    I get(响应状态代码不表示成功:403(尝试执行此操作时禁止。您从何处发出请求?为您的计算引擎实例启用了哪些作用域?您添加了哪些HTTP标头?请参阅Steren关于向元数据服务器发出请求的回答,该请求必须包含
    元数据风格:Google
    标头。我没有!我如何获得访问令牌?我更改了通信仅当您的代码在计算引擎实例中运行且不需要访问令牌时,作为元数据服务器的ent才可用。如果您在其他地方运行代码(例如,web浏览器),您无法调用此终结点。请编辑您的问题,其中包含有关如何调用此终结点的确切详细信息,并包含错误消息。我正在尝试相同的操作,但运气不佳。请尝试{var PATH=”“;使用(var client=new HttpClient()){client.DefaultRequestHeaders.Add(“Metadata Flavor”、“Google”);projectid=client.GetStringAsync(PATH.Result.ToString();}Console.WriteLine(“项目:+projectid”);}
                String url = "http://metadata.google.internal/computeMetadata/v1/project/project-id";
                HttpURLConnection conn = (HttpURLConnection)(new URL(url).openConnection());
                conn.setRequestProperty("Metadata-Flavor", "Google");
                try {
                    InputStream in = conn.getInputStream();
                    projectId = new String(in.readAllBytes(), StandardCharsets.UTF_8);
                } finally {
                    conn.disconnect();
                }