iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
寫完了一段邏輯,立刻就想在雲端環境裡試跑看看!

隔了幾天又回到 AWS Console,本來以為會有點生疏,但是看到 MFA 登入...所以的記憶又都回來了。

先前在規劃階段,其實已經決定了要將這個功能佈署在 AWS Lambda 上,那就依照著計畫繼續前進吧!

系統規劃:Day 11. 有勇無謀是匹夫


建立一個 Lambda

  1. 進入 Lambda Console 頁面
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437Rm276bOnhp.png

  2. 點擊右上角的「建立函數」按鈕,並輸入名稱、Runtime 等基本資訊
    驗執行角色的選項選擇:建立具備基本 Lambda 許可的新角色
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437DcBnAUX2H8.png

⚠️ 建立具備基本 Lambda 許可的新角色
  這個步驟 AWS 是「自動建立 + 套用 AWSLambdaBasicExecutionRole」
  後續執行依照最小權限原則,需要再自己手動加上需要的權限政策。
  1. 設定呼叫方式
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437BvLWgP1qsk.png
    為了測試方便,這裡將 Lambda 設定成一個可以直接以 HTTPS 呼叫端點。
    ⚠️ 公開(NONE)
    雖然不需要任何驗證非常方便做測試/PoC,但正式環境更建議用 AWS_IAM 或搭配 CloudFront + WAF、IP 白名單等額外控管。
    
    其他詳細設定放在文章末端另外說明。

大多數設定在建立完 Lambda 後都還能隨時進行調整,所以也不必太擔心。
修改位置:Lambda → 「組態」分頁 → 函數 URL
https://ithelp.ithome.com.tw/upload/images/20250928/20168437KGev8IMgLA.png

  • 完成後會出現這樣的編輯畫面,貼入這兩天寫好的程式碼

加入程式碼

  • Lambda 的預設入口是 lambda_handler,把原先寫在 main 的程式碼搬到這裡
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437MW49cx5VaH.png
  • 接續貼入其他程式碼,完成後按下 Deploy
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437PMvaFCHZVD.png
  • 佈署完成!
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437FOrGIr7L8D.png

測試!

  • 切換到「測試」分頁,在這裡可以直接對剛才發布的 Lambda 進行測試
    事件JSON欄位可以自行撰寫需要的傳入值,AWS 也提供了在 AWS 各服務串接時使用的資料格式範本,非常方便!
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437IAhR55Spzu.png
  • 輸出結果
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437LcieoqX6oM.png
  • 最後測試一下 url
    https://ithelp.ithome.com.tw/upload/images/20250928/20168437Zi3Xg4F6Sq.png

資料補充

Lambda 的設定參數:選啟用函數 URL(Enable)
這個選項代表 AWS 會替 Lambda 產生一個能夠直接呼叫的 HTTPS 端點(不經 API Gateway)。
之後呼叫者只要對這個 URL 發送 HTTP 請求(GET/POST…),就能拿到函數回應。

  • 授權類型(Authorization type)
    畫面上有兩個選項:
    • AWS_IAM:只接受 已用 SigV4 簽名的請求(也就是具備 IAM 憑證的使用者/角色)。
      常見於內部/受控環境,藉由「呼叫者的身分政策(identity-based policy)」決定誰可叫用。
    • NONE(目前選擇的項目):匿名可呼叫。
      不需要 AWS 憑證,任何人拿到 URL 都能打這個函數。安全性依賴 資源型政策(resource-based policy) 的限制條件與你是否在前面加上 WAF/CloudFront 等保護。
  • 函數 URL 許可與「檢視政策聲明」
    這裡的 JSON 是 Lambda 預設掛上的資源型政策(resource policy)。
    {
      "Version": "2012-10-17",                          // 政策語法版本(固定字串)
      "Statement": [{
        "StatementId": "FunctionURLAllowPublicAccess", // 這條規則的識別字串
        "Effect": "Allow",                             // 允許(不是顯式拒絕)
        "Principal": "*",                              // 主體為任何人(匿名皆可)
        "Action": "lambda:InvokeFunctionUrl",          // 允許「透過 URL」呼叫函數的行為
        "Resource": "arn:aws:lambda:ap-northeast-1:590184072539:function:<Function Name>", // 目標函數 ARN
        "Condition": {
          "StringEquals": {
            "lambda:FunctionUrlAuthType": "NONE"       // 僅在「授權類型=NONE」時此規則生效
          }
        }
      }]
    }
    
  • 欄位設定說明
欄位 設定值 說明
Principal "*" + Condition:AuthType=NONE 等同宣告「任何人且不需要驗證就能調用」
Action lambda:InvokeFunctionUrl 與一般 lambda:InvokeFunction 不同,這條權限只控制「URL 入口」

若之後把授權改成 AWS_IAM,這段政策會改成對應 AuthType=AWS_IAM 的條件,實際可呼叫的人再由其 身分政策 決定(誰有權執行 lambda:InvokeFunctionUrl)。

  • 叫用模式(Invocation mode)
    兩種模式擇一,目前選的是 BUFFERED
    • BUFFERED(預設)
      Lambda 執行完成後一次把 Response 送回,適合一般 API/同步回應。
    • RESPONSE_STREAM
      支援串流回傳,可明顯降低 TTFB、適合長計算或需要持續輸出的情境(例如逐步產生內容)。會有額外成本,也需要調整程式碼以串流方式輸出。
  • 跨來源資源共用(CORS)
    未勾選,Lambda 不會自動幫加上 Access-Control-Allow-* 標頭。
    若要從 瀏覽器的其他網域 直接以 fetch/XHR 呼叫 Function URL,沒有正確的 CORS 設定會被瀏覽器擋掉。

上一篇
Day 13. 命運的重新排列
下一篇
Day 15. 最尷尬就是有效期限剩一天
系列文
科學的盡頭是玄學?AI占卜小助手與知識庫驗證16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言