

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

# 教學課程：從 Amazon Virtual Private Cloud 傳送訊息至 Amazon SQS 佇列 Amazon Virtual Private Cloud
從 VPC 傳送訊息

本教學課程說明如何透過安全的私有網路傳送訊息至 Amazon SQS 佇列。網路包括：
+ 包含 Amazon EC2 執行個體的 VPC。
+ 介面 VPC 端點，允許 Amazon EC2 執行個體連線至 Amazon SQS，而無需使用公有網際網路。

即使在全私有網路中，您也可以連線至 Amazon EC2 執行個體，並將訊息傳送至 Amazon SQS 佇列。如需詳細資訊，請參閱[適用於 Amazon SQS 的 Amazon Virtual Private Cloud 端點](sqs-internetwork-traffic-privacy.md#sqs-vpc-endpoints)。

**重要**  
Amazon Virtual Private Cloud 只能搭配 HTTPS Amazon SQS 端點使用。
當您設定 Amazon SQS 從 Amazon VPC 傳送訊息時，您必須啟用私有 DNS，並指定格式為 `sqs.us-east-2.amazonaws.com`或雙堆疊端點`sqs.us-east-2.api.aws`的端點。
Amazon SQS 也使用端點服務透過 PrivateLink 支援 FIPS `com.amazonaws.region.sqs-fips`端點。您可以連線到格式為 的 FIPS 端點`sqs-fips.region.amazonaws.com`。
在 Amazon Virtual Private Cloud 中使用雙堆疊端點時，將使用 IPv4 和 IPv6 傳送請求。
私有 DNS 不支援 `queue.amazonaws.com` 或 `us-east-2.queue.amazonaws.com` 之類的延遲端點

## 步驟 1：建立 Amazon EC2 金鑰對


*金鑰對*可讓您連接至 Amazon EC2 執行個體。它包含加密您登入資訊的公有金鑰，以及解密的私有金鑰。

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/ec2/)。

1. 在導覽功能表的 **Network & Security (網路與安全性)** 中，選擇 **Key Pairs (金鑰對)**。

1. 選擇 **Create Key Pair** (建立金鑰對)。

1. 在 **Create Key Pair (建立金鑰對)** 對話方塊中，在 **Key pair name (金鑰對名稱)** 輸入 `SQS-VPCE-Tutorial-Key-Pair`，然後選擇 **Create (建立)**。

1. 您的瀏覽器會自動下載私有金鑰檔案 `SQS-VPCE-Tutorial-Key-Pair.pem`。
**重要**  
將此檔案存放在安全的地方。EC2 不會為相同的金鑰對產生兩次 `.pem` 檔案。​

1. 若要允許 SSH 用戶端連接至 EC2 執行個體，請設定私有金鑰檔的許可，讓只有您的使用者才能夠擁有其讀取許可，例如：

   ```
   chmod 400 SQS-VPCE-Tutorial-Key-Pair.pem
   ```

## 步驟 2：建立 AWS 資源


若要設定必要的基礎設施，您必須使用 an CloudFormation *template*，這是建立由 AWS 資源組成的*堆疊*的藍圖，例如 Amazon EC2 執行個體和 Amazon SQS 佇列。

此教學的堆疊包含下列資源：
+ 一個 VPC 和關聯的網路資源，包括子網路、安全群組、網際網路閘道和路由表。
+ 在 VPC 子網路中啟動的 Amazon EC2 執行個體
+ Amazon SQS 佇列

 

1. [https://github.com/aws-samples/amazon-sqs-samples/blob/master/templates/SQS-VPCE-Tutorial-CloudFormation.yaml](https://github.com/aws-samples/amazon-sqs-samples/blob/master/templates/SQS-VPCE-Tutorial-CloudFormation.yaml) 從 GitHub 下載名為 的 CloudFormation 範本。

1. 登入 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)。

1. 選擇 **Create Stack** (建立堆疊)。

1. 在 **Select Template (選擇範本)** 頁面中，選擇 **Upload a template Amazon S3 (將範本上傳至 Amazon S3)**、選擇 `SQS-VPCE-SQS-Tutorial-CloudFormation.yaml` 檔案，然後選擇 **Next (下一步)**。

1. 在 **Specify Details** (指定詳細資訊) 頁面上，執行下列作業：

   1. 針對**堆疊名稱** 輸入 `SQS-VPCE-Tutorial-Stack`。

   1. 對於 **KeyName (KeyName)**，選擇 **SQS-VPCE-Tutorial-Key-Pair (SQS-VPCE-Tutorial-Key-Pair)**。

   1. 選擇**下一步**。

1. 在**選項**頁面上，選擇**下一步**。

1. 在**檢閱**頁面**的功能**區段中，選擇**我確認 AWS CloudFormation 可能會使用自訂名稱建立 IAM 資源**，然後選擇**建立**。

CloudFormation 開始建立堆疊，並顯示 **CREATE\$1IN\$1PROGRESS** 狀態。程序完成後， CloudFormation 會顯示 **CREATE\$1COMPLETE** 狀態。

## 步驟 3：確認 EC2 執行個體不是供公開存取


您的 CloudFormation 範本會在 VPC `SQS-VPCE-Tutorial-EC2-Instance` 中啟動名為 的 EC2 執行個體。此 EC2 執行個體不允許輸出流量，且無法將訊息傳送至 Amazon SQS。若要驗證是否如此，您必須連接至此執行個體、嘗試連接至公有端點，接著嘗試向 Amazon SQS 傳送訊息。

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/ec2/)。

1. 在導覽功能表的 **Instances (執行個體)** 下，選擇 **Instances (執行個體)**。

1. 選取 **SQS-VPCE-Tutorial-EC2Instance (SQS-VPCE-Tutorial-EC2Instance)**。

1. 在**公有 DNS** 下複製主機名稱，例如 **ec2-203-0-113-0.us-west-2.compute.amazonaws.com**。

1. 從包含您先前建立之金鑰對的 [ 目錄中](#create-ec2-key-pair)，使用以下命令連接至執行個體，例如：​

   ```
   ssh -i SQS-VPCE-Tutorial-Key-Pair.pem ec2-user@ec2-203-0-113-0.us-east-2.compute.amazonaws.com
   ```

1. 嘗試連接到任何公有端點，例如：

   ```
   ping amazon.com
   ```

   連接嘗試如預期失敗。

1. 請登入 [Amazon SQS 主控台](https://console.aws.amazon.com/sqs/)。

1. 從佇列清單中，選取 CloudFormation 範本建立的佇列，例如 **VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK**。

1. 在**詳細資訊**表格上，複製 URL，例如 **https://sqs.us-east-2.amazonaws.com/123456789012/**。

1. 使用以下命令，從 EC2 執行個體，嘗試將訊息發佈至佇列，例如：

   ```
   aws sqs send-message --region us-east-2 --endpoint-url https://sqs.us-east-2.amazonaws.com/ --queue-url https://sqs.us-east-2.amazonaws.com/123456789012/ --message-body "Hello from Amazon SQS."
   ```

   傳送中嘗試如預期失敗。
**重要**  
當您稍後為 Amazon SQS 建立 VPC 端點時，傳送中嘗試將會成功。

## 步驟 4：建立 Amazon SQS 的 Amazon VPC 端點


若要將您的 VPC 連接到 Amazon SQS，您必須定義介面 VPC 端點。在您新增端點後，您可以在 VPC 中使用來自 EC2 執行個體的 Amazon SQS API。這可讓您將訊息傳送到 AWS 網路中的佇列，而無需跨公有網際網路。

**注意**  
EC2 執行個體仍然無法存取網際網路上的 AWS 其他服務和端點。

1. 請登入 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc/)。

1. 在導覽功能表中，選擇 **Endpoints (端點)**。

1. 選擇**建立端點**。

1. 在**建立端點**頁面，針對**服務名稱**，選擇 Amazon SQS 的服務名稱。
**注意**  
服務名稱會根據目前的 AWS 區域而有所不同。例如，如果您位於美國東部 （俄亥俄），則服務名稱為 **com.amazonaws.*us-east-2*.sqs。**

1. 針對 **VPC**，選擇 **SQS-VPCE-Tutorial-VPC**。​

1. 針對 **Subnets (子網路)**，選擇其 **Subnet ID (子網路 ID)** 包含 **SQS-VPCE-Tutorial-Subnet**。

1. 針對 **Security group (安全群組)**，選擇 **Select security groups (選取安全群組)**，然後選擇其 **Group Name (群組名稱)** 中包含 **SQS VPCE Tutorial Security Group** 的安全群組。

1. 選擇**建立端點**。

   界面 VPC 端點已建立，且其 ID 已顯示，例如，**vpce-0ab1cdef2ghi3j456k**。​

1. 選擇**關閉**。

   Amazon VPC 主控台開啟 **Endpoints** (端點) 頁面。

Amazon VPC 會開始建立端點並顯示**等待中**狀態。程序完成後，Amazon VPC 會顯示**可用**狀態。

## 步驟 5：傳送訊息到您的 Amazon SQS 佇列


VPC 現在已包含 Amazon SQS 的端點，​您就可以連接至 EC2 執行個體並將訊息傳送至佇列。

1. 重新連接至 EC2 執行個體，例如：

   ```
   ssh -i SQS-VPCE-Tutorial-Key-Pair.pem ec2-user@ec2-203-0-113-0.us-east-2.compute.amazonaws.com
   ```

1. 使用以下命令，嘗試將訊息發佈至佇列，例如：

   ```
   aws sqs send-message --region us-east-2 --endpoint-url https://sqs.us-east-2.amazonaws.com/ --queue-url https://sqs.us-east-2.amazonaws.com/123456789012/ --message-body "Hello from Amazon SQS."
   ```

   傳送中嘗試會成功，且會顯示訊息本文的 MD5 摘要和訊息 ID，例如：

   ```
   {
   	"MD5OfMessageBody": "a1bcd2ef3g45hi678j90klmn12p34qr5",
   	"MessageId": "12345a67-8901-2345-bc67-d890123e45fg"
   }
   ```

如需有關從 CloudFormation 範本建立的佇列接收和刪除訊息的資訊 （例如，**VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK**)，請參閱 [在 Amazon SQS 中接收和刪除訊息](step-receive-delete-message.md)。

如需有關刪除資源的資訊，請參閱下列各項：
+ 《*Amazon* [VPC 使用者指南》中的刪除 VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/delete-vpc-endpoint.html) 
+ [刪除 Amazon SQS 佇列](step-delete-queue.md)
+ 《*Amazon EC2 使用者指南*》中的[終止您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html) 
+ 《Amazon [VPC 使用者指南》中的刪除您的](https://docs.aws.amazon.com/vpc/latest/userguide/delete-vpc.html) VPC **
+ 《 *AWS CloudFormation 使用者指南*》中的[刪除 CloudFormation 主控台上的堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) 
+ 《*Amazon EC2 使用者指南*》中的[刪除您的金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#delete-key-pair) 