我正在尝试从 AWS Lambda 中运行一个爬虫蜘蛛。这是我当前脚本的样子,它正在抓取测试数据。
import boto3
import scrapy
from scrapy.crawler import CrawlerProcess
s3 = boto3.client('s3')
BUCKET = 'sample-bucket'
class BookSpider(scrapy.Spider):
name = 'bookspider'
start_urls = [
'http://books.toscrape.com/'
]
def parse(self, response):
for link in response.xpath('//article[@class="product_pod"]/div/a/@href').extract():
yield response.follow(link, callback=self.parse_detail)
next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()
if next_page:
yield response.follow(next_page, callback=self.parse)
def parse_detail(self, response):
title = response.xpath('//div[contains(@class, "product_main")]/h1/text()').extract_first()
price = response.xpath('//div[contains(@class, "product_main")]/'
'p[@class="price_color"]/text()').extract_first()
availability = response.xpath('//div[contains(@class, "product_main")]/'
'p[contains(@class, "availability")]/text()').extract()
availability = ''.join(availability).strip()
upc = response.xpath('//th[contains(text(), "UPC")]/'
'following-sibling::td/text()').extract_first()
yield {
'title': title,
'price': price,
'availability': availability, …Run Code Online (Sandbox Code Playgroud) CloudFormation 业余爱好者在这里。一直在网上查找,但找不到任何关于在我的 RDS 实例通过 CloudFormation 建立后我将如何创建表的参考资料。是否可以指定一个 Lambda 来启动和创建所有表,或者指定一个要应用的 SQL 文件?这方面的标准模式是什么?
amazon-web-services amazon-rds aws-cloudformation aws-lambda
我读到很多人都在努力将他们的 Lambda 连接到他们的 DynamoDB,因为他们住在一个 VPC 中。但我的问题是,为什么要使用 VPC?
VPC 旨在保护与外部世界(也称为互联网)直接连接的服务。例如 RDS 之类的东西,它只是等待任何知道 URL 的人查询的鸭子,因此可能成为 DDoS 的受害者,或者可以绕过凭据的零日漏洞利用等。
但是,AWS Lambda 和 DynamoDB 不是这样的,它们没有直接连接到互联网。他们的访问受到 IAM 凭证的保护,并且对于此类 DDoS/0Day 攻击实际上是安全的。
因此,问题是,如果 Lambda/DynamoDB 没有从中受益,为什么要为 Lambda/DynamoDB 使用 VPC,反而会使配置变得更加复杂?
我没有看到为 Lambda 或 DynamoDB 使用 VPC 的好处。
但也许我的理解是错误的?
我想知道如何访问我的 lambda 函数中引发的自定义异常的原因。我需要在 Step Functions 工作流程结束时访问它,如下所示。
下图是执行失败的示例。错误(error-info对象,有它自己Error和Cause部门)的输出被发现ParseTextractOutput,但我想知道如何访问它OutputNotFound,如下图所示。
的输出ParseTextractOutput是
{
"event"...
"error-info": {
"Error": "OutputNotFoundException",
"Cause": "{\"errorMessage\": \"Contents of Textracted file: {...}}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想在这些字段(Step Functions 定义)中以某种方式访问这些数据:
...
"States": {
"OutputNotFound": {
"Type": "Fail",
"Error": "<useful stuff here, like $.error-info.Error or something>",
"Cause": "<useful stuff here, like $.error-info.Cause or something>"
},
...
"ParseTextractOutput": {
"Type": "Task",
"Resource": "functionARN",
"Catch": [
{
"ErrorEquals": ["OutputNotFoundException"],
"ResultPath": "$.error-info",
"Next": …Run Code Online (Sandbox Code Playgroud) python state-machine amazon-web-services aws-lambda aws-step-functions
我正在使用无服务器框架使用 aws lambda,我将运行时从 更改nodejs8.10为nodejs10.x,然后我得到了一个错误跟踪,
{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'jmespath'","stack":["Runtime.ImportModuleError: Error: Cannot find module 'jmespath'"," at _loadUserApp (/var/runtime/UserFunction.js:100:13)"," at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)"," at Object.<anonymous> (/var/runtime/index.js:36:30)"," at Module._compile (internal/modules/cjs/loader.js:701:30)"," at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)"," at Module.load (internal/modules/cjs/loader.js:600:32)"," at tryModuleLoad (internal/modules/cjs/loader.js:539:12)"," at Function.Module._load (internal/modules/cjs/loader.js:531:3)"," at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)"," at startup (internal/bootstrap/node.js:283:19)"]}
Run Code Online (Sandbox Code Playgroud)
这个问题的原因是什么,如何解决?
我有一个 Lambda,当使用包含版本(例如...:function:MyFunction:123)的 ARN 引用时,它用作 CloudFront 源请求处理程序。我已经PROD为版本 123创建了一个别名,我想改用它。
使用...:function:MyFunction:PRODARN 会产生以下错误
com.amazonaws.services.cloudfront.model.InvalidLambdaFunctionAssociationException:
The function ARN must reference a specific function version. (The ARN
must end with the version number.) ARN:
...:function:MyFunction:PROD (Service: AmazonCloudFront; Status Code:
400; Error Code: InvalidLambdaFunctionAssociation; Request ID:
d407f350-bc7f-11e9-8498-e7f23762c03e)
Run Code Online (Sandbox Code Playgroud)
完全删除版本(即...:function:MyFunction)根据文档应该是最新的,使用$LATEST或LATEST版本都失败并出现相同的错误。
我发现的所有文档都表明这应该有效,所以我不确定我在这里搞砸了什么。我创建的 IAM 角色的权限可能有问题吗?
我决定单击 aws lambda 界面上的油门按钮,以防止在调试过程中的问题时进一步激活该功能。我看现在没有办法移除油门。
现在我点击了油门按钮,我该如何移除油门?
问候康泰
当尝试在 AWS Lambda 函数内运行时,我不断收到以下错误:
darwin-x64' 二进制文件不能在 'linux-x64' 平台上使用。请删除“node_modules/sharp/vendor”目录并运行“npm install”
我使用 MacBook Pro 中的无服务器框架部署了无服务器应用程序。我该如何解决这个问题?
我正在研究我的项目的 Lambda,我看到其中一个是空闲的。在仪表板页面的顶部,我看到带有文本的块:
函数 __ 空闲。要重新激活您的功能,请选择“恢复”。
我对此有点困惑,因为此功能与其他未标记为空闲但也已几个月未启动的功能非常相似。由于我没有在 AWS 文档中找到答案,我很感激有人向我解释处于空闲状态和非空闲状态的函数之间有什么区别,以及函数如何/为什么变为空闲?
我可以发誓,有一种简单的方法可以更改配置为 Lambda 触发器的 SQS 队列的批量大小,但截至 2020 年 7 月,我再也找不到发生这种情况的地方。这可能与目前在 AWS 顶部宣传的“新 SQS 控制台体验”有关。
我可以看到队列的当前批次大小(屏幕截图),但该数字不可编辑。我也没有在 SQS 界面中看到与批量大小相关的任何内容。我当前的 IAM 凭证可能无法更改批量大小,并且对我隐藏。有谁知道可以在哪里更改此值?
aws-lambda ×10
amazon-rds ×1
amazon-sqs ×1
amazon-vpc ×1
macos-mojave ×1
node.js ×1
python ×1
python-3.x ×1
scrapy ×1
sharp ×1