本节我们将使用SAM init
命令创建项目
执行sam init
, 选择AWS Quick Start Templates
和Hello World Example
:
这里不使用默认的Python,而是使用nodejs
, 选择Zip方式部署:
为避免与上一节项目名称冲突,这里命名为sam-app2
。
进行创建:
创建完成后,目录结构如下:
kongpingfan:~/environment/sam-app2 $ tree
.
├── events
│ └── event.json
├── hello-world
│ ├── app.js
│ ├── package.json
│ └── tests
│ └── unit
│ └── test-handler.js
├── README.md
└── template.yaml
hello-world/app.js
声明了Lambda代码,它返回一个固定的json体:
exports.lambdaHandler = async (event, context) => {
try {
// const ret = await axios(url);
response = {
'statusCode': 200,
'body': JSON.stringify({
message: 'hello world',
// location: ret.data.trim()
})
}
} catch (err) {
console.log(err);
return err;
}
return response
};
template.yaml
文件结构和上一节基本类似,注意到其中有额外的Events
模块:
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
如果有Lambda的使用经历,可能会注意到Lambda有Trigger
配置
此Events
字段描述了触发Lambda的资源(Api对应AWS API Gateway)
, 并支持以下选项:
Type: S3 | SNS | Kinesis | DynamoDB | SQS | Api | Schedule | CloudWatchEvent | EventBridgeRule | CloudWatchLogs | IoTRule | AlexaSkill | Cognito | HttpApi | MSK | MQ | SelfManagedKafka
所以,本项目不仅会部署Lambda函数,而且会一同部署API Gateway
。架构如下