---
# System prepended metadata

title: NYUST GDSC 0521 雲端運算讀書會共筆
tags: [雲端運算]

---

# NYUST GDSC 0521 雲端運算讀書會共筆

---

## Elastic Container Registery

進到 AWS Console 搜尋 ECR > 新增 Repository

給予 Repository 的名稱就建立好 Repository 了


![image](https://hackmd.io/_uploads/BJ-SWm9mC.png)

接者進到你的 Repository > View Push Command

這立會告訴你怎麼把 Image 推到這個 ECR

![image](https://hackmd.io/_uploads/rkIFZ75m0.png)

![image](https://hackmd.io/_uploads/rkLZGmq7C.png)


接下來去找你要 Deploy 的專案

假設你有一個含有 Dockerfile 的專案

```shell=
# Clone Project
git clone git@github.com:jackey8616/PyFun-Backend.git 

# 登入 AWS ECR 也就是 Push Command 的第一行
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXX.amazonaws.com
# Build Image 也就是 Push Command 的第二行 但是如果有 lambda 用的 file 要使用 -f 指定檔案
docker build -t pyfun_backend . -f lambda.Dockerfile
# 給予 Tag 也就是 Push Command 的第三行
docker tag pyfun_backend:latest XXXXX/pyfun_backend:latest
# Push 到 ECR 也就是 Push Command 的第四行
docker push XXXX.amazonaws.com/pyfun_backend:latest
```


---

## Lambda


### Step 1: 建立函式，先用Blueprint作為範例，輸入函數名稱後直接建立

![image](https://hackmd.io/_uploads/Hk4VWQ9mA.png)

![image](https://hackmd.io/_uploads/Sy9YWXqQA.png)

### Step 2: 為了讓此功能可以透過HTTP回傳，我們必須修改一下程式碼(新增HTTP Status Code)
```
console.log('Loading function');

export const handler = async (event, context) => {
    try {
        console.log('value1 =', event.key1);
        console.log('value2 =', event.key2);
        console.log('value3 =', event.key3);

        // 返回標準的 HTTP 回應格式
        return {
            statusCode: 200,
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify({
                message: 'Hello World',
                value1: event.key1,
                value2: event.key2,
                value3: event.key3
            })
        };
    } catch (error) {
        console.error("Error:", error);

        // 返回錯誤回應格式
        return {
            statusCode: 500,
            body: JSON.stringify({ error: "Internal Server Error" })
        };
    }
};

```

![image](https://hackmd.io/_uploads/rkJZMQ5m0.png)

### Step 3:點選「測試」，輸入「事件名稱」後按「儲存」

![image](https://hackmd.io/_uploads/H1mNMmcQC.png)

### Step 4:點選「測試」，測試後沒問題即可Deploy

![image](https://hackmd.io/_uploads/H1OqGQc7R.png)

### Step 5:設定「組態」->「函數URL」

![image](https://hackmd.io/_uploads/S1A0f7570.png)

### Step 6:建立URL，為了方便使用先將權限設定為 None

![image](https://hackmd.io/_uploads/BJ1g7mcQC.png)

### Step 7:即可使用函數URL
![image](https://hackmd.io/_uploads/HJr777q7C.png)

![image](https://hackmd.io/_uploads/Hk1DQX9QA.png)

---

## API Gateway

### Step 1:在Lambda介面中新增觸發，並選擇API Geteway並新增
![image](https://hackmd.io/_uploads/ByZ_HmqQ0.png)

### Step 2:即可有API URL
![image](https://hackmd.io/_uploads/S1AhHXqmR.png)

![image](https://hackmd.io/_uploads/BkdbP75XA.png)

