AWS Lambda 調用其他 Lambda
tags: Serverless
Lambda
category: AWS
description: AWS Lambda 調用其他 Lambda
created_at: 2021/07/18 21:00:00
事前準備
- 首先你要有個 AWS 帳號
- 會任何一種 aws lambda 支援的程式語言(?)
QA
Q: 為什麼不直接寫在一包 Lambda Function
A: 東西多容易亂,不好測試,函數的功能越單純越好(?),在讓一個主要的函數去 Call
各別的功能整合起來
Q: 那怎麼不用上一篇提到的 ECR 在自己習慣的 IDE
都弄好包一包丟上去
A: 如果有照著跑應該會發現每次一改 Push
上去都超久,如果切成單一功能上去好的就不用再改,省下很多時間
前言
這篇文假設
- 會使用基本
IAM
操作 - 你也已經會使用
Lambda
的基本操作 & 測試,所以首先先建立兩個Lambda
,一個負責Invoke
另一個Lambda
。
首先我們要在你要有能力去 Invoke
其他 Lambda
的那個執行角色上加入政策(Policy)。
而那個政策(Policy)預設不存在,要自己建立,可以在建立的地方選 JSON
然後填入以下內容
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "*"
}
]
}
主要就是可以讓 lambda
去 invoke function
,的政策(Policy),建立好之後把他掛到你的 lambda
執行角色上
之後回到你要呼叫別的 lambda
的 lambda
上,最基本的用法如下
client = boto3.client('lambda')
response = client.invoke(
FunctionName="arn:aws:lambda:xxxx", # 你要 invoke 的 lambda arn
InvocationType="RequestResponse", # 還有其他可以參考官方文件,例如非同步
Payload=json.dumps({"test":1, "aaa": "aaa"}) # 要送過去的資料
)
responsePayload = response['Payload'].read().decode() # 取得回傳的資料
responseJson = json.loads(responsePayload) # 轉換為 json
return responseJson
提示: Payload
送什麼,另一個 lambda
的 event
就會是什麼
上面那段冗長,所以你可以把他包成函數,假設丟進 arn
+ payload
,就回傳給你 json
結果,就會變得很方便,還可以統一做錯誤處理。
偷懶完畢,希望文字描述看得懂
最後更新時間: 2021年07月18日.