AWS SAM 容器
这是一个应用程序的示例模板 - 下面是我们为你生成内容的简要说明
.
├── README.md <-- This instructions file
├── app <-- Source code for a lambda function
│ ├── main.go <-- Lambda function code
│ └── Dockerfile <-- Dockerfile
├── samconfig.toml <-- SAM CLI configuration file
└── template.yaml
功能
- 使用 distroless 镜像构建,镜像大小只有几 MB。
- 使用 aws-lambda-adapter 迁移到 AWS SAM,无需更改你的 Fiber 代码。
要求
- 已配置管理员权限的 AWS CLI
- 已安装 Docker
- SAM CLI - 安装 SAM CLI
本地测试可能需要以下工具:
设置过程
安装依赖项和构建目标
在此示例中,我们使用内置的 sam build
命令从 Dockerfile 构建 Docker 镜像,然后将应用程序源代码复制到 Docker 镜像中。在此处阅读更多关于 SAM Build 的信息。
本地开发
通过本地 API Gateway 本地调用函数
docker run -it -p 80:3000 lambdafunction
curl http://localhost
Hello, World!
打包和部署
sam deploy --guided
该命令将打包并将应用程序部署到 AWS,过程中会有一系列提示。
- 堆栈名称 (Stack Name):要部署到 CloudFormation 的堆栈名称。此名称在你的账户和区域中应是唯一的,一个好的起点可以是与你的项目名称相匹配的名称。
- AWS 区域 (AWS Region):你想部署应用程序的 AWS 区域。
- 部署前确认更改 (Confirm changes before deploy):如果设置为 yes,在执行之前会向你显示所有更改集,供手动审查。如果设置为 no,AWS SAM CLI 将自动部署应用程序更改。
- 允许 SAM CLI 创建 IAM 角色 (Allow SAM CLI IAM role creation):许多 AWS SAM 模板(包括本示例)会创建 AWS Lambda 函数访问 AWS 服务所需的 AWS IAM 角色。默认情况下,这些角色的权限范围被限制到最低必需权限。要部署创建或修改 IAM 角色的 AWS CloudFormation 堆栈,必须为
capabilities
提供CAPABILITY_IAM
值。如果未通过此提示提供权限,要部署本示例,你必须显式地将--capabilities CAPABILITY_IAM
传递给sam deploy
命令。 - 将参数保存到 samconfig.toml (Save arguments to 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 工作流程中。
以下是一个示例 AWS CLI 命令,用于为你的 Lambda 函数 URL 添加公共访问所需的权限:
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