我正在尝试获取一个服务帐户,以便从 Python 脚本中在 Google Cloud Storage 中创建 blob,但我遇到了凭据问题。
1) 我为我的项目创建服务帐户,然后下载 json 格式的密钥文件:
"home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)
2)我为服务帐户提供必要的凭据(通过子流程中的 gcloud)
roles/viewer, roles/storage.admin, roles/resourcemanager.projectCreator, roles/billing.user
Run Code Online (Sandbox Code Playgroud)
然后我想访问GCS中的一个bucket
from google.cloud import storage
import google.auth
credentials, project = google.auth.default()
client = storage.Client('myproject', credentials=credentials)
bucket = client.get_bucket('my_bucket')
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致:
google.api_core.exceptions.Forbidden: 403 GET
https://www.googleapis.com/storage/v1/b/my_bucket?projection=noAcl:
s_account@myproject.iam.gserviceaccount.com does not have
storage.buckets.get access to my_bucket
Run Code Online (Sandbox Code Playgroud)
如果我设置环境变量,我的运气会更好一些
export GOOGLE_APPLICATION_CREDENTIALS="home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)
并重新运行脚本。但是,我希望这一切都在创建帐户的脚本的一个实例中运行,并继续在存储桶中创建必要的文件。如果我知道我的 json 凭证文件在哪里,如何访问 my_bucket。
google-cloud-storage google-cloud-platform google-cloud-python
Redis ReJSON 模块是否与 Google Memorystore 兼容?我想将 JSON 存储在 memorystore 中,我可以使用 ReJSON 模块吗?
我想从 Google Cloud Storage 存储桶安装 Python 包 (my-package-1.0.0.tar.gz)。
它适用于公开可用的存储桶(允许在 GCS 存储桶上进行公共读取访问?)或签名的 URL(https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers)。不过我想知道是否还有其他解决方案。
我想要一个私有的Python包,可以从用户友好的(或者我可以说开发人员友好的url)访问,例如https://storage.googleapis.com/pypi-packages/my-package/my-package -1.0.0.tar.gz。
我希望可以从其他 Google Cloud Platform 工具(例如 Dataflow、Cloud ML、Composer 或 GKE)访问此软件包
你认为这是可行的吗?
我在同一地区(欧洲西部 2)有 2 个不同的项目(项目 A 和项目 B)。我在项目 A 中创建了一个 Memorystore 实例。因此,我可以从项目 A 连接到 Memorystore,但我也尝试从项目 B 连接到同一个 Memorystore,但没有成功。
我做错了什么?甚至可以将多个项目连接到同一个基本 Memorystore 吗?
google-app-engine google-cloud-platform google-cloud-networking google-cloud-memorystore
如何防止在 Google Cloud PubSub 中发生重复的 msg?
说,我有一个代码来处理它订阅的味精。
说,我有 2 个节点具有相同的服务,具有此代码。
一旦收到消息但尚未确认,另一个节点将收到相同的消息。这就是问题所在,我们有两个重复的 msgs。
void messageReceiver(PubsubMessage pubsubMessage, AckReplyConsumer ackReply) {
submitHandler.handle(toMessage(pubsubMessage))
.doOnSuccess((response) -> {
log.info("Acknowledging the successfully processed message id: {}, response {}", pubsubMessage.getMessageId(), response);
ackReply.ack(); // <---- acknowledged
})
.doOnError((e) -> {
log.error("Not acknowledging due to an exception", e);
ackReply.nack();
})
.doOnTerminate(span::finish)
.subscribe();
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的方法是什么?这是正常行为吗?
我觉得我在这里遗漏了一些东西,但是在标准环境中使用 PHP 5.5 的 Google App Engine 上,我可以非常轻松地为我的用户创建上传 URL 来上传文件,而不会在 PHP 中浪费时间,如下所示:
<?php
use google/appengine/api/cloud_storage/CloudStorageTools;
?><form action="<?php echo CloudStorageTools::createUploadUrl('my/upload/handler.php'); ?>" method="post">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
Run Code Online (Sandbox Code Playgroud)
当然大大简化了(因为该 URL 只能持续 60 秒)。
但是,此 API 似乎不适用于运行 PHP 7.2 的应用程序引擎,我确实需要使用它,而且我似乎找不到用于获取上传 URL 的替代 API;这些真的停产了吗?
还有其他非常有用的功能,例如getImageURL()
获取缩略图等。当然,很多文档仍然指向上述处理用户上传到应用引擎站点的方法!
那么如何在较新的 API 中创建和使用上传 URL?
google-app-engine google-cloud-storage google-cloud-platform php-7.2
我在将 docker 映像推送到我的私有 GCP 注册表时遇到问题。我从 Google Cloud Platform 创建了一个具有所有者角色的新服务帐户。然后,我创建了一个服务密钥,并将 json 文件的内容(从服务帐户下载)复制到 Gitlab CI/CD 变量的 $GCP_SERVICE_KEY 变量中。
这是我的.gitlab-ci.yaml文件:
image: python:3.6
stages:
- push
before_script:
- mkdir -p $HOME/.docker
- echo "$GCP_SERVICE_KEY" >> "$HOME/.docker/config.json"
dockerpush:
stage: push
image: docker:stable
services:
- docker:dind
script:
- docker build --build-arg MONGODB_URI=$MONGODB_URI -t my_image_name .
- docker login -u _json_key --password-stdin https://gcr.io < $HOME/.docker/config.json
- docker tag my_image_name eu.gcr.io/my_project_id/my_image_name
- docker push eu.gcr.io/my_project_id/my_image_name
Run Code Online (Sandbox Code Playgroud)
当我检查控制台日志时,我看到“登录成功”。但我无法推送到我的 GCP 注册表。我检查了项目 ID、用户的角色,一切似乎都正常。但为什么我仍然看到“未经授权”的错误?
$ docker login -u _json_key -p "$GCP_SERVICE_KEY" …
Run Code Online (Sandbox Code Playgroud) continuous-integration push docker google-cloud-platform gitlab-ci
我正在尝试在 Linux 主机 (Ubuntu 18.04) 上的分叉进程中使用 Python SDK 将内容上传到 Google 存储桶操作失败,状态代码为 403:
google.api_core.exceptions.Forbidden: 403 POST https://www.googleapis.com/upload/storage/v1/b/temp-compare/o?uploadType=multipart :('请求失败,状态码',403,'预期之一', )
示例代码:
import random
import string
import json
import os
import requests
from datetime import datetime, timedelta
from google.cloud import storage
def upload_to_bucket(plainText):
gcp_client = storage.Client.from_service_account_json("/path/to/google-bucket-credentials.json")
bucket = gcp_client.get_bucket('bucket_name')
bucket_file_name = random_file_name('json', 10)
blob = bucket.blob(bucket_file_name)
blob.upload_from_string(plainText)
url = blob.generate_signed_url(expiration=datetime.utcnow() + timedelta(hours=48), method="GET")
return url
def random_file_name(ext, length):
return "%s.%s" % (''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(length)), ext)
if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud) docker ×1
fork ×1
gitlab-ci ×1
java ×1
php-7.2 ×1
pip ×1
push ×1
python-2.7 ×1
python-3.6 ×1
python-wheel ×1