

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

# 使用 MSK 無伺服器叢集
<a name="serverless-getting-started"></a>

本教學課程將說明如何建立 MSK Serverless 叢集、建立可存取叢集的用戶端機器、使用用戶端在叢集上建立主題，以及將資料寫入這些主題的相關範例。此演練不代表您在建立無伺服器叢集時可選擇的所有選項。為求簡化起見，我們在此演練的不同部分中選擇預設選項。這並不表示只有這些選項才能用於設定無伺服器叢集。您也可以使用 AWS CLI 或 Amazon MSK API。如需詳細資訊，請參閱 [Amazon MSK API Reference 2.0](https://docs.aws.amazon.com/MSK/2.0/APIReference/what-is-msk.html)。

**Topics**
+ [建立 MSK Serverless 叢集](create-serverless-cluster.md)
+ [為 MSK Serverless 叢集上的主題建立 IAM 角色](create-iam-role.md)
+ [建立用戶端機器以存取 MSK Serverless 叢集](create-serverless-cluster-client.md)
+ [建立 Apache Kafka 主題](msk-serverless-create-topic.md)
+ [在 MSK Serverless 中產生和使用資料](msk-serverless-produce-consume.md)
+ [刪除您為 MSK Serverless 建立的資源](delete-resources.md)

# 建立 MSK Serverless 叢集
<a name="create-serverless-cluster"></a>

在此步驟中，您會執行兩項任務。首先使用預設設定建立 MSK Serverless 叢集。接著則是收集叢集的相關資訊。這是您在稍後步驟中建立可傳送資料至叢集的用戶端時所需的資訊。

**建立無伺服器叢集**

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/msk/home](https://console.aws.amazon.com/msk/home)：// 開啟 Amazon MSK 主控台。

1. 選擇**建立叢集**。

1. 針對**建立方法**，請確認已選取**快速建立**選項。**快速建立**選項可讓您使用預設設定建立無伺服器叢集。

1. 在**叢集名稱**中，輸入描述性名稱，例如 **msk-serverless-tutorial-cluster**。

1. 針對**一般叢集屬性**，請選擇**無伺服器**作為**叢集類型**。針對剩餘的**一般叢集**屬性，使用預設值。

1. 留意**所有叢集設定**下方的表格。此表格會列出重要設定 (例如網路和可用性) 的預設值，並指出您是否可在建立叢集後變更每個設定值。若要在建立叢集之前變更設定，請選擇**建立方法**下的**自訂建立**選項。
**注意**  
您可以透過 MSK Serverless 叢集，從最多五個不同的 VPC 連線用戶端。若要協助用戶端應用程式在中斷時切換至其他可用區域，您必須在每個 VPC 中至少指定兩個子網路。

1. 選擇 **Create Cluster** (建立叢集)。

**收集叢集的相關資訊**

1. 在**叢集摘要**區段中，選擇**檢視用戶端資訊**。在 Amazon MSK 完成叢集建立作業之前，此按鈕會保持灰色。您可能需要靜待數分鐘，直到按鈕可供點選為止。

1. 複製**端點**標籤下的字串。此為您的引導伺服器字串。

1. 選擇**屬性**索引標籤。

1. 在**網路設定**區段下，複製並儲存子網路和安全群組的 ID，稍後建立用戶端機器時會需要此資訊。

1. 選擇任一子網路。這會開啟 Amazon VPC 主控台。尋找與子網路關聯之 Amazon VPC 的 ID。儲存此 Amazon VPC ID 以供後續使用。

**後續步驟**

[為 MSK Serverless 叢集上的主題建立 IAM 角色](create-iam-role.md)

# 為 MSK Serverless 叢集上的主題建立 IAM 角色
<a name="create-iam-role"></a>

在此步驟中，您會執行兩項任務。第一項任務是建立 IAM 政策，用於授予在叢集上建立主題，並將資料傳送至這些主題的存取權限。第二項任務是建立 IAM 角色，並將此政策與該角色建立關聯。在稍後的步驟中，我們會建立擔任此角色的用戶端機器，使用它在叢集上建立主題，並將資料傳送至該主題。

**建立能夠建立和寫入主題的 IAM 政策**

1. 開啟位於 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 選擇**建立政策**。

1. 選擇 **JSON** 索引標籤，然後使用下列 JSON 取代編輯器視窗中的 JSON。

   在下列範例中，取代下列項目：
   + *region*，其中包含 AWS 區域 您建立叢集的 程式碼。
   + 帳戶 ID 範例，*123456789012*，使用您的 AWS 帳戶 ID。
   + *msk-serverless-tutorial-cluster*/*c07c74ea-5146-4a03-add1-9baa787a5b14-s3* 和 *msk-serverless-tutorial-cluster*，其中包含無伺服器叢集 ID 和主題名稱。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kafka-cluster:Connect",
                   "kafka-cluster:DescribeCluster"
               ],
               "Resource": [
                   "arn:aws:kafka:us-east-1:123456789012:cluster/msk-serverless-tutorial-cluster/c07c74ea-5146-4a03-add1-9baa787a5b14-s3"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kafka-cluster:CreateTopic",
                   "kafka-cluster:WriteData",
                   "kafka-cluster:DescribeTopic"
               ],
               "Resource": [
               "arn:aws:kafka:us-east-1:123456789012:topic/msk-serverless-tutorial-cluster/*"
               ]
           }
       ]
   }
   ```

------

   如需如何撰寫安全政策的說明，請參閱 [IAM 存取控制](iam-access-control.md)。

1. 選擇下**一步：標籤**。

1. 選擇下**一步：檢閱**。

1. 針對政策名稱，請輸入描述性名稱，例如 **msk-serverless-tutorial-policy**。

1. 選擇**建立政策**。

**建立 IAM 角色，並將政策連接至該角色**

1. 在導覽窗格中，選擇**角色**。

1. 選擇建**立角色**。

1. 在**一般使用案例**下，選擇 **EC2**，然後選擇**下一步：許可**。

1. 在搜尋方塊中，輸入您先前為此教學課程建立的政策名稱。然後選取政策左側的核取方塊。

1. 選擇下**一步：標籤**。

1. 選擇下**一步：檢閱**。

1. 針對角色名稱，請輸入描述性名稱，例如 **msk-serverless-tutorial-role**。

1. 選擇建**立角色**。

**後續步驟**

[建立用戶端機器以存取 MSK Serverless 叢集](create-serverless-cluster-client.md)

# 建立用戶端機器以存取 MSK Serverless 叢集
<a name="create-serverless-cluster-client"></a>

在此步驟中，您會執行兩項任務。第一項任務是建立一個 Amazon EC2 執行個體作為 Apache Kafka 用戶端機器。第二項任務是在機器上安裝 Java 和 Apache Kafka 工具。

**建立用戶端機器**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 選擇**啟動執行個體**。

1. 輸入用戶端機器的描述性**名稱**，例如 **msk-serverless-tutorial-client**。

1. 確認已選取 **Amazon Linux 2 AMI (HVM) – Kernel 5.10，SSD 磁碟區類型** 作為 **Amazon Machine Image (AMI) 類型**。

1. 確認選取 **t2.micro** 執行個體類型。

1. 在**金鑰對 (登入)** 下，選擇**建立新金鑰對**。輸入 **MSKServerlessKeyPair** 作為**金鑰對名稱**。選擇**下載金鑰對**。或者，您也可以使用現有的金鑰對。

1. 針對**網路設定**，選擇**編輯**。

1. 在 **VPC** 下，輸入無伺服器叢集的虛擬私有雲端 (VPC) ID。此為以 Amazon VPC 服務為基礎的 VPC，您在建立叢集後會儲存其 ID。

1. 針對**子網路**，選擇您在建立叢集後儲存其 ID 的子網路。

1. 針對**防火牆 (安全群組)**，選取與叢集關聯的安全群組。若該安全群組具有允許流量從安全群組傳輸至自身的傳入規則，此值會運作。使用此規則後，同個安全群組的成員可彼此通訊。如需詳細資訊，請參閱《Amazon VPC 開發人員指南》中的[安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules)。

1. 展開**進階詳細資料**區段，然後選擇您在 [為 MSK Serverless 叢集上的主題建立 IAM 角色](create-iam-role.md) 中建立的 IAM 角色。

1. 選擇**啟動**。

1. 在左側導覽窗格中，選擇**執行個體**。然後在代表新建立 Amazon EC2 執行個體的列中，選擇核取方塊。自此之後，我們會將此執行個體稱為*用戶端機器*。

1. 選擇**連線**，然後遵循指示連線至用戶端機器。

**在用戶端機器上設定 Apache Kafka 用戶端工具**

1. 如要安裝 Java，請在用戶端機器上執行下列命令：

   ```
   sudo yum -y install java-11
   ```

1. 如要取得建立主題與傳送資料所需的 Apache Kafka 工具，請執行下列命令：

   ```
   wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.12-2.8.1.tgz
   ```

   ```
   tar -xzf kafka_2.12-2.8.1.tgz
   ```
**注意**  
擷取 Kafka 封存之後，請確定 `bin`目錄中的指令碼具有適當的執行許可。若要進行這項動作，請執行以下命令。  

   ```
   chmod +x kafka_2.12-2.8.1/bin/*.sh
   ```

1. 前往 `kafka_2.12-2.8.1/libs` 目錄，然後執行下列命令以下載 Amazon MSK IAM JAR 檔案。Amazon MSK IAM JAR 可讓用戶端機器存取叢集。

   ```
   wget https://github.com/aws/aws-msk-iam-auth/releases/download/v2.3.0/aws-msk-iam-auth-2.3.0-all.jar
   ```

   使用此命令，您也可以[下載其他或更新版本](https://github.com/aws/aws-msk-iam-auth/releases)的 Amazon MSK IAM JAR 檔案。

1. 前往 `kafka_2.12-2.8.1/bin` 目錄。複製下列屬性設定，並將其貼入新檔案。將檔案命名為 `client.properties` 並儲存。

   ```
   security.protocol=SASL_SSL
   sasl.mechanism=AWS_MSK_IAM
   sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
   sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
   ```

**後續步驟**

[建立 Apache Kafka 主題](msk-serverless-create-topic.md)

# 建立 Apache Kafka 主題
<a name="msk-serverless-create-topic"></a>

在此步驟中，您可以使用先前建立的用戶端機器，在無伺服器叢集上建立主題。

**Topics**
+ [設定您的環境以建立主題](#msk-serverless-create-topic-prerequisites)
+ [建立主題並寫入資料](#msk-serverless-create-topic-procedure)

## 設定您的環境以建立主題
<a name="msk-serverless-create-topic-prerequisites"></a>
+ 建立主題之前，請確定您已將 AWS MSK IAM JAR 檔案下載至 Kafka 安裝的`libs/`目錄。如果您尚未執行此操作，請在 Kafka 的 `libs/`目錄中執行下列命令。

  ```
  wget https://github.com/aws/aws-msk-iam-auth/releases/download/v2.3.0/aws-msk-iam-auth-2.3.0-all.jar
  ```

  使用 MSK Serverless 叢集進行 IAM 身分驗證時，需要此 JAR 檔案。
+ 執行 Kafka 命令時，您可能需要確保 `classpath`包含 AWS MSK IAM JAR 檔案。若要執行此操作，請執行以下其中一項操作：
  + 將`CLASSPATH`環境變數設定為包含 Kafka 程式庫，如下列範例所示。

    ```
    export CLASSPATH=<path-to-your-kafka-installation>/libs/*:<path-to-your-kafka-installation>/libs/aws-msk-iam-auth-2.3.0-all.jar
    ```
  + 使用具有明確 的完整 Java 命令來執行 Kafka 命令`classpath`，如下列範例所示。

    ```
    java -cp "<path-to-your-kafka-installation>/libs/*:<path-to-your-kafka-installation>/libs/aws-msk-iam-auth-2.3.0-all.jar" org.apache.kafka.tools.TopicCommand --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6
    ```

## 建立主題並寫入資料
<a name="msk-serverless-create-topic-procedure"></a>

1. 在下列 `export` 命令中，使用建立叢集之後儲存的引導伺服器字串取代 *my-endpoint*。接著前往用戶端機器上的 `kafka_2.12-2.8.1/bin` 目錄，執行 `export` 命令。

   ```
   export BS=my-endpoint
   ```

1. 執行下列命令，建立名為 `msk-serverless-tutorial` 的主題。

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6
   ```

**後續步驟**

[在 MSK Serverless 中產生和使用資料](msk-serverless-produce-consume.md)

# 在 MSK Serverless 中產生和使用資料
<a name="msk-serverless-produce-consume"></a>

在此步驟中，您會使用在上一個步驟建立的主題來產生和取用資料。

**產生和取用訊息**

1. 執行下列命令以建立主控台生產者。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list $BS --producer.config client.properties --topic msk-serverless-tutorial
   ```

1. 輸入您想要的任何訊息，然後按 **Enter** 鍵。重複此步驟兩次或三次。每次輸入一行，然後按 **Enter** 鍵，該行會作為獨立訊息傳送至您的叢集。

1. 保持與用戶端機器的連線開啟，然後開啟第二個並在新視窗中與該機器單獨連線。

1. 執行下列命令，使用第二個用戶端機器連線建立主控台取用者。使用建立叢集之後儲存的引導伺服器字串取代 *my-endpoint*。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server my-endpoint --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning
   ```

   當您使用主控台生產者命令時，您會開始看到先前輸入的訊息。

1. 在生產者視窗中輸入更多訊息，並觀看它們出現在取用者視窗中。

如果您在執行這些命令時遇到`classpath`問題，請確定您從正確的目錄執行它們。此外，請確定 AWS MSK IAM JAR 位於 `libs`目錄中。或者，您可以使用具有明確 的完整 Java 命令來執行 Kafka 命令`classpath`，如下列範例所示。

```
java -cp "kafka_2.12-2.8.1/libs/*:kafka_2.12-2.8.1/libs/aws-msk-iam-auth-2.3.0-all.jar" org.apache.kafka.tools.ConsoleProducer —broker-list $BS —producer.config client.properties —topic msk-serverless-tutorial
```

**後續步驟**

[刪除您為 MSK Serverless 建立的資源](delete-resources.md)

# 刪除您為 MSK Serverless 建立的資源
<a name="delete-resources"></a>

在此步驟中，刪除您在本教學課程中建立的資源。

**刪除叢集**

1. 開啟位於 [https://console.aws.amazon.com/msk/home](https://console.aws.amazon.com/msk/home) 的 Amazon MSK 主控台。

1. 在叢集清單中，選擇您要為此教學課程建立的叢集。

1. 針對**動作**，選擇**刪除叢集**。

1. 在欄位中輸入 `delete`，然後選擇**刪除**。

**停止用戶端機器**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在 Amazon EC2 執行個體清單中，選擇您為本教學課程建立的用戶端機器。

1. 依序選擇**執行個體狀態**和**終止執行個體**。

1. 選擇**終止**。

**刪除 IAM 政策和角色**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**。

1. 在搜尋方塊中，輸入您為本教學課程建立的 IAM 角色名稱。

1. 選擇角色。然後選擇**刪除角色**並確認刪除。

1. 在導覽窗格中，選擇**政策**。

1. 在搜尋方塊中，輸入您為本教學課程建立的政策名稱。

1. 選擇政策以開啟其摘要頁面。在政策的**摘要**頁面上，選擇**刪除政策**。

1. 選擇 **刪除**。