Lambda有三种调用方式——Synchronous Invocation(同步调用) 、Asynchronous Invocation(异步调用)和Event Source Mapping(事件源映射),Event Source Mapping背后原理也是同步调用。本节先来介绍同步调用
当使用Lambda的synchronous调用方式时,Lambda运行函数并等待它返回结果,当运行完成后,Lambda将结果返回给调用端:

同步调用时,Lambda在后台会启用一个执行环境,把程序运行的结果返回给前端调用者
 
当使用以下方式调用Lambda时,都是synchronous方式:
在AWS控制台中进入Lambda服务,创建新的函数。将其命名为hello-world, Runtime选择Python 3.9,其他选项保持默认,然后点击创建:

创建完成后,更新Lambda代码如下, 并重新部署:
import json
import time
def lambda_handler(event, context):
    # TODO implement
    time.sleep(5)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

将函数的超时时间改成10s(默认为3s,而我们的程序会sleep 5秒):

在cloud 9的命令行中执行:
aws lambda invoke --function-name hello-world response.json
在控制台上会发现,等待5s钟后才返回结果,这是因为代码执行中间sleep了5秒,而同步调用的机制要求Lambda必须执行完成再返回结果:

控制台的返回结果里返回了两部分内容:
latest函数执行的结果保存在response.json里面:
$ cat response.json 
{"statusCode": 200, "body": "\"Hello from Lambda!\""}
同步调用时,如果Lambda执行出错,必须人工在代码中处理retry、exponential backoff等异常情况。
我们在后面将看到,当使用
Asynchronous调用时,重试和指数回退等情况都不需要使用代码进行干预