# Goole Cloud Platform 雲端開發應用超入門 ###### tags: `GCP` [出處:Goole Cloud Platform 雲端開發應用超入門](https://www.books.com.tw/products/0010841312) ## 建立VM執行個體 ![](https://i.imgur.com/ydDygXz.png) * 標籤:可將具有相同屬性與功能的執行個體群組化 ![](https://i.imgur.com/n4YWql0.png) ![](https://i.imgur.com/nApjsqs.png) 網路設定 ![](https://i.imgur.com/5SN2tq5.png) * 子網路:其他子網路內的執行個體若屬同一網路則可透過內部IP通訊 * 內部IP:執行個體私有IP位址 * 外部IP:執行個體公開IP位址, 若設定臨時自動配置, 臨時IP當執行個體停止或重新啟動時就會變動 ## Python執行環境建構 1. 進入執行個體 ![](https://i.imgur.com/GuCeXTn.png) 即可對虛擬機器執行個體的Guest OS進行操作 2. 首先先更新Guest OS內的管理套件 ![](https://i.imgur.com/FBLf2BW.png) > 管理套件系統 > * YUM( Yellowdog Updater, Modified ):Red Hat系列發行版使用 > * APT( Advanced Packaging Tools ):Debian系列發行版使用 3. python套件安裝 ``` sudo apt-get -y install git python-pip \ python-dev python-flask python-wtforms \ python-arrow python-flask-sqlalchemy \ python-pymysql python-flaskext.wtf vim ``` 4. API客戶端函式庫的安裝 ``` sudo pip install --upgrade setuptools sudo pip install --upgrade gcloud ``` ## 應用程式v1 1. 應用程式(app_v1)的部署 ``` $ git clone https://github.com/christinekao88/gcp-compute-engine $ cd gcp-compute-engine $ sudo app_v1/install.sh ``` 2. 應用程式的啟動 ``` $ sudo systemctl enable dengonban.service $ sudo systemctl start dengonban.service $ sudo systemctl status dengonban.service ``` 點選外部IP即能進入佈告欄 ## Cloud SQL 資料管理 1. 建立Cloud SQL執行個體 ![](https://i.imgur.com/tdDNqw1.png) 2. 開啟Cloud SQL API/Cloud SQL Admin API ![](https://i.imgur.com/umkM630.png) & ![](https://i.imgur.com/flOtNrT.png) ## 資料庫建立 1. 開啟Cloud Shell連線(存取Cloud SQL執行個體) ![](https://i.imgur.com/0cxd3qX.png) 2. 存取Cloud SQL ![](https://i.imgur.com/wwYKGqB.png) 3. 建立資料庫 ![](https://i.imgur.com/SCRimCX.png) 4. 建立db使用者並設定存取權限 ![](https://i.imgur.com/7urqpuZ.png) 建立使用者appuser , 密碼pas4appuser ## 部署應用程式v2 ![](https://i.imgur.com/VOM8qRi.jpg) ## 安裝Cloud SQL Proxy 1. SSH進入VM 2. 下載Cloud SQL Proxy ``` $ cd gcp-compute-engine/ $ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy ``` * 指定下載檔案儲存在硬碟中的檔名,可以使用 `-O` 參數 3.  設定變更Cloud SQL Proxy ``` $ chmod +x cloud_sql_proxy $ sudo mkdir /opt/cloudsqlproxy $ sudo mv cloud_sql_proxy /opt/cloudsqlproxy/ ``` 4. 建立資料夾儲存Cloud SQL Proxy使用的UNIX Socket ``` $ sudo mkdir /cloudsql $ sudo chmod 777 /cloudsql ``` 5. 修改範例程式(v2) ``` $ vi app_v2/app.py ``` ![](https://i.imgur.com/JelsNSs.png) ``` $ vi app_v2/cloudsqlproxy.service ``` ![](https://i.imgur.com/5UWMF1Z.png) 5. 停止app_v1 ``` $ sudo systemctl stop dengonban.service ``` 6. 執行app_v2 ``` $ cd gcp-compute-engine/ $ sudo app_v2/install.sh $ sudo systemctl enable cloudsqlproxy.service $ sudo systemctl start cloudsqlproxy.service $ sudo systemctl start dengonban.service $ sudo systemctl status dengonban.service ``` ## Cloud Storage 圖片資料儲存 1. 建立Cloud Storage的Bucket ![](https://i.imgur.com/VLfXzXv.png) 2. 編輯Bucket權限 ![](https://i.imgur.com/PTt0HYE.png) 3. 新增成員 ![](https://i.imgur.com/bdNl5fk.png) ![](https://i.imgur.com/YDhhUXD.png) 4. 修改應用程式(v3) ``` $ vi app_v3/app.py ``` ![](https://i.imgur.com/XH1CVgm.png) ``` $ vi app_v3/cloudsqlproxy.service ``` 5. 執行app_v3 ``` $ sudo systemctl stop dengonban.service $ sudo systemctl stop cloudsqlproxy.service $ sudo app_v3/install.sh $ sudo systemctl start cloudsqlproxy.service $ sudo systemctl start dengonban.service $ sudo systemctl status dengonban.service ``` # IP位址 * 有兩種規格: * IPv4 * IPv6 * 構成網路的機器(Network Interface Controller)被稱之為**節點** * IP位址為節點的識別編號 ## IPv4 使用二進位32的位元表示位址,用8位元一組拆分並轉換為10進位數字 ![](https://i.imgur.com/gz5Aqh7.jpg) 又可分為 * Network ID * HOST ID ![](https://i.imgur.com/mViKh6w.jpg) 兩種表示法 * 子網路遮罩 ![](https://i.imgur.com/lzDQi9Y.jpg) * CIDR ![](https://i.imgur.com/wG8N7yU.jpg) ![](https://i.imgur.com/jMNTTo0.jpg) ## 通訊協定 目的:通訊的雙方如何互相了解 ![](https://i.imgur.com/P96YvKC.png) [码农半亩地](https://gaomf.cn/2015/11/23/OSI模型总结/) ## 防火牆 可限制節點間互相通訊 * 封包過濾型:對流過的封包的埠號和IP位址進行篩選 * 存取控制清單(ACL):管理封包過濾規則清單 * 只讓80(http)或443(https)的封包通過 * 除特定網路封包外,其他全部丟棄 ## 路由器 連接兩個以上不同的子網路以傳遞封包的網路設備,提供判斷資料傳送路徑選擇的功能 * 靜態路由:路由表上預先設定的 * 動態路由:透過路由間訊息交換決定路徑 ## DNS 實際通訊時,每個IP對應到一個容易記憶的名稱,該名稱由通訊目的的主機設定,以主機名稱與網域名稱組合而成 Cloud DNS:DNS的託管服務 ## 實體網路 ![](https://i.imgur.com/0Xcsime.jpg) * 網路結構自由度很低,維護陳本很大 ## 虛擬網路(覆蓋網路) 為了在雲端環境對不同使用者提供獨立的網路環境,為邏輯網路環境的實作技術, 覆蓋於實體網路之上,在實體網路上以軟體的方式模擬網路,可自由調整結構 # GCP網路機制 ## GCP網路結構 * Subnet Network架構:每個地區各自成一個獨立網路架構 ![](https://i.imgur.com/fuv69te.jpg) * Legacy Network (非子網路)架構:跨越全球所有地區的私有網路 ![](https://i.imgur.com/0UL15ib.jpg) ## Global IP (External IP) GCP中提供給網際網路存取,每個地區會保留並分配給執行個體,又可以分為 * Ephemeral:執行個體啟動時會自動分配,因此實體有停止/啟動操作可能會造成IP位址變動 * Static:會保留所分配的IP位址 ## GCP防火牆功能 用以控制虛擬機器執行個體通訊的安全機制,可將之加到準備好的網路 預設會擋掉所有來自網路外部的通訊封包 ## Cloud Load Balancing負載平衡功能 * HTTP(S)負載平衡:將存取分散至數個地區的數個後端執行個體,用於應對大量的存取流量 * TCP/UDP負載平衡:分散GCE同一地區內TCP/UDP協定的流量,不可跨區做負載平衡 # 製作虛擬機器開機映像檔 可快速建立數個相同的執行個體 1. 建立快照 ![](https://i.imgur.com/wsGJVtS.png) 2. 建立磁碟 ![](https://i.imgur.com/d1d2w3K.png) 3. 製作映像檔 ![](https://i.imgur.com/kWeBFHd.png) 4. 自動建立多個執行個體 * 建立執行個體範本 ![](https://i.imgur.com/thYTWWW.png) 針對各個API設定存取權 * 啟用cloud SQL * 儲存空間為讀寫 勾選允許HTTP流量 5. 建立執行個體群組 ![](https://i.imgur.com/rMTiOFC.png) ![](https://i.imgur.com/OJxl5gg.png) # 建立負載平衡 1. 建立負載平衡 ![](https://i.imgur.com/BpObUrK.png) ![](https://i.imgur.com/ZtLr4V6.png) 2. 後端設定 ![](https://i.imgur.com/ZLLjNfC.png) ![](https://i.imgur.com/DSPI6sK.png) ![](https://i.imgur.com/uXxQGAd.png) 3. 健康狀態檢查 ![](https://i.imgur.com/fhxE0XL.png) 4. 主機與路徑規則 ![](https://i.imgur.com/HNvEfjQ.png) 5. 前端設定 ![](https://i.imgur.com/XfVFwai.png) 6. 確認運作:用瀏覽器存取ip ![](https://i.imgur.com/lzwZ2G6.png) # 利用Cloud DNS管理網域名稱 利用Cloud DNS將前面建立負載平衡器所得到的IP位址轉換成獨立的網域名稱 ex: 把 35.198.224.184 -> www.asa.yokohama 1. 存取網域名稱 * 要先申請一個網域名稱[freenom](https://www.freenom.com/zu/index.html?lang=zu)->christinekao.ml 2. 建立 DNS 區域 建立一個kao-zone區域管理christinekao.ml網域 ![](https://i.imgur.com/H1I3Ynv.png) ![](https://i.imgur.com/BWzjQV6.png) * NS紀錄是網域的名稱伺服器 * SOA紀錄是一份基本資訊的記錄表,用以決定DNS伺服器如何運作 3. 新增紀錄集 用以連接DNS伺服器和IP地址和主機名稱 * 建立A紀錄 ![](https://i.imgur.com/0VqcbM3.png) * 在建立一個反向解析的PTR紀錄 ![](https://i.imgur.com/fBUaFdN.png) 4. 服務機構設定紀錄 * go to freenom -> manage domain ![](https://i.imgur.com/9CHBa1Y.png) * 選擇nameservers ![](https://i.imgur.com/wZimZd8.png) * 把cloud DNS上註冊的網域DNS伺服器資訊設定到服務機構的名稱伺服器上 ![](https://i.imgur.com/14JmEK4.png) 5. 操作確認 可以從瀏覽器存取http://christinekao.ml 6. 從IAM的管理資源->可以刪除專案 ![](https://i.imgur.com/F8pMq6v.png)