--- 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](/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](/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](/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 `` with your Consul service name for the Lambda function: ```json { "Node": "lambdas", "SkipNodeUpdate": true, "NodeMeta": { "external-node": "true", "external-probe": "true" }, "Service": { "Service": "" } } ``` 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`: ```hcl Kind = "service-defaults" Name = "" Protocol = "http" EnvoyExtensions = [ { "Name": "builtin/aws/lambda", "Arguments": { "Region": "us-east-2", "ARN": "", "PayloadPassthrough": true } } ] ``` 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).