@bitblit/epsilon

中文文档
4.1.100发布于 2024/09/05Apache-2.0TypeScriptCommonJS近 30 天下载 1790

小型适配器以简化 API 网关 Lambda APIS

此软件包已被标记为弃用

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

中文使用文档
文档目录10 节
  1. 比用直道节点好多少?
  2. 导言
  3. 先决条件
  4. Api 设置
  5. 嵌入设置
  6. .dockerignore (英语)
  7. 嵌入符
  8. (原始内容存档于2018-09-26). lambda-bootstrap- shell.sh
  9. 使用 WebHandler 来简化 Lambda
  10. 使用认证/ AuthHandler 来简化基于 JWT 的符号认证

埃普西龙

用 OpenAPI 简化 Lambda 服务一致的 apis 的小型库

你不妨读 更改日志

东都:

  • 在本文中讨论 http/batch 的 labda 的亲/友
  • 路径/ query var 检查是否打开 api doc
  • 检查压缩处理

比用直道节点好多少?

  • 使用打字符来代替被上帝遗忘的直线活字
  • 处理路由映射( 多端, 单羊肉)
  • 使用承诺和最高水平的.捕获量可转换为500
  • 添加压缩
  • 添加中央ORS
  • 添加 JWT 处理
  • 一致的错误处理
  • 也可以提供静态内容
  • 某种永恒的物体允许乐观地缓存
  • 用于支持通过SaltMint, SNS, SQS, 电子邮件等进行非HTTP( 批量)处理

比使用快递更好吗?

  • 没有req/res 架构来伪造 如此容易测试
  • OpenAPI 第一个设计
  • 轻得多
  • 支持背景、 CRON、 API 间通讯、 AWS 批次退出框

其他服务

  • 环境服务
  • 简单重定向

CDK 自动构建

导言

先决条件

Api 设置

  • 您的相片层,除了依赖于 Epsilon,还需要: **"aws-cdk-lib":(Peer版本) **"构造": (Peer版本) **"行": (Peer版本)

嵌入设置

.dockerignore (英语)

一般来说, Docker 文件需要放在您 api 和 cdk 文件夹上方的文件夹中, 但是它必须忽略 在这种情况下, cdk 文件夹将无限重复

# Need this here to prevent infinite recusion of cdk folder at least
.github
.idea
.yarn
.git
modules/cdk
node_modules

嵌入符

FROM public.ecr.aws/lambda/nodejs:14
COPY modules/api/package.json modules/api/gql-codegen.yml modules/api/tsconfig.json ${LAMBDA_TASK_ROOT}/
COPY modules/api/src ${LAMBDA_TASK_ROOT}/src
COPY lambda-bootstrap-shell.sh ${LAMBDA_TASK_ROOT}
RUN npm install -g yarn
RUN yarn install
RUN yarn clean-compile
ENTRYPOINT ["sh","/var/task/lambda-bootstrap-shell.sh"]
CMD [ "dist/lambda.handler" ]

(原始内容存档于2018-09-26). lambda-bootstrap- shell.sh

#!/bin/sh
# Based on the default script in public.ecr.aws/lambda/nodejs:14, which is copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# Modifications copyright Christopher Weiss, 2022

if [ -z "${EPSILON_RUNNING_IN_AWS_BATCH}" ]; then
    if [ $# -lt 1 ]; then
      echo "entrypoint requires the handler name to be the first argument" 1>&2
      exit 142
    fi
    export _HANDLER="$1"

    RUNTIME_ENTRYPOINT=/var/runtime/bootstrap
    if [ -z "${AWS_LAMBDA_RUNTIME_API}" ]; then
      exec /usr/local/bin/aws-lambda-rie $RUNTIME_ENTRYPOINT
    else
      exec $RUNTIME_ENTRYPOINT
    fi
  else
    echo "Running Epsilon inside AWS batch - triggering direct $1 $2"
    exec node dist/aws-batch-epsilon-cli.ts --process $1 --data $2
fi

图QL 支持(v0.1.x和以上)

如果你只是做直的图形QL 那么你真的不需要使用 Epsilon (我建议只是 与直线 https://www.npmjs.com/package/apollo-server-lambda 互联网档案馆的存檔,存档日期2013-12-22) (中文(简体) ). 不过,如果你想搞砸的话 epsilon 允许您指定一个正则 表达式,所有匹配请求都委托给一个提供阿波罗服务器,绕过Epsilon.

要做到这一点,您必须包括下列图书馆(它们没有被标记为Epsilon的附属物,因为它们 如果您不支持 GraphQL , 则不需要 )

    "apollo-server-lambda": "2.8.1",
    "graphql": "14.4.2",

然后,在你的路由器配置中, 你必须设置一个阿波罗服务器和一个阿波罗Regex:

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

// Provide resolver functions for your schema fields
const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
};

const server: ApolloServer = new ApolloServer({ typeDefs, resolvers });

// ...

const cfg: RouterConfig = RouterUtil.openApiYamlToRouterConfig(yamlString, handlers, authorizers, options);

// ...
cfg.apolloServer = server;
cfg.apolloCreateHandlerOptions = {
  origin: '*',
  credentials: true,
} as CreateHandlerOptions;
cfg.apolloRegex = new RegExp('.*graphql.*');

使用量

使用 WebHandler 来简化 Lambda

您将配置路由器Config, 然后从此创建 WebHandler 。 你的羊肉达 函数应该看起来像 :

const handler: Handler = (event: APIGatewayEvent, context: Context, callback: Callback) => {
    const routerConfig: RouterConfig = getMyRouterConfig(); // Implement this function
    const commonHandler: WebHandler = new WebHandler(routerConfig);
    commonHandler.lambdaHandler(event, context, callback);
};

export {handler};

使用认证/ AuthHandler 来简化基于 JWT 的符号认证

你的认证人Lambda应该这样(我这里假设你在AWS存储你的加密密钥) 系统管理器 这样你就可以保持它加密 在休息,你绝对应该这样做:


import {AuthHandler} from '@bitblit/epsilon/dist/auth/auth-handler';
import {Callback, Context, CustomAuthorizerEvent, Handler} from 'aws-lambda';
import {EnvironmentService} from '@bitblit/ratchet/dist/aws/environment-service';
import 'reflect-metadata';

const handler: Handler = (event: CustomAuthorizerEvent, context: Context, callback: Callback) => {

    EnvironmentService.getConfig('MyConfigurationName').then(cfg => {
        const commonAuth: AuthHandler = new AuthHandler('api.mycompany.com', cfg['encryptionKey']);
        commonAuth.lambdaHandler(event, context, callback);
    });
};

export {handler};

这将通过任何持有有效JWT标志的人。 注意,Epsilon还没有支持基于角色 在此版本中过滤 .

要创建有效的 JWT 令牌, 您的认证端点可以使用 认证/网络控件管理器 像这样的课 (在您验证了用户主/证书对后):

  // Other authentication stuff happens up here.
  const email: string = '[email protected]';
  const roles: string[] = ['USER','NOT-AN-ADMIN'];
  const userData: any = {'other': 'stuff'};
  const myConfig: any = await EnvironmentService.getConfig('MyConfigurationName'); // same as above
  const encryptionKey: string =  cfg['encryptionKey'];
  const adminUser: any = null; // Set this if the user is an admin doing run-as (this is the admin user)
  const expSec: number = 3600; // How long until this token expires in seconds

  const tokenHandler: WebTokenManipulator = new WebTokenManipulator(encryptionKey, 'api.mycompany.com');
  const token: string = tokenHandler.createJWTString(email, userData, roles, expSec, admin);

关于增加新网关/阶段的说明

您需要认证攻击羊肉的通道(截至2018-10-13年

aws lambda add-permission --function-name "arn:aws:lambda:us-east-1:{accountId}:function:{lambda-function-name}"
  --source-arn "arn:aws:execute-api:us-east-1:{account number}:{api id}/*/*/*"
    --principal apigateway.amazonaws.com
      --statement-id b57d8a0f-08e5-407c-9093-47d7e8e840bc
        --action lambda:InvokeFunction

您需要记住去 IAM / Keys 并授权新堆栈用户使用您的 KMS 密钥( 如果您是 使用 KMS 通过 SystemManager 加密您的配置, 您应该这样做 。 )

版本与发布记录

@bitblit/epsilon 共发布 401 个版本,首次发布于 2018/07/14;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.1.100latest2024/09/052 年前
4.1.992024/08/022 年前
4.1.982024/07/252 年前
4.1.972024/05/232 年前
4.1.962024/05/232 年前
4.1.952024/04/192 年前

关于 @bitblit/epsilon 的常见问题

@bitblit/epsilon 是什么?

小型适配器以简化 API 网关 Lambda APIS注意:该包已被作者标记为弃用——Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

如何安装 @bitblit/epsilon?

在项目目录运行 npm install @bitblit/epsilon,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@bitblit/ratchet(^4.1.106)、@types/aws-lambda(8.10.122)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 epsilon-cli,可以用 npx epsilon-cli 直接运行。

@bitblit/epsilon 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bitblit/epsilon 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bitblit/epsilon 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=14.18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bitblit/epsilon 可以商用吗?

@bitblit/epsilon 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bitblit/epsilon 的下载量有多少?

根据 npm 官方下载统计,@bitblit/epsilon 在 2026/10/08 – 2026/11/06 这 30 天内被下载 1,790 次,日均约 60 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bitblit/epsilon 还在维护吗?

最新版本 4.1.100 发布于 2024/09/05(2 年前);至今共发布 401 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/07/14。作者已将其标记为弃用,新项目建议寻找替代方案。