1

我試圖使用無服務器框架(v 0.5.6)從Lambda函數訪問AWS Elasticache羣集,而不會丟失對Dynamodb的訪問權限。我試過用這個Gist沒有運氣。在Lambda函數內部,我要做的第一件事就是連接到Redis實例,但我不斷收到超時,我已經重複檢查了CloudFormation輸出變量及其在函數內的可見性以及VPC的Lambda角色/策略,但仍然沒有任何內容...我沒有沒有找到任何有關如何使用CloudFormation和無服務器創建VPC和安全組的指南,以便按建議的here創建公共和私有子網,NAT和Internet網關。誰能幫忙?使用無服務器框架將Lambda連接到Elasticache

回答

2

您必須將Lambda函數置於ElastiCache羣集所在的VPC中。當然,一旦您這樣做了,Lambda函數只能訪問VPC內部存在的資源,因此它將不再具有對DynamoDB。解決方案是將一個NAT網關添加到VPC,這將允許Lambda函數訪問VPC外部的資源。

我認爲設置VPC和NAT網關會落在無服務器框架之外,但我不是該框架的專家。我建議您考慮通過AWS控制檯手動配置,或者通過CloudFormation等方式進行配置,然後在無服務器框架配置中指定它需要使用的VPC。

+0

感謝您的回覆,我已經知道如何手動做,但我發現無主服務器的Gist並且它似乎是一件好事,我希望使用無服務器框架和雲形成工作。 –

1

雖然它沒有適當的記錄,實際上你可以直接在無服務器的配置文件來配置VPC(見link

版本0.5

# s-function.json 

{ 
"name": "hello", 
"runtime": "nodejs4.3", 
"handler": "handler.hello」, 
"endpoints": [], 
"events": [], 
"vpc": { 
    "securityGroupIds": ["sg-123456"], 
    "subnetIds": [ 
     "subnet-abc1", 
     "subnet-abc2", 
     "subnet-abc3", 
    ] 
    } 
} 

1.0版

# serverless.yaml 

service: aws-hello 
provider: aws 
    runtime: nodejs4.3 
    vpc: 
    securityGroupIds: 
     — "sg-123456" 
    subnetIds: 
     — "subnet-abc1" 
     — "subnet-abc1" 
     — "subnet-abc1" 
functions: 
    foo:       # inherits the VPC config 
    handler: src/handler.foo 
    bar:       # overwrites the VPC config 
    handler: src/handler.bar 
    vpc: 
     securityGroupIds: 
     — "sg-999999" 
     subnetIds: 
     — "subnet-zzz9"