2016-02-16 19 views
17

AWS Lambda'dan V3'ümde S3'e ve VPC'mdeki kaynaklara erişmeye çalışıyorum ama AWS Lambda'mı VPC'ye erişim için yapılandırdığımdan, S3'e erişirken zaman aşımına uğruyor. İşte aşağıda gösterildiği gibi internete erişmek için uygun Giden kuralları ile benim alt ağları ve güvenlik grupları kurdum kodVPC yapılandırmasına sahip AWS Lambda eklenmesi S3'e erişirken zaman aşımına neden oluyor

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 here using VPC resources 
      # ################## 
    except Exception as e: 
     print('Error while processing object {} from bucket {}. '.format(key, bucket)) 
     print(e) 
     raise e 

ama S3 erişen benim Lambda basitçe zaman aşımına. Eğer Lambda içinde VPC desteğini etkinleştirmek için işlevi artık da içeren VPC dışında herhangi bir şeyin erişimine sahip olduğunda İşte

enter image description here

enter image description here bir test girişinin numunesi de

# Test Event Configuration 
{ 
    "Records": [ 
    { 
     "awsRegion": "us-east-1", 
     "eventName": "ObjectCreated:Put", 
     "eventSource": "aws:s3", 
     "eventTime": "2016-02-11T19:11:46.058Z", 
     "eventVersion": "2.0", 
     "requestParameters": { 
     "sourceIPAddress": "54.88.229.196" 
     }, 
     "responseElements": { 
     "x-amz-id-2": "ljEg+Y/InHDO8xA9c+iz6DTKKenmTaGE9UzHOAabarRmpDF1z0eUJBdpGi37Z2BU9nbTh4p7oZg=", 
     "x-amz-request-id": "3D98A2325EC127C6" 
     }, 
     "s3": { 
     "bucket": { 
      "arn": "arn:aws:s3:::social-gauge-data", 
      "name": "social-gauge-data", 
      "ownerIdentity": { 
      "principalId": "A1NCXDU7DLYS07" 
      } 
     }, 
     "configurationId": "b5540417-a0ac-4ed0-9619-8f27ba949694", 
     "object": { 
      "eTag": "9c5116c70e8b3628380299e39e0e9d33", 
      "key": "posts/test/testdata", 
      "sequencer": "0056BCDCF1F544BD71", 
      "size": 72120 
     }, 
     "s3SchemaVersion": "1.0" 
     }, 
     "userIdentity": { 
     "principalId": "AWS:AROAIUFL6WAMNRLUBLL3K:AWSFirehoseDelivery" 
     } 
    } 
    ] 
} 

cevap

29

var S3. S3 ile özellikle bunu çözmek için VPC Endpoints'u kullanabilirsiniz. VPC'nizin dışında kalan hemen hemen her şey için, VPC'nizdeki bir NAT örneğini veya yönetilen bir NAT ağ geçidini, VBM'nizin dışındaki son noktalara kadar Lambda işlevlerinizden gelen trafiğe yönlendirmeniz gerekir.

Lambda VPC support announcement'u okur ve sonunda "Yapılacak Şeyler" bölümüne özellikle dikkat ederdim.

+0

Teşekkürler Mark. Ama bence Lambda'mın gerçekleştirdiği yolda daha çok sorun vardı. Bu bağlantı, Lambda'nın ne zaman devreye gireceğini ve onu düzeltebildiğimde neler olabileceğini daha iyi anlamamı sağladı. https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/ – blueskin

+1

blueskin, 'nasıl' sabitlendiğini bilmek güzel olurdu .... – Aaron

+1

RDS'm halka açık ve lambda yok vpc'de, hala zaman aşımı. Düşüncesi olan var mı? – johnny

İlgili konular