2017-11-04 76 views
-1

我的設置是:如何配置NAT以便與已具有Internet網關訪問S3的Lambda一起使用?

S3 (website) -> API Gateway -> Lambda -> RDS 
             -> S3 (configuration) 
             -> Shopify 
             -> Transactional Mail 

我有一個Internet網關設置爲允許訪問我的S3的配置,我需要連接一個NAT,讓我做我的電話給了第三方。我試圖只使用NAT(per this question),通過更改我的路由表條目0.0.0.0/0 - > {my NAT},但這只是導致無法訪問我的S3配置存儲區。

任何幫助將不勝感激!

編輯:爲了清楚我已閱讀文檔,我遇到的問題是理解安全組,我的Lambdas和RDS共享以及它們所關聯的子網之間的關係。

當我配置我的lambda成爲安全組的一部分時,我的RDS實例處於,我需要將它與至少2個子網相關聯......如果這些是新的子網,而不是與我的RDS實例相關的子網? AKA做lambda需要與RDS共享一個子網才能訪問它?

+0

FWIW:事實證明,遵循給定的例子只是普通不起作用。我不知道這是否屬於我所在的地區,但是有些人對VPC有更深入的瞭解,並且他們也無法使其正常工作。 –

回答

1

如果lambda函數只需要訪問VPC資源和S3,然後配置最簡單的辦法是將S3 Endpoint添加到您的VPC。如果您的Lambda函數需要訪問VPC資源以及除S3和DynamoDB之外的其他資源(目前僅支持2個VPC端點的服務),則您的Lambda函數必須位於具有NAT網關的專用子網中。

公有子網中的實例可以選擇擁有公共IP地址,但這不是必需的。 VPC中的Lambda函數永遠不會獲得公共IP地址,這就是爲什麼VPC內部的Lambda函數必須位於具有NAT網關的專用子網中才能訪問Internet。

Lambda函數獲取公共IP的唯一時間是當它們完全不在VPC中時。在這種情況下,他們可以訪問VPC中除資源之外的任何內容。


有關「同一安全組」的評論請注意:是相同的安全組中不允許資源相互訪問。 Lambda函數需要位於RDS安全組已授權訪問的安全組中。關於子網,Lambda只需要位於同一個VPC的任何子網中,而不需要與RDS實例位於同一個子網中。

+0

這正是我想弄明白的,謝謝。 –

-1

您需要將Lambda函數分配給具有NAT網關或NAT實例的專用子網。

如果一個子網有一個互聯網網關,那麼該子網稱爲「公共」,子網內的實例可以具有公共IP地址。如果子網具有NAT網關或NAT實例,則稱爲「專用」子網,子網內的實例只能擁有專用IP地址。

如果沒有可用的子網,添加一個到您的VPC,然後添加一個NAT網關,調整路由表中爲子網等

本文將幫助您瞭解如何VPC接入工程Lambda函數。

Configuring a Lambda Function to Access Resources in an Amazon VPC

+0

因此,爲了訪問我的RDS實例,我需要我的lambda在同一個安全組中,但它不需要共享它的子網? –

相關問題