在本地使用“sam local”测试AWS Lambda时,需要通过HTTPS连接。要实现此目标,需要使用本地 TLS 证书以及在 Lambda 中启用 HTTP API。
以下是具体步骤和代码示例:
步骤1:安装 mkcert 和 nss (MacOS 用户可以使用 homebrew 安装):
brew install mkcert nss
步骤2:创建本地的 TLS 证书:
mkcert -install # 安装根证书 mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 # 为本地 HTTPS 服务器创建证书
步骤3:将证书添加到 Lambda 函数的“环境变量”中:
"environment": { "SSL_CERT_FILE": "/etc/ssl/certs/ca-certificates.crt", "SSL_KEY_FILE": "/var/task/key.pem", "SSL_CRT_FILE": "/var/task/cert.pem" }
步骤4:在 Lambda 函数中启用 HTTP API:
const http = require('http') const https = require('https') const express = require('express') const app = express()
// Redirect HTTP to HTTPS http.createServer((req, res) => { res.writeHead(301, { "Location": "https://" + req.headers.host + req.url }) res.end() }).listen(8080)
// HTTPS server https.createServer({ key: fs.readFileSync(process.env.SSL_KEY_FILE), cert: fs.readFileSync(process.env.SSL_CRT_FILE), ca: [ fs.readFileSync(process.env.SSL_CERT_FILE) ] }, app).listen(8443)
步骤5:通过 HTTPS 连接 Lambda 函数:
在本地使用 cURL 命令进行测试:
curl -k https://localhost:8443/my-function
注意:这里使用了 curl 的 "-k" 参数禁用了 SSL/TLS 的证书验证。在实际的应用场景中,我们不建议这样做,因为这可能导致安全漏洞。
以上是使用“sam local”测试 AWS Lambda 并通过 HTTPS 连接的完整步骤和代码示例。