我正在尝试从 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,当使用包含版本(例如...: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 中的无服务器框架部署了无服务器应用程序。我该如何解决这个问题?
我正在使用 Localstack 来测试我在本地的更改。我的 lambda 函数应该执行 putObject 并在 s3 存储桶中创建对象。直接在 AWS 环境中进行测试时,该功能运行良好。但在 Localstack 中,它不起作用。我收到以下错误。
\n\n\n\n\n无法连接到端点 URL:\n " http://localhost:4572/doyouknowme/pokemon.jpeg "\n \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0raise EndpointConnectionError(endpoint_url=request.url ,错误=e)ponset_exceptionlhost:4572/doyouknowme/pokemon.jpeg"
\n
AWS 凭证:
\n\n[default]\naws_access_key_id = AKI****************\naws_secret_access_key = gL************************\nregion = us-east-1\nRun Code Online (Sandbox Code Playgroud)\n\nLambda函数代码:
\n\nimport json\nimport urllib.parse\nimport boto3\nimport base64\n\nprint(\'Loading function\')\n# session = boto3.Session(profile_name=\'personal\')\n# s3 = session.client(\'s3\', endpoint_url=\'http://localhost:4574\')\n\ns3 = boto3.client(\'s3\', endpoint_url=\'http://localhost:4572\', region_name=\'us-east-1\')\n\n\ndef lambda_handler(event, context):\n # raise Exception(\'Something went wrong\')\n print("Received event: " + json.dumps(event, indent=2))\n\n\n try:\n image_data = base64.b64decode(event[\'image_data\'])\n response = s3.put_object(\n Body=image_data,\n Bucket=\'doyouknowme\',\n Key=\'pokemon.jpeg\',\n ContentType=\'image/jpeg\'\n )\n\n …Run Code Online (Sandbox Code Playgroud) 我正在研究我的项目的 Lambda,我看到其中一个是空闲的。在仪表板页面的顶部,我看到带有文本的块:
函数 __ 空闲。要重新激活您的功能,请选择“恢复”。
我对此有点困惑,因为此功能与其他未标记为空闲但也已几个月未启动的功能非常相似。由于我没有在 AWS 文档中找到答案,我很感激有人向我解释处于空闲状态和非空闲状态的函数之间有什么区别,以及函数如何/为什么变为空闲?
我一直很难让这件事正常工作我试图在本地调用在 docker 容器上运行的 Lambda,但我遇到了以下问题
Docker 文件
FROM public.ecr.aws/lambda/python:3.8
COPY myfunction.py ./
CMD ["myfunction.lambda_handler"]
Run Code Online (Sandbox Code Playgroud)
Python 文件 myfunction.py
import json
import sys
def lambda_handler(event, context):
print("Hello AWS!")
print("event = {}".format(event))
return {
'statusCode': 200,
}
Run Code Online (Sandbox Code Playgroud)
FROM public.ecr.aws/lambda/python:3.8
COPY myfunction.py ./
CMD ["myfunction.lambda_handler"]
Run Code Online (Sandbox Code Playgroud)
输出
C:\Users\s.shah\IdeaProjects\YoutubeVideos\Learn>docker build --tag custom .
[+] Building 0.5s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 31B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda aws-lambda-layers aws-lambda-containers
我有一个监听第三方 SNS 的 AWS SQS(标准队列)。我有一个 lambda 设置,其中具有批量大小 10000 和批量窗口 300 的 SQS 触发器。我的 SQS 接收大约。一次 150 条消息,但即使我配置了批量大小 10000,lambda 也会一次触发 20-30 条消息。我不明白为什么会发生这种情况...即使 SQS 有足够的消息和足够的时间(300 秒)批处理窗口)来填充批处理,但它没有这样做。
我用 google 搜索了这个问题,发现 lambda 的最大有效负载大小可以是 6MB。我检查了我的消息及其大约。每条消息 2.5 KB。所以 30*2.5 = 75 KB 而已,没有达到 6MB 的限制。
此外,我怀疑 lambda 并发性,因此我仅将其设置为值 1。所以没有并行的 lambda 实例。
有人可以帮助我了解问题出在哪里吗?
aws-lambda ×10
amazon-rds ×1
amazon-sqs ×1
amazon-vpc ×1
boto3 ×1
localstack ×1
macos-mojave ×1
python-3.x ×1
scrapy ×1
sharp ×1