标签: aws-lambda

为什么我看不到 Lambda 函数的 CloudWatch Logs?

我希望能够在 Lambda 执行时监控 Cloudwatch 中的日志,目前 Lambda 控制台顶部有一个部分:

在此输入图像描述

它向我显示执行 Lambda 时遇到的任何错误,但如果我单击logs,它会将我定向到 CloudWatch 并向我显示log group does not exist,有谁知道为什么以及如何我能够在 Cloudwatch 中查看日志?(我以为会自动...)

amazon-web-services amazon-cloudwatch aws-lambda amazon-cloudwatchlogs

1
推荐指数
1
解决办法
6639
查看次数

Cloudfront createInvalidation 随机不会从 Lambda 中触发

我在从 AWS Lambda 创建 Cloudfront 失效时遇到问题。

我的情况非常基本:我设置了一个由特定 S3 对象创建和删除触发的 Lambda 处理程序,以便在我的 Cloudfront 发行版上执行缓存版本的失效操作。这是使用nodejs编写的函数代码:

const AWS = require('aws-sdk');

exports.handler = async function (event, context) {
    const cloudFront = new AWS.CloudFront();

    const invalidationParams = {
        DistributionId: "XXXX",
        InvalidationBatch: {
            CallerReference: Date.now().toString(),
            Paths: {
                Quantity: 2,
                Items: [
                    "/index.html",
                    "/service-worker.js"
                ]
            }
        }
    };

    cloudFront.createInvalidation(invalidationParams, (error, data) => {
        if (error) {
            console.log(error, error.stack);
        } else {
            console.log("Invalidation results", data);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,没有什么太复杂的。现在,大多数时候处理程序执行时不执行任何操作,我会查看日志,除了请求 id 以及开始和结束时间戳之外,没有任何内容被打印,甚至没有 Cloudfront 错误,这让我想知道发生了什么。连续执行四到五次手动测试后,会正确创建失效,但日志不会报告它。再触发一次,然后打印上一次运行的失效结果。我觉得这非常奇怪和令人困惑。

从上下文和 Lambda 代码来看,我可能遗漏了什么吗?

谢谢。

amazon-s3 amazon-cloudfront aws-lambda aws-sdk-js

1
推荐指数
1
解决办法
1882
查看次数

按计划一次为多个参数运行 AWS Lambda

我有一个 lambda 函数,它接受参数(即 Category_id),从 API 中提取一些数据,并根据响应更新数据库。

我必须每天间隔 1 分钟后对多个 Id 执行相同的 lambda 函数。例如,在中午 12:00 为类别 1 运行 lambda,然后在上午 12:01 为类别 2 运行 lambda,等等,为 500 多个类别运行 lambda。

实现这一目标的最佳解决方案是什么?
这就是我目前的想法:

  • 使用 AWS SAM 编写 Lambda
  • 为共享依赖项添加 Lambda 层
  • 将 Lambda 与 AWS Cloudwatch Events 附加以按计划运行
  • 在lambda中为category_id添加环境变量
  • 更新 SAM 模板以一次又一次地使用相同的 lambda 函数,但仅更改 Cron 表达式计划和环境变量category_id 的值

上述解决方案存在的问题:

  • 账户中的 Lambda 函数数量将会增加。
  • 每个 Lambda 都会附加一个 Cloudwatch 事件,因此其数量也会增加
  • 每个帐户的配额限制为最多 300 个 Cloudwatch 事件(尽管我们可以请求支持来增加该限制)
  • 由于 SAM 模板大小限制以及每个模板的资源数量(最多 200 个),它需要使用嵌套堆栈。
  • 我将只能为每个嵌套堆栈创建 50 个 Lambda 函数,这意味着嵌套堆栈的数量也会增加,因为 1 lambda = 4 …

amazon-web-services aws-lambda aws-serverless aws-sam

1
推荐指数
1
解决办法
3124
查看次数

AWS 使用 Node.js SDK 调用本地 Lambda 端点

在SAM 文档中,可以部署您自己的 lambda 端点并使用 Python SDK 调用它。

您只需启动本地 lambda 端点sam local start-lambda,然后继续

# USING AWS SDK
 -------------
 #You can also use the AWS SDK in your automated tests to invoke your functions programatically.
 #Here is a Python example:

     self.lambda_client = boto3.client('lambda',
                                  endpoint_url="http://127.0.0.1:3001",
                                  use_ssl=False,
                                  verify=False,
                                 config=Config(signature_version=UNSIGNED,
                                               read_timeout=0,
                                                retries={'max_attempts': 0}))
    self.lambda_client.invoke(FunctionName="HelloWorldFunction")
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,我怎样才能用 Javascript SDK 做同样的事情?我总是收到有关缺少区域、未找到主机和不受支持的参数的不同错误。你有办法帮我解决吗?

javascript amazon-web-services node.js aws-lambda serverless-application-model

1
推荐指数
1
解决办法
3234
查看次数

lambda函数和api网关如何处理灾难恢复?

众所周知,Lambda 是一项由 AWS 处理的无服务器服务。

我当前的流程是:

客户端(API) -> API网关 -> lambda

我想知道当我的 Lambda 所在的区域出现故障时会发生什么?还想知道当 API 网关区域出现故障时会发生什么。

应该如何处理呢?它是由 AWS 处理,因为它是无服务器的,还是我应该自己处理,那会怎么样?

disaster-recovery amazon-web-services aws-lambda aws-api-gateway

1
推荐指数
1
解决办法
2382
查看次数

DynamoDb UpdateItem 运行两次

当我通过 update (updateItem) 更新项目时,更新函数会被调用两次,我的值将被添加两次。我使用 async/await ,它应该可以工作。

var ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: '2012-08-10' });

async function updateUserGame(tablePostfix, gameId, durationinMin) {
    console.log("###### updateUserGame")

    var tableUserGames = tableUserGamesWithoutPostfix + tablePostfix;

    expressions = {
        ":duration": parseInt(durationinMin)
    }
    updateExpressions = "set playDuration = playDuration + :duration";

    var params = {
        TableName: tableUserGames,
        Key: {
            id: parseInt(gameId)
        },
        ExpressionAttributeValues: expressions,
        UpdateExpression: updateExpressions,
        ReturnValues: "ALL_NEW"
    };

    return await updateDb(params);
}

async function updateDb(params) {
    console.log("###### updateDb")
    var savedItem;

    // Call DynamoDB to add the item to …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-dynamodb aws-lambda

1
推荐指数
1
解决办法
805
查看次数

Vue & Axios + AWS API Gateway & Lambda - CORS + POST 不起作用

我正在尝试通过 AWS API Gateway 创建一个 API 测试函数,以及一个通过 Axios 的 Vue 应用程序调用的 Lambda 函数。它应该从输入元素发送姓名和电子邮件。每次我收到此错误时:

Access to XMLHttpRequest at '[API Gateway URL]' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
Run Code Online (Sandbox Code Playgroud)

我已在 API 网关设置中的每个步骤/资源上启用了 CORS(根据本文)。下面是 Vue 组件的代码:

<template>
<div data-app>
        <div class="cell" id="testForm">
    {{responseMsg}}

       <label>Name</label>
       <input v-model="name" type="text" placeholder="Name">
       <label>Email Address</label>
       <input v-model="email" type="email" placeholder="Email Address">
       <button v-on:click="formFunction">Submit</button>
   
   </div>
</div>
</template>

<script>
import axios …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services vue.js aws-lambda aws-api-gateway axios

1
推荐指数
1
解决办法
3091
查看次数

如何将数组作为 boto3 Lambda 函数中的环境变量

有没有办法使用 Python 运行时将数组作为 lambda 函数中的环境变量。

amazon-web-services aws-lambda

1
推荐指数
1
解决办法
4612
查看次数

SAM 构建失败,因为 Maven 安装失败并显示“此项目的打包未将文件分配给构建工件”

我遇到一个问题,我试图开始mvn install工作,以便sam build使用 Docker 进行本地调用,但由于以下错误,它一直失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project my-project: The packaging for this project did not assign a file to the build artifact -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

StackOverflow 上有许多关于“此项目的打包未将文件分配给构建工件”的问题和解决方案的不同迭代,但它们似乎都没有解决我的问题。

例如,我可以执行 amvn jar:jar install:install并且它可以正常工作,但我无法像 SAM 构建中那样指定目标,因此这不是一个正确的解决方案 - 我需要mvn install工作。我尝试了多种删除 .m2 文件夹的方法,但没有任何作用。我也可以更改maven-install-plugin的版本,但无济于事。我可以在 maven-install-plugin 中指定该文件,如果路径正确,它不会看到它,但如果不正确,它会说它不存在。

似乎没有什么可以解决这个问题,所以我需要找到一个真正的解决方案。

这是我的 pom.xml:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project my-project: The packaging for this project did not assign a file to the …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services maven aws-lambda serverless-application-model

1
推荐指数
1
解决办法
1526
查看次数

AWS Node Lambda 中的变量在调用之间是否存在持续存在的条件?

我不这么认为,但对于我所观察到的情况,我没有其他好的解释。这是相关代码的粗略版本,它位于处理函数内部(即,它不会在调用之间持续存在):

const res = await graphqlClient.query({my query})
const items = res.data.items
console.log(items) // <- this is the line that logs the output below

items.push({id: 'some-id'})
const itemResults = await Promise.all(items.map((item) => etc etc)
Run Code Online (Sandbox Code Playgroud)

在我的客户连续调用(间隔不到十秒)的过程中,some-id被重复添加到items. 第一次调用时,以下是在 CloudWatch 中记录的内容const items = res.data.items:

[
  {
    anotherId: 'foo',
    id: 'bar',
  }
]
Run Code Online (Sandbox Code Playgroud)

第二次调用它时,几秒钟后,在调用之前写入日志items.push():

[
  {
    anotherId: 'foo',
    id: 'bar',
  },
  { id: 'some-id' }
]
Run Code Online (Sandbox Code Playgroud)

第三次,在调用之前再次写入日志items.push():

[ …
Run Code Online (Sandbox Code Playgroud)

node.js aws-lambda

1
推荐指数
1
解决办法
1065
查看次数