diff --git a/docs/providers/aws/cli-reference/invoke-local.md b/docs/providers/aws/cli-reference/invoke-local.md index 03029b3d0..e52daead2 100644 --- a/docs/providers/aws/cli-reference/invoke-local.md +++ b/docs/providers/aws/cli-reference/invoke-local.md @@ -18,6 +18,8 @@ This runs your code locally by emulating the AWS Lambda environment. Please keep serverless invoke local --function functionName ``` +**Note:** Please refer to [this guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format) for event data passing when your function uses the `http` event with a Lambda Proxy integration. + ## Options - `--function` or `-f` The name of the function in your service that you want to invoke locally. **Required**. @@ -54,13 +56,6 @@ serverless invoke local --function functionName --data "hello world" serverless invoke local --function functionName --data '{"a":"bar"}' ``` -### Local function invocation with custom context - -```bash -serverless invoke local --function functionName --context "hello world" -``` - - ### Local function invocation with data from standard input ```bash @@ -75,8 +70,6 @@ serverless invoke local --function functionName --path lib/data.json This example will pass the json data in the `lib/data.json` file (relative to the root of the service) while invoking the specified/deployed function. -For more information [lambda-input-format](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format) - ### Example `data.json` ```json @@ -88,7 +81,14 @@ For more information [lambda-input-format](https://docs.aws.amazon.com/apigatewa } ``` +### Local function invocation with custom context + +```bash +serverless invoke local --function functionName --context "hello world" +``` + ### Local function invocation with context passing + ```bash serverless invoke local --function functionName --contextPath lib/context.json ``` diff --git a/docs/providers/aws/cli-reference/invoke.md b/docs/providers/aws/cli-reference/invoke.md index 668a2ee3d..db3f2d2cc 100644 --- a/docs/providers/aws/cli-reference/invoke.md +++ b/docs/providers/aws/cli-reference/invoke.md @@ -18,6 +18,8 @@ Invokes deployed function. It allows to send event data to the function, read lo serverless invoke [local] --function functionName ``` +**Note:** Please refer to [this guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format) for event data passing when your function uses the `http` event with a Lambda Proxy integration. + ## Options - `--function` or `-f` The name of the function in your service that you want to invoke. **Required**. - `--stage` or `-s` The stage in your service you want to invoke your function in. @@ -31,7 +33,6 @@ serverless invoke [local] --function functionName ## Provided lifecycle events - `invoke:invoke` - # Invoke Local Invokes a function locally for testing and logs the output. You can only invoke Node.js runtime locally at the moment. Keep in mind that we mock the `context` with simple mock data. @@ -41,11 +42,14 @@ serverless invoke local --function functionName ``` ## Options + - `--function` or `-f` The name of the function in your service that you want to invoke locally. **Required**. - `--path` or `-p` The path to a json file holding input data to be passed to the invoked function as the `event`. This path is relative to the root directory of the service. - `--data` or `-d` String data to be passed as an event to your function. Keep in mind that if you pass both `--path` and `--data`, the data included in the `--path` file will overwrite the data you passed with the `--data` flag. - `--raw` Pass data as a raw string even if it is JSON. If not set, JSON data are parsed and passed as an object. +- `--contextPath` or `-x`, The path to a json file holding input context to be passed to the invoked function. This path is relative to the root directory of the service. +- `--context` or `-c`, String data to be passed as a context to your function. Same like with `--data`, context included in `--contextPath` will overwrite the context you passed with `--context` flag. ## Examples @@ -97,3 +101,34 @@ the specified/deployed function. // etc. // } ``` + +### Local function invocation with custom context + +```bash +serverless invoke local --function functionName --context "hello world" +``` + +### Local function invocation with context passing +```bash +serverless invoke local --function functionName --contextPath lib/context.json +``` +This example will pass the json context in the `lib/context.json` file (relative to the root of the service) while invoking the specified/deployed function. + +### Limitations + +Currently, `invoke local` only supports the NodeJs and Python runtimes. + +## Resource permissions + +Lambda functions assume an *IAM role* during execution: the framework creates this role, and set all the permission provided in the `iamRoleStatements` section of `serverless.yml`. + +Unless you explicitly state otherwise, every call to the AWS SDK inside the lambda function is made using this role (a temporary pair of key / secret is generated and set by AWS as environment variables, `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`). + +When you use `serverless invoke local`, the situation is quite different: the role isn't available (the function is executed on your local machine), so unless you set a different user directly in the code (or via a key pair of environment variables), the AWS SDK will use the default profile specified inside you AWS credential configuration file. + +Take a look to the official AWS documentation (in this particular instance, for the javascript SDK, but should be similar for all SDKs): + +- [http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html) +- [http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-lambda.html](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-lambda.html) + +Whatever approach you decide to implement, **be aware**: the set of permissions might be (and probably is) different, so you won't have an exact simulation of the *real* IAM policy in place.