新用户可获得高达 200 美元的服务抵扣金

亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐(Amazon Free Tier)。注册即可获得 100 美元的服务抵扣金,在探索关键亚马逊云科技服务时可以再额外获得最多 100 美元的服务抵扣金。使用免费计划试用亚马逊云科技服务,最长可达 6 个月,无需支付任何费用,除非您选择付费计划。付费计划允许您扩展运营并获得超过 150 项亚马逊云科技服务的访问权限。

现在做后端开发,已经不必再为了部署、运维一堆服务器而头疼了。得益于亚马逊的无服务器架构,我们只需要专注写好业务逻辑,部署和扩展的重担就交给云平台。而 AmazonServerless Application Model CLI 是这个体系中不可或缺的一环,它帮我们用最少的配置,把本地代码一步步部署到云端。

今天这篇文章,就带你从零开始,用 Amazon SAM CLI 创建一个简单的 API,并通过 GitCode Actions 自动化部署流程。看完后,你就能拥有一个自动上线的“Hello World”服务,为更复杂的项目打好基础。

一、开始之前:准备环境

首先,请确认你的电脑已经安装好了 Amazon SAM CLI。如果还没装,可以去亚马逊云科技官网下载最新版的安装程序,Windows 用户只需运行 .exe 文件,然后记得将安装目录加到系统 PATH 环境变量中。安装完成后,打开终端输入:

sam --version

只要能看到版本号,就说明一切准备就绪。

二、初始化你的第一个无服务器项目

在你喜欢的位置新建一个项目文件夹,比如叫 aws-serverless-api,然后进入目录运行:

sam init

接下来会有一系列选择项,不用紧张,跟着以下方式选就行:

  • 模板选择:选 Amazon Quick Start Templates(选项 1)

  • 应用类型:选 Serverless API(选项 7)

  • 运行环境:Node.js 20.x

  • X-Ray、CloudWatch、JSON 日志这些可以都选 N,因为我们只是写个简单的 API

  • 项目名字可以叫 sam-hello-world

初始化完成后,你会看到 SAM 自动帮你生成了一堆文件和目录,比如 template.yaml(定义资源),src(存放代码),还有一些测试用的文件。可以用 VS Code 打开项目,准备进入开发模式。

三、改造项目,打造你的 Hello World API

我们要让 API 的根路径 / 返回一段简单的 JSON 消息,先来修改 template.yaml 文件,替换成如下内容:

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: Simple Hello World API
 
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/app.lambdaHandler
      Runtime: nodejs20.x
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /
            Method: GET

这段配置创建了一个 Lambda 函数,并绑定到了 API Gateway 上的 / 路由。当你访问这个地址时,就会触发这个函数。

接着,创建代码文件 src/app.js,内容如下:

exports.lambdaHandler = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({ message: "Hello, World!" })
  };
};

这个函数每次被调用,就会返回一个包含“Hello, World!”信息的 JSON。

另外,记得把初始化时生成的一些没用的处理器和测试事件删掉:

rm -rf src/handlers events

四、本地构建与测试

开发完成后,我们可以在本地先跑一遍,确保功能正常:

sam build
sam local start-api

此时如果你的机器上装了 Docker,就能直接在本地模拟 Lambda 环境。打开浏览器访问http://127.0.0.1:3000,如果看到 {"message": "Hello, World!"},就说明一切正常。

五、部署到亚马逊云科技云端

接下来就是将这个 API 部署上去。执行:

sam deploy --guided

按照提示输入堆栈名(比如 sam-hello-world)、部署区域(如 us-east-1)、是否创建权限角色(选 Y),其余选项可按默认。部署完成后,你会在终端看到 API 的访问地址。

把这个地址复制到浏览器中,加上 /Prod 后缀,访问看看,API 应该能正常返回 Hello World 的信息。你还可以登录亚马逊云科技控制台,分别查看 API Gateway、Lambda 和 S3 的页面,会看到刚刚部署的资源已经全部就绪。

六、接入 GitCode Actions,实现自动化部署

如果每次更新都要手动部署,那就太麻烦了。我们可以用 GitCode Actions,让代码推送后自动触发部署。首先,在项目目录初始化 Git 仓库:

git init

 设置忽略文件:

echo "node_modules/\n.aws-sam/\nsamconfig.toml" >> .gitignore

接着提交项目到 GitCode(建议安装 GitCode CLI):

git add .
git commit -m "Initial commit"
gh repo create aws-sam-cli-tutorial --public --source=. --remote=origin
git push -u origin master

然后新建 GitCode Actions 的工作流配置文件:

mkdir -p .gitcode/workflows
touch .gitcode/workflows/deploy.yml

打开 deploy.yml,粘贴以下内容:

name: Deploy API to AWS
on:
  push:
    branches:
      - master
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Setup SAM CLI
        uses: aws-actions/setup-sam@v2
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}
      - name: Build and Deploy
        run: |
          sam build
          sam deploy \
            --stack-name sam-hello-world \
            --s3-bucket ${{ secrets.AWS_S3_BUCKET }} \
            --capabilities CAPABILITY_IAM \
            --region ${{ secrets.AWS_REGION }} \
            --no-confirm-changeset \
            --no-fail-on-empty-changeset

这段配置会在每次向 master 分支推送时自动运行构建和部署操作。你只需要在 GitCode 仓库中设置几个 Secret 环境变量:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_REGION(如 us-east-1)

  • AWS_S3_BUCKET(SAM 部署时使用的 S3 存储桶名)

你可以在亚马逊云科技控制台的 IAM 服务中创建一个具备基本权限的用户,并生成访问密钥,将其填入 GitCode。至于 S3 存储桶名,可以在之前部署时自动创建的那个里找到。设置好后,就可以愉快地提交更新,自动部署了!

七、验证自动部署是否生效

试着修改你的 Lambda 函数内容,比如改成:

body: JSON.stringify({ message: "What up, World!" })

 

然后 

git add .
git commit -m "update message"
git push

去 GitCode 仓库看看 Actions 页签,如果看到部署流程成功执行,再去浏览器刷新 API 地址,发现内容也随之更新,就说明整个自动化部署流程已经跑通了。

 最后一步是测试所有功能是否正常!修改app.js文件内容,比如说改成了"What up, World!"。

exports.lambdaHandler = async (event) => {
 return {
  statusCode: 200,
  body: JSON.stringify({ message: "What up, World!" }),
 };
};

 然后,将更改推送到 master 分支:

git add .
git commit -m 'updated message' 
git push

推送前请确保当前位于 master 分支,在GitCode代码库中,将看到 Action 自动运行并成功完成部署:

最后,返回浏览器并粘贴我们之前设置的API Gateway网址。请确认返回消息是否已更新。

 

八、写在最后

通过这个小项目,我们搭建了一个完整的 Serverless API 环境,从本地开发,到云端部署,再到 CI/CD 自动化流程,每一步都清晰直观。这不仅能为你今后的实际项目提供模板,也能帮你理解 Amazon Serverless 架构的核心理念。当然,这只是起点。如果你有更多功能需求,比如数据库连接、权限控制、多环境部署等,SAM 和 GitCode Actions 都能灵活支持。欢迎你在这个基础上自由拓展,构建属于自己的高可用 API 服务。

 

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐