本文適用於企業架構師和軟體開發人員,協助他們建構自動化管道,在 Google Cloud 機構中使用 Active Assist。本系列文章將探討企業可採用的架構模式,以使用 Active Assist 大規模最佳化雲端足跡。本系列文章包含以下部分:
- 大規模使用 Active Assist 的模式
- 使用無伺服器管道搭配 Active Assist (本文)
- 搭配 Active Assist 使用 GKE Enterprise 工具鍊
本教學課程說明如何使用 Google Cloud 無伺服器技術 建構自動化管道,以擷取及處理 Active Assist 建議。您會根據企業設定的業務規則提供建議。在本教學課程中設定的自動化管道可協助您大規模使用 Active Assist,同時維持團隊主導的審查和啟動程序。如果企業想擴大使用 Active Assist 產品組合,但仍要控管團隊內的審查和啟動程序,這種做法就非常實用。可做為持續整合和持續推送軟體更新 (CI/CD) pipeline 的替代方案。
本教學課程中示範的架構是通用的,您可以擴充架構,以便搭配其他無伺服器產品使用。本教學課程假設您熟悉下列 Google Cloud 技術:
如要完成本教學課程,您必須擁有 Slack 帳戶,或類似的通知/工單處理工具。工具必須在電腦上完成設定,且可供使用。
架構
本教學課程展示的架構採用模組化設計,因此您可以調整通知元件,以符合業務需求。本教學課程會示範如何產生通知並傳送至 Slack。您也可以選擇將通知傳送至 Pub/Sub,或是任何其他通知或票證處理工具。
下方架構圖顯示您將在本教學課程使用的元件:
本架構的組成部分如下:
- 排程器會以固定間隔觸發的 Cloud Run 服務。服務會讀取 Firestore 集合中定義及保留的中繼資料 (專案 ID 和建議事項類型),藉此叫用 Recommender API。
- Active Assist 建議會推送至這個 Pub/Sub 主題,並在其中處理。
- 第二個 Cloud Run 服務,用於剖析 Active Assist 建議。這項服務會根據企業定義並儲存在 Firestore 集合中的業務規則,決定如何處理建議。
- 兩個 Firestore 集合,用於儲存業務中繼資料和業務規則。Firestore 集合的運作方式如下:
- 第一個集合會儲存與擷取 Active Assist 建議相關的商家中繼資料。在本教學課程中,
recommendation type
、Google Cloud project IDs
和locations
屬性會做為商家中繼資料。recommendation-collector
Cloud Run 服務會使用這些屬性,判斷要擷取的建議類型。 - 第二個集合會儲存處理建議時套用的業務規則。
- 第一個集合會儲存與擷取 Active Assist 建議相關的商家中繼資料。在本教學課程中,
目標
- 建立範例 Cloud Run 服務,擷取範例專案的 Active Assist 建議,並將這些建議推送至 Pub/Sub 主題。
- 建立兩個 Firestore 集合,分別儲存範例中繼資料和業務規則。
- 建立第二個 Cloud Run 服務,根據您在本教學課程中定義的範例業務規則處理建議。
- 建立 Slack 頻道,讓 Cloud Run 服務傳送 Active Assist 建議範例。
- 使用 Active Assist 建議範例測試端對端管道。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
- 記下建議管理工具專案的 Google Cloud 專案 ID。下節設定環境會需要用到此 ID。
-
Enable the Cloud Build, Firestore, App Engine,Pub/Sub, Cloud Run, Cloud Scheduler, and Cloud Source Repositories APIs.
在本教學課程中,您會使用預設應用程式憑證。如果系統在「將憑證新增至專案」頁面中提示您建立憑證,請按一下「取消」。 -
Verify that billing is enabled for your Google Cloud project.
-
建立下列項目:
- Slack 頻道範例。
- 範例 Slack 應用程式和連入 Webhook,可接收名為
recommendation-rules-engine
的引擎產生的通知。本教學課程稍後會引導您設定引擎。
建立 Slack 應用程式和連入 Webhook 網址後,請記下該網址,本教學課程稍後會用到。
建構無伺服器管道
在本節中,您將建立建構無伺服器管道所需的元件。平台會根據使用模式和系統指標產生 Active Assist 建議。視產生的建議而定,每個建議類別可能會使用不同的預設時間範圍 (從過去到現在),以分析使用資料和指標。
如果您有包含現有資源和 Active Assist 建議的範例 Google Cloud 專案,可以先適當變更提供的範例程式碼,然後執行管道來處理這些建議。
建立 Firestore 集合
在本節中,您將建立兩個 Firestore 集合。第一個是「集合」,用於儲存與擷取 Active Assist 建議相關的業務中繼資料。activeassist-metadata
第二個是activeassist-business-rules
集合,用於儲存管道處理建議時套用的業務規則。
系統剖析 Active Assist 最佳化建議時,會根據 Firestore 集合中的業務規則產生並傳送通知,或自動將最佳化建議套用至相關資源。 Google Cloud
建立 activeassist-metadata
集合
前往 Google Cloud 控制台的 Firestore 頁面。
如果沒有 Firestore 資料庫,請建立一個。或者,如果您已有 Firestore 資料庫,請跳至下一個步驟。
建立資料庫:
- 按一下「選取原生模式」以啟用 Firestore。
- 選取靠近 Cloud Run 服務執行所在區域的區域位置。
- 按一下「建立資料庫」。完成設定需要一些時間。
在 Firestore 頁面上,按一下「開始收集」。
在「Collection ID」(集合 ID) 欄位中輸入
activeassist-metadata
。按照下表所示填入欄位。如要新增下一個欄位,請按一下「新增欄位」。
欄位名稱 欄位類型 欄位值 注意事項 project
string
Stub-Project-ID
本教學課程會使用欄位值的存根。如要使用現有 Google Cloud 專案的建議,請改為輸入專案 ID。 locations
array
global
部分建議可能適用於特定區域或地帶,例如 VM 最適規模調整建議。其他建議則為全域建議,例如 IAM 建議。 recommenderType
string
google.iam.policy.Recommender
不適用。 填妥欄位後,按一下「儲存」。
建立 activeassist-business-rules
集合
- 按一下「開始收集」。
在「Collection ID」(集合 ID) 欄位中輸入下列內容:
activeassist-business-rules
請按照下表填寫文件。如要新增下一個欄位,請按一下「新增欄位」。
欄位名稱 欄位類型 欄位值 注意事項 action
string
Notify
將值設為 Apply
,服務就會套用建議並移除未使用的角色。projectId
string
Stub-Project-ID
本教學課程使用虛設常式建議。如要使用現有 Google Cloud 專案的建議,請改為輸入專案 ID。 projectNumber
string
999999999
本教學課程使用虛設常式建議。
如果您要使用現有 Google Cloud 專案的建議,請改為輸入專案編號。您可以在Google Cloud 控制台歡迎頁面中找到專案編號。recommenderType
string
google.iam.policy.Recommender
不適用。 recommenderSubtype
string
REMOVE_ROLE
不適用。 slackWebhookURL
string
輸入您在上一個步驟中產生的 Slack Webhook 網址。 網址類似於以下內容:
https://hooks.slack.com/services/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
本教學課程說明如何建立規則,判斷系統是否自動套用建議,或是否產生通知並傳送至 Slack 等平台。如要瞭解如何根據您設定的範例業務規則評估結果,自動套用建議,請參閱相關的存放區。
文件填寫完畢後,按一下「儲存」。
建立排程 Cloud Run 服務
在本節中,您會建立名為 recommendation-collector
的排程 Cloud Run 服務,該服務會叫用 Recommender API 並擷取有效建議。本教學課程會使用 Identity and Access Management Recommender API 做為 Recommender API。這項服務會從您建立的 activeassist-metadata
Firestore 集合讀取中繼資料,判斷要擷取哪些建議。
按一下「在 Cloud Shell 中開啟」,開啟建議管理工具專案的 Cloud Shell。
Cloud Shell 開啟後,會執行下列指令:
- GitHub 存放區複製指令。
- 變更目錄指令。
「Open in Cloud Shell」(在 Cloud Shell 中開啟) 對話方塊隨即顯示,請選取「Trust」(信任),然後按一下「Confirm」(確認)。
將目前建議事項管理員專案的專案 ID 和專案編號設為變數:
export RECO_MGR_PROJECT=PROJECT_ID gcloud config set project $RECO_MGR_PROJECT export RECO_MGR_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
將
PROJECT_ID
替換為專案 ID。輸入指令後,系統會提示您按一下「授權」。設定部署地區的變數:
export REGION=us-central1
雖然本教學課程使用的是
us-central1
地區,但您可以使用任何可使用 Cloud Run 的地區。為 Docker 映像檔建立環境變數:
export RECOMMENDER_IMAGE=gcr.io/$RECO_MGR_PROJECT/recommendation-collector:1.0
建構 Docker 映像檔並上傳至 Container Registry:
gcloud builds submit --tag $RECOMMENDER_IMAGE
為
recommendation-collector
服務建立服務帳戶,以便與管道中的其他 Google Cloud 服務互動:gcloud iam service-accounts create recommendation-collector-sa \ --description "Service Account that the recommendation-collector service uses to invoke other Google Cloud services" \ --display-name "recommendation-collector-sa" \ --project $RECO_MGR_PROJECT
最佳做法是將預先定義的角色指派給服務帳戶,為 Cloud Run 服務授予精細的權限。詳情請參閱服務身分。
授予
recommendation-collector
服務的服務帳戶存取 Firestore 和 Recommender API 的權限:gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/datastore.user gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/pubsub.publisher
如果您是使用複製存放區中提供的範例
stub
執行本教學課程,請跳至下一個步驟。如果您是使用為現有 Google Cloud 專案產生的建議,在本教學課程中建構管道,則必須將 IAM 權限指派給您建立的服務帳戶,才能執行這兩項 Cloud Run 服務。
執行指令前,請先使用要執行此管道的專案 ID 設定環境變數
TEST_PROJECT_ID
:export TEST_PROJECT_ID=TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer gcloud services enable recommender.googleapis.com --project $TEST_PROJECT_ID
請確認您使用的專案 ID 與建立 Firestore 集合時輸入的 ID 相符。
在本教學課程中,您會使用名為
STUB_RECOMMENDATIONS
的環境變數部署服務。這個變數可讓您使用存根測試管道。部署 Cloud Run 服務:
gcloud run deploy recommendation-collector \ --image=$RECOMMENDER_IMAGE \ --no-allow-unauthenticated \ --region $REGION \ --platform managed \ --service-account recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --set-env-vars="STUB_RECOMMENDATIONS=true" \ --project $RECO_MGR_PROJECT \
接受所有系統提示。
如要使用為 Google Cloud 專案產生的 Active Assist 建議執行管道,請先從指令中移除下列程式碼行,再部署指令:
--set-env-vars="STUB_RECOMMENDATIONS=true"
設定 Cloud Scheduler 工作,以執行 recommender-collector service
在 Cloud Shell 中,建立供 Cloud Scheduler 工作使用的服務帳戶,以執行
recommendation-collector
服務:gcloud iam service-accounts create recommender-scheduler-sa \ --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \ --display-name "recommender-scheduler-sa" \ --project $RECO_MGR_PROJECT
將
run/invoker
角色授予服務帳戶,讓服務帳戶能叫用 Cloud Run 服務:gcloud run services add-iam-policy-binding recommendation-collector \ --member=serviceAccount:recommender-scheduler-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=$REGION \ --platform=managed
取得
recommendation-collector
服務網址:export RECOMMENDER_SERVICE_URI=`gcloud run services describe recommendation-collector \ --platform managed \ --project $RECO_MGR_PROJECT \ --region $REGION \ --format="value(status.url)"`/run
建立名為
recommender-iam-scheduler
的 Cloud Scheduler 工作:gcloud scheduler jobs create http recommender-iam-scheduler \ --project $RECO_MGR_PROJECT \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri=$RECOMMENDER_SERVICE_URI \ --description="Scheduler job to invoke recommendation pipeline" \ --oidc-service-account-email="recommender-scheduler-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST"
設定時區,以配合您的位置。時區值格式是根據 tz 資料庫。
詳情請參閱 gcloud scheduler jobs create http。
Cloud Scheduler 工作會叫用
recommendation-collector
服務的/run
路由。設定
--schedule="0 */3 * * *"
旗標後,排程器工作每三小時就會執行一次。你可以根據需求變更這項設定。詳情請參閱「設定 Cron 工作時間表」。
建立推薦規則引擎,處理推薦內容
在本節中,您將建立名為 recommendation-rules-engine
的第二個 Cloud Run 服務,用來處理 recommendation-collector
服務收集的建議。當新建議推送到 activeassist-recommendations
主題時,Pub/Sub 會叫用 recommendation-rules-engine
服務。
這項服務會根據您在 activeassist-business-rules
集合中定義的業務規則,剖析建議。
在 Cloud Shell 中開啟
recommendation-rules-engine
目錄:cd ../recommendation-rules-engine
為 Docker 映像檔建立環境變數:
export RULES_ENGINE_IMAGE=gcr.io/$RECO_MGR_PROJECT/recommendation-rules-engine:1.0
建構 Docker 映像檔並上傳至 Container Registry:
gcloud builds submit --tag $RULES_ENGINE_IMAGE
為
recommendation-rules-engine
服務建立服務帳戶,以便與管道中的其他 Google Cloud 服務互動:gcloud iam service-accounts create recommendation-rules-sa \ --description "Service Account that recommendation-rules-engine uses to invoke other Google Cloud services" \ --display-name "recommendation-rules-sa" \ --project $RECO_MGR_PROJECT
授予
recommendation-rules-engine
服務的服務帳戶 Firestore 存取權:gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/datastore.user
如果您使用本教學課程提供的存根,請繼續下一個步驟。
如果您要使用為Google Cloud 專案產生的建議測試管道,而不是本教學課程提供的虛設常式,請執行下列指令,允許規則引擎服務帳戶存取您的專案:
gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/resourcemanager.projectIamAdmin
部署 Cloud Run 服務:
gcloud run deploy recommendation-rules-engine \ --image=$RULES_ENGINE_IMAGE \ --no-allow-unauthenticated \ --region $REGION \ --platform managed \ --service-account recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --project $RECO_MGR_PROJECT
接受所有系統提示。
取得
recommendation-rules-engine
網址:export RECOMMENDER_SERVICE_RULES_URI=`gcloud run services describe recommendation-rules-engine \ --platform managed \ --project $RECO_MGR_PROJECT \ --region $REGION \ --format="value(status.url)"`/process
當您在下一個步驟中建立的 Pub/Sub 主題提供新建議時,系統會叫用您在這個步驟中擷取的網址。
為有效建議建立 Pub/Sub 主題
在本節中,您將為 Active Assist 建議建立 Pub/Sub 主題,recommender-collector
服務會透過呼叫 Recommender API 擷取這些建議。
在 Cloud Shell 中建立 Pub/Sub 主題:
gcloud pubsub topics create activeassist-recommendations
建立服務帳戶,供 Pub/Sub 用於叫用
recommendation-rules-engine
Cloud Run 服務:gcloud iam service-accounts create recommendation-engine-sub-sa \ --description "Service Account used by Pub/Sub to push recommendations to the recommendation-rules-engine service" \ --display-name "recommendation-engine-sub-sa" \ --project $RECO_MGR_PROJECT
Pub/Sub 服務帳戶必須與所需角色建立關聯,才能發布訊息及叫用
recommendation-rules-engine
服務:gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/run.invoker \ --project $RECO_MGR_PROJECT
為 Pub/Sub 主題建立訂閱項目
為
recommendation-rules-engine
服務建立訂閱項目:# grant Pub/Sub the permission to create tokens PUBSUB_SERVICE_ACCOUNT="service-$RECO_MGR_PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\ --role='roles/iam.serviceAccountTokenCreator' # configure the subscription push identity gcloud pubsub subscriptions create active-assist-recommendations-for-rules-engine \ --topic=activeassist-recommendations \ --topic-project=$RECO_MGR_PROJECT \ --push-auth-service-account=recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --ack-deadline=60 \ --push-endpoint=$RECOMMENDER_SERVICE_RULES_URI
允許您建立的
recommendation-engine-sub-sa
服務帳戶叫用recommendation-rules-engine
服務:gcloud run services add-iam-policy-binding recommendation-rules-engine \ --member=serviceAccount:recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=$REGION \ --platform=managed
使用存根執行端對端測試
平台會根據使用模式和系統指標生成 Active Assist 建議。各類建議可能會使用不同的預設時間範圍,分析過去的用量資料和指標,並據此生成建議。舉例來說,平台會根據過去 90 天的使用模式,產生 IAM 建議。
如要測試端對端管道,您為本教學課程複製的存放區會提供範例建議 (存根),您可以使用這些建議執行端對端管道。
在本節中,執行以下操作:
- 檢查存根建議。
- 手動叫用管道。
- 檢查系統是否產生通知,並傳送至您建立的 Slack 管道。
查看存放區中提供的範例建議:
cat ../recommendation-collector/stub.json
這個檔案提供範例建議,其中包含名為「
roles/gkehub.connect
」的範例角色REMOVE
動作。執行下列指令,讓 Cloud Scheduler 立即執行工作,不必等待下一次排定的執行時間:
gcloud scheduler jobs run recommender-iam-scheduler
在「Cloud Scheduler」控制台頁面中,查看
recommender-iam-scheduler
工作「結果」欄位,確認結果為「成功」。如要詳細瞭解各項服務執行的步驟,您也可以查看
recommendation-collector
服務和recommendation-rules-engine
服務的 Cloud Run 服務記錄。在本教學課程中建構的無伺服器端對端管道成功執行後,會產生 Slack 通知,其中包含建議您移除的角色繫結詳細資料。以下是您收到的通知範例:
Project xxxxxxxx\ **Impact**: SECURITY\ This role has not been used during the observation window.\ **Role**: roles/gkehub.connect\ **Member**: serviceAccount:sample-sa@recommendation-sample.iam.gserviceaccount.com\ **Action**: remove
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
後續步驟
- 瞭解如何使用基礎架構即程式碼的建議。
- 進一步瞭解Google Cloud 無伺服器技術。
- 瞭解如何將 Policy Intelligence 建議整合至 IaC 管道。