AWS SDK Lambda Invoke失败,因为输入不是Base-64编码的



当我试图调用Lambda函数(下面是我的代码(时,我在CloudWatch日志中收到一个错误,说输入不是有效的Base-64字符串。

String payload = "xxxxxxxxxxx";

SdkBytes payloadBytes = SdkBytes.fromUtf8String(payload);
String routingUri = getRoutingUri();

InvokeRequest invokeRequest = InvokeRequest.builder()
.functionName(routingUri)
.payload(payloadBytes)
.invocationType("RequestResponse")
.build();
InvokeResponse result = lambdaClient.invoke(invokeRequest);
Error  :  System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

我尝试了各种方法在Base-64中对请求进行编码,但似乎什么都不起作用

  • 我的AWS SDK版本是2.15.14
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.15.14</version>
</dependency>

请帮忙。

这里需要使用java.util包中的Base64.Encoder对字符串进行结束编码

这取决于您在有效负载中设置的数据类型,例如,如果您发送调用的变量之一是字节[],您会像一样执行


public byte[] invokeFunction(byte[] data,String certificate_serial) {
String dataBase64 = Base64.getUrlEncoder().encodeToString(data);
// Need a SdkBytes instance for the payload
SdkBytes payload = SdkBytes.fromUtf8String("{n" + " "nameOfTheVariableInTheLambdaYouAreInvoking": "" + dataBase64 +  "" n" + "}");

最新更新