一,使用模板文件(template.yml)配置相关资源

3个Lambda函数 及 数据库

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  demo-typescript-01
Globals:
  Function:
    Timeout: 3
Resources:
 # 定义Lambda 方法到 /getAll
  Function01:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: src/
      Handler: function01.lambdaHandler
      Runtime: nodejs16.x
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /getAll
            Method: get
    Metadata: 
      BuildMethod: esbuild
      BuildProperties:
        Minify: true
        Target: "es2020"
        EntryPoints: 
        - function01.ts
 # 定义Lambda 方法到 /get/{id}
  Function02:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: src/
      Handler: function02.lambdaHandler
      Runtime: nodejs16.x
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /get/{id}
            Method: get
    Metadata: # Manage esbuild properties
      BuildMethod: esbuild
      BuildProperties:
        Minify: true
        Target: "es2020"
        EntryPoints: 
        - function02.ts

  # 定义一个资源数据库
  SampleTable:
    Type: AWS::Serverless::SimpleTable
    Properties:
      PrimaryKey:
        Name: id
        Type: String
      ProvisionedThroughput:
        ReadCapacityUnits: 2
        WriteCapacityUnits: 2

Outputs:
  FunctionsApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"

执行

sam deploy

这样就在服务端部署了 一个Lambda应用(含2个函数绑定到2个节点的GET请求)以及一个数据库。

这个时候浏览器远程访问上述地址就能正常访问到

二,代码部分

因为不习惯JS,所以使用TypeScript撰写代码。使用 sam init 命令,选择 【AWS Quick Start Template】>【Hello World Example】> 【nodejs16.x】 > 【Zip】> 【Hello World Example TypeScript】一步一步生成,稍微调整下代码结构,并且加了几个方法:

调整及开发过程中使用SAM命令结合MCS插件,确认动作,及本地单步调试

(详细可参考:AWS学习笔记(一)),

三,各种本地 远程 资源访问方法

本地环境搭建部分,参见 AWS学习笔记(一)

// DynamoDB 本地 / 远程
var ddb = new AWS.DynamoDB({
  apiVersion: '2012-08-10',
  endpoint: "http://localhost:8008"
});
var ddb = new AWS.DynamoDB({
  apiVersion: '2012-08-10'
});
// SQS 本地 / 远程
var sqs = new AWS.SQS({
    region: 'ap-northeast-1',
    endpoint: "http://localhost:9324"
});
var sqs = new AWS.SQS({
    region: 'ap-northeast-1',
    endpoint: "http://localhost:9324"
});

其他类似,略;
SDK参考: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/

其他待补充……

最后修改日期: 2022年11月26日

作者