我正在使用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) 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) 我是Amazon服务的新手。我已经在其他应用程序中将FIREBASE和PUBNUB用于浏览器通知。我想使用AWS SNS构建浏览器通知,例如FIREBASE或PUBNUB。
对于Web应用程序前端,我正在使用ReactJs和后端Nodejs lambda函数。
是否可以将SNS用于浏览器或Web应用程序通知?请指教。
谢谢
是否可以创建无服务器框架Lambda部署,其中Lambda部署到现有VPC的SecurityGroup中?我不希望服务部署或它的堆栈拥有一个网络工件?
aws-cloudformation aws-sdk aws-lambda aws-api-gateway serverless-framework
我正在尝试创建一个集中模块来设置我的日志格式化程序,以便在我的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行存在哪个构造函数.这可能会对正在发生的事情有所了解.
参考文献: …
一些背景:
我正在开发一个测试套件,用于使用 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) 我目前正在 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) 我刚刚将包含所有需要的包的 .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。
我们已经编写了 AWS Lambda 函数。例如,传递联系人 ID 并返回联系人的电话号码列表(以 json 格式)。
我们正在构建一个 Amplify-React 应用程序。我们想要调用现有的 Lambda 函数。Amplify React 应用程序和 Lambda 函数位于同一 AWS 账户和同一区域。
我正在我的 AWS 账户中创建 lambda 函数的报告,并查看是否可以获得之前调用的成本以及 lambda 函数被调用的次数。我查看了 lambda、pricing、cloudwatch 和 costexplorer 的文档,但没有找到任何内容。我现在想知道是否必须进行多次 API 调用。感谢所有帮助!
aws-lambda ×10
python ×4
boto3 ×2
node.js ×2
reactjs ×2
amazon-ec2 ×1
amazon-sns ×1
asynchronous ×1
aws-amplify ×1
aws-sdk ×1
firefox ×1
geckodriver ×1
greengrass ×1
logging ×1
numpy ×1
selenium ×1