AWS 從 Image 建立 Lambda
tags: Serverless
Docker
Lambda
category: AWS
description: AWS 從 Image 建立 Lambda
created_at: 2021/07/18 20:00:00
事前準備
- 首先你要有個 AWS 帳號
- 裝好
Docker
- 會任何一種 aws lambda 支援的程式語言(?)
QA
Q: 為什麼不直接在雲上面寫 Lambda Function
就好?
A: 因為有時候我想裝套件,但雲上面不能裝,所以只好先包好
可以先到 AWS 官方提供的 lambda image 找適合你的,這邊會以 python
當作範例
ECR Link:
- 官方連結: https://gallery.ecr.aws/lambda/
- 官方提供的Python: https://gallery.ecr.aws/lambda/python
首先先開一個你的專案資料夾,在裡面建立兩個檔案
一個最基本的 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
,可以做出很多花樣。