Amazon-Web-Services

從 AWS Lambda 連接到 SMTP 伺服器

  • February 24, 2019

在我的 AWS Lambda 函式上,每當我嘗試使用nodemailer連接到我的 Amazon SES SMTP 伺服器(埠 465)時,我的 javascript 程式碼都會超時。但是,如果我在本地執行腳本,它工作正常,這讓我相信這要麼是 lambda 撥出到 SMTP 伺服器的問題,要麼是 SMTP 伺服器阻止 lambda 連接——我懷疑前者是問題.

我在 Cloudfront 發行版後面使用防火牆,但我認為這不適用於傳入的 SES 連接或傳出的 lambda 函式。在 VPC 中,我可以看到實例附加了一個 Internet 網關。安全組的傳出連接允許所有協議訪問 0.0.0.0/0,但是,ACL 看起來很奇怪,因為它既允許也拒絕所有入站/出站連接:

在此處輸入圖像描述

在此處輸入圖像描述

在 VPC 中,我看到列出了 6 個子網,在這些子網中,我不太清楚這些子網到底在做什麼。

在此處輸入圖像描述

在日誌中,我只看到Task timed out after 6.01 seconds

知道如何獲得有關掛斷位置的更多資訊嗎?

這是意料之中的。

VPC 中的 Lambda 函式無法使用 Internet 網關與 Internet(包括標準服務 API)進行通信,因為 Internet 網關要求內部設備具有關聯的公共 IP 地址。位於公共子網(預設路由是 Internet 網關)是不夠的。

重要的

如果您的 Lambda 函式需要 Internet 訪問,請勿將其附加到公有子網或無法訪問 Internet 的私有子網。相反,僅將其附加到通過 NAT 實例或 Amazon VPC NAT 網關訪問 Internet 的私有子網。

https://docs.aws.amazon.com/lambda/latest/dg/vpc.html

除非相關服務支持VPC 端點(SES 目前不支持),否則需要NAT 設備(通常是NAT 網關)。

將 NAT 網關放在公共子網上(以便它可以使用 Internet 網關訪問 Internet),然後創建一個或多個私有子網,將它們的預設路由指向 NAT 網關。

NAT Gateway 是 NAT Instance 的較新替代方案,NAT Instance是專用於相同目的的 EC2 實例。這是以前提供所需 NAT 服務的唯一方法。與由 AWS 管理且具有容錯能力的 NAT 網關不同,NAT 實例代表潛在的單點故障(但相關成本較低)。

或者,如果 Lambda 函式不需要其他 VPC 資源,您可以將其移出 VPC。

網路 ACL 全部允許和全部拒絕都是正常的,因為規則是按順序處理的。最後一條規則是刪除 Allow 規則時將應用的預設行為。這主要是一個視覺提示,提醒您為什麼刪除其他規則後 NACL 不起作用。否則使用者可能會認為,由於他們沒有明確否認某事,因此應該允許。

每個網路 ACL 還包括一個規則編號為星號的規則。此規則確保如果一個數據包不匹配任何其他編號規則,它就會被拒絕。您不能修改或刪除此規則。

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html

引用自:https://serverfault.com/questions/955461