我希望能够在 Lambda 执行时监控 Cloudwatch 中的日志,目前 Lambda 控制台顶部有一个部分:
它向我显示执行 Lambda 时遇到的任何错误,但如果我单击logs,它会将我定向到 CloudWatch 并向我显示log group does not exist,有谁知道为什么以及如何我能够在 Cloudwatch 中查看日志?(我以为会自动...)
amazon-web-services amazon-cloudwatch aws-lambda amazon-cloudwatchlogs
我在从 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 代码来看,我可能遗漏了什么吗?
谢谢。
我有一个 lambda 函数,它接受参数(即 Category_id),从 API 中提取一些数据,并根据响应更新数据库。
我必须每天间隔 1 分钟后对多个 Id 执行相同的 lambda 函数。例如,在中午 12:00 为类别 1 运行 lambda,然后在上午 12:01 为类别 2 运行 lambda,等等,为 500 多个类别运行 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
众所周知,Lambda 是一项由 AWS 处理的无服务器服务。
我当前的流程是:
客户端(API) -> API网关 -> lambda
我想知道当我的 Lambda 所在的区域出现故障时会发生什么?还想知道当 API 网关区域出现故障时会发生什么。
应该如何处理呢?它是由 AWS 处理,因为它是无服务器的,还是我应该自己处理,那会怎么样?
disaster-recovery amazon-web-services aws-lambda aws-api-gateway
当我通过 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)我正在尝试通过 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) 有没有办法使用 Python 运行时将数组作为 lambda 函数中的环境变量。
我遇到一个问题,我试图开始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
我不这么认为,但对于我所观察到的情况,我没有其他好的解释。这是相关代码的粗略版本,它位于处理函数内部(即,它不会在调用之间持续存在):
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) aws-lambda ×10
node.js ×3
serverless-application-model ×2
amazon-s3 ×1
aws-sam ×1
aws-sdk-js ×1
axios ×1
java ×1
javascript ×1
maven ×1
vue.js ×1