【问题标题】:Google compute engine instance start/status/stop using apiGoogle 计算引擎实例使用 api 启动/状态/停止
【发布时间】:2018-11-01 23:13:29
【问题描述】:

如果我的过程结束,我需要启动谷歌云实例并停止。 所以我尝试了来自https://cloud.google.com/compute/docs/reference/rest/v1/instances/get的api调用

为此创建了 API 密钥和 oAuth 客户端 ID,并尝试在邮递员应用程序中进行测试。

在标头 Authorization : Bearer <api_key> 和 URL 中使用的 API 密钥为 key=<api_key>

但是这两种方法都给出了错误401 login required

然后我找到了 API Explorer

https://developers.google.com/apis-explorer/

我也有同样的错误。

我做错了什么。 我需要通过 PHP 代码实现实例启动和停止,因为它是后台进程。

PHP 卷曲响应

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "authError",
                "message": "Invalid Credentials",
                "locationType": "header",
                "location": "Authorization"
            }
        ],
        "code": 401,
        "message": "Invalid Credentials"
    }
}

【问题讨论】:

    标签: php google-api google-compute-engine google-cloud-functions google-api-php-client


    【解决方案1】:

    我认为使用 env 变量实际执行此操作的最简单方法,因为 google api php 客户端库有一个简洁的方法。

    require_once __DIR__ . '/vendor/autoload.php';
    putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');
    
    $client = new Google_Client();
    
    $client->setApplicationName('RandomNameYouNeedToInsert/0.1');
    $client->addScope(array('https://www.googleapis.com/auth/compute'));
    $client->useApplicationDefaultCredentials();
    
    $service = new Google_Service_Compute($client);
    
    // TODO: Update placeholder values.
    project = 'my-project';  
    $zone = 'my-zone';  
    $instance = 'my-instance';  
    
    $response = $service->instances->start($project, $zone, $instance);
    // TODO: Check if the response satisfies your request.
    

    【讨论】:

    • 我使用了来自 google api doc 的相同代码,但收到了需要 401 登录的响应。
    • 尝试添加一个范围 - $client->addScope("googleapis.com/auth/cloud-platform"); 您还可以通过 IAM 添加服务帐户使用计算引擎的权限 如果您编辑您的初始与您从服务器获得的响应有关的问题。
    • 将尝试添加范围和您所说的其他内容。添加了从 curl 收到的响应。
    • 是的。得到解决方案。我只尝试使用 apiKey 和 OAuth。我没有尝试使用服务帐户选项。 @thefolenangel 感谢您的回答。请使用 addScope 行编辑您的答案并突出显示 punenv 行。可能对某人有帮助。还要补充一点,云计算只需要服务帐户授权。
    • @mockdev 很高兴它有帮助,在主要答案中添加了范围。
    猜你喜欢
    • 2015-08-06
    • 2014-11-20
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多