# Amazon Lambda Golang Library
<!--BEGIN STABILITY BANNER-->---
![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)
> The APIs of higher level constructs in this module are experimental and under active development.
> They are subject to non-backward compatible changes or removal in any future version. These are
> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be
> announced in the release notes. This means that while you may use them, you may need to update
> your source code when upgrading to a newer version of this package.
---
<!--END STABILITY BANNER-->
This library provides constructs for Golang Lambda functions.
To use this module you will either need to have `Go` installed (`go1.11` or later) or `Docker` installed.
See [Local Bundling](#local-bundling)/[Docker Bundling](#docker-bundling) for more information.
This module also requires that your Golang application is
using a Go version >= 1.11 and is using [Go modules](https://golang.org/ref/mod).
## Go Function
Define a `GoFunction`:
```python
go.GoFunction(self, "handler",
entry="lambda-app/cmd/api"
)
```
By default, if `entry` points to a directory, then the construct will assume there is a Go entry file (i.e. `main.go`).
Let's look at an example Go project:
```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
```
With the above layout I could either provide the `entry` as `lambda-app/cmd/api` or `lambda-app/cmd/api/main.go`, either will work.
When the construct builds the golang binary this will be translated `go build ./cmd/api` & `go build ./cmd/api/main.go` respectively.
The construct will figure out where it needs to run the `go build` command from, in this example it would be from
the `lambda-app` directory. It does this by determining the [mod file path](#mod-file-path), which is explained in the
next section.
### mod file path
The `GoFunction` tries to automatically determine your project root, that is
the root of your golang project. This is usually where the top level `go.mod` file or
`vendor` folder of your project is located. When bundling in a Docker container, the
`moduleDir` is used as the source (`/asset-input`) for the volume mounted in
the container.
The CDK will walk up parent folders starting from
the current working directory until it finds a folder containing a `go.mod` file.
Alternatively, you can specify the `moduleDir` prop manually. In this case you
need to ensure that this path includes `entry` and any module/dependencies used
by your function. Otherwise bundling will fail.
## Runtime
The `GoFunction` can be used with either the `GO_1_X` runtime or the provided runtimes (`PROVIDED`/`PROVIDED_AL2`).
By default it will use the `PROVIDED_AL2` runtime. The `GO_1_X` runtime does not support things like
[Lambda Extensions](https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html), whereas the provided runtimes do.
The [aws-lambda-go](https://github.com/aws/aws-lambda-go) library has built in support for the provided runtime as long as
you name the handler `bootstrap` (which we do by default).
## Dependencies
The construct will attempt to figure out how to handle the dependencies for your function. It will
do this by determining whether or not you are vendoring your dependencies. It makes this determination
by looking to see if there is a `vendor` folder at the [mod file path](#mod-file-path).
With this information the construct can determine what commands to run. You will
generally fall into two scenarios:
1. You are using vendoring (indicated by the presence of a `vendor` folder)
In this case `go build` will be run with `-mod=vendor` set
2. You are not using vendoring (indicated by the absence of a `vendor` folder)
If you are not vendoring then `go build` will be run without `-mod=vendor`
since the default behavior is to download dependencies
All other properties of `lambda.Function` are supported, see also the [AWS Lambda construct library](https://github.com/aws/aws-cdk/tree/main/packages/aws-cdk-lib/aws-lambda).
## Environment
By default the following environment variables are set for you:
* `GOOS=linux`
* `GOARCH`: based on the target architecture of the Lambda function
* `GO111MODULE=on`
Use the `environment` prop to define additional environment variables when go runs:
```python
go.GoFunction(self, "handler",
entry="app/cmd/api",
bundling=go.BundlingOptions(
environment={
"HELLO": "WORLD"
}
)
)
```
## Local Bundling
If `Go` is installed locally and the version is >= `go1.11` then it will be used to bundle your code in your environment. Otherwise, bundling will happen in a [Lambda compatible Docker container](https://gallery.ecr.aws/sam/build-provided.al2023) with the Docker platform based on the target architecture of the Lambda function.
For macOS the recommended approach is to install `Go` as Docker volume performance is really poor.
`Go` can be installed by following the [installation docs](https://golang.org/doc/install).
## Docker
To force bundling in a docker container even if `Go` is available in your environment, set the `forceDockerBundling` prop to `true`. This is useful if you want to make sure that your function is built in a consistent Lambda compatible environment.
Use the `buildArgs` prop to pass build arguments when building the bundling image:
```python
go.GoFunction(self, "handler",
entry="app/cmd/api",
bundling=go.BundlingOptions(
build_args={
"HTTPS_PROXY": "https://127.0.0.1:3001"
}
)
)
```
Use the `bundling.dockerImage` prop to use a custom bundling image:
```python
go.GoFunction(self, "handler",
entry="app/cmd/api",
bundling=go.BundlingOptions(
docker_image=DockerImage.from_build("/path/to/Dockerfile")
)
)
```
Use the `bundling.goBuildFlags` prop to pass additional build flags to `go build`:
```python
go.GoFunction(self, "handler",
entry="app/cmd/api",
bundling=go.BundlingOptions(
go_build_flags=["-ldflags \"-s -w\""]
)
)
```
By default this construct doesn't use any Go module proxies. This is contrary to
a standard Go installation, which would use the Google proxy by default. To
recreate that behavior, do the following:
```python
go.GoFunction(self, "GoFunction",
entry="app/cmd/api",
bundling=go.BundlingOptions(
go_proxies=[go.GoFunction.GOOGLE_GOPROXY, "direct"]
)
)
```
You can set additional Docker options to configure the build environment:
```python
go.GoFunction(self, "GoFunction",
entry="app/cmd/api",
bundling=go.BundlingOptions(
network="host",
security_opt="no-new-privileges",
user="user:group",
volumes_from=["777f7dc92da7"],
volumes=[DockerVolume(host_path="/host-path", container_path="/container-path")]
)
)
```
## Command hooks
It is possible to run additional commands by specifying the `commandHooks` prop:
```text
// This example only available in TypeScript
// Run additional commands on a GoFunction via `commandHooks` property
new go.GoFunction(this, 'handler', {
bundling: {
commandHooks: {
// run tests
beforeBundling(inputDir: string): string[] {
return ['go test ./cmd/api -v'];
},
// ...
},
},
});
```
The following hooks are available:
* `beforeBundling`: runs before all bundling commands
* `afterBundling`: runs after all bundling commands
They all receive the directory containing the `go.mod` file (`inputDir`) and the
directory where the bundled asset will be output (`outputDir`). They must return
an array of commands to run. Commands are chained with `&&`.
The commands will run in the environment in which bundling occurs: inside the
container for Docker bundling or on the host OS for local bundling.
## Additional considerations
Depending on how you structure your Golang application, you may want to change the `assetHashType` parameter.
By default this parameter is set to `AssetHashType.OUTPUT` which means that the CDK will calculate the asset hash
(and determine whether or not your code has changed) based on the Golang executable that is created.
If you specify `AssetHashType.SOURCE`, the CDK will calculate the asset hash by looking at the folder
that contains your `go.mod` file. If you are deploying a single Lambda function, or you want to redeploy
all of your functions if anything changes, then `AssetHashType.SOURCE` will probably work.
For example, if my app looked like this:
```bash
lambda-app
├── cmd
│ └── api
│ └── main.go
├── go.mod
├── go.sum
└── pkg
└── auth
└── auth.go
```
With this structure I would provide the `entry` as `cmd/api` which means that the CDK
will determine that the protect root is `lambda-app` (it contains the `go.mod` file).
Since I only have a single Lambda function, and any update to files within the `lambda-app` directory
should trigger a new deploy, I could specify `AssetHashType.SOURCE`.
On the other hand, if I had a project that deployed multiple Lambda functions, for example:
```bash
lambda-app
├── cmd
│ ├── api
│ │ └── main.go
│ └── anotherApi
│ └── main.go
├── go.mod
├── go.sum
└── pkg
├── auth
│ └── auth.go
└── middleware
└── middleware.go
```
Then I would most likely want `AssetHashType.OUTPUT`. With `OUTPUT`
the CDK will only recognize changes if the Golang executable has changed,
and Go only includes dependencies that are used in the executable. So in this case
if `cmd/api` used the `auth` & `middleware` packages, but `cmd/anotherApi` did not, then
an update to `auth` or `middleware` would only trigger an update to the `cmd/api` Lambda
Function.
## Docker based bundling in complex Docker configurations
By default the input and output of Docker based bundling is handled via bind mounts.
In situtations where this does not work, like Docker-in-Docker setups or when using a remote Docker socket, you can configure an alternative, but slower, variant that also works in these situations.
```python
go.GoFunction(self, "GoFunction",
entry="app/cmd/api",
bundling=go.BundlingOptions(
bundling_file_access=BundlingFileAccess.VOLUME_COPY
)
)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/aws/aws-cdk",
"name": "aws-cdk.aws-lambda-go-alpha",
"maintainer": null,
"docs_url": null,
"requires_python": "~=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Amazon Web Services",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/bf/12/4ac59d01bb6699010d7e297f09067d5b75e12fd72966c03cd584e969020d/aws_cdk_aws_lambda_go_alpha-2.170.0a0.tar.gz",
"platform": null,
"description": "# Amazon Lambda Golang Library\n\n<!--BEGIN STABILITY BANNER-->---\n\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n<!--END STABILITY BANNER-->\n\nThis library provides constructs for Golang Lambda functions.\n\nTo use this module you will either need to have `Go` installed (`go1.11` or later) or `Docker` installed.\nSee [Local Bundling](#local-bundling)/[Docker Bundling](#docker-bundling) for more information.\n\nThis module also requires that your Golang application is\nusing a Go version >= 1.11 and is using [Go modules](https://golang.org/ref/mod).\n\n## Go Function\n\nDefine a `GoFunction`:\n\n```python\ngo.GoFunction(self, \"handler\",\n entry=\"lambda-app/cmd/api\"\n)\n```\n\nBy default, if `entry` points to a directory, then the construct will assume there is a Go entry file (i.e. `main.go`).\nLet's look at an example Go project:\n\n```bash\nlambda-app\n\u251c\u2500\u2500 cmd\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 api\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.go\n\u251c\u2500\u2500 go.mod\n\u251c\u2500\u2500 go.sum\n\u251c\u2500\u2500 pkg\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 auth\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 auth.go\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 middleware\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 middleware.go\n\u2514\u2500\u2500 vendor\n \u251c\u2500\u2500 github.com\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 aws\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 aws-lambda-go\n \u2514\u2500\u2500 modules.txt\n```\n\nWith the above layout I could either provide the `entry` as `lambda-app/cmd/api` or `lambda-app/cmd/api/main.go`, either will work.\nWhen the construct builds the golang binary this will be translated `go build ./cmd/api` & `go build ./cmd/api/main.go` respectively.\nThe construct will figure out where it needs to run the `go build` command from, in this example it would be from\nthe `lambda-app` directory. It does this by determining the [mod file path](#mod-file-path), which is explained in the\nnext section.\n\n### mod file path\n\nThe `GoFunction` tries to automatically determine your project root, that is\nthe root of your golang project. This is usually where the top level `go.mod` file or\n`vendor` folder of your project is located. When bundling in a Docker container, the\n`moduleDir` is used as the source (`/asset-input`) for the volume mounted in\nthe container.\n\nThe CDK will walk up parent folders starting from\nthe current working directory until it finds a folder containing a `go.mod` file.\n\nAlternatively, you can specify the `moduleDir` prop manually. In this case you\nneed to ensure that this path includes `entry` and any module/dependencies used\nby your function. Otherwise bundling will fail.\n\n## Runtime\n\nThe `GoFunction` can be used with either the `GO_1_X` runtime or the provided runtimes (`PROVIDED`/`PROVIDED_AL2`).\nBy default it will use the `PROVIDED_AL2` runtime. The `GO_1_X` runtime does not support things like\n[Lambda Extensions](https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html), whereas the provided runtimes do.\nThe [aws-lambda-go](https://github.com/aws/aws-lambda-go) library has built in support for the provided runtime as long as\nyou name the handler `bootstrap` (which we do by default).\n\n## Dependencies\n\nThe construct will attempt to figure out how to handle the dependencies for your function. It will\ndo this by determining whether or not you are vendoring your dependencies. It makes this determination\nby looking to see if there is a `vendor` folder at the [mod file path](#mod-file-path).\n\nWith this information the construct can determine what commands to run. You will\ngenerally fall into two scenarios:\n\n1. You are using vendoring (indicated by the presence of a `vendor` folder)\n In this case `go build` will be run with `-mod=vendor` set\n2. You are not using vendoring (indicated by the absence of a `vendor` folder)\n If you are not vendoring then `go build` will be run without `-mod=vendor`\n since the default behavior is to download dependencies\n\nAll other properties of `lambda.Function` are supported, see also the [AWS Lambda construct library](https://github.com/aws/aws-cdk/tree/main/packages/aws-cdk-lib/aws-lambda).\n\n## Environment\n\nBy default the following environment variables are set for you:\n\n* `GOOS=linux`\n* `GOARCH`: based on the target architecture of the Lambda function\n* `GO111MODULE=on`\n\nUse the `environment` prop to define additional environment variables when go runs:\n\n```python\ngo.GoFunction(self, \"handler\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n environment={\n \"HELLO\": \"WORLD\"\n }\n )\n)\n```\n\n## Local Bundling\n\nIf `Go` is installed locally and the version is >= `go1.11` then it will be used to bundle your code in your environment. Otherwise, bundling will happen in a [Lambda compatible Docker container](https://gallery.ecr.aws/sam/build-provided.al2023) with the Docker platform based on the target architecture of the Lambda function.\n\nFor macOS the recommended approach is to install `Go` as Docker volume performance is really poor.\n\n`Go` can be installed by following the [installation docs](https://golang.org/doc/install).\n\n## Docker\n\nTo force bundling in a docker container even if `Go` is available in your environment, set the `forceDockerBundling` prop to `true`. This is useful if you want to make sure that your function is built in a consistent Lambda compatible environment.\n\nUse the `buildArgs` prop to pass build arguments when building the bundling image:\n\n```python\ngo.GoFunction(self, \"handler\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n build_args={\n \"HTTPS_PROXY\": \"https://127.0.0.1:3001\"\n }\n )\n)\n```\n\nUse the `bundling.dockerImage` prop to use a custom bundling image:\n\n```python\ngo.GoFunction(self, \"handler\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n docker_image=DockerImage.from_build(\"/path/to/Dockerfile\")\n )\n)\n```\n\nUse the `bundling.goBuildFlags` prop to pass additional build flags to `go build`:\n\n```python\ngo.GoFunction(self, \"handler\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n go_build_flags=[\"-ldflags \\\"-s -w\\\"\"]\n )\n)\n```\n\nBy default this construct doesn't use any Go module proxies. This is contrary to\na standard Go installation, which would use the Google proxy by default. To\nrecreate that behavior, do the following:\n\n```python\ngo.GoFunction(self, \"GoFunction\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n go_proxies=[go.GoFunction.GOOGLE_GOPROXY, \"direct\"]\n )\n)\n```\n\nYou can set additional Docker options to configure the build environment:\n\n```python\ngo.GoFunction(self, \"GoFunction\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n network=\"host\",\n security_opt=\"no-new-privileges\",\n user=\"user:group\",\n volumes_from=[\"777f7dc92da7\"],\n volumes=[DockerVolume(host_path=\"/host-path\", container_path=\"/container-path\")]\n )\n)\n```\n\n## Command hooks\n\nIt is possible to run additional commands by specifying the `commandHooks` prop:\n\n```text\n// This example only available in TypeScript\n// Run additional commands on a GoFunction via `commandHooks` property\nnew go.GoFunction(this, 'handler', {\n bundling: {\n commandHooks: {\n // run tests\n beforeBundling(inputDir: string): string[] {\n return ['go test ./cmd/api -v'];\n },\n // ...\n },\n },\n});\n```\n\nThe following hooks are available:\n\n* `beforeBundling`: runs before all bundling commands\n* `afterBundling`: runs after all bundling commands\n\nThey all receive the directory containing the `go.mod` file (`inputDir`) and the\ndirectory where the bundled asset will be output (`outputDir`). They must return\nan array of commands to run. Commands are chained with `&&`.\n\nThe commands will run in the environment in which bundling occurs: inside the\ncontainer for Docker bundling or on the host OS for local bundling.\n\n## Additional considerations\n\nDepending on how you structure your Golang application, you may want to change the `assetHashType` parameter.\nBy default this parameter is set to `AssetHashType.OUTPUT` which means that the CDK will calculate the asset hash\n(and determine whether or not your code has changed) based on the Golang executable that is created.\n\nIf you specify `AssetHashType.SOURCE`, the CDK will calculate the asset hash by looking at the folder\nthat contains your `go.mod` file. If you are deploying a single Lambda function, or you want to redeploy\nall of your functions if anything changes, then `AssetHashType.SOURCE` will probably work.\n\nFor example, if my app looked like this:\n\n```bash\nlambda-app\n\u251c\u2500\u2500 cmd\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 api\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.go\n\u251c\u2500\u2500 go.mod\n\u251c\u2500\u2500 go.sum\n\u2514\u2500\u2500 pkg\n \u00a0\u00a0 \u2514\u2500\u2500 auth\n \u00a0\u00a0 \u00a0\u00a0 \u2514\u2500\u2500 auth.go\n```\n\nWith this structure I would provide the `entry` as `cmd/api` which means that the CDK\nwill determine that the protect root is `lambda-app` (it contains the `go.mod` file).\nSince I only have a single Lambda function, and any update to files within the `lambda-app` directory\nshould trigger a new deploy, I could specify `AssetHashType.SOURCE`.\n\nOn the other hand, if I had a project that deployed multiple Lambda functions, for example:\n\n```bash\nlambda-app\n\u251c\u2500\u2500 cmd\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 api\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 main.go\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 anotherApi\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 main.go\n\u251c\u2500\u2500 go.mod\n\u251c\u2500\u2500 go.sum\n\u2514\u2500\u2500 pkg\n \u00a0\u00a0 \u251c\u2500\u2500 auth\n \u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 auth.go\n \u00a0\u00a0 \u2514\u2500\u2500 middleware\n \u00a0\u00a0 \u2514\u2500\u2500 middleware.go\n```\n\nThen I would most likely want `AssetHashType.OUTPUT`. With `OUTPUT`\nthe CDK will only recognize changes if the Golang executable has changed,\nand Go only includes dependencies that are used in the executable. So in this case\nif `cmd/api` used the `auth` & `middleware` packages, but `cmd/anotherApi` did not, then\nan update to `auth` or `middleware` would only trigger an update to the `cmd/api` Lambda\nFunction.\n\n## Docker based bundling in complex Docker configurations\n\nBy default the input and output of Docker based bundling is handled via bind mounts.\nIn situtations where this does not work, like Docker-in-Docker setups or when using a remote Docker socket, you can configure an alternative, but slower, variant that also works in these situations.\n\n```python\ngo.GoFunction(self, \"GoFunction\",\n entry=\"app/cmd/api\",\n bundling=go.BundlingOptions(\n bundling_file_access=BundlingFileAccess.VOLUME_COPY\n )\n)\n```\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "The CDK Construct Library for AWS Lambda in Golang",
"version": "2.170.0a0",
"project_urls": {
"Homepage": "https://github.com/aws/aws-cdk",
"Source": "https://github.com/aws/aws-cdk.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ca9b3a52cb59f6fb5603379d99f5f79127238c7fa7ac5ed7bd2aec4c8c0d425a",
"md5": "cda4c5af1fb67f53c07bbb70d46cea0f",
"sha256": "1d5d34e0e5eb8b81280512c9424afa25eb0f08936f300e3d3be53af943d5878f"
},
"downloads": -1,
"filename": "aws_cdk.aws_lambda_go_alpha-2.170.0a0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cda4c5af1fb67f53c07bbb70d46cea0f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "~=3.8",
"size": 81600,
"upload_time": "2024-11-22T04:41:44",
"upload_time_iso_8601": "2024-11-22T04:41:44.673704Z",
"url": "https://files.pythonhosted.org/packages/ca/9b/3a52cb59f6fb5603379d99f5f79127238c7fa7ac5ed7bd2aec4c8c0d425a/aws_cdk.aws_lambda_go_alpha-2.170.0a0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bf124ac59d01bb6699010d7e297f09067d5b75e12fd72966c03cd584e969020d",
"md5": "aee0f70a20e7a10447cc9d8954e8e905",
"sha256": "e1f7f51ce2bc03bf9668e858dc5266567065d08f22b10f8975a45eb55bde76ea"
},
"downloads": -1,
"filename": "aws_cdk_aws_lambda_go_alpha-2.170.0a0.tar.gz",
"has_sig": false,
"md5_digest": "aee0f70a20e7a10447cc9d8954e8e905",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "~=3.8",
"size": 82196,
"upload_time": "2024-11-22T04:42:30",
"upload_time_iso_8601": "2024-11-22T04:42:30.496499Z",
"url": "https://files.pythonhosted.org/packages/bf/12/4ac59d01bb6699010d7e297f09067d5b75e12fd72966c03cd584e969020d/aws_cdk_aws_lambda_go_alpha-2.170.0a0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-22 04:42:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aws",
"github_project": "aws-cdk",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aws-cdk.aws-lambda-go-alpha"
}