iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

前兩天簡單介紹 API Gateway 和 Lambda

今天則是要使用 API Gateway 和 Lambda 實作簡單的 Restful 應用

串接的關係會先建立 Lambda 再建立 API Gateway

不過先後可不照著做

該做的事情該有的受全都還是要有


建立 Lambda

雖然在建立 Lambda Function 的時候

也可以建立 IAM Role 並有相關聯的 IAM Policy

不過這樣建立的 IAM Role 重複性很高

顯得有些雜亂無章

長久下來會不好管理

因此還是建議自己建立 IAM Role 並 Attach 相關的 Policy 比較適合

建立 IAM Policy

最基礎的 Lambda Function 只需要兩個 Policy

AWSLambdaBasicExecutionAWSLambdaVPCAccess 即可

AWSLambdaBasicExecution 主要只有推送 Log 和建立 Log

AWSLambdaVPCAccess 是當 Lambda Function 有 Configure VPC 的時候需要用到

實際上 Configure VPC 的行為

是在現有的 VPC 上裝一張網卡

因此才會有和 Network Interface 相關的 Policy

建立 AWSLambdaBasicExecution

{
    "Statement": [
        {
            "Action": "logs:CreateLogGroup",
            "Effect": "Allow",
            "Resource": "arn:aws:logs:ap-northeast-1:{AWS Account}:*"
        },
        {
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:ap-northeast-1:{AWS Account}:log-group:/aws/lambda/*:*"
        }
    ],
    "Version": "2012-10-17"
}

建立 AWSLambdaVPCAccess

{
    "Statement": [
        {
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeNetworkInterfaces"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "2012-10-17"
}

建立 IAM Role

建立 IAM 角色的時候

信任實體的案例選擇 AWS Lambda
https://ithelp.ithome.com.tw/upload/images/20231007/20141518YfQtnnwt0k.png

如果使用 IaC 的也可以參考下列的 json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

將剛剛建立的許可關聯至 IAM Role 中
https://ithelp.ithome.com.tw/upload/images/20231007/2014151807ExIW1C9j.png

https://ithelp.ithome.com.tw/upload/images/20231007/20141518RQIEWLS0M0.png

再最後一步確認沒問題後

就可以填 IAM Role 的名稱並建立

https://ithelp.ithome.com.tw/upload/images/20231007/20141518wgiVjRNvr9.png

建立 Lambda Function

https://ithelp.ithome.com.tw/upload/images/20231007/20141518NLsjJek5ZF.png

建立函式的時候

選擇剛剛建立的 IAM Role 即可

https://ithelp.ithome.com.tw/upload/images/20231007/20141518LU0EK9bX6e.png

建立 API Gateway

建立 API Gateway

比較泛用的 API 還是 REST API

而 REST API 私有的部分

是只能在 VPC 中執行

可以理解成在 EC2 或是 AWS 上的內部環境才能呼叫到

https://ithelp.ithome.com.tw/upload/images/20231007/20141518uDVKwpNEi4.png

https://ithelp.ithome.com.tw/upload/images/20231007/20141518j9m2jX1n6O.png

建立的時候

無特別喜好狀況下則建議選擇區域性

了解區域性、邊緣最佳化的差別再考慮按照需求做選擇

而如果選擇私有則無法客製化網域

這個則需要特別注意

https://ithelp.ithome.com.tw/upload/images/20231007/20141518t0dQd8QX56.png

建立 API Key

https://ithelp.ithome.com.tw/upload/images/20231007/201415188xqdtvAGDe.png

建立資源

首先要先在 API 底下建立一筆資源

https://ithelp.ithome.com.tw/upload/images/20231007/20141518h8dQT2nhqL.png

建立資源後才能建立方法

https://ithelp.ithome.com.tw/upload/images/20231007/201415183D7BWkPly3.png

按儲存後會出現修改 AWS Lambda 權限的提示

這個還重要的

AWS Lambda 執行階段的權限則是靠 IAM Role

但是並沒有被調用權限

而這個步驟就是為 AWS Lambda 添加由 API Gateway 調用 AWS Lambda 的權限

https://ithelp.ithome.com.tw/upload/images/20231007/20141518iHpSsTaGBx.png

調整金鑰驗證

https://ithelp.ithome.com.tw/upload/images/20231007/201415184TUCzMYCzz.png

https://ithelp.ithome.com.tw/upload/images/20231007/20141518HG55NwJbyw.png

https://ithelp.ithome.com.tw/upload/images/20231007/20141518Pg0jWyiP2X.png

佈署 API

在資源的頁面中

點按 操作 後,選擇 佈署 API 即可進行佈署
https://ithelp.ithome.com.tw/upload/images/20231007/20141518imXJXNLomH.png

佈署的時候需要選擇階段

階段的意思也就是不同環境的意思

第一次建立的時候需要建立新的

之後如果資源或是方法有變更

則需要覆蓋原有佈署
https://ithelp.ithome.com.tw/upload/images/20231007/20141518pO6JOJbosM.png

https://ithelp.ithome.com.tw/upload/images/20231007/20141518WknZOJBveH.png

建立用量計劃

目前僅為範例

因此建立用量計劃的時候先不設定限制

https://ithelp.ithome.com.tw/upload/images/20231007/20141518vAA0tfIG4t.png

剛剛佈署到階段後

就可以將用量計劃綁訂到階段
https://ithelp.ithome.com.tw/upload/images/20231007/201415188s6m4PSvjB.png

而用量計劃再綁定金鑰
https://ithelp.ithome.com.tw/upload/images/20231007/20141518xtm2mckA60.png

客製化 API Gateway 網址(Optional)

如果要自訂網址

需要到側欄選擇自訂網域名稱

不可直接指定 API Gateway 的網址

而是需要另外在這個位置建立網址

https://ithelp.ithome.com.tw/upload/images/20231007/20141518FLC95FJ4vC.png

§ 注意 §
技術上 API Gateway 和 Lambda 可串起來,也可以做到認證和授權,但是實務上,不代表適合將現有的 API Server 拆解成此架構,只有在整個業務相對獨立的狀況下(如:非同步的 SNS 通知),比較適合將程式邏輯切開來,應用在 Lambda 或是 API Gateway + Lambda 上

參考資料

  1. 選擇端點類型以設定 API Gateway API

上一篇
Day 21 簡介 AWS Lambda
下一篇
Day 23 使用 Load Balance 解決 Lambda 超時問題
系列文
上完 AWS 線上課程就打算應徵相關工作是否搞錯甚麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言