我正在编写一个 lambda 函数,该函数应该对 Athena 发起查询,当我执行 start_query_execution 时,它会成功,但当我稍后尝试获取查询状态时,我会看到以下内容:
'Status': {'State': 'FAILED', 'StateChangeReason': 'Insufficient permissions to execute the query. User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/test_role/test-audit is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:XXXXXXXXXXXX:catalog ', 'SubmissionDateTime': datetime.datetime(2019, 9, 16, 17, 13, 18, 749000, tzinfo=tzlocal()), 'CompletionDateTime': datetime.datetime(2019, 9, 16, 17, 13, 31, 197000, tzinfo=tzlocal())}
Run Code Online (Sandbox Code Playgroud)
为 lambda 分配了一个 IAM 角色,该角色具有以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:*",
"dynamodb:*",
"kinesis:*",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"cloudwatch:PutMetricData",
"athena:*",
"glue:*",
"redshift:*"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
} …Run Code Online (Sandbox Code Playgroud) 我无法在 API 网关实例上启用 CORS,如下所示:
我已经尝试了很多事情,例如检查DEFAULT 4XX和DEFAULT 5XX并按照某些帖子中的建议手动输入 Access-Control-Allow-Methods 。
如果我将鼠标悬停在错误上,我会得到:Invalid Response status code specified。
我可以使用浏览器获取数据,但只能通过邮递员完成 POST 操作。我的 ReactJS 网站也不会发布,抛出:
Access to XMLHttpRequest at <ENDPOINT> from origin <S3-REACT-BUCKET> has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我读到我的 React 应用程序应该发送 CORS 标头(尚未实现),但我什至无法在 API 网关中启用 CORS!
cors aws-lambda aws-api-gateway serverless-framework serverless
我正在使用该serverless框架将我的 lambda 部署到 AWS,并且已经能够通过 Postman 成功地将 POST 请求运行到与我的 lambda 函数关联的 API 网关,但是当我尝试从表单提交(AJAX 请求)运行 POST 请求时本地服务器我收到 502 错误消息,
Access to XMLHttpRequest at 'https://*id*.execute-api.us-east-1.amazonaws.com/prod/message' from origin 'http://localhost:2368' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)
这是我没想到的,因为cors我的 set 中有属性serverless.ymlto true,它为 HTTP 端点设置 CORS 配置。这是函数 yaml 设置:
functions:
email:
handler: handler.sendEmail
events:
- http:
path: message
method: post
cors: true
Run Code Online (Sandbox Code Playgroud)
这是 jQuery AJAX 请求:
$.ajax({
type: 'POST',
url: 'https://*id*.execute-api.us-east-1.amazonaws.com/prod/message',
crossDomain: …Run Code Online (Sandbox Code Playgroud) 我正在运行一个 lambda,它将通过使用 boto3 自动触发一个理解作业。
但是,由于某种原因,我的 IAM 无法工作!我对此工作的角色拥有以下权限:
但是,当在 comprehend 中创建作业时,它立即失败并显示以下错误消息:
NO_WRITE_ACCESS_TO_OUTPUT: The provided data access role does not have write access to the output S3 URI.
有想法该怎么解决这个吗?我已授予该角色完整的 S3 权限?
amazon-s3 amazon-web-services amazon-iam aws-lambda amazon-comprehend
我正在使用 terraform 在 AWS 中创建一个角色。由于IAM是非区域服务,我只想创建一次角色。因此,每当我运行 terraform 时,它都应该检查该角色是否已经存在,如果不存在,它应该创建一个。
data "aws_iam_role" "iam_role_check" {
name = "some_role"
}
resource "aws_iam_role" "iam_role" {
count= "${data.aws_iam_role.iam_role_check != "null" ? 0 : 1}"
name = "some_role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
Run Code Online (Sandbox Code Playgroud)
data.aws_iam_role.iam_role_check:正在刷新状态...
错误:读取 IAM 角色 (some_role) 时出错:NoSuchEntity:找不到名为 some_role 的角色。状态码:404,请求ID:
amazon-web-services aws-lambda terraform terraform-provider-aws
我希望通过侦听 DocumentDB 更改流,通过 lambda 函数填充 SQS 队列。我知道这可以通过DynamoDB来完成。有没有办法用 DocumentDB 来实现这一点?
我正在尝试对multipart/form-dataAWS lambda 函数执行包含 pdf 文件的 POST,对文件进行一些检查,然后将文件 POST 到外部 API。
我使用带有 node.js 的无服务器框架和aws-lambda-multipart-parser插件来接收文件。
从客户端到 lambda 的文件上传工作正常,我可以将缓冲区内容打印到控制台。不起作用的部分是将文件转发到外部 API。
这是我当前的 axios 设置,用于向外部 API 发出 POST 请求:
const formData = new FormData();
formData.append("file", file.content, file.filename);
const res = await axios.post(`https://external-api.com`, formData, {
headers: { ...formData.getHeaders(), "Access-Control-Allow-Origin": "*" },
params: {
someParams: foo
}
});
Run Code Online (Sandbox Code Playgroud)
file.content实际上包含一个包含文件内容的 Buffer,但是当我发出请求时,外部 API 返回错误并且请求失败...
有趣的是,当我在本地运行无服务器功能时,整个设置有效sls offline。这可能表明 API 网关设置存在问题。
一些附加信息:
根据多部分插件的说明,我在 API 网关设置中添加了二进制数据类型:
这是 AWS Gateway 中终端节点的配置:
amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless
执行 AWS Lambda 时出现 NodeJS 弃用错误(使用节点 12.x):
[DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated
Run Code Online (Sandbox Code Playgroud)
无法找到哪个模块/代码片段正在生成它。似乎没有任何内容引用_headers或_headerNames。
在 Node 中应该可以设置参数或环境变量,如此处解释为--trace-deprecation和/或--trace-warnings和/或--throw-deprecation。在 lambda 的 AWS 控制台环境变量中设置一个或多个这些值时,不会显示任何额外信息。
为 AWS Lambda 设置此运行时参数的方法是什么?有没有办法捕获堆栈跟踪以了解不推荐使用的错误发生在哪里?
我正在使用 Lambda 处理程序加载腌制的机器学习模型,因此我需要 sklearn(如果未包含,我会收到“ModuleNotFoundError:没有名为 'sklearn' 的模块”)
因此,我使用 sklearn 在 Docker 中创建了一个新的部署包。
但是当我尝试上传新的 lambda.zip 文件时,我无法保存 lambda 函数。我收到错误:解压后的大小必须小于 262144000 字节
我做了一些谷歌搜索,发现了两个建议:(1)将 CLFAG 与 PIP 结合使用,(2)使用 Lambda Layers。
我不认为图层会起作用。将我的部署包的部分内容移动到层不会减少总大小(并且AWS 文档指出“函数和所有层的解压缩总大小不能超过解压部署包大小限制 250 MB”。
CFLAGS 听起来很有希望,但我以前从未使用过 CFLAGS,并且遇到了错误。
我正在尝试添加标志:-Os -g0 -Wl,--strip-all
在 CLFAGS 之前,我的 docker pip 命令是:pip3 install requests pandas s3fs datetime bs4 sklearn -t ./
首先我尝试:pip3 install requests pandas s3fs datetime bs4 sklearn -t -Os -g0 -Wl,--strip-all ./
这产生了各种错误“没有这样的选项:-g”
然后我尝试了CFLAGS = -Os -g0 -Wl,--strip-all pip3 …
我想要提高 Lambda 开发效率。我期望的最终状态是将我的开发过程分为 2 个不同的构建:
我很高兴利用serverless framework与 Lambda 的集成,但我仍然无法弄清楚如何获取 gradle 而不是构建 FatJar,从而拥有一个包含所有依赖项的文件夹/jar,以及我的应用程序代码之一。
我在这里尝试过这个教程,它的功能如下:
task buildZip(type: Zip) {
baseName = "aws-java-github-webhook-gitstats"
from compileJava
from processResources
// into('lib') {
// from configurations.runtime
// }
}
task buildLayer(type: Copy) {
into "$buildDir/layer/java/lib"
from configurations.runtime
}
Run Code Online (Sandbox Code Playgroud)
但我认为该spring-dependency插件搞乱了这种方法(我正在使用spring-boot)。有谁有一个很好的配置设置来做到这一点,我可以利用吗?
aws-lambda ×10
amazon-iam ×2
amazon-s3 ×2
python ×2
serverless ×2
ajax ×1
cors ×1
gradle ×1
mongodb ×1
node.js ×1
pip ×1
scikit-learn ×1
spring-boot ×1
terraform ×1