如何在GCP组织中创建新项目时触发Cloud Functions?
解决GCP组织内新建项目触发Cloud Functions的方案
嘿,我来帮你梳理几个靠谱的方案,解决在GCP组织内创建新项目时触发脚本的问题:
方法1:启用组织级审计日志+Cloud Logging触发器
你说在组织级别没找到新建项目的日志,大概率是组织级的Resource Manager审计日志没启用。默认情况下,组织级的部分审计日志是关闭的,得手动开启:
- 登录GCP控制台,切换到组织层级
- 进入「IAM与管理」>「审计日志」
- 找到「Cloud Resource Manager API」,勾选「数据写入操作」(里面包含
projects.create事件),保存配置
等开启后,新建项目的日志就会出现在组织级的Cloud Logging里了。接下来可以给Cloud Functions配置日志触发器:
- 创建Cloud Functions时,选择「Cloud Logging」作为触发器类型
- 设置日志过滤器:
protoPayload.methodName="google.cloud.resourcemanager.v3.Projects.CreateProject" AND protoPayload.serviceName="cloudresourcemanager.googleapis.com" - 这样每次组织内有新项目创建,这条日志就会触发你的函数执行。
方法2:用Cloud Asset Inventory的资源变更通知
Cloud Asset Inventory专门用来监控GCP资源的变更,包括新项目创建,这个方案更直接:
- 进入「Cloud Asset Inventory」>「通知」页面
- 创建新通知,配置项如下:
- 资源类型选择
cloudresourcemanager.googleapis.com/Project - 事件类型勾选「CREATED」
- 关联一个Pub/Sub主题(如果没有就新建一个)
- 资源类型选择
- 然后给你的Cloud Functions配置Pub/Sub触发器,订阅刚才的主题
- 当组织内有新项目创建时,Cloud Asset会自动往Pub/Sub发消息,触发你的函数。
方法3:定期轮询Resource Manager API(兜底方案)
如果上面的事件驱动方案都有问题,还可以用定期轮询的方式兜底:
- 用Cloud Scheduler创建一个定时任务(比如每分钟执行一次)
- 任务调用Cloud Functions,函数里调用
projects.list或者search.allResourcesAPI获取组织内的所有项目 - 把项目列表和之前存在存储(比如Cloud Storage或者Firestore)里的列表对比,找出新创建的项目,然后执行你的脚本逻辑
- 记得更新存储里的项目列表,避免重复触发。
这些方案里,我最推荐方法2,因为Cloud Asset Inventory的资源变更通知是专门为这类场景设计的,配置起来更简单,也更可靠。
内容的提问来源于stack exchange,提问作者Beembo
相关产品推荐
相关产品推荐

