标签: aws-lambda

如何使用带有node.js的aws Lambda将一个Item放入aws DynamoDb中

我正在使用aws lambda,我正在尝试使用带有node.js的lambda函数来放置一个Item.

我和我有以下代码..

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

var dynamoDBConfiguration = {
    "accessKeyId": "AccessKey",
    "secretAccessKey": "Secratekey",
    "region": "us-west-2"
  };
AWS.config.update(dynamoDBConfiguration);
var dd = new AWS.DynamoDB();
var tableName = 'product_bhavik';

exports.handler = function(event, context) {


putItem = function(itemName,prod_Id, prod_Name, prod_Desc, prod_Price) {
    console.log(" putItem Function Called");
     var item = {
        'itemName': { 'S': itemName },
        'microtime': { 'N': new Date().getTime().toString() }
      };

      if (prod_Id) item.prod_Id = { 'N': prod_Id.toString()};
      if (prod_Name) item.prod_Name = { 'S': prod_Name };
      if (prod_Desc) item.prod_Desc = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda

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

究竟哪条路径可以用于LocalStack API Gateway Lambda集成?

LocalStack很整洁,但很难找到它的文档.我无法访问连接到Lambda函数的API网关代理端点.

我能想到的唯一事情是当我为网关进行put-integration时,我不知道如何处理凭证参数(假设这是100%本地...我没有使用真正的AWS账户)所以我现在留下评论:

aws --endpoint-url=http://localhost:4567 apigateway \
    put-integration \
    --region us-west-2 \
    --rest-api-id 0091232159 \
    --resource-id 3732709762 \
    --http-method ANY \
    --type AWS_PROXY \
    --integration-http-method POST \
    --uri arn:aws:lambda:us-west-2:000000000000:function:PostProposal \
    #--credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
Run Code Online (Sandbox Code Playgroud)

我的同事发现了一个线程,听起来好像是LocalStack中的一个错误:

https://github.com/atlassian/localstack/issues/129

无论如何,这是我的API在我做的时候的样子aws --endpoint-url=http://localhost:4567 apigateway get-resources --rest-api-id 0091232159:

{
    "items": [
        {
            "id": "3312801A-ZA-Z6",
            "path": "/",
            "resourceMethods": {
                "GET": {}
            }
        },
        {
            "id": "3732709762",
            "parentId": "3312801A-ZA-Z6",
            "pathPart": "{proxy+}",
            "path": "/{proxy+}",
            "resourceMethods": {
                "GET": {},
                "ANY": {
                    "httpMethod": "ANY",
                    "authorizationType": "NONE",
                    "methodIntegration": {
                        "type": "AWS_PROXY",
                        "httpMethod": "ANY", …
Run Code Online (Sandbox Code Playgroud)

aws-lambda aws-api-gateway atlassian-localstack

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

使用AWS SNS的浏览器通知

我是Amazon服务的新手。我已经在其他应用程序中将FIREBASE和PUBNUB用于浏览器通知。我想使用AWS SNS构建浏览器通知,例如FIREBASE或PUBNUB。

对于Web应用程序前端,我正在使用ReactJs和后端Nodejs lambda函数。

是否可以将SNS用于浏览器或Web应用程序通知?请指教。

谢谢

amazon-web-services node.js amazon-sns reactjs aws-lambda

8
推荐指数
2
解决办法
6036
查看次数

无服务器框架将Lambda添加到现有VPC和子网

是否可以创建无服务器框架Lambda部署,其中Lambda部署到现有VPC的SecurityGroup中?我不希望服务部署或它的堆栈拥有一个网络工件?

aws-cloudformation aws-sdk aws-lambda aws-api-gateway serverless-framework

8
推荐指数
3
解决办法
2479
查看次数

在AWS lambda函数中两次获取日志

我正在尝试创建一个集中模块来设置我的日志格式化程序,以便在我的lambda函数中的多个python模块之间共享.此功能最终将在本地内部部署设备上的AWS Greengrass上运行.

出于某种原因,当我添加自己的处理程序来格式化消息时,日志将被输出两次 - 一次是在正确的日志级别,第二次是在错误的级别.

如果我使用标准的python记录器而不设置任何处理程序,它可以正常工作,例如

main.py:

import logging

logging.debug("test1")
Run Code Online (Sandbox Code Playgroud)

cloudwatch logs:

12:28:42 [DEBUG]-main.py:38,test1
Run Code Online (Sandbox Code Playgroud)

我的目标是在我的代码上有一个格式化程序,它将这些日志消息格式化为JSON.然后它们将被摄入集中式日志记录数据库.但是,当我这样做时,我得到两次日志消息.

loghelper.py:

def setup_logging(name):

    formatter = logging.Formatter("%(name)s, %(asctime)s, %(message)s")

    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)

    if logger.handlers:
        for handler in logger.handlers:
            logger.removeHandler(handler)

    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    return logger
Run Code Online (Sandbox Code Playgroud)

main.py:

import logging

logger = loghelper.setup_logging('main.test_function')

def test_function():
    logger.debug("test function log statement")

test_function()
Run Code Online (Sandbox Code Playgroud)

现在运行lambda函数时,我在云监视日志中收到两次调试消息,如下所示:

cloudwatch logs:

12:22:53 [DEBUG]-main.py:5, test function log statement
12:22:53 [INFO]-__init__.py:880,main.test_function,2018-06-18 12:22:53,099, test function log statement
Run Code Online (Sandbox Code Playgroud)

请注意:

  • 第一个条目处于正确的级别,但格式错误.
  • 第二个条目报告错误的级别,错误的模块但格式正确.

我无法解释这种行为,并会对可能导致这种行为的任何想法表示感谢.我也不知道第880行存在哪个构造函数.这可能会对正在发生的事情有所了解.

参考文献: …

python logging amazon-web-services aws-lambda greengrass

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

Async、Lambda、Boto3、ThreadPoolExecutor:连接池已满,正在丢弃连接

一些背景:

我正在开发一个测试套件,用于使用 CodePipeline 和两个 lambda 函数更新和测试全局重定向:一个包装器函数和一个测试器函数。

包装器循环遍历域列表。对于每个域,它获取关联的 S3 文件,然后创建一长串对象(文件中每行一个对象)。示例对象:

redirect = {
     'staging': None,
     'prod': None,
     'country': 'US',
     'language': 'EN',
     'status_code': None,
     'shortlink': None,
     'expected': None
}
Run Code Online (Sandbox Code Playgroud)

然后,包装器获取此对象列表并调用第二个 lambda(测试器 lambda),该 lambda 为每个对象发送一系列 httpx 请求等。

其中最重要的一点是它是异步的 - 否则,lambda 将在 15 分钟时超时。

实际问题:

包装函数只能触发测试器 10 次。否则,当返回结果时,我会收到以下错误:

Connection pool is full, discarding connection: lambda.us-east-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

我提高了 ThreadPoolExecutor 的 max_workers,甚至为 boto3 设置了 max_workers。我与 AWS 支持人员进行了交谈,我的实际 lambda 设置有利于我的测试器 lambda 根据需要多次触发。然而,我仍然收到连接池错误。

相关代码:

from botocore.client import Config
from boto3.session import Session
from concurrent.futures import ThreadPoolExecutor, as_completed
import boto3 …
Run Code Online (Sandbox Code Playgroud)

python asynchronous threadpoolexecutor boto3 aws-lambda

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

WebDriverException:“进程意外关闭,状态为 255” - selenium/geckodriver/AWS lambda - Python

我目前正在 aws lambda (无服务器) 上开发一个网络抓取项目

技术人员:

蟒蛇3

硒3.14

geckodriver-V0.29

Firefox 80.0(en 模式无头)

这是我实现的代码(知道我事先配置了 firefox 和 geckodriver 的路径):

from selenium import webdriver
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

options = FirefoxOptions()
options.add_argument("--headless")
binary = FirefoxBinary("/tmp/bin/firefox/firefox")

webdriver.Firefox(options=options,executable_path="/tmp/bin/geckodriver", firefox_binary=binary)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Message: Process unexpectedly closed with status 255
: WebDriverException
Traceback (most recent call last):
  File "/var/task/src/lambda_function.py", line 8, in lambda_handler
    driver = WebDriverWrapper()
  File "/var/task/src/webdriver_wrapper.py", line 116, in __init__
    self._driver = webdriver.Firefox(options=options,executable_path="/tmp/bin/geckodriver", firefox_binary=binary)
  File "/var/task/lib/selenium/webdriver/firefox/webdriver.py", line 174, in …
Run Code Online (Sandbox Code Playgroud)

python firefox selenium aws-lambda geckodriver

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

使用 AWS Lambda 时没有名为“numpy.core._multiarray_umath”的模块

我刚刚将包含所有需要的包的 .zip 文件上传到 AWS Lambda。我在 Mac 上使用 python 3.8 的虚拟环境运行得很好。AWS Lambda 函数也有 python 3.8。但是当我在 AWS Lambda 中运行时,出现以下错误:

No module named 'numpy.core._multiarray_umath'
Run Code Online (Sandbox Code Playgroud)

我已将实际的 numpy 版本(1.20.2)更改为其他版本,例如 1.19.1 和 1.18.5,但问题无法解决。

我还使用 spacy 3.0.6 和 fastapi 0.63.0。

python numpy amazon-web-services aws-lambda

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

如何从 Amplify-React 调用现有的 Lambda 函数?

我们已经编写了 AWS Lambda 函数。例如,传递联系人 ID 并返回联系人的电话号码列表(以 json 格式)。

我们正在构建一个 Amplify-React 应用程序。我们想要调用现有的 Lambda 函数。Amplify React 应用程序和 Lambda 函数位于同一 AWS 账户和同一区域。

  1. 我们可以直接在 Amplify-React 应用程序中调用 Lambda 函数吗?或者,我们必须先公开API网关中的Lambda函数?
  2. 如果我们可以直接在 Amplify-React 中调用 Lambda 函数,您可以分享示例 javascript 来执行此操作吗?
  3. 是否存在如何在 Amplify-React 应用程序中调用现有 Lambda 函数的最佳实践?

reactjs aws-lambda aws-api-gateway aws-amplify

8
推荐指数
0
解决办法
1026
查看次数

有没有办法获得单个 lambda 函数的成本?

我正在我的 AWS 账户中创建 lambda 函数的报告,并查看是否可以获得之前调用的成本以及 lambda 函数被调用的次数。我查看了 lambda、pricing、cloudwatch 和 costexplorer 的文档,但没有找到任何内容。我现在想知道是否必须进行多次 API 调用。感谢所有帮助!

amazon-ec2 amazon-web-services boto3 aws-lambda

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