标签: aws-lambda

在创建 lambda 之前 Terraform 执行脚本

我有一个 terraform 配置,可以在 aws 上正确创建一个 lambda 函数,并提供一个 zip 文件。

我的问题是我总是必须先打包 lambda(为此我使用无服务器打包方法),所以我想执行一个脚本来打包我的函数并将 zip 移动到正确的目录,然后 terraform 创建 lambda 函数。

那可能吗?也许使用 null_resource 和 local-exec 的组合?

aws-lambda terraform

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

AWS Lambda 创建函数角色错误

阅读有关 AWS Lambda 函数的一些教程。我一直收到错误消息,“您的角色模板创建过程中似乎出现错误,请仔细检查角色名称是否已存在,然后重试。”

我尝试了许多不同的场景、新角色、现有角色、在 IAM 中编辑角色、提供更多访问权限然后尝试它们。我尝试创建一个 lambda 函数“从头开始编写”和“蓝图”。我还登录到我的 root 帐户以查看我的用户帐户是否有问题。

沮丧...无法在 Lambda 中创建任何内容,因为我 100% 都会收到此错误。

AWS Lambda 错误蓝图截图 AWS Lambda 错误 Scratch 新角色截图

amazon-web-services amazon-iam aws-lambda

9
推荐指数
2
解决办法
1309
查看次数

如何使用 Aws Lambda (python) 接收文件

我试图弄清楚如何通过 Python 中的 API 调用接收浏览器发送的文件。

允许 Web 客户端发送任何类型的文件(比如 .txt、.docx、.xlsx 等)。我不知道我是否应该使用二进制文件。

这个想法是在 S3 之后保存文件。现在我知道可以使用像 Aws Amplify 这样的 js 库并生成一个临时 url,但我对该解决方案不太感兴趣。

任何帮助表示赞赏,我已经在 Python 中广泛搜索了一个解决方案,但我找不到任何实际工作的东西!

我的 API 是私有的,我使用无服务器进行部署。

files_post:
  handler: post/post.post
  events:
    - http:
        path: files
        method: post
        cors: true
        authorizer: 
          name: authorizer
          arn: ${cf:lCognito.CognitoUserPoolMyUserPool}
Run Code Online (Sandbox Code Playgroud)

编辑

我有一个适用于文本文件但不适用于 PDF、XLSX 或图像的半解决方案,如果有人有我会非常高兴

from cgi import parse_header, parse_multipart
from io import BytesIO
import json


def post(event, context):


    print event['queryStringParameters']['filename']
    c_type, c_data = parse_header(event['headers']['content-type'])
    c_data['boundary'] = bytes(c_data['boundary']).encode("utf-8")

    body_file = BytesIO(bytes(event['body']).encode("utf-8"))
    form_data = parse_multipart(body_file, c_data)

    s3 = boto3.resource('s3')
    object …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services aws-lambda angular

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

每当我更新我的 CFN 堆栈时运行自定义资源

我有一个自定义资源,用于从 API 网关获取 API 密钥并将其作为标头发送到 Cloudfront。当我创建一个堆栈时,我custom:resource正在触发,因为它是第一次创建逻辑 ID。但是,当我更新堆栈(即更改 API 密钥名称)时,类型的 API 密钥资源AWS::ApiGateway::ApiKey将创建一个新的逻辑 ID,同时又创建一个新的 API 密钥,此时我custom:resource没有调用,因为它具有相同的逻辑 ID因此,我的 Cloudfront 拥有旧的 API 密钥而不是新的。

custom:resource每次我的堆栈发生更新时,有没有办法调用我的?作为一种解决方法,每当我更新堆栈中的资源时,我都会更改Logical Idofcustom:resource以触​​发它。但这并不困难,因为 logicalId 被共享为许多资源的引用。

顺便说一句,我的自定义资源附加到 lambda 函数。我什至尝试更改Version字段并尝试向属性字段(即堆栈名称、参数等)添加值,但它仍然没有调用。

{
   "AWSTemplateFormatVersion" : "2010-09-09",
   "Resources" : {
      "MyFrontEndTest" : {
         "Type": "Custom::PingTester",
         "Version" : "1.0", -->Even changed the version to 2.0 
         "Properties" : {
            "ServiceToken": "arn:aws:lambda:us-east-1:*****",
            "InputparameterName" :  "MYvalue" -->Added this field
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

谢谢任何帮助表示赞赏

aws-cloudformation aws-lambda

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

找不到模块“木偶操纵者”

在 AWS Lambda/NodeJS 运行时中,我尝试从绝对路径 ( /opt/nodejs/node_modules/puppeteer)导入。

Source 在本地运行良好,但是,一旦与 Webpack/serverless-webpack 捆绑并在 AWS Lambda 中运行,就会require('puppeteer')导致:

{"errorMessage":"Cannot find module 'puppeteer'","errorType":"Error","stackTrace":["webpackMissingModule (/var/task/src/render/handler.js:643:89)","/var/task/src/render/handler.js:643:173","next (native)","step (/var/task/src/render/handler.js:608:191)","/var/task/src/render/handler.js:608:361"]}
Run Code Online (Sandbox Code Playgroud)

我检查过:

  • AWS Lambda 层安装在/opt.
  • 路径/opt/nodejs/node_modules/puppeteer确实存在。
  • NODE_PATH 正确包括 /opt/nodejs/node_modules

node.js webpack aws-lambda serverless-framework serverless-webpack-plugin

9
推荐指数
2
解决办法
2万
查看次数

Strapi 可以启动到 AWS lambda 中吗?

我想要一个好的 cms/后端应用程序来在 AWS 上创建/管理 API。Strapi 非常适合我的要求。但我不想使用 EC2、lightsail、beanstalk 等

我想在aws lambda上使用trapi 是否可以在aws lambda上部署trapi?

amazon-web-services aws-lambda strapi

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

API 网关返回 403 - 禁止

我有一个 API 网关,其端点由 AWS Lambda 代理集成实现。我还为此端点配置了自定义授权方。我看到一个问题,我向该端点发出的第一个请求成功,但其他调用将失败;我收到一个 403 - 禁止的错误。如果我等待一段时间,我可以提出另一个成功的请求,但随后我开始看到同样的问题。

这是我的授权人代码:

const jwt = require('jsonwebtoken');

exports.authorizer = async function (event, context) {
  const bearerToken = event.authorizationToken.slice(7);
  const { payload } = jwt.decode(bearerToken);
  return {
    principalId: payload.sub,
    policyDocument: {
      Version: '2012-10-17',
      Statement: [{
        Action: 'execute-api:Invoke',
        Effect: 'Allow',
        Resource: event.methodArn,
      }],
    },
  };
};
Run Code Online (Sandbox Code Playgroud)

在此端点的 API 网关日志中,我可以看到授权方正在返回,Allow但我仍然可以看到授权失败:

(50ac5f87-e152-4933-a797-63d84a528f61) 客户端无权执行此操作。

有谁知道这会如何或为什么会发生?

javascript amazon-web-services node.js aws-lambda aws-api-gateway

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

gRPC 在 lamda 函数中没有按预期工作

我在 nodejs 中实现了 grpc 服务器和客户端。服务器正在运行0.0.0.0:8080。当我在本地测试时,客户端可以正常连接。但是当我将客户端移动到 aws-lambda 函数并在本地调用时它不起作用。服务器没有收到任何请求。知道可能是什么问题吗?

我曾尝试更改端口并关闭防火墙。还是没有成功。

任何帮助表示赞赏。

这里是 server.js

const grpc = require('grpc');
const path = require('path');

const FILE_PATH = './schema.proto';
const PROTO_PATH = path.resolve(__dirname, FILE_PATH);
const protoLoader = require('@grpc/proto-loader');
const tourProcess = require('../../src/modules/tour/src/controllers/internal/v100');

const server = new grpc.Server();
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
  keepCase: true,
  longs: String,
  enums: String,
  arrays: true,
  oneofs: true
});


const pivoTourProto = grpc.loadPackageDefinition(packageDefinition).grpcPivoTour;
server.addService(pivoTourProto.pivoTourService.service, {
  getTours: tourProcess.getTours
});

server.bind('0.0.0.0:8080', grpc.ServerCredentials.createInsecure());
console.log('GRPC running at 127.0.0.1:8080');
module.exports = server;
Run Code Online (Sandbox Code Playgroud)
client.js

var path …
Run Code Online (Sandbox Code Playgroud)

node.js aws-lambda grpc

9
推荐指数
0
解决办法
332
查看次数

如何将 PATH 导出到“sam build”命令?

我正在 PyCharm 上开发 AWS Lambda 函数。当我执行“运行”按钮时,出现以下错误消息。

/usr/local/bin/sam build MyFunction --template /Users/miyashiiii/Works/myapp/myapp/template.yaml --build-dir /Users/miyashiiii/Works/myapp/myapp/.aws-sam/build
Building codeuri: myapp/ runtime: python3.7 metadata: {} functions: ['MyFunction']

Build Failed
Error: PythonPipBuilder:Validation - Binary validation failed for python, searched for python in following locations  : ['/usr/bin/python'] which did not satisfy constraints for runtime: python3.7. Do you have python for runtime: python3.7 on your PATH?
Run Code Online (Sandbox Code Playgroud)

python3.7 在我的 PATH 上,其他一些位置在我的 PATH 上,但位置列表仅包含“/usr/bin/python”。

当我在终端上执行相同的命令(/usr/local/bin/sam build ~~)时,它成功了。

如何将 PATH 导出到“sam build”命令?

amazon-web-services pycharm aws-lambda aws-sam-cli aws-toolkit

9
推荐指数
2
解决办法
3890
查看次数

使用 Headless Chrome 运行 Selenium 的 AWS Lambda 容器可以在本地运行,但不能在 AWS Lambda 中运行

我目前正在开发一个 Python 程序,它有一个使用无头版本的 Chrome 和 Selenium 来执行重复过程的段。我的目标是在 Lambda 上运行该程序。

整个程序有大约 1GB 的依赖项,因此无法选择使用.zip 存档的标准方法,其中包含我的所有函数代码和依赖项,因为函数和所有层的总解压缩大小不能超过解压后的部署包大小限制为 250 MB。

所以,这就是新的AWS Lambda – Container Image Support(我使用这个链接教程来开发整个实现,所以如果你需要更多信息,请阅读)进来的地方。这允许我打包和部署我的 Lambda 函数作为容器镜像大小高达 10 GB。

我正在使用由运行 Amazon Linux 2 的 AWS 提供的 ECR Public 中托管的基本映像。首先 - 在我的 Dockerfile 中,我:

  • 下载基础镜像。
  • 定义一些全局变量。
  • 复制我的文件。
  • 安装我的 pip 附录
  • 使用 yum 安装一些软件包。

最后 - 我安装了 Chrome(阅读时为 87.0.4280.88)和 Chromedriver(87.0.4280.88)

  • 最后下载安装最新版本的 Chrome 和 Chromedriver

有可能这可能是问题所在,但我非常怀疑这是同一版本 - ChromeDriver 使用与 Chrome 相同的版本号方案。

这是我的Dockerfile:

# 1) DOWNLOAD BASE IMAGE.
FROM public.ecr.aws/lambda/python:3.8

# …
Run Code Online (Sandbox Code Playgroud)

python selenium chromium docker aws-lambda

9
推荐指数
3
解决办法
3931
查看次数