Terraform 越來越受歡迎是有原因的,因為它提供了高水準的控制靈活性,如 IaC(基礎設施即程式碼)
支援模組,追蹤基礎架構的狀態,如果您的專案是複雜的、多雲或混合環境,那麼它會很有幫助。
首先,如果您尚未安裝 Terraform,請務必遵循本指南進行操作,並確保已設定 GCP 帳戶。
您應該已經透過其他方式(例如 CLI)預先部署了應用程序,以了解部署過程、基線配置、增量過渡等。
我在下面新增了手動部署的相關部落格??
https://blog.stackademic.com/how-to-deploy-a-go-service-to-gcp-cloud-run-694d01cab5b5
對於我的專案結構,我有這些文件和目錄結構。
我將展示從父模組到子模組的腳本,以獲得更多更高階的指南。
最有可能你會有環境變量,對我來說最方便的方法是創建帶有 TF_VAR_ 前綴的 shell 腳本,Terraform 將識別並使用初始化的變量(但稍後會提到)。
我也在模組層級設定的變量,但父級通常包含所有這些變量,但在模組層級我只是傳遞了正確的變數。
我建立的其他腳本檔案不包含可以輕鬆修改的私鑰或秘密金鑰值,並且對於您的 terraform.tfvars 的預設值很方便
我們來談談?在房間裡我們的 main.tf 腳本。
一開始,我定義了 PaaS 供應商,因為我使用 GCP 谷歌,您可以新增 AWS、Azure 或其他供應商。信用對於批准您向任何雲端提供者的請求至關重要,您將 gcp_account_key 作為我在父親 terraform 目錄中的 json 檔案傳遞。
在上面的螢幕截圖中,您可以看到我已在 GCP 中建立了一個服務帳戶金鑰並傳遞了正確的 IAM 存取權。
為 account_key.json 指派正確的 IAM(身分和存取管理)存取權限至關重要,否則在嘗試執行 Terraform 時將會遇到不同的權限問題。角色檢視器、編輯器、storage.admin、cloudrun.admin、Docker 工件。
還有一個選擇,可以透過 IaC 分配角色和權限,但對我來說,至少在我更熟悉它之前,這比較麻煩。
上面說明如何做到這一點。
接下來的步驟是執行您的模組,我從 docker 開始,因為需要在 GCP 中建立 Docker Artifact,完成後我使用 Cloud Run 執行相同的操作。請記住,我使用“./modules/docker”存取目錄,並將所需的變數從父模組傳遞到子模組/docker/variables.tf。
docker-artifact.tf 非常短,因為我們只需要定義從container_registry_api 開始使用的資源,然後docker_build_push 加入本地設定入var.project_id 建置和部署grc docker 映像來結束它,並添加它依賴於container_registry_api 作為其需要。
最後在我們的 IaC 中,我們使用「./modules/gcp」部署它來運行最後一個模組
與 docker 模組相同,我們定義「google_cloud_run_service」所需的資源,我們選擇名稱、區域、project_id,然後選擇從 main 傳遞的映像。
如果您需要環境變量,也可以傳遞它們。
新增 IAM 成員資源以授予部署到 Cloud Run 的權限。
現在,當架構設定並完成後,我們將執行以下步驟。
1.初始化Terraform
讓 terraform 存取 .env 變數。
如果一切順利,你最終會得到這樣的結果。
如果提交到 GitHub,請注意在 .gitignore 中添加一些文件,因為 terraform 會產生工件和備份等。
雖然與手動設定相比,IaC 增加了一些複雜性,但它也增加了前面提到的更多可維護性和自動化程度,特別是多個雲端提供者之間的互動等。對我個人來說,它為我作為開發人員提供了更多權力!
您可以在這裡找到回購協議。
以上是使用 Terraform 輕鬆部署您的 GCP Cloud Run 應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!