前言
工作中用到了Google Cloud Platform(GCP)
由于某些场景需要通过把某些GCP平台的功能集成到自己开发的平台中
如: 同步instance、刷新cdn等
在这之前没有使用过GCP的相关产品
经过一段时间学习测试
终于大致搞懂如何通过提供的sdk进行交互
可能是我才疏学浅
觉得这个GCP的文档写的真的是***
不说国内的阿里云和腾讯云
同样是国外的AWS在文档方面个人觉得写的比GCP好太多了
简介
想要调用api
首先要安装、然后要处理权限认证、最后再根据不同服务调用不同方法
GCP不知道出于什么考虑
提供了两套api客户端库
Cloud 客户端库 google-cloud-python
Google API客户端库 google-api-python-client
按照官方说明
Cloud 客户端库比Google API客户端库更简单易用,且可以支持gRPC,用来提升性能
Cloud 客户端库进行了更细致的包划分
把服务分成了单独的pip包进行管理
经过测试,个人感受Cloud 客户端库确实更加简单易用
经过
两种客户端库的安装就不在单独写了
都是支持 pip install
需要注意Cloud 客户端库要找到对应的库进行安装才行
下面对两个库的调用方法进行说明
认证
在进行实际的使用客户端库之前先简单说明下google的认证
按照官方文档说明
建议使用应用默认凭据 (ADC)提供凭据能大大简化代码量
官方提供了多种方案
一般开发采用把环境变量 GOOGLE_APPLICATION_CREDENTIALS
指向 client-key.json 文件
client-key.json文件一般来源于服务账号的key
关于服务账号以及角色权限等内容不在本文范围内
1
2
# 如下,设置环境变量指向json文件
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/path/to/client-key.json'
Cloud 客户端库
以获取instance为例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装compute库
pip install google-cloud-compute
# 查看文档
# [cloud compute docs]](https://cloud.google.com/compute/docs/reference/rest/v1/instances/list)
# 根据文档 list方法需要project、zone两个必传参数
# 本文只进行简单介绍,如有需求可根据文档处理其他参数
# 由于使用的是环境变量提供的认证
# 代码中不需要处理任何认证行为
from google.cloud.compute_v1.services.instances import InstancesClient
instance_client = InstancesClient()
ins_list = instance_client.list(project=project, zone=region)
print(ins_list)
Google API客户端库
同样以获取instance为例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装compute库
pip install google-api-python-client
# 查看文档 查看支持哪些api以及使用方法
# [cloud compute docs]](https://github.com/googleapis/google-api-python-client/blob/main/docs/dyn/index.md)
# [compute instances list方法使用](https://googleapis.github.io/google-api-python-client/docs/dyn/compute_v1.instances.html#list)
# 根据文档 list方法需要project、zone两个必传参数, 最大返回数量参数示例
# 本文只进行简单介绍,如有需求可根据文档处理其他参数
# 由于使用的是环境变量提供的认证
# 代码中不需要处理任何认证行为
from googleapiclient.discovery import build
service = build('compute', 'v1')
instance_client = service.instances()
instance_client.list(project=project, zone=region, maxResults=100)
ins_list = instance_client.execute()
print(ins_list)
扩展:不使用ADC进行认证
基于安全性考虑
类似密钥,以及密钥文件之类的涉密信息
是不应该上传到代码仓库中的
下面介绍下不使用json进行认证的方法
json文件的内容是一个dict
可以直接把文件内容赋值给一个变量
然后使用google oauth2 进行认证
1
2
3
4
5
6
7
8
9
10
11
12
from google.oauth2 import service_account
account_info = {} # json 文件的内容
# 生成一个credential 对象
cred = service_account.Credentials.from_service_account_info(account_info)
# Cloud 客户端库是在实例化Client对象时使用上面生成的credential对象
instance_client = InstancesClient(credentials=cred)
# Google API 客户端库是在实例化Client对象时使用上面生成的credential对象
service = build('compute', 'v1', credentials=cred)
后记
本文涉及到的内容虽然不多
但是我将近用了一周的时间扣文档
才搞明白这个google api是怎么个用法
有了这个简单的例子
其他的使用方法几乎都能通用
学习记录
Q:594934249
—我是超小弟·一名不务专业的秃头运维—
github:github:chaoxiaodi
微信公众号:老骥不伏枥只是近黄昏