问题标签 [micronaut-aws]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
555 浏览

aws-lambda - 带有代理的 Micronaut Lambda 无法从 json body io.micronaut.web.router.exceptions.UnsatisfiedRouteException 中解组对象

在具有代理集成的 Micronaut Lambda 中,我有一个控制器应该将 JSON 内容解组为 Ping 对象:

如果我将此应用程序作为本地 micronaut webapp 启动,我可以成功执行此操作:

日志信息:

但是,当从 AWS API Manager 调用此控制器方法时,传递 Content-Type 标头和正文信息...

在此处输入图像描述

... 它失败:

奇怪的是Ping,调用中对象的编组@Get既可以用作 webapp,也可以用作 lambda。

我在 Github 上传了一个示例项目:https ://github.com/codependent/micronaut-aws-lambda-proxy

0 投票
1 回答
231 浏览

groovy - Micronauts AWS API Gateway Authorizer JSON 输出问题

我在 Micronauts/Groovy 中编写了一个简单的 lambda 函数,以将允许/拒绝策略作为 AWS API 网关授权方返回。当用作 API 网关授权方时,无法解析 JSON

由于配置错误,执行失败:无法解析策略

在本地测试时,响应在 JSON 中具有正确的属性大小写。例如:

当它在 AWS 中运行时,JSON 响应的属性全部为小写:

}

不确定情况是否是问题,但我看不出还有什么问题(尝试了许多输出变化)。我尝试了各种 Jackson 注释(@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class) 等),但它们似乎对 AWS 的输出没有影响。

知道如何排序吗?谢谢。

示例代码:

试图让输出看起来像示例

使用本地运行示例

Lambda 函数处理程序:

}

AuthResponse 看起来像:

0 投票
1 回答
506 浏览

micronaut - Micronauts AWS 请求流处理程序不注入服务

我使用 micronaut-function-aws 功能处理了一个简单的 Micronaut AWS lambda 请求。

我注入的服务在 AWS 中运行时似乎没有创建。

如果我执行整个 groovy 脚本函数处理程序并使用 @Field @Singleton TestService testService 它在本地运行时似乎工作正常。

知道我做错了什么吗?

服务:

处理程序:

来自 AWS lambda 的堆栈跟踪

0 投票
3 回答
2392 浏览

aws-lambda - 使用 DynamoDB 和 Graal 自定义运行时的 Micronaut 无服务器应用程序抛出无法构造 com.amazonaws.partitions.model.Partitions 的实例

此处提供的示例项目: https ://github.com/codependent/micronaut-aws-lambda-proxy-graal

我在 Amazon AWS 上部署了一个 Micronaut 应用程序作为 Lambda 函数。它被编译成 GraalVM 原生镜像并使用AWS Lambda Custom Runtime 运行

如果应用程序不使用 DynamoDB,它会顺利运行。当配置它并作为一个普通的 Java 应用程序启动时,它也可以正常工作。但是,当将其用作在 AWS 上运行的 Graal 本机映像时,它会失败并显示:

io.micronaut.context.exceptions.BeanInstantiationException:错误实例化类型为 [com.amazonaws.services.dynamodbv2.document.DynamoDB] 的 bean 消息:无法从 com/amazonaws/partitions/endpoints.json 加载分区元数据

我正在使用此依赖项:compile 'com.amazonaws:aws-java-sdk-dynamodb:1.11.504'

如何解决无法加载分区元数据错误?

完整日志:

更新:

我错过了以下异常的嵌套原因:Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.amazonaws.partitions.model.Partitions (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

这是完整的堆栈跟踪:

更新 2:

我还尝试在 reflect.json 中为 Partitions 类添加一个条目:

0 投票
0 回答
468 浏览

aws-lambda - Graal 原生镜像调用 https 抛出引发:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须为非空

我正在生成一个进行 https 调用的 Graal 本机图像。问题是它在尝试拨打电话时抛出异常:

痕迹:

以前我必须手动向 reflect.json 添加一堆类,直到我不知道如何继续:

Github 上有一个项目:https ://github.com/codependent/graal-app

要测试它运行:

  1. export AWS_DEFAULT_REGION=eu-central-1
  2. docker build . -t graap-app
  3. ./sam-local.sh

更新:

我在https://github.com/oracle/graal/blob/master/substratevm/JCA-SECURITY-SERVICES.md找到了与安全相关的文档

我删除了我添加到 reflect.json 的所有类,而是将--enable-all-security-services标志放入native-image位于build-native-image.sh.

现在错误是:

原因:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须为非空

0 投票
1 回答
529 浏览

micronaut - 我应该如何使用 application.yml 将存储在 aws 参数存储中的属性配置到 micronaut

我想使用内置的 micronaut 发现客户端在我的 micronaut 应用程序中使用 aws 参数存储中的属性,但是在提到“rootHierarchyPath”之后如何配置和注入各个参数并没有正确记录

这是 application.yml 代码,我已经提到了根路径但是找不到如何获取存储在参数存储中的条目“dbUserName”和“dbPassword”。

aws:客户端:系统管理器:参数存储:启用:真 useSecureParameters:真 rootHierarchyPath:/application/db

0 投票
0 回答
1379 浏览

aws-lambda - 如何使用 micronaut-function-aws-api-proxy 处理多部分/表单数据文件上传

我正在使用AWS API Gateway 代理micronaut 1.1.0.RC2并在其中使用 Kotlin Lambda 函数。micronaut-function-aws-api-proxy 1.1.0.RC3micronaut aws api 代理适用于我的所有 API 功能,但文件上传路由除外。类和路由定义如下所示:

在本地运行,这工作正常。但是,当我通过 API Gateway 和 Lambda 使用它时,我不断收到以下错误:

同样,如果我在本地运行 micronaut 应用程序并直接访问 API(没有 micronaut AWS 代理),它会完美运行。但是,当我将它部署到 AWS 时,micronaut aws 代理似乎存在问题,无法正确解析出多部分表单数据。

我确实multipart/form-data在 API Gateway 上设置了二进制媒体类型。我尝试使用主要 micronaut 文档( https://docs.micronaut.io/1.1.0.RC2/guide/index.html )中描述的CompletedFileUpload类型和类型,结果相同。StreamingFileUpload

对于它的价值,我使用 AWS spark 代理 (aws-serverless-java-container-spark) 对同一件事进行了不同的实现,并且它运行正常。

为了测试,我正在运行这个 curl 命令:

有其他人对此有任何运气吗?micronaut api网关代理目前不支持它吗?任何帮助表示赞赏!

0 投票
0 回答
702 浏览

kotlin - AWS:将消息移动到死信队列,同时保留元信息

如果在处理消息时出现异常,我正在尝试将消息移动到 AWS 中的死信队列。

现在我正在删除原始消息并将其显式发送到 DLQ。但是,在执行此操作时,我会丢失消息元信息,例如原始消息 ID、总接收计数、首次发送时间戳等。

下面是相同的代码片段。

当 AWS 将消息从原始队列移动到 DLQ 时达到最大接收计数后,它会保留所有提到的属性。有什么方法可以使用 aws-sdk 实现相同的目标吗?

我正在使用带有 Micronaut 的 Agorapulse 库来发送/接收来自 SQS 的消息。

0 投票
1 回答
2904 浏览

amazon-web-services - 从 cognito 身份池 identityId 获取 cognito 用户池用户名

我正在使用 AWS Congito 用户池进行账户管理,其中 Cognito 身份池将此用户池作为身份提供者。我正在使用它来控制通过向 Lambda 发送请求的 API 网关对 API 的访问。我的 Lambda 是使用 Micronaut 使用 Java 8 实现的。所有这些工作正常。

在 Lambda 中,我从以下位置获取Principal名称HttpRequest

Cognito identityId 的字符串名称中返回的内容。像这样的东西:

us-east-1:xxxe650-53f4-4cba-b553-5dff42bexxxx

我想记录实际的用户登录名,或者至少有一些方法可以在需要时将 identityId 转换为登录名。

LookupDeveloperIdentity API 调用似乎是解决这个问题的正确方法,但我无法让它工作。

尝试使用 Java 和 AWS Java SDK 2 执行此操作:

抛出异常

software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException:您无权访问此身份(服务:CognitoIdentity,状态代码:400,请求 ID:64e36646-612b-4985-91d1-82aca770XXXX)

尝试通过 CLI 执行此操作会产生类似的结果:

aws cognito-identity lookup-developer-identity --identity-id us-east-1:xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-east-1:xxxx0aa1-89f9-4418-be04- 7e83c838xxxx --max-results=10

调用 LookupDeveloperIdentity 操作时发生错误 (NotAuthorizedException):您无权访问此身份

我已确保现有的 IAM 策略应该能够处理此问题,并且当我使用没有此策略的角色尝试它时,我得到一个不同的错误

所以问题归结为:

  • 这是从身份池 id 获取用户池用户名的最佳方式吗?
    • 如果是 - 我做错了什么?
    • 如果不是 - 这样做的更好方法是什么?
0 投票
1 回答
165 浏览

aws-lambda - 尝试创建 SNS 客户端时,Micronaut 出现日志记录错误

重现步骤:

  1. mn create-app example.micronaut.complete --features aws-api-gateway-graal
  2. 添加依赖实现 'com.amazonaws:aws-java-sdk-sns:1.11.656'
  3. 修改 mn-cli 自动创建的 index() 函数
  1. ./sam-local.sh
  2. http://localhost:3000/ping

我收到以下错误,然后函数超时:

使用 requestId [21a6b1d0-7697-12b0-f4d8-d15e16954a4c] 调用失败:org.apache.commons.logging.LogFactoryjava.lang.NoClassDefFoundError:org.apache.commons.logging.LogFactory 中的 org.apache.commons.logging.LogFactory。 org.apache.commons.logging.LogFactory.(LogFactory.java:1674) 上的类 $(LogFactory.java:1021)