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

问题描述

当我尝试调用 Lambda 函数(以下是我的代码)时,我在 CloudWatch Logs 中收到一条错误消息,指出输入不是有效的 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 对字符串进行结束编码

,

这取决于您在有效负载中设置的数据类型,例如,如果您要发送以调用的变量之一是 byte[],您会这样做


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" + "}");