Golang 下的微服務 - 第 7 部分 - Terraform a Cloud

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。在之前的文章中,我們簡要介紹了使用者介面和Web用戶端以及如何使用微工具包rpc代理與我們新建立的rpc服務進行互動。本文將討論如何建立雲環境來託管我們的服務。 我們將使用 Terraform 在 Google Cloud 平台上構建我們的雲群集。這應該是一篇相當短的文章,但它也很重要。## 為什麼選擇 Terraform?我已經使用了幾種不同的雲供應解決方案,但對我而言,Hashicorps Terraform 感覺最容易使用並且得到最好的支援。近年來出現了一個術語:'基礎設施作為代碼'。為什麼你想要你的基礎設施作為代碼?那麼,基礎設施很複雜,它描述了很多移動組件。跟蹤基礎架構的變更和版本控制變更也很重要。Terraform 完美地做到了這一點。他們實際上已經建立了自己的DSL(特定領域語言),它允許您描述您的基礎設施應該是什麼樣子。Terraform 還允許您進行原子更改。所以在出現失敗的情況下,它會將所有東西都退回來,並將其恢複到原來的狀態。 Terraform 甚至允許您通過執行轉出計劃來預覽更改。這將準確描述您的更改將對您的基礎架構做什麼。這給了你很多的信心,曾經是一個可怕的前景。所以讓我們開始吧!## 建立您的雲計劃轉到 Google Cloud 並建立一個新項目。 如果您之前沒有使用過它,您可能會發現您有300英鎊的免費試用。太好了! 無論如何,你應該看到一個空白的新項目。 現在在你的左邊,你應該看到一個IAM&Admin tabb,然後在那裡建立一個新的服務密鑰。 確保選擇“提供新密鑰”,然後確保您選擇了json類型。 安全保管,我們稍後需要。 這允許程式代表您執行對 Google Cloud API 的更改。 現在我們應該掌握一切我們需要開始的事情。![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-micro/Screen-Shot-2018-02-10-at-10.58.07.png)所以建立一個新的回購。 我稱之為我的 shippy-infrastructure。## 描述我們的基礎設施建立一個名為 variables.tf 的新檔案。 這將包含關於我們項目的基本資料。 在這裡,我們有我們的項目 ID,我們的地區,我們的項目名稱和我們的平台名稱。 該地區是我們希望叢集啟動並執行資料中心。 該地區是該地區內的可用性區域域。 項目名稱是我們Google項目的項目ID,最後,平台名稱是我們的群集的名稱。```cvariable "gcloud-region" { default = "europe-west2" }variable "gcloud-zone" { default = "europe-west2-a" }variable "gcloud-project" { default = "shippy-freight" }variable "platform-name" { default = "shippy-platform" }```建立一個名為 providers.tf 的新檔案,這是 Google 特定的部分:```cprovider "google" {credentials = "${file("google-cred.json")}"project = "${var.gcloud-project}"region = "${var.gcloud-region}"}```現在讓我們建立一個名為 global.tf 的檔案。 這裡是我們設定的一部分:```c# Creates a network layerresource "google_compute_network" "shippy-network" {name = "${var.platform-name}"}# Creates a firewall with some sane defaults, allowing ports 22, 80 and 443 to be open# This is ssh, http and https.resource "google_compute_firewall" "ssh" {name = "${var.platform-name}-ssh"network = "${google_compute_network.shippy-network.name}"allow {protocol = "icmp"}allow {protocol = "tcp"ports = ["22", "80", "443"]} source_ranges = ["0.0.0.0/0"]}# Creates a new DNS zoneresource "google_dns_managed_zone" "shippy-freight" {name = "shippyfreight-com"dns_name = "shippyfreight.com."description = "shippyfreight.com DNS zone"}# Creates a new subnet for our platform within our selected regionresource "google_compute_subnetwork" "shippy-freight" {name = "dev-${var.platform-name}-${var.gcloud-region}"ip_cidr_range = "10.1.2.0/24"network = "${google_compute_network.shippy-network.self_link}"region = "${var.gcloud-region}"}# Creates a container cluster called 'shippy-freight-cluster'# Attaches new cluster to our network and our subnet,# Ensures at least one instance is runningresource "google_container_cluster" "shippy-freight-cluster" {name = "shippy-freight-cluster"network = "${google_compute_network.shippy-network.name}"subnetwork = "${google_compute_subnetwork.shippy-freight.name}"zone = "${var.gcloud-zone}"initial_node_count = 1master_auth {username = <redacted>password = <redacted>}node_config {# Defines the type/size instance to use# Standard is a sensible starting pointmachine_type = "n1-standard-1"# Grants OAuth access to the following API's within the clusteroauth_scopes = ["https://www.googleapis.com/auth/projecthosting","https://www.googleapis.com/auth/devstorage.full_control","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/cloud-platform"]}}# Creates a new DNS range for clusterresource "google_dns_record_set" "dev-k8s-endpoint-shippy-freight" {name = "k8s.dev.${google_dns_managed_zone.shippy-freight.dns_name}"type = "A"ttl = 300managed_zone = "${google_dns_managed_zone.shippy-freight.name}"rrdatas = ["${google_container_cluster.shippy-freight-cluster.endpoint}"]}```現在將您之前建立的密鑰移至此項目的根目錄並將其命名為 google-cred.json。你現在應該擁有一切你需要建立一個新的叢集! 但是,我們不要發瘋,你應該先進行測試,並檢查一切是否正常。運行 `$ terraform init` - 這將下載任何缺少的提供 providers/plugins。 這會發現我們正在使用 Google Cloud 模組並自動擷取這些依賴關係。現在,如果您運行 `$ terraform` 計劃,它會向您顯示它將做出的更改。 這幾乎就像在你的整個基礎設施上做 `$ git diff`。 現在很酷!瀏覽部署計劃後,我認為很好。> $ terraform apply注意:您可能會被要求啟用一些 API 以完成此操作,沒關係,單擊連結,確保啟用它們並重新運行 `$ terraform apply`。 如果您想節省時間,請轉到 Google 雲端控制台中的 API 部分,並啟用 DNS,Kubernetes 和計算引擎 API。這可能需要一段時間,但那是因為發生了很多事情。 但是一旦完成,如果您轉到Google雲端控制台右側菜單中的 Kubernetes 引擎或計算引擎細分,則應該能夠看到您的新群集。注意:如果你沒有使用免費試用期,這將立即開始花費你的錢。 請務必查看執行個體定價列表。 哦,而且我在開展這些職位的工作之間已經開動了我的力量。 這不會產生費用,因為這些費用是根據資源使用方式收取的。![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-micro/Screen-Shot-2018-02-10-at-12.25.11-1.png)而已! 我們有一個完全正常啟動並執行cluster / vm,準備好讓我們開始部署我們的容器。 本系列的下一部分將介紹Kubernetes,以及如何設定和部署容器到Kubernetes。如果你發現這個系列有用,並且你使用了一個廣告攔截器(誰可以責怪你)。 請考慮為我的時間和努力捐贈幾塊錢。 乾杯! https://monzo.me/ewanvalentine

via: https://ewanvalentine.io/microservices-in-golang-part-7/

作者:Ewan Valentine 譯者:zhangyang9 校對:polaris1119

本文由 GCTT 原創編譯,Go語言中文網 榮譽推出

本文由 GCTT 原創翻譯,Go語言中文網 首發。也想加入譯者行列,為開源做一些自己的貢獻嗎?歡迎加入 GCTT!
翻譯工作和譯文發表僅用於學習和交流目的,翻譯工作遵照 CC-BY-NC-SA 協議規定,如果我們的工作有侵犯到您的權益,請及時聯絡我們。
歡迎遵照 CC-BY-NC-SA 協議規定 轉載,敬請在本文中標註並保留原文/譯文連結和作者/譯者等資訊。
文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽

571 次點擊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.