AWS SAM
这是一个 sam-app 的示例模板 - 下面是我们为您生成内容的简要说明
.
├── README.md <-- This instructions file
├── app <-- Source code for a lambda function
│ └── main.go <-- Lambda function code
└── template.yaml
要求
- 已配置好管理员权限的 AWS CLI
- 已安装 Docker
- Golang
- SAM CLI - 安装 SAM CLI
设置过程
安装依赖项 & 构建目标
在这个例子中,我们使用内置的 sam build
命令来自动下载所有依赖项并打包构建目标。在此处阅读更多关于 SAM Build 的信息
sam build --use-container
本地开发
通过本地 lambda invoke 在本地调用函数
sam local start-api
curl -XPOST "http://localhost:3001/2015-03-31/functions/sam-app/invocations"
{"statusCode":200,"headers":null,"multiValueHeaders":{"Content-Type":["application/json"]},"body":"{\"message\":\"Hello World\"}"}%
打包和部署
AWS Lambda Golang 运行时需要一个包含构建步骤生成的执行文件的平铺文件夹。SAM 将使用 CodeUri
属性来查找应用程序所在的位置
...
FirstFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: app/
...
首次部署应用程序时,请在 shell 中运行以下命令
sam deploy --guided
该命令将打包您的应用程序并将其部署到 AWS,期间会有一系列提示
- 堆栈名称:要部署到 CloudFormation 的堆栈名称。这在您的账户和区域中应该是唯一的,一个好的起点是与您的项目名称相匹配的名称。
- AWS 区域:您想要部署应用程序的 AWS 区域。
- 部署前确认更改:如果设置为 yes,任何更改集将在执行前显示给您进行手动审查。如果设置为 no,AWS SAM CLI 将自动部署应用程序更改。
- 允许 SAM CLI 创建 IAM 角色:许多 AWS SAM 模板(包括本例)会创建 AWS Lambda 函数访问 AWS 服务所需的 AWS IAM 角色。默认情况下,这些角色的权限范围被限定为最低必需权限。要部署创建或修改 IAM 角色的 AWS CloudFormation 堆栈,必须为
capabilities
提供CAPABILITY_IAM
值。如果没有通过此提示提供权限,要部署此示例,您必须向sam deploy
命令显式传递--capabilities CAPABILITY_IAM
。 - 将参数保存到 samconfig.toml:如果设置为 yes,您的选择将保存到项目中的配置文件中,以便将来您可以只需重新运行
sam deploy
命令而无需参数即可部署对应用程序的更改。
您可以在部署后显示的输出值中找到您的 API Gateway 端点 URL。
为 Lambda 函数添加公共访问权限
在部署带有关联函数 URL 的 Lambda 函数后,您可能会遇到因缺少公共访问权限而无法访问函数 URL 的情况。当函数 URL 的认证类型设置为“None”时,这种情况很常见,这表明该函数旨在无需认证即可公开访问。
为了确保您的 Lambda 函数 URL 可以被公开调用,您需要添加允许未认证请求的必要权限。当您的函数 URL 的认证类型为“None”但缺少公共调用所需的权限时,这一步至关重要。
手动配置权限 您可以通过 AWS Lambda 控制台手动配置权限,方法是创建一个基于资源的策略,授予 lambda:invokeFunctionUrl权限给所有主体 (*)。这种方法直接简单,但不适用于部署管道中的自动化。
自动化权限配置 对于更自动化的方法,尤其适用于 CI/CD 管道,您可以在部署 Lambda 函数后使用 AWS CLI 或 SDK 添加必要的权限。这可以整合到您的部署脚本或 CI/CD 工作流程中。
以下是添加 Lambda 函数 URL 公共访问所需权限的 AWS CLI 命令示例
aws lambda add-permission \
--function-name <your-function-name> \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type "NONE" \
--statement-id unique-statement-id
此命令授予所有主体 (*) 调用 Lambda 函数 URL 的权限,从而实现预期的公共访问。
附录
Golang 安装
请根据 Golang 官方网站的说明确保已安装 Go 1.x(其中 'x' 是最新版本):https://golang.ac.cn/doc/install
一种快速入门的方法是使用 Homebrew、Chocolatey 或您的 Linux 包管理器。
Homebrew (Mac)
从终端运行以下命令
brew install golang
如果已安装,运行以下命令以确保它是最新版本
brew update
brew upgrade golang
Chocolatey (Windows)
从 powershell 运行以下命令
choco install golang
如果已安装,运行以下命令以确保它是最新版本
choco upgrade golang
更上一层楼
以下是一些您可以用来更熟悉整个流程的想法
- 创建额外的 API 资源(例如
/hello/{proxy+}
),并通过此新路径返回请求的名称 - 更新单元测试来捕获这一点
- 打包 & 部署
接下来,您可以使用以下资源来了解更多超出 Hello World 示例的内容,以及其他人如何构建他们的无服务器应用程序