我正在尝试从AWS Lambda访问我的VPC上的S3和资源,但由于我将AWS Lambda配置为访问VPC,因此在访问S3时会超时.这是代码
from __future__ import print_function
import boto3
import logging
import json
print('Loading function')
s3 = boto3.resource('s3')
import urllib
def lambda_handler(event, context):
logging.getLogger().setLevel(logging.INFO)
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')
print('Processing object {} from bucket {}. '.format(key, bucket))
try:
response = s3.Object(bucket, key)
content = json.loads(response.get()['Body'].read())
# with table.batch_writer() as batch:
for c in content:
print(' Processing Item : ID' + str(c['id']))
# ##################
# Do custom processing …Run Code Online (Sandbox Code Playgroud) 我们正在开发一个移动/网络应用程序,我们使用aws lambda和dynamo db作为我们的后端.独立的lambda功能正在完美运行.呼叫通过api网关路由.我们使用api密钥来利用它提供的安全功能.出于某些测试目的,我们试图通过第三方休息客户端POSTMAN调用api端点.
请求属于POST类型,但无论我们尝试什么,我们都会得到
403 ("message": "Missing authentication token.")
附上快照以供参考.(出于安全原因,少数部分用阴影表示)
当从SNS接收Lambda中的事件时,事件的外部结构看起来有点像:{"Records":[...]}
在我看到的所有教程中,记录字段中只有1条记录.
假设"记录" - 阵列只包含1个项目是否安全?
Regions.getCurrentRegion()从AWS Lambda函数中返回null.似乎Regions.getCurrentRegion()AWS Lambda函数不支持此功能.有没有另一种方法来确定lambda函数运行的区域?
注意:AWS Lambda函数是用Java编写的.
我已经在cloudformation中定义了我的lambda/roles,并且还希望使用它来添加预定的事件源......是否有任何文档或示例?
我有一个通过API网关配置的lambda函数,该函数应该通过Node(例如:Twilio)访问外部API.我不想在lambda函数中存储函数的凭据.有没有更好的地方设置它们?
当我尝试使用create-function命令创建lambda函数时,我收到错误"Lambda不能为函数定义角色".
aws lambda create-function
--region us-west-2
--function-name HelloPython
--zip-file fileb://hello_python.zip
--role arn:aws:iam :: my-acc-account-id:role/default
--handler hello_python.my_handler
--runtime python2.7
--timeout 15
--memory-size 512
总的来说,我对在VPC中使用AWS Lambda感到非常困惑.问题是Lambda在尝试访问S3存储桶时超时.该解决方案似乎是一个VPC端点.
我已将Lambda函数添加到VPC,因此它可以访问RDS托管数据库(未在下面的代码中显示,但功能正常).但是,现在我无法访问S3,任何尝试这样做都会超时.
我尝试创建一个VPC S3端点,但没有任何改变.
VPC配置
每当我第一次制作EC2实例时,我都会使用默认创建的简单VPC.它有四个子网,都是默认创建的.
VPC路由表
_Destination - Target - Status - Propagated_
172.31.0.0/16 - local - Active - No
pl-63a5400a (com.amazonaws.us-east-1.s3) - vpce-b44c8bdd - Active - No
0.0.0.0/0 - igw-325e6a56 - Active - No
Run Code Online (Sandbox Code Playgroud)
简单的S3下载Lambda:
import boto3
import pymysql
from StringIO import StringIO
def lambda_handler(event, context):
s3Obj = StringIO()
return boto3.resource('s3').Bucket('marineharvester').download_fileobj('Holding - Midsummer/sample', s3Obj)
Run Code Online (Sandbox Code Playgroud) 我相当新,AWS Lambda但肯定可以看到它的好处,并偶然发现了一流的框架,Serverless以帮助我在Lambda上构建解决方案.
我开始使用AWS APIGateway 构建解决方案,但确实需要"internal" VPC API而不是像API GW所创建的公共Internet面向API.
我发现Servless确实可以暴露一个HTTP端点,但我无法弄清楚这是如何完成的以及如何创建URL.当我从Serverless部署Lambda时,它会给我一个URL,例如:
https://uxezd6ry8z.execute-api.eu-west-1.amazonaws.com/dev/ping
我希望能够找到(或创建)已存在的同一个http监听器,Lambdas所以我的问题是如何URL创建以及HTTP部署的实际监听器在哪里?
我在尝试更改 Lambda 的内存大小时遇到了一个非常奇怪的问题。UI 中明确指出我们可以将内存设置为 128 MB 到 10240 MB 之间,但是当我设置8192值并单击“应用”时,我收到以下错误消息:
“MemorySize”值无法满足约束:成员的值必须小于或等于 3008
已经检查了配额,一切都很好。老实说,我被困住了
谢谢