问题描述
我使用 Java 创建了 AWS Lambdas,并使用 Localstack 进行测试。给定一个资源,我想要一个 MysqLdump --ignore-table-data="db_name.table" db_name > export.sql
、add
和 get
操作以及相应的其余端点 remove
、POST
和 GET
。对于创建,我有一个处理程序:
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
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}
操作,但是我希望执行 POST
和 GET
请求,将资源标识作为路径参数,而不是他们在身体中发送,例如符合以下几点:
DELETE
到目前为止我无法弄清楚如何做到这一点,有人知道我的代码中缺少哪些部分吗?
非常感谢您的帮助。 BR。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)