使用 aws-java-sdk 为 AWS Lambdas 配置路径参数

问题描述

我使用 Java 创建了 AWS Lambdas,并使用 Localstack 进行测试。给定一个资源,我想要一个 MysqLdump --ignore-table-data="db_name.table" db_name > export.sql addget 操作以及相应的其余端点 removePOSTGET。对于创建,我有一个处理程序:

DELETE

并且它期望消息正文中有一个 DTO,它产生一个唯一标识该对象的 class AddHandler implements RequestStreamHandler { @Override public void handleRequest(InputStream inputStream,OutputStream outputStream,Context context) throws IOException { //... }

为了测试,我使用 Maven 存储库中可用的 UUID 库来上传 Lambda 文件,并且对于本地环境,Localstack 充当 AWS。

一旦我上传并准备好 lambda 文件,我开始使用 com.amazonaws 创建一个 CreateRestApiRequest

com.amazonaws.services.apigateway.AmazonApiGateway

然后,使用生成的 rest api ID 创建一个资源:

CreateRestApiRequest createRestApiRequest = new CreateRestApiRequest();
createRestApiRequest.setName(bucketName);
createRestApiRequest.setRequestCredentialsProvider(new AWsstaticCredentialsProvider(awsCredentials));
amazonApiGateway.createRestApi(createRestApiRequest);

我还创建了一个 PutMethodRequest

CreateResourceRequest createResourceRequest = new CreateResourceRequest();
createResourceRequest.setRestApiId(restApiId);
createResourceRequest.setParentId(resource.getId());
createResourceRequest.setPathPart(path);
createResourceRequest.setRequestCredentialsProvider(new AWsstaticCredentialsProvider(awsCredentials));
amazonApiGateway.createResource(createResourceRequest);

一个 PutIntegrationRequest:

 PutMethodRequest putMethodRequest = new PutMethodRequest();
 putMethodRequest.setRestApiId(restApiId);
 putMethodRequest.setResourceId(resourceId);
 putMethodRequest.setHttpMethod(httpMethod);
 putMethodRequest.setAuthorizationType("None");
 putMethodRequest.setApiKeyrequired(false);
 putMethodRequest.setRequestCredentialsProvider(new AWsstaticCredentialsProvider(awsCredentials));
 PutMethodResult result = amazonApiGateway.putMethod(putMethodRequest);

注意:需要更多步骤,但为了简单起见,我不包括它们 - 如有必要,我可以编辑这篇文章添加更多。

最后,我可以使用如下网址在 Localstack 中触发我的 Lambda:

PutIntegrationRequest putIntegrationRequest = new PutIntegrationRequest();
putIntegrationRequest.setHttpMethod(httpMethod);
putIntegrationRequest.setIntegrationHttpMethod(httpMethod);
putIntegrationRequest.setRestApiId(restApiId);
putIntegrationRequest.setResourceId(resourceId);
putIntegrationRequest.setRequestCredentialsProvider(new AWsstaticCredentialsProvider(awsCredentials));
putIntegrationRequest.setType(IntegrationType.AWS_PROXY);
putIntegrationRequest.setUri("arn:aws:apigateway:" + region + ":lambda:path"
        + "/2015-03-31/functions/" + functionArn + "/invocations");
putIntegrationRequest.setContentHandling(ContentHandlingStrategy.CONVERT_TO_TEXT);
PutIntegrationResult result = amazonApiGateway.putIntegration(putIntegrationRequest);

以及包含数据的 JSON 正文,它按预期工作。我发现这种方法非常适合 https://localhost:4566/restapis/{restApiId}/test/_user_request_/{functionName} 操作,但是我希望执行 POSTGET 请求,将资源标识作为路径参数,而不是他们在身体中发送,例如符合以下几点:

DELETE

到目前为止我无法弄清楚如何做到这一点,有人知道我的代码中缺少哪些部分吗?

非常感谢您的帮助。 BR。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)