

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

# 將訊息佇列從 Microsoft Azure Service Bus 遷移至 Amazon SQS
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs"></a>

*Nisha Gambhir，Amazon Web Services*

## 總結
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-summary"></a>

此模式說明如何將 .NET Framework 或 .NET Core Web 或主控台應用程式從使用 Microsoft Azure Service 匯流排佇列傳訊平台遷移至 Amazon Simple Queue Service (Amazon SQS)。

應用程式使用簡訊服務將資料傳送至其他應用程式，以及從其他應用程式接收資料。這些服務有助於在雲端中建置解耦、高度可擴展的微服務、分散式系統和無伺服器應用程式。

Azure 服務匯流排佇列是更廣泛的 Azure 訊息基礎設施的一部分，支援佇列和發佈/訂閱訊息。 

Amazon SQS 是一種全受管訊息佇列服務，可讓您解耦和擴展微服務、分散式系統和無伺服器應用程式。Amazon SQS 消除了與管理和操作訊息導向中介軟體相關的複雜性和額外負荷，並使開發人員能夠專注於區分工作。使用 Amazon SQS，您可以在任何磁碟區中傳送、存放和接收軟體元件之間的訊息，而不會遺失訊息或需要其他 服務。

## 先決條件和限制
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-prerequisites-and-limitations"></a>

**先決條件**
+ 作用中的 AWS 帳戶 
+ 使用 Azure Service Bus 佇列的 .NET Framework 或 .NET Core Web 或主控台應用程式 （附加範例程式碼）

**產品版本**
+ .NET Framework 3.5 或更新版本，或 .NET Core 1.0.1、2.0.0 或更新版本

## Architecture
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-architecture"></a>

**來源技術堆疊**
+ 使用 Azure 服務匯流排佇列傳送訊息的 .NET （核心或架構） Web 或主控台應用程式

 

**目標技術堆疊**
+ Amazon SQS

## 工具
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-tools"></a>

**工具**
+ Microsoft Visual Studio

**Code**

若要為 Amazon SQS 建立 AWS Identity and Access Management (IAM) 政策：

1. 登入 AWS 管理主控台，然後前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

2. 在左邊的導覽窗格中，選擇 **Policies** (政策)，然後選擇 **Create policy** (建立政策)。

3. 選擇 **JSON** 索引標籤，然後貼上下列程式碼：

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
            "sqs:DeleteMessage",
            "sqs:GetQueueUrl",
            "sqs:ChangeMessageVisibility",
            "sqs:SendMessageBatch",
            "sqs:ReceiveMessage",
            "sqs:SendMessage",
            "sqs:GetQueueAttributes",
            "sqs:ListQueueTags",
            "sqs:ListDeadLetterSourceQueues",
            "sqs:DeleteMessageBatch",
            "sqs:PurgeQueue",
            "sqs:DeleteQueue",
            "sqs:CreateQueue",
            "sqs:ChangeMessageVisibilityBatch",
            "sqs:SetQueueAttributes"
         ],
         "Resource": "arn:aws:sqs:*:<AccountId>:*"
      },
      {
         "Sid": "VisualEditor1",
         "Effect": "Allow",
         "Action": "sqs:ListQueues",
         "Resource": "*"
      }
   ]
}
```

4. 選擇**檢閱政策**，輸入名稱，然後選擇**建立政策**。

5. 將新建立的政策連接到現有的 IAM 角色或建立新的角色。

## 史詩
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-epics"></a>

### 在 AWS 中設定 Amazon SQS
<a name="set-up-amazon-sqs-in-aws"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 為 Amazon SQS 建立 IAM 政策。 | 建立提供 Amazon SQS 存取權的 IAM 政策。如需範例政策，請參閱程式碼一節。 | 系統工程師 | 
| 建立 AWS 設定檔。 | 透過執行 AWS Tools for PowerShell 命令 Set-AWSCredential 建立新的設定檔。此命令會將您的存取金鑰和私密金鑰存放在您指定的設定檔名稱下的預設登入資料檔案中。連結您先前使用此帳戶建立的 Amazon SQS 政策。保留 AWS 存取金鑰 ID 和私密存取金鑰。這些是後續步驟的必要項目。 | 系統工程師 | 
| 建立 SQS 佇列。 | 您可以建立標準佇列或先進先出 (FIFO) 佇列。如需說明，請參閱參考區段中的連結。 | 系統工程師 | 

### 修改您的 .NET 應用程式程式碼
<a name="revise-your-net-application-code"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 安裝 AWS Toolkit for Visual Studio。 | 此工具組是 Microsoft Visual Studio 的延伸，可讓您更輕鬆地在 AWS 中建置和部署 .NET 應用程式。如需安裝和使用說明，請參閱參考章節中的連結。 | 應用程式開發人員 | 
| 安裝 AWSSDK.SQS NuGet 套件。 | 您可以在 Visual Studio AWSSDK 中選擇「管理 NuGet 套件」，或執行命令「Install-Package AWSSDK.SQS」來安裝 AWSSDK.SQS。 | 應用程式開發人員 | 
| 在 .NET 應用程式中建立 AWSCredentials 物件。 | 附件中的範例應用程式示範如何建立從 AWSCredentials 繼承的 BasicAWSCredentials 物件。您可以使用舊版的存取金鑰 ID 和私密存取金鑰，或讓物件從 .aws 資料夾挑選這些金鑰，做為執行時間使用者設定檔的一部分。 | 應用程式開發人員 | 
| 建立 SQS 用戶端物件。 | 為 .NET Framework 建立 SQS 用戶端物件 (AmazonSQSClient)。這是 Amazon.SQS 命名空間的一部分。此物件是必要物件，而非屬於 Microsoft.Azure.ServiceBus 命名空間的 IQueueClient。 | 應用程式開發人員 | 
| 呼叫 SendMessageAsync 方法，將訊息傳送至 SQS 佇列。 | 變更將訊息傳送至佇列的程式碼，以使用 amazonSqsClient.SendMessageAsync 方法。如需詳細資訊，請參閱連接的程式碼範例。 | 應用程式開發人員 | 
| 呼叫 ReceiveMessageAsync 方法來接收來自 SQS 佇列的訊息。 | 變更接收訊息的程式碼，以使用 amazonSqsClient.ReceiveMessageAsync 方法。如需詳細資訊，請參閱連接的程式碼範例。 | 應用程式開發人員 | 
| 呼叫 DeleteMessageAsync 方法，從 SQS 佇列刪除訊息。 | 若要刪除訊息，請將 queueClient.CompleteAsync 方法的程式碼變更為 amazonSqsClient.DeleteMessageAsync 方法。如需詳細資訊，請參閱連接的程式碼範例。 | 應用程式開發人員 | 

## 相關資源
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-related-resources"></a>
+ [適用於 .NET 開發人員的 AWS 開發套件](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html)
+ [使用 Amazon SQS 傳送訊息](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sqs-apis-intro.html)
+ [使用適用於 .NET 的 AWS 開發套件建立和使用 Amazon SQS 佇列](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/how-to-sqs.html)
+ [傳送 Amazon SQS 訊息](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/SendMessage.html)
+ [從 Amazon SQS 佇列接收訊息](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/ReceiveMessage.html)
+ [從 Amazon SQS 佇列刪除訊息](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/DeleteMessage.html)
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)

## 其他資訊
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-additional-information"></a>

此模式包含兩個範例應用程式 （請參閱附件區段）：
+ **AzureSbTestApp** 包含使用 Azure 服務匯流排佇列的程式碼。
+ **AmazonSqsTestApp** 使用 Amazon SQS。這是使用 .NET Core 2.2 的主控台應用程式，其中包含傳送和接收訊息的範例。

備註：
+ queueClient 是 IQueueClient 的物件，屬於 Microsoft.Azure.ServiceBus 命名空間 （包含在 Microsoft.Azure.ServiceBus NuGet 套件中）。
+ amazonSqsClient 是 AmazonSQSClient 的物件，屬於 Amazon.SQS 命名空間 （包含在 AWSSDK.SQS NuGet 套件中）。
+ 根據程式碼的執行位置，假設其是否在 EC2 上執行，角色需要有寫入 SQS 佇列的許可。

## 附件
<a name="attachments-25334709-7000-4f60-87ed-ea41acb41a99"></a>

若要存取與本文件相關聯的其他內容，請解壓縮下列檔案： [attachment.zip](samples/p-attach/25334709-7000-4f60-87ed-ea41acb41a99/attachments/attachment.zip)