标签: aws-lambda

无法在aws lambda函数中调用外部api

我打算通过请求调用 aws lambda 函数中的第三方 api。但它显示超时错误。我将 lambda 函数时间设置为 30 秒,当我使用邮递员调用该 api 时,它会在 5 秒内发送响应(错误)。我认为请求或者axios无法将请求发送到外部api或者无法接收响应。谁能帮我?我的代码:

  request.post({url:url2, json:true, body:body, headers: {
    'ACCESS_TIMESTAMP': timestamp,
    'Content-Type': 'application/json'
  } }, (error, response, body) => {
  console.log("------------------I am here----------------------")
  callback(null, error)
})
Run Code Online (Sandbox Code Playgroud)

当我使用 axios 时,代码如下:

let jsonbody = JSON.stringify(body)
axios.post(url2, jsonbody,  {headers: {
      'ACCESS_TIMESTAMP': timestamp,
      'Content-Type': 'application/json'
    }})
.then(res => {
  callback(null, res.data)
})
.catch(err => {
  callback(null, err)
})
Run Code Online (Sandbox Code Playgroud)

我想得到 res 或 err 的结果,但他们不行动。

api request amazon-web-services aws-lambda axios

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

AWS lambda 中的 Pytest

我们有什么方法可以使用 pytest 对 AWS lambda 函数中的函数执行单元测试吗?

假设我有一个如下所示的 lambda 函数:

def func1(x,y):
   return x+y

def func2(x,y):
   return x-y

def handler(event,context):
   x = event["x"]
   y = event["y"]
   
   def func3(x,y):
      return x*y

   print(func1(x,y))
   print(func2(x,y))
   print(func3(x,y))
Run Code Online (Sandbox Code Playgroud)

请原谅功能过于简单。我想使用pytest 对这些函数和进行单元func1测试。func2func3

有什么办法可以在 AWS lambda 中做到这一点吗?

python unit-testing amazon-web-services pytest aws-lambda

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

AWS Kinesis,具有保证排序的并发 Lambda 处理

我有一个 Lambda,其事件源指向 Kinesis Stream Consumer(具有任意数量的分片)

我想确保流中具有相同“分区键”的项目由 Lambda 按顺序处理,而不是同时处理。(这被用作对象的标识,我不希望多个 Lambda 同时对同一个对象执行逻辑。)

例如,如果流中的项目具有分区键:

1,2,1,3,4,1,2,1

如果我们按照从左到右的处理顺序,Lambda 将同时处理分区键为 1,2,3 和 4 的项目。然后,当它完成具有特定分区键的一项时,它可以开始处理具有该键的另一项。

这是否可以通过某种方式实现,而不使用会导致 Lambda 使用效率低下的分布式锁?

谢谢

concurrency amazon-web-services amazon-kinesis aws-lambda

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

SubnetIds 和 SecurityGroupIds 的 Lambda 模板失败

我的 sam 函数中有以下模板:

Resources:
  TagChangedFunction:
    Type: AWS::Serverless::Function
      Properties:
        CodeUri: tag_changed_function
        Handler: tag_changed/app.lambda_handler
        Runtime: python3.8
        Policies:
        - VPCAccessPolicy: {}
        - Statement:
          - Sid: EC2DescribeInstancesPolicy
            Effect: "Allow"
            Action:
            - ec2:DescribeInstances
            Resource: '*'
        VpcConfig:
          SubnetIds:
            - sg-061328bxxxxx
          SecurityGroupIds:
            - subnet-03afd77xxxxx
        Events:
          TagChanged:
            Type: CloudWatchEvent
            Properties:
              Pattern:
                source:
                  - aws.tag
                detail-type:
                  - Tag Change on Resource
Run Code Online (Sandbox Code Playgroud)

(我用 xxxxx 屏蔽了模板中的SubnetIds和)。SecurityGroupIds

但是当我构建并尝试将代码上传到 aws 时,我收到以下错误消息:

2 validation errors detected: Value
'[subnet-061328bxxxxx]' at
'vpcConfig.securityGroupIds' failed to satisfy
constraint: Member must satisfy constraint: [Member must
have …
Run Code Online (Sandbox Code Playgroud)

aws-lambda aws-sam-cli

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

无服务器框架 WarmUp 插件未被调用

我尝试将 WarmUp 无服务器插件集成到我的项目中。但是,我相信它不起作用。我在 lambda\xe2\x80\x99s CloudWatch 日志组中没有看到 WarmUp 的调用,并且 lambda 在空闲一段时间后确实需要预热时间。

\n

我的配置如下:

\n
service: ${file(./${env:DEPLOY_FILE_NAME}):service}\n\nprovider:\n  name: aws\n  custom:\n    roleName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):roleName}\n    profileName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):profileName}\n    bundle:\n      ignorePackages:\n        - pg-native\n    warmup:\n      enabled: true\n      events:\n        - schedule: rate(5 minutes)\n      prewarm: true\n  plugins:\n    - pluginHandler\n    - serverless-plugin-warmup\n  runtime: nodejs12.x\n  iamRoleStatements:\n    - Effect: 'Allow'\n      Action:\n        - 'lambda:InvokeFunction'\n      Resource:\n      - Fn::Join:\n        - ':'\n        - - arn:aws:lambda\n          - Ref: AWS::Region\n          - Ref: AWS::AccountId\n          - function:${self:service}-${opt:stage, self:provider.stage}-*\n  cfLogs: true\n  stage: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):stage}\n  region: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):region}\n  memorySize: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):memorySize}\n  timeout: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):timeout}\n  keepWarm: false\n  useApigateway: …
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework serverless

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

使用 psycopg2 将 python zip 文件上传到 aws lambda 时出错

我正在尝试将 python zip 文件添加到 was lambda,其中包含 psycopg2 文件。我收到错误。请尝试提供帮助

  "errorMessage": "Unable to import module 'handler': libpq.so.5: cannot open shared object file: No such file or directory",
  "errorType": "Runtime.ImportModuleError"
Run Code Online (Sandbox Code Playgroud)

python aws-lambda

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

我应该在无服务器应用程序中使用 Express.js 吗?

我想知道在无服务器应用程序 (AWS Lambdas) 中使用 Express.js 作为中间件是否是一个好主意?我的担忧来自这样一个事实:在 Express.js 中存在单一功能设置,将来如果有大量请求进来,它将开始限制。我的担忧是否合理,或者我什么都没有动摇。

express aws-lambda serverless

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

从AWS lambda执行shell命令

我正在尝试执行 shell 命令以从 AWS lambda 迁移。我们的想法是,每当我们需要运行迁移时,我们都会通过 AWS CLI 调用 lambda。我无法让它运行。运行迁移的命令永远不会被执行,并且它总是以 null 响应。任何帮助将不胜感激。

这是我的代码:

const exec = require("child_process").exec;
const { okResponse, errorResponse } = require('./response');

exports.handler = async (event) => {
    exec("node ./node_modules/db-migrate/bin/db-migrate up --config=./database.json", (error, stdout, stderr) => {
        if (error) {
            console.error(`error: ${error.message}`);
            return errorResponse(500, 'Error running migration.');
        }
        if (stderr) {
            console.log(`stderr: ${stderr}`);
            return errorResponse(500, 'Error running migration.');
        }
        console.log(`stdout: ${stdout}`);
        return okResponse(200, 'Migration successfully.');
    });
}
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda

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

如何使用 lambda(node.js) 将项目放入 DynamoDB 表中?

我已经使用 SAM 部署了 API Gateway、Lambda 和 DynamoDB。lambda 函数的代码如下:

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


exports.handler = async (event) => {
    try {
        
        console.log(event);         //To check if there is any problem with the API call or not, (CloudWatch result = No issues)
        console.log(event.body);    // To confirm if the 'event' is a JSON object or not. (CloudWatch result = No issues)
        var obj = JSON.parse(event.body);
        
        console.log(obj.id);
        console.log(obj.name);
        
        var ID = obj.id;
        var NAME = obj.name;
        
        var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
        
        var params = …
Run Code Online (Sandbox Code Playgroud)

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

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

当角色本身具有 1 个或多个策略时,在 Lambda 中同时提供基于角色和基于资源的策略的选项的目的是什么?

我创建了一个 Lambda 函数。在权限窗格中,有一个用于角色的部分,另一个部分用于基于资源的策略。

IAM 中的角色本质上具有策略。这指定了函数(通过角色)有权访问的资源和操作。

那么设立基于资源的政策部分的目的是什么?如果其中一个允许访问而另一个拒绝访问,则优先考虑哪个权限。

amazon-web-services amazon-iam aws-lambda

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