AWS 從 Image 建立 Lambda

tags: Serverless Docker Lambda
category: AWS
description: AWS 從 Image 建立 Lambda
created_at: 2021/07/18 20:00:00

cover image

事前準備

  • 首先你要有個 AWS 帳號
  • 裝好 Docker
  • 會任何一種 aws lambda 支援的程式語言(?)

QA

Q: 為什麼不直接在雲上面寫 Lambda Function 就好?

A: 因為有時候我想裝套件,但雲上面不能裝,所以只好先包好


可以先到 AWS 官方提供的 lambda image 找適合你的,這邊會以 python 當作範例

ECR Link:


首先先開一個你的專案資料夾,在裡面建立兩個檔案

一個最基本的 app.py ,長的基本上跟雲上面開的 Lambda 一模一樣的功能

import json

def handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps(event)
    }

與很重要的 Dockerfile (要一模一樣 不要變成 dockerfile 可能會出事)

FROM public.ecr.aws/lambda/python:3.8
COPY . .
CMD ["app.handler"]

在來先去 AWS ECR 上面開一個新的 Repository

如果你不知道 ECR 在哪的話,在上面搜尋ECR,然後點下去圖片上紅框的那個

然後在左邊的側邊欄找到 Repositories

之後在右側會有個橘色的 Create repository 給他點下去

再來最重要的把 Repository name 填好,看你要 Public 還是 Private , 其他先預設就好,然後到最下面點選建立。

建立好之後點選剛才建立的那個,然後看到下面的畫面之後把 View push commands 給他點下去

再來你會看到下圖四個指令

重點: 不管你是 Windows 還是其他系統,不需要去看Windows那個Tab。 我曾經被他雷到

請到這邊下載安裝 AWS Cli: https://aws.amazon.com/tw/cli/

然後可以在 IAM 建立一個專門給 CLI 使用的 User,並給予 AmazonEC2ContainerRegistryFullAccess 權限,然後把 credentials.csv 下載下來

之後下指令去設定你 aws cli 相關的 configure

詳細可參考官方: https://docs.aws.amazon.com/zh_tw/cli/latest/userguide/cli-configure-files.html

$ aws configure

或是如果你有多個帳號要幫他指定名字

$ aws configure --profile {username}

{username} 是你可以替換掉的地方

再來他會問你四個問題

AWS Access Key ID [None]: 你下載csv裡面有
AWS Secret Access Key [None]: 你下載csv裡面有
Default region name [None]: 填你的AWS上面的地區
Default output format [None]: text

預設 format 填 text 就好,詳細可參考: https://docs.aws.amazon.com/zh_tw/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-format


設定好了之後,回到你的 ECR

  • 貼上第一個指令,應該會看到 Login Succeeded 這樣的回應,就是登入成功了
  • 再來貼上第二個指令去 build 你的 docker image
  • 第三段指令是幫你剛才 build 出來的 image 加上 tag
  • 再來最後執行第四條指令,就可以把 image 推上 ECR

第四條指令通常都跑很久...

如果你發現出現 denied: User,要注意你是不是有多組帳號,然後登入錯使用者了所以權限不足。


成功推上去之後,重新整理你的畫面,就會看到一個 image

點選複製連結,然後前往 Lambda 建立函式,選取 容器映像,之後該填的填一填按下建立函式。

  • 建立會跑一段時間,往後更新 image 也是
  • 等他建立好之後,就可以執行了。

再來如果要更新函數的話,只要點選 部署新映像 , 如果是 latest(預設),只要直接點儲存就可以。


總結

再來之後就看個人造化了,寫什麼樣的程式碼與 Dockerfile,可以做出很多花樣。




最後更新時間: 2021年07月18日.