Tag: amazon web services

在Lambda – > CloudWatch中,多行日志记录如何工作?

我的多行日志记录事件最终都是多事件 – 每行一个事件。 根据文件 : 每次调用LambdaLogger.log()都会导致CloudWatch Logs事件… 但是之后: 但是请注意,AWS Lambda会将System.out和System.err返回的每一行视为一个单独的事件。 看看LambdaAppender的源代码 ,看来它仍然会将事件记录到System.out 。 那么这是否意味着多线消息将总是被分解成多个事件? 我已经阅读了有关配置multi_line_start_pattern的内容 ,但似乎只适用于部署日志代理,而这在Lambda中是不可访问的。 [编辑] LambdaAppender记录到记录到System.out LambdaLogger 。 [编辑]我find了一些建议解决方法的post – 在打印邮件时使用“\ r”作为eol。 这似乎适用于我的代码产生的消息。 堆栈跟踪记录到处都是一个问题。 [编辑] 我一直在使用两种解决方法 : 在JSON中记录复杂的数据结构(例如相当大的地图)。 CloudWatch实际上可以识别日志事件中的JSON字符串,并将其打印出来。 用’\ r’替换’\ n’。 对于堆栈跟踪,我创建了一个实用程序方法(这是在Kotlin中,但是这个方法足够通用): fun formatThrowable(t: Throwable): String { val buffer = StringWriter() t.printStackTrace(PrintWriter(buffer)) return buffer.toString().replace(“\n”, “\r”) } 我认为从长远来看,一个更理想的解决方案将是装饰ConsoleAppender的Appender实现,它将对所有通过的消息进行替换。

使用OkHttp上传到预先签署的S3 URL失败

当我尝试使用OkHttp 3.9.1将文件上传到Amazon S3的预签名URL时,出现SSLexception: SSLException: Write error: ssl=0xa0b73280: I/O error during system call, Connection reset by peer 这是同样的问题,在另一个SO问题,但在我的情况下,它总是失败。 我只上传大小超过1MiB的文件,我还没有尝试过小文件。 正如我在这个问题的答案中提到的,切换到Java的HttpURLConnection解决了这个问题,上传完美。 这里是我的RequestBody实现(在Kotlin)从Android的Uri上传文件,我使用OkHttp的.put()方法: class UriRequestBody(private val file: Uri, private val contentResolver: ContentResolver, private val mediaType: MediaType = MediaType.parse(“application/octet-stream”)!!): RequestBody() { override fun contentLength(): Long = -1L override fun contentType(): MediaType? = mediaType override fun writeTo(sink: BufferedSink) { Okio.source((contentResolver.openInputStream(file))).use […]

处理Ferma ORM / OGM和远程连接

我正在使用AWS上的图形数据库。 目前,我可以使用Gremlin-Driver来编写和读取顶点和边,也可以使用Kotlin(或Java)和gremlin语言来查询图,但是我想使用ORM / OGM来映射数据库的内容进入模型。 Ferma项目完全符合我的要求,但文档中的所有示例均涉及内存中的数据库。 我如何设置远程连接的配置(主机,端口,凭证等)?

AWS Lambda Java / Kotlin发送消息给SQS

我一直在使用Kotlin创建一个AWS Lambda函数。 该函数运行良好,但似乎无法发送SQS消息到FIFO队列。 我在Cloudwatch中收到以下消息: REPORT RequestId: 9119da93-e775-11e7-820a-5bbbb7403f93 Duration: 10010.16 ms Billed Duration: 10000 ms Memory Size: 128 MB Max Memory Used: 54 MB 2017-12-23T00:09:49.483Z 9119da93-e775-11e7-820a-5bbbb7403f93 Task timed out after 10.01 seconds 我已经重写了我的代码使用节点JS,它执行良好,我有相关的权限设置的lambda函数,通过控制台权限模拟器测试好措施,把消息放在指定的队列。 由于它在Node中完全正常工作,所以我不得不假定我的Java / Kotlin版本有问题。 如果我删除下面的代码,该function到达结束,并返回正常。 我已经尝试了各种方法来创建客户端(包括不推荐使用的选项)和EnvironmentVariableCredentialsProvider和DefaultAWSCredentialsProviderChain 。 我也尝试增加超时到20秒,但是这也没有任何区别。 任何想法,将不胜感激! val sqs = AmazonSQSClientBuilder.standard() .withRegion(Regions.US_WEST_2) .withCredentials(DefaultAWSCredentialsProviderChain()) .build() val sendMessageRequest = SendMessageRequest() .withMessageDeduplicationId(“deduplicationId”) .withMessageGroupId(“test”) .withQueueUrl(“https://sqs.us-west-2.amazonaws.com/00000000/test.fifo”) .withMessageBody(“test”) […]

验证Java上的AWS ID令牌

我在亚马逊使用Cognito来验证我的移动用户,一旦完成登录,Cognito提供了一组令牌,我在后端使用了id令牌。 我遵循https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with在您的Web API中使用ID令牌和访问令牌一节中的步骤-identity-providers.html我卡在6步。 据我所见,我从字符串亚马逊得到的模数和指数,我必须与这些,以验证JWT签名建立一个公钥。 我不知道如何在String中使用这两个参数来构建PublicKey。

我可以异步地通过Amazon API网关启动长时间运行的AWS Lambda流程吗?

我需要启动一个长时间运行的AWS Lambda作业(几分钟),将其输出写入S3。 它将用Java编写(实际上是Kotlin,但这不重要)。 我正在调查Amazon API网关作为此AWSLambda作业与其他AWS Lambda作业之间的接口以及与之通信的iOS移动应用程序。 是否有可能异步调用这种长时间运行的Lambda进程,无论是直接从API网关还是从另一个Lambda函数?