mirror of https://github.com/hashicorp/consul
86 lines
3.5 KiB
Markdown
86 lines
3.5 KiB
Markdown
---
|
|
layout: docs
|
|
page_title: Manual Lambda Function Registration
|
|
description: >-
|
|
Register AWS Lambda functions with Consul service mesh using the Consul Lambda registrator. The Consul Lambda registrator automates Lambda function registration.
|
|
---
|
|
|
|
# Manual Lambda Function Registration
|
|
|
|
This topic describes how to manually register Lambda functions into Consul. Refer to [Automate Lambda Function Registration](/consul/docs/lambda/registration/automate) for information about using the Lambda registrator to automate registration.
|
|
|
|
## Requirements
|
|
|
|
Verify that your environment meets the requirements specified in [Lambda Function Registration Requirements](/consul/docs/lambda/registration).
|
|
|
|
To manually register Lambda functions so that mesh services can invoke them, you must create and apply a service registration configuration for the Lambda function and write a [service defaults configuration entry](/consul/docs/connect/config-entries/service-defaults) for the function.
|
|
|
|
## Register a Lambda function
|
|
|
|
You can manually register Lambda functions if you are unable to automate the process using the Lambda registrator.
|
|
|
|
1. Create a configuration for registering the service. You can copy the following example and replace `<SERVICE_NAME>` with your Consul service name for the Lambda function:
|
|
|
|
<CodeBlockConfig filename="lambda.json">
|
|
|
|
```json
|
|
{
|
|
"Node": "lambdas",
|
|
"SkipNodeUpdate": true,
|
|
"NodeMeta": {
|
|
"external-node": "true",
|
|
"external-probe": "true"
|
|
},
|
|
"Service": {
|
|
"Service": "<SERVICE_NAME>"
|
|
}
|
|
}
|
|
```
|
|
|
|
</CodeBlockConfig>
|
|
|
|
1. Save the configuration to `lambda.json`.
|
|
|
|
1. Send the configuration to the `catalog/register` API endpoint to register the service, for example:
|
|
```shell-session
|
|
$ curl --request PUT --data @lambda.json localhost:8500/v1/catalog/register
|
|
```
|
|
|
|
1. Create the `service-defaults` configuration entry and include the AWS tags used to invoke the Lambda function in the `EnvoyExtensions` configuration. Refer to [Supported `EnvoyExtension` arguments](#supported-envoyextension-arguments) for more information.
|
|
|
|
The following example creates a `service-defaults` configuration entry named `lambda`:
|
|
|
|
<CodeBlockConfig filename="lambda-service-defaults.hcl">
|
|
|
|
```hcl
|
|
Kind = "service-defaults"
|
|
Name = "<SERVICE_NAME>"
|
|
Protocol = "http"
|
|
EnvoyExtensions = [
|
|
{
|
|
"Name": "builtin/aws/lambda",
|
|
"Arguments": {
|
|
"Region": "us-east-2",
|
|
"ARN": "<INSERT ARN HERE>",
|
|
"PayloadPassthrough": true
|
|
}
|
|
}
|
|
]
|
|
```
|
|
|
|
</CodeBlockConfig>
|
|
|
|
1. Issue the `consul config write` command to store the configuration entry. For example:
|
|
```shell-session
|
|
$ consul config write lambda-service-defaults.hcl
|
|
```
|
|
|
|
### Supported `EnvoyExtension` arguments
|
|
|
|
The `lambda` Envoy extension supports the following arguments:
|
|
|
|
- `ARN` (`string`) - Specifies the [AWS ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) for the service's Lambda. `ARN` must be set to a valid Lambda function ARN.
|
|
- `Region` (`string`) - Specifies the AWS region the Lambda is running in. `Region` must be set to a valid AWS region where the Lambda function exists.
|
|
- `PayloadPassthrough` (`boolean: false`) - Determines if the body Envoy receives is converted to JSON or directly passed to Lambda.
|
|
- `InvocationMode` (`string: synchronous`) - Determines if Consul configures the Lambda to be invoked using the `synchronous` or `asynchronous` [invocation mode](https://docs.aws.amazon.com/lambda/latest/operatorguide/invocation-modes.html).
|