# GDSC GCP <br> CloudRun 分享
---

Note:
* IaaS => GCE
* CaaS => GKE,Cloud Run
* PaaS => APP Engine
* Faas => Cloud Function
---

Note:
Serverless => 不需要管理Server,服務都是由事件觸發
收費、用途
---

Note:
可以透過docker 處理好環境
15->60
根據需求彈性擴增
===========
使用量、備份
透過https,gRPC,Webhook
設定安全性連線
---
## 如何部屬
1. 持續透過原始碼存放區部署新的修訂版本
* Github 程式碼代管 -> Github Action 自動測試
* CloudRun 根據Git的推送紀錄進行部屬
2. 直接部屬
1. Google Cloud CLI
2. Cloud Shell (有類似VSCode的編輯頁面)
---
```
|-- Dockerfile docker的建構檔案
|-- app.py backend by flask
|-- testFlask.py 對flask做unittest
|-- requirements.txt python會用到的相依套件
|-- .github
|-- workflows
|--main.yml github Action 流程設定
```
---
app.py
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Cloud Run!"
```
---
testFlask.py
```python
class SettingBase(TestCase):
def create_app(self):
app.config['TESTING'] = True
return app
class TestWelcomePage(SettingBase):
def testMainPage(self):
response = self.client.get('/')
self.assertEqual(response.data,b"Hello, Cloud Run!")
if __name__ == '__main__':
unittest.main()
```
---
Dockerfile
```dockerfile
FROM python:3 # 設定基礎image
WORKDIR /app # 設定工作目錄
COPY . . # 把檔案複製到容器裡面
RUN pip install --no-cache-dir -r requirements.txt # 在容器中執行這個指令
CMD [ "flask", "run" , "--host","0.0.0.0" ,"--port","8080"] # 每次啟動docker時的命令 Cloud 一定要run8080 port
```
---
main.yml
```yml=
name: Flask2Docker2Github2CloudRun
on: #觸發條件
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest #測試環境
steps:
- name: Checkout
uses: actions/checkout@v2.5.0
- name: Setup Python
uses: actions/setup-python@v4.3.0
with:
python-version: 3.10.0
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r ./requirements.txt
pip install pytest
- name: Test with pytest
run: |
pytest ./testFlask.py
```
---

---

---

---

---

---

---

---

---

---
## 經驗分享
- github-repository 命名
因為gcp這個平台都是用小寫,-
如果repository用駝峰法命名(大寫)會部屬失敗
解法1: 去觸發條件直接定義小寫的REPO_NAME
解法2: 砍掉重練
---
- GCP CSS掛掉(樣式消失)
慢慢去測試哪一個擴充套件衝突
MetaStream

---
{"metaMigratedAt":"2023-06-17T12:27:33.630Z","metaMigratedFrom":"YAML","title":"GDSC GCP CloudRun 分享","breaks":true,"slideOptions":"{\"spotlight\":{\"enabled\":true}}","contributors":"[{\"id\":\"34b9be90-7dcd-461a-926b-6dc0204497c4\",\"add\":3133,\"del\":226}]"}