Use Invoke with an AWS SDK or CLI (original) (raw)
The following code examples show how to use Invoke
.
Action examples are code excerpts from larger programs and must be run in context. You can see this action in context in the following code example:
.NET
SDK for .NET
/// <summary>
/// Invoke a Lambda function.
/// </summary>
/// <param name="functionName">The name of the Lambda function to
/// invoke.</param
/// <param name="parameters">The parameter values that will be passed to the function.</param>
/// <returns>A System Threading Task.</returns>
public async Task<string> InvokeFunctionAsync(
string functionName,
string parameters)
{
var payload = parameters;
var request = new InvokeRequest
{
FunctionName = functionName,
Payload = payload,
};
var response = await _lambdaService.InvokeAsync(request);
MemoryStream stream = response.Payload;
string returnValue = System.Text.Encoding.UTF8.GetString(stream.ToArray());
return returnValue;
}
- For API details, seeInvoke in AWS SDK for .NET API Reference.
C++
SDK for C++
Aws::Client::ClientConfiguration clientConfig;
// Optional: Set to the AWS Region in which the bucket was created (overrides config file).
// clientConfig.region = "us-east-1";
Aws::Lambda::LambdaClient client(clientConfig);
Aws::Lambda::Model::InvokeRequest request;
request.SetFunctionName(LAMBDA_NAME);
request.SetLogType(logType);
std::shared_ptr<Aws::IOStream> payload = Aws::MakeShared<Aws::StringStream>(
"FunctionTest");
*payload << jsonPayload.View().WriteReadable();
request.SetBody(payload);
request.SetContentType("application/json");
Aws::Lambda::Model::InvokeOutcome outcome = client.Invoke(request);
if (outcome.IsSuccess()) {
invokeResult = std::move(outcome.GetResult());
result = true;
break;
}
else {
std::cerr << "Error with Lambda::InvokeRequest. "
<< outcome.GetError().GetMessage()
<< std::endl;
break;
}
- For API details, seeInvoke in AWS SDK for C++ API Reference.
CLI
AWS CLI
Example 1: To invoke a Lambda function synchronously
The following invoke
example invokes the my-function
function synchronously. The cli-binary-format
option is required if you're using AWS CLI version 2. For more information, see AWS CLI supported global command line options in the AWS Command Line Interface User Guide.
aws lambda invoke \
--function-name my-function \
--cli-binary-format raw-in-base64-out \
--payload '{ "name": "Bob" }' \
response.json
Output:
{
"ExecutedVersion": "$LATEST",
"StatusCode": 200
}
For more information, see Invoke a Lambda function synchronously in the AWS Lambda Developer Guide.
Example 2: To invoke a Lambda function asynchronously
The following invoke
example invokes the my-function
function asynchronously. The cli-binary-format
option is required if you're using AWS CLI version 2. For more information, see AWS CLI supported global command line options in the AWS Command Line Interface User Guide.
aws lambda invoke \
--function-name my-function \
--invocation-type Event \
--cli-binary-format raw-in-base64-out \
--payload '{ "name": "Bob" }' \
response.json
Output:
{
"StatusCode": 202
}
For more information, see Invoking a Lambda function asynchronously in the AWS Lambda Developer Guide.
- For API details, seeInvoke in AWS CLI Command Reference.
Go
SDK for Go V2
import (
"bytes"
"context"
"encoding/json"
"errors"
"log"
"time"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/lambda"
"github.com/aws/aws-sdk-go-v2/service/lambda/types"
)
// FunctionWrapper encapsulates function actions used in the examples.
// It contains an AWS Lambda service client that is used to perform user actions.
type FunctionWrapper struct {
LambdaClient *lambda.Client
}
// Invoke invokes the Lambda function specified by functionName, passing the parameters
// as a JSON payload. When getLog is true, types.LogTypeTail is specified, which tells
// Lambda to include the last few log lines in the returned result.
func (wrapper FunctionWrapper) Invoke(ctx context.Context, functionName string, parameters any, getLog bool) *lambda.InvokeOutput {
logType := types.LogTypeNone
if getLog {
logType = types.LogTypeTail
}
payload, err := json.Marshal(parameters)
if err != nil {
log.Panicf("Couldn't marshal parameters to JSON. Here's why %v\n", err)
}
invokeOutput, err := wrapper.LambdaClient.Invoke(ctx, &lambda.InvokeInput{
FunctionName: aws.String(functionName),
LogType: logType,
Payload: payload,
})
if err != nil {
log.Panicf("Couldn't invoke function %v. Here's why: %v\n", functionName, err)
}
return invokeOutput
}
- For API details, seeInvoke in AWS SDK for Go API Reference.
Java
SDK for Java 2.x
/**
* Invokes a specific AWS Lambda function.
*
* @param awsLambda an instance of {@link LambdaClient} to interact with the AWS Lambda service
* @param functionName the name of the AWS Lambda function to be invoked
*/
public static void invokeFunction(LambdaClient awsLambda, String functionName) {
InvokeResponse res;
try {
// Need a SdkBytes instance for the payload.
JSONObject jsonObj = new JSONObject();
jsonObj.put("inputValue", "2000");
String json = jsonObj.toString();
SdkBytes payload = SdkBytes.fromUtf8String(json);
InvokeRequest request = InvokeRequest.builder()
.functionName(functionName)
.payload(payload)
.build();
res = awsLambda.invoke(request);
String value = res.payload().asUtf8String();
System.out.println(value);
} catch (LambdaException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
- For API details, seeInvoke in AWS SDK for Java 2.x API Reference.
JavaScript
SDK for JavaScript (v3)
const invoke = async (funcName, payload) => {
const client = new LambdaClient({});
const command = new InvokeCommand({
FunctionName: funcName,
Payload: JSON.stringify(payload),
LogType: LogType.Tail,
});
const { Payload, LogResult } = await client.send(command);
const result = Buffer.from(Payload).toString();
const logs = Buffer.from(LogResult, "base64").toString();
return { logs, result };
};
- For API details, seeInvoke in AWS SDK for JavaScript API Reference.
Kotlin
SDK for Kotlin
suspend fun invokeFunction(functionNameVal: String) {
val json = """{"inputValue":"1000"}"""
val byteArray = json.trimIndent().encodeToByteArray()
val request =
InvokeRequest {
functionName = functionNameVal
logType = LogType.Tail
payload = byteArray
}
LambdaClient { region = "us-west-2" }.use { awsLambda ->
val res = awsLambda.invoke(request)
println("${res.payload?.toString(Charsets.UTF_8)}")
println("The log result is ${res.logResult}")
}
}
- For API details, seeInvoke in AWS SDK for Kotlin API reference.
PHP
SDK for PHP
public function invoke($functionName, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mi>a</mi><mi>r</mi><mi>a</mi><mi>m</mi><mi>s</mi><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">params, </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">am</span><span class="mord mathnormal">s</span><span class="mpunct">,</span></span></span></span>logType = 'None')
{
return $this->lambdaClient->invoke([
'FunctionName' => $functionName,
'Payload' => json_encode($params),
'LogType' => $logType,
]);
}
- For API details, seeInvoke in AWS SDK for PHP API Reference.
Python
SDK for Python (Boto3)
class LambdaWrapper:
def __init__(self, lambda_client, iam_resource):
self.lambda_client = lambda_client
self.iam_resource = iam_resource
def invoke_function(self, function_name, function_params, get_log=False):
"""
Invokes a Lambda function.
:param function_name: The name of the function to invoke.
:param function_params: The parameters of the function as a dict. This dict
is serialized to JSON before it is sent to Lambda.
:param get_log: When true, the last 4 KB of the execution log are included in
the response.
:return: The response from the function invocation.
"""
try:
response = self.lambda_client.invoke(
FunctionName=function_name,
Payload=json.dumps(function_params),
LogType="Tail" if get_log else "None",
)
logger.info("Invoked function %s.", function_name)
except ClientError:
logger.exception("Couldn't invoke function %s.", function_name)
raise
return response
- For API details, seeInvoke in AWS SDK for Python (Boto3) API Reference.
Ruby
SDK for Ruby
class LambdaWrapper
attr_accessor :lambda_client, :cloudwatch_client, :iam_client
def initialize
@lambda_client = Aws::Lambda::Client.new
@cloudwatch_client = Aws::CloudWatchLogs::Client.new(region: 'us-east-1')
@iam_client = Aws::IAM::Client.new(region: 'us-east-1')
@logger = Logger.new($stdout)
@logger.level = Logger::WARN
end
# Invokes a Lambda function.
# @param function_name [String] The name of the function to invoke.
# @param payload [nil] Payload containing runtime parameters.
# @return [Object] The response from the function invocation.
def invoke_function(function_name, payload = nil)
params = { function_name: function_name }
params[:payload] = payload unless payload.nil?
@lambda_client.invoke(params)
rescue Aws::Lambda::Errors::ServiceException => e
@logger.error("There was an error executing #{function_name}:\n #{e.message}")
end
- For API details, seeInvoke in AWS SDK for Ruby API Reference.
Rust
SDK for Rust
/** Invoke the lambda function using calculator InvokeArgs. */
pub async fn invoke(&self, args: InvokeArgs) -> Result<InvokeOutput, anyhow::Error> {
info!(?args, "Invoking {}", self.lambda_name);
let payload = serde_json::to_string(&args)?;
debug!(?payload, "Sending payload");
self.lambda_client
.invoke()
.function_name(self.lambda_name.clone())
.payload(Blob::new(payload))
.send()
.await
.map_err(anyhow::Error::from)
}
fn log_invoke_output(invoke: &InvokeOutput, message: &str) {
if let Some(payload) = invoke.payload().cloned() {
let payload = String::from_utf8(payload.into_inner());
info!(?payload, message);
} else {
info!("Could not extract payload")
}
if let Some(logs) = invoke.log_result() {
debug!(?logs, "Invoked function logs")
} else {
debug!("Invoked function had no logs")
}
}
- For API details, seeInvoke in AWS SDK for Rust API reference.
SAP ABAP
SDK for SAP ABAP
TRY.
DATA(lv_json) = /aws1/cl_rt_util=>string_to_xstring(
`{` &&
`"action": "increment",` &&
`"number": 10` &&
`}` ).
oo_result = lo_lmd->invoke( " oo_result is returned for testing purposes. "
iv_functionname = iv_function_name
iv_payload = lv_json ).
MESSAGE 'Lambda function invoked.' TYPE 'I'.
CATCH /aws1/cx_lmdinvparamvalueex.
MESSAGE 'The request contains a non-valid parameter.' TYPE 'E'.
CATCH /aws1/cx_lmdinvrequestcontex.
MESSAGE 'Unable to parse request body as JSON.' TYPE 'E'.
CATCH /aws1/cx_lmdinvalidzipfileex.
MESSAGE 'The deployment package could not be unzipped.' TYPE 'E'.
CATCH /aws1/cx_lmdrequesttoolargeex.
MESSAGE 'Invoke request body JSON input limit was exceeded by the request payload.' TYPE 'E'.
CATCH /aws1/cx_lmdresourceconflictex.
MESSAGE 'Resource already exists or another operation is in progress.' TYPE 'E'.
CATCH /aws1/cx_lmdresourcenotfoundex.
MESSAGE 'The requested resource does not exist.' TYPE 'E'.
CATCH /aws1/cx_lmdserviceexception.
MESSAGE 'An internal problem was encountered by the AWS Lambda service.' TYPE 'E'.
CATCH /aws1/cx_lmdtoomanyrequestsex.
MESSAGE 'The maximum request throughput was reached.' TYPE 'E'.
CATCH /aws1/cx_lmdunsuppedmediatyp00.
MESSAGE 'Invoke request body does not have JSON as its content type.' TYPE 'E'.
ENDTRY.
- For API details, seeInvoke in AWS SDK for SAP ABAP API reference.
Swift
SDK for Swift
import AWSClientRuntime
import AWSLambda
import Foundation
/// Invoke the Lambda function to increment a value.
///
/// - Parameters:
/// - lambdaClient: The `IAMClient` to use.
/// - number: The number to increment.
///
/// - Throws: `ExampleError.noAnswerReceived`, `ExampleError.invokeError`
///
/// - Returns: An integer number containing the incremented value.
func invokeIncrement(lambdaClient: LambdaClient, number: Int) async throws -> Int {
do {
let incRequest = IncrementRequest(action: "increment", number: number)
let incData = try! JSONEncoder().encode(incRequest)
// Invoke the lambda function.
let invokeOutput = try await lambdaClient.invoke(
input: InvokeInput(
functionName: "lambda-basics-function",
payload: incData
)
)
let response = try! JSONDecoder().decode(Response.self, from:invokeOutput.payload!)
guard let answer = response.answer else {
throw ExampleError.noAnswerReceived
}
return answer
} catch {
throw ExampleError.invokeError
}
}
- For API details, seeInvoke in AWS SDK for Swift API reference.
GetProvisionedConcurrencyConfig
ListFunctions
Did this page help you? - Yes
Thanks for letting us know we're doing a good job!
If you've got a moment, please tell us what we did right so we can do more of it.
Did this page help you? - No
Thanks for letting us know this page needs work. We're sorry we let you down.
If you've got a moment, please tell us how we can make the documentation better.