

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Lambda 函數、Amazon VPC 和無伺服器架構產生靜態傳出 IP 地址
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott，Amazon Web Services*

## 摘要
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

此模式說明如何使用無伺服器架構，在 Amazon Web Services (AWS) 雲端中產生靜態傳出 IP 地址。如果組織想要使用安全檔案傳輸通訊協定 (SFTP) 將檔案傳送至不同的商業實體，則可以從此方法中受益。這表示商業實體必須能夠存取允許檔案通過其防火牆的 IP 地址。 

模式的方法可協助您建立使用[彈性 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)做為傳出 IP 地址的 AWS Lambda 函數。透過遵循此模式中的步驟，您可以建立 Lambda 函數和虛擬私有雲端 (VPC)，透過具有靜態 IP 地址的網際網路閘道路由傳出流量。若要使用靜態 IP 地址，請將 Lambda 函數連接至 VPC 及其子網路。 

## 先決條件和限制
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶 
+ 建立和部署 Lambda 函數，以及建立 VPC 及其子網路的 AWS Identity and Access Management (IAM) 許可。如需詳細資訊，請參閱 AWS Lambda 文件中的[執行角色和使用者許可](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions)。
+ 如果您打算使用基礎設施做為程式碼 (IaC) 來實作此模式的方法，則需要整合的開發環境 (IDE)，例如 AWS Cloud9。如需詳細資訊，請參閱 [ AWS Cloud9 文件中的什麼是 AWS Cloud9？](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html)。 AWS Cloud9 

## Architecture
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

下圖顯示此模式的無伺服器架構。

![](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


該圖顯示以下工作流程：

1. 傳出流量會在 `NAT gateway 1`中離開`Public subnet 1`。

1. 傳出流量會在 `NAT gateway 2`中離開`Public subnet 2`。

1. Lambda 函數可以在 `Private subnet 1`或 中執行`Private subnet 2`。

1. `Private subnet 1` 和 將流量`Private subnet 2`路由到公有子網路中的 NAT 閘道。

1. NAT 閘道會從公有子網路將傳出流量傳送至網際網路閘道。

1. 傳出資料會從網際網路閘道傳輸到外部伺服器。



**技術堆疊  **
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC)

 

**自動化和擴展**

您可以在不同的可用區域中使用兩個公有和兩個私有子網路，以確保高可用性 (HA)。即使一個可用區域無法使用，模式的解決方案仍會繼續運作。

## 工具
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) – AWS Lambda 是一種運算服務，支援執行程式碼，無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼，可自動從每天數項請求擴展成每秒數千項請求。只需為使用的運算時間支付費用，一旦未執行程式碼，就會停止計費。
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/) – Amazon Virtual Private Cloud (Amazon VPC) 會佈建 AWS 雲端的邏輯隔離區段，您可以在已定義的虛擬網路中啟動 AWS 資源。這個虛擬網路與您在資料中心中操作的傳統網路非常相似，且具備使用 AWS 可擴展基礎設施的優勢。

## 史詩
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### 建立新 VPC
<a name="create-a-new-vpc"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立新 VPC | 登入 AWS 管理主控台，開啟 Amazon VPC 主控台，然後建立名為 `Lambda VPC` 且`10.0.0.0/25`** **具有 IPv4 CIDR 範圍的 VPC。<br />如需建立 VPC 的詳細資訊，請參閱 [Amazon VPC 文件](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc)中的 Amazon VPC 入門。  | AWS 管理員 | 

### 建立兩個公有子網路
<a name="create-two-public-subnets"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立第一個公有子網路。 | 1. 在 Amazon VPC 主控台上，選擇**子網路 **，然後選擇**建立子網路**。 <br />2. 針對**名稱標籤**，輸入 `public-one`。<br />3. 對於 **VPC**，請選擇 `Lambda VPC`。<br />4. 選擇可用區域並進行記錄。 <br />5. 針對 **IPv4 CIDR 區塊**，輸入`10.0.0.0/28`** **，然後選擇**建立子網路**。 | AWS 管理員 | 
| 建立第二個公有子網路。 | 1. 在 Amazon VPC 主控台上，選擇**子網路 **，然後選擇**建立子網路**。 <br />2. 針對**名稱標籤**，輸入 `public-two`。<br />3. 對於 **VPC**，請選擇 `Lambda VPC`。<br />4. 選擇可用區域並進行記錄。：您無法使用包含`public-one`子網路的可用區域。 <br />5. 針對 **IPv4 CIDR 區塊**，輸入`10.0.0.16/28`** **，然後選擇**建立 子網路**。 | AWS 管理員 | 

### 建立兩個私有子網路
<a name="create-two-private-subnets"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立第一個私有子網路。 | 1. 在 Amazon VPC 主控台上，選擇**子網路 **，然後選擇**建立子網路**。 <br />2. 針對**名稱標籤**，輸入 `private-one`。<br />3. 對於 **VPC**，請選擇 `Lambda VPC`。<br />4. 選擇包含您先前建立之`public-one`子網路的可用區域。 <br />5. 針對 **IPv4 CIDR 區塊**，輸入`10.0.0.32/28`** **，然後選擇**建立子網路**。 | AWS 管理員 | 
| 建立第二個私有子網路。 | 1. 在 Amazon VPC 主控台上，選擇**子網路 **，然後選擇**建立子網路**。 <br />2. 針對**名稱標籤**，輸入 `private-two`。<br />3. 對於 **VPC**，請選擇 `Lambda VPC`。<br />4. 選擇包含您先前建立之`public-two`子網路的相同可用區域。 <br />5. 針對 **IPv4 CIDR 區塊**，輸入`10.0.0.64/28`** **，然後選擇**建立子網路**。 | AWS 管理員 | 

### 為您的 NAT 閘道建立兩個彈性 IP 地址
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
|  建立第一個彈性 IP 地址。 | 1. 在 Amazon VPC 主控台上，選擇**彈性 IPs**，然後選擇**配置新地址**。** **<br />2. 選擇** 配置 **，並記錄新建立彈性 IP 地址的**配置 ID **。** **此彈性 IP 地址用於您的第一個 NAT 閘道。  | AWS 管理員 | 
| 建立第二個彈性 IP 地址。 | 1. 在 Amazon VPC 主控台上，選擇**彈性 IPs**，然後選擇**配置新地址**。** **<br />2. 選擇** 配置 **，並記錄第二個彈性 IP 地址的**配置 ID **。此彈性 IP 地址用於您的第二個 NAT 閘道。 | AWS 管理員 | 

### 建立網際網路閘道
<a name="create-an-internet-gateway"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立網際網路閘道 | 1. 在 Amazon VPC 主控台上，選擇**網際網路閘道**，然後選擇**建立網際網路閘道**。<br />2. 輸入 `Lambda internet gateway`做為名稱，然後選擇**建立網際網路閘道**。請務必記錄網際網路閘道 ID。  | AWS 管理員 | 
| 將網際網路閘道連接至 VPC。 | 選取您剛建立的網際網路閘道，然後選擇 **Actions, Attach to VPC (動作、連接到 VPC)**。 | AWS 管理員 | 

### 建立兩個 NAT 閘道
<a name="create-two-nat-gateways"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立第一個 NAT 閘道。 | 1. 在 Amazon VPC 主控台上，選擇 **NAT 閘道 **，然後選擇** 建立 NAT 閘道**。<br />2. 輸入`nat-one`** **做為 NAT 閘道名稱。** **<br />3. 選擇`public-one`** **作為要在其中建立 NAT 閘道的子網路。** **<br />4. 針對**連線類型**，選擇**公**有。<br />5. 針對**彈性 IP 配置 ID**，選擇您先前建立的第一個彈性 IP 地址，並將其與 NAT 閘道建立關聯。<br />6. 選擇**建立 NAT 閘道**。 | AWS 管理員 | 
| 建立第二個 NAT 閘道。 | 1. 在 Amazon VPC 主控台上，選擇 **NAT 閘道 **，然後選擇** 建立 NAT 閘道**。<br />2. 輸入`nat-two`** **做為 NAT 閘道名稱。** **<br />3. 選擇`public-two`** **作為要在其中建立 NAT 閘道的子網路。<br />4. 針對**連線類型**，選擇**公**有。<br />5. 針對**彈性 IP 配置 ID**，選擇您先前建立的第二個 彈性 IP 地址，並將其與 NAT 閘道建立關聯。<br />6. 選擇**建立 NAT 閘道**。 | AWS 管理員 | 

### 為您的公有和私有子網路建立路由表
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立公有-1 子網路的路由表。 | 1. 在 Amazon VPC 主控台上，選擇**路由表**，然後選擇**建立路由表**。<br />2. 輸入`public-one-subnet`** **做為路由表名稱，然後選擇**建立路由表**。<br />3. 選擇`public-one-subnet`路由表，選擇**編輯路由**，然後選擇**新增路由**。<br />4. `0.0.0.0`** **在**目的地**方塊中指定 ，然後在**目標**清單中選擇網際網路閘道 ID。<br />5. 在**子網路關聯**索引標籤上，選擇**編輯子網路關聯**，選擇** **具有 `10.0.0.0/28`** **CIDR 範圍的`public-one`子網路，然後選擇**儲存關聯**。<br />6. 選擇 **Save Changes** (儲存變更)。 | AWS 管理員 | 
| 建立公有-二子網路的路由表。 | 1. 在 Amazon VPC 主控台上，選擇**路由表**，然後選擇**建立路由表**。<br />2. 輸入`public-two-subnet`** **做為路由表名稱，然後選擇**建立路由表**。<br />3. 選擇`public-two-subnet`** **路由表，選擇**編輯路由**，然後選擇**新增路由**。<br />4. `0.0.0.0`** **在**目的地**方塊中指定 ，然後在**目標**清單中選擇網際網路閘道 ID。<br />5. 在**子網路關聯**索引標籤上，選擇**編輯子網路關聯**，選擇具有 `10.0.0.16/28`** **CIDR 範圍的`public-two`** **子網路，然後選擇**儲存關聯**。<br />6. 選擇 **Save Changes** (儲存變更)。 | AWS 管理員 | 
| 建立私有子網路的路由表。 | 1. 在 Amazon VPC 主控台上，選擇**路由表**，然後選擇**建立路由表**。<br />2. 輸入`private-one-subnet`** **做為路由表名稱，然後選擇**建立路由表**。<br />3. 選擇`private-one-subnet`** **路由表，選擇**編輯路由**，然後選擇**新增路由**。<br />4. `0.0.0.0`** **在**目的地**方塊中指定 ，然後在**目標**清單中選擇`public-one`子網路中的 NAT 閘道。<br />5. 在**子網路關聯**索引標籤上，選擇**編輯子網路關聯**，選擇具有 `10.0.0.32/28`** **CIDR 範圍的`private-one`子網路，然後選擇**儲存關聯**。<br />6. 選擇 **Save Changes** (儲存變更)。 | AWS 管理員 | 
| 建立私有-兩個子網路的路由表。 | 1. 在 Amazon VPC 主控台上，選擇**路由表**，然後選擇**建立路由表**。<br />2. 輸入`private-two-subnet`** **做為路由表名稱，然後選擇**建立路由表**。<br />3. 選擇`private-two-subnet`** **路由表，選擇**編輯路由**，然後選擇**新增路由**。<br />4. `0.0.0.0`** **在**目的地**方塊中指定 ，然後在**目標**清單中選擇`public-two`子網路中的 NAT 閘道。<br />5. 在**子網路關聯**索引標籤上，選擇**編輯子網路關聯**，選擇具有 `10.0.0.64/28` CIDR 範圍的`private-two`** **子網路，然後選擇**儲存關聯**。<br />6. 選擇 **Save Changes** (儲存變更)。 | AWS 管理員 | 

### 建立 Lambda 函數，將其新增至 VPC，然後測試解決方案
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立新 Lambda 函數。 | 1. 開啟 AWS Lambda 主控台，然後選擇**建立函數**。** **<br />2. 在**基本資訊**下，在**函數名稱**`Lambda test`下輸入 ，然後在**執行時間**下選擇您選擇的語言。**  **<br />3. 選擇**建立函數**。 | AWS 管理員 | 
| 將 Lambda 函數新增至 VPC。 | 1. 在 AWS Lambda 主控台上，選擇**函數，**然後選擇您先前建立的函數。 <br />2. 選擇 **Configuration (組態)**，然後選擇 **VPC**。<br />3. 選擇**編輯 **，然後選擇`Lambda VPC`** **和兩個私有子網路。<br />4. 選擇**預設安全群組 **進行測試，然後選擇**儲存**。 | AWS 管理員 | 
| 編寫程式碼以呼叫外部服務。 | 1. 在您選擇的程式設計語言中，撰寫程式碼來呼叫傳回 IP 地址的外部服務。<br />2. 確認傳回的 IP 地址符合您其中一個彈性 IP 地址。 | AWS 管理員 | 

## 相關資源
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [設定 Lambda 函式以存取 VPC 中的資源](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)