Running AWS Lambda Bots with Localhost
When developing for Medplum, you may want your local Medplum Server to trigger and execute AWS Lambda-based Bots. This setup allows you to test Lambda-specific behavior (like cold starts or resource limits) without deploying your entire server stack to the cloud.
Architecture Overview
When configured this way, your local server acts as the "orchestrator," using your local AWS credentials to invoke Lambdas in your AWS environment.
Setup Instructions
1. Configure AWS Credentials
Your local server needs permission to create and invoke Lambda functions. Medplum recommends using AWS IAM Identity Center (SSO) for secure access.
To authenticate with a specific profile:
aws sso login --profile medplum-dev
To verify your identity and ensure your session is active:
aws sts get-caller-identity --profile medplum-dev
Note: If you aren't using SSO, ensure your
~/.aws/credentialsfile is properly configured with anaccess_keyandsecret_key.
2. Configure the Medplum Server
Update your packages/server/medplum.config.json to point to the correct AWS resources.
{
"botLambdaRoleArn": "arn:aws:iam::123456789012:role/MedplumBotRole",
"botLambdaLayerName": "medplum-bot-layer"
}
How to find these values:
The most efficient way to get these values is to pull them from an existing environment's AWS Parameter Store:
- Open the AWS Console and navigate to Systems Manager > Parameter Store.
- Look for the following keys (standard for Medplum deployments):
/medplum/staging/botLambdaRoleArn/medplum/staging/botLambdaLayerName
3. Start the Local Server
When starting your server, you must explicitly pass the AWS_PROFILE so the AWS SDK can find your credentials.
# From the root of the medplum repository
AWS_PROFILE=medplum-dev npm run dev --workspace=packages/server
4. Deploy and Execute
Once the server is running with the correct configuration:
- Create/Open a Bot: In your local Medplum web app (typically
localhost:3000), navigate to your Bot. - Set Runtime: Ensure the
Bot.runtimeVersionis set toawslambda. - Deploy: Click "Deploy". The local server will now bundle your bot and upload it as a Lambda function to your AWS account.
- Execute: Click "Execute". You should see the execution logs in your local terminal and the Medplum UI.
Troubleshooting
- Permissions: Ensure the IAM Role defined in
botLambdaRoleArnhas thelambda:InvokeFunctionandlambda:CreateFunctionpermissions. - Region: Ensure your
AWS_REGIONis correctly set in your environment variables or AWS config file.