

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

# 教學課程：執行 AWS IoT Device Client 教學課程後清除
<a name="iot-dc-cleanup"></a>

本教學課程中的程序會在完成此學習路徑中的教學課程時，逐步引導您移除所建立的檔案和資源。

**Topics**
+ [步驟 1：使用 裝置用戶端建置示範後清除 AWS IoT 裝置](#iot-dc-cleanup-devices)
+ [步驟 2：使用 AWS IoT 裝置用戶端建置示範 AWS 帳戶 後清除您的](#iot-dc-cleanup-cloud)

## 步驟 1：使用 裝置用戶端建置示範後清除 AWS IoT 裝置
<a name="iot-dc-cleanup-devices"></a>

本教學課程說明在此學習路徑中建置示範後，如何清除 microSD 卡的兩個選項。選擇提供所需安全等級的選項。

請注意，清除裝置的 microSD 卡不會移除您建立的任何 AWS IoT 資源。若要在清理裝置的 microSD 卡之後清除 AWS IoT 資源，您應該檢閱 上的教學課程[步驟 2：使用 AWS IoT 裝置用戶端建置示範 AWS 帳戶 後清除您的](#iot-dc-cleanup-cloud)。

### 選項 1：透過重新寫入 microSD 記憶卡進行清除
<a name="iot-dc-cleanup-devices-flash"></a>

在完成此學習路徑中的教學課程後，清除 microSD 卡最簡單且最徹底的方法是，使用您在第一次準備裝置時所建立的儲存映像檔案覆寫 microSD 卡。

此程序會使用本機主機電腦，將儲存的 microSD 卡映像寫入 microSD 卡。

**注意**  
如果裝置未針對其作業系統使用卸除式儲存媒體，請參閱該裝置的程序。

**若要將新映像寫入 microSD 卡**

1. 在本機主機電腦上，找出要寫入至 microSD 卡的儲存 microSD 卡映像。

1. 請將 microSD 卡插入主機電腦。

1. 使用 SD 卡映像工具，將選取的影像檔案寫入至 microSD 卡。

1. 寫入 Raspberry Pi 作業系統映像至 microSD 卡後，請退出 microSD 卡並安全地將其從本機主機電腦中移除。

您的 microSD 卡已可供使用。

### 選項 2：透過刪除使用者目錄進行清除
<a name="iot-dc-cleanup-devices-dirs"></a>

若要在完成教學課程後清理 microSD 卡而不重寫 microSD 卡映像，您可以個別刪除使用者目錄。這並不像從儲存映像重寫 microSD 卡那麼徹底，因為此操作不會移除任何可能已安裝的系統檔案。

如果移除使用者目錄足以滿足需求，您可以遵循此程序。

**從裝置刪除此學習路徑的使用者目錄**

1. 在連接至裝置的終端機視窗中，執行這些命令來刪除在此學習路徑中建立的使用者目錄、子目錄及其所有檔案。
**注意**  
在刪除這些目錄和檔案之後，您必須再次完成教學課程，才能執行示範。

   ```
   rm -Rf ~/dc-configs
   rm -Rf ~/policies
   rm -Rf ~/messages
   rm -Rf ~/certs
   rm -Rf ~/.aws-iot-device-client
   ```

1. 在連接至裝置的終端機視窗中，執行這些命令來刪除應用程式來源目錄和檔案。
**注意**  
這些命令不會解除安裝任何程式。它們只會刪除用於建置和安裝它們的來源檔案。刪除這些檔案後， AWS CLI 和 AWS IoT 裝置用戶端可能無法運作。

   ```
   rm -Rf ~/aws-cli
   rm -Rf ~/aws
   rm -Rf ~/aws-iot-device-client
   ```

## 步驟 2：使用 AWS IoT 裝置用戶端建置示範 AWS 帳戶 後清除您的
<a name="iot-dc-cleanup-cloud"></a>

這些程序可協助您識別和移除您在完成此學習路徑中的教學課程時建立 AWS 的資源。

### 清除 AWS IoT 資源
<a name="iot-dc-cleanup-cloud-iot"></a>

此程序可協助您識別和移除您在完成此學習路徑中的教學課程時建立 AWS IoT 的資源。


**AWS IoT 在此學習路徑中建立的資源**  

| 教學課程 | 物件資源 | 政策資源 | 
| --- | --- | --- | 
|  [教學課程：安裝和設定 AWS IoT 裝置用戶端](iot-dc-install-dc.md)  |  **DevCliTestThing**  | DevCliTestThingPolicy | 
|  [教學課程：示範與 AWS IoT 裝置用戶端的 MQTT 訊息通訊](iot-dc-testconn.md)  |  **PubSubTestThing**  | PubSubTestThingPolicy | 
|  [教學課程：使用 AWS IoT 裝置用戶端示範遠端動作 （任務）](iot-dc-runjobs.md)  | 使用者定義 (可能不止一個) |  *使用者定義* (可能不止一個)  | 

**若要刪除 AWS IoT 資源，請遵循您建立的每個物件資源的此程序**

1. 使用要刪除的物件資源名稱來取代 `thing_name`，然後執行此命令從本機主機電腦列出連接至物件資源的憑證。

   ```
   aws iot list-thing-principals --thing-name thing_name
   ```

   此命令會傳回像這樣的回應，其中會列出連接至 `thing_name` 的憑證。在大多數情況下，清單中只會有一個憑證。

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:cert/23853eea3cf0edc7f8a69c74abeafa27b2b52823cab5b3e156295e94b26ae8ac"
       ]
   }
   ```

1. 針對上一個命令列出的每個憑證：

   1. 使用上一個命令的憑證 ID 來取代 `certificate_ID`。憑證 ID 是上一個命令傳回的 ARN 中 `cert/` 後面的英數字元。然後執行此命令來停用憑證。

      ```
      aws iot update-certificate --new-status INACTIVE --certificate-id certificate_ID
      ```

      如果成功，此命令不會傳回任何內容。

   1. 使用之前傳回的憑證清單中的憑證 ARN 來取代 `certificate_ARN`，然後執行此命令來列出連接至此憑證的政策。

      ```
      aws iot list-attached-policies --target certificate_ARN
      ```

      此命令會傳回像這樣的回應，其中會列出連接至憑證的政策。在大多數情況下，清單中只會有一個政策。

      ```
      {
          "policies": [
              {
                  "policyName": "DevCliTestThingPolicy",
                  "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy"
              }
          ]
      }
      ```

   1. 每個連接至憑證的政策：

      1. 使用上一個命令的 `policyName` 值來取代 `policy_name`，使用憑證的 ARN 來取代 `certificate_ARN`，然後執行此命令從憑證分離政策。

         ```
         aws iot detach-policy --policy-name policy_name --target certificate_ARN
         ```

         如果成功，此命令不會傳回任何內容。

      1. 使用 `policyName` 值來取代 `policy_name`，然後執行此命令，查看政策是否已連接至任何憑證。

         ```
         aws iot list-targets-for-policy --policy-name policy_name
         ```

         如果命令傳回類似這樣的空白清單，代表政策未連接至任何憑證，您可以繼續列出政策版本。如果仍有連接至政策的憑證，請繼續進行 **detach-thing-principal** 步驟。

         ```
         {
             "targets": []
         }
         ```

      1. 使用 `policyName` 值來取代 `policy_name`，然後執行此命令來檢查政策版本。若要刪除政策，該政策必須只有一個版本。

         ```
         aws iot list-policy-versions --policy-name policy_name
         ```

         如果政策只有一個版本 (例如此範例)，您可以跳至 **delete-policy** 步驟，然後立即刪除政策。

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "1",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:02:46.778000+00:00"
                 }
             ]
         }
         ```

         如果政策具有多個版本 (例如此範例)，就必須先刪除具有 `isDefaultVersion` 值的 `false`，才能刪除政策。

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "2",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:52:04.423000+00:00"
                 },
                 {
                     "versionId": "1",
                     "isDefaultVersion": false,
                     "createDate": "2021-11-18T01:30:18.083000+00:00"
                 }
             ]
         }
         ```

         如果需要刪除政策版本，請使用 `policyName` 值來取代 `policy_name`，使用上一個命令的 `versionId` 值取代 `version_ID`，然後執行此命令來刪除政策版本。

         ```
         aws iot delete-policy-version --policy-name policy_name --policy-version-id version_ID
         ```

         如果成功，此命令不會傳回任何內容。

         刪除政策版本後，請重複此步驟，直到政策只有一個政策版本為止。

      1. 使用 `policyName` 值來取代 `policy_name`，然後執行此命令來刪除政策。

         ```
         aws iot delete-policy --policy-name policy_name
         ```

   1. 使用物件的名稱來取代 `thing_name`，再使用憑證的 ARN 來取代 `certificate_ARN`，然後執行此命令來從物件資源分離憑證。

      ```
      aws iot detach-thing-principal --thing-name thing_name --principal certificate_ARN
      ```

      如果成功，此命令不會傳回任何內容。

   1. 使用上一個命令的憑證 ID 來取代 `certificate_ID`。憑證 ID 是上一個命令傳回的 ARN 中 `cert/` 後面的英數字元。然後執行此命令來刪除憑證資源。

      ```
      aws iot delete-certificate --certificate-id certificate_ID
      ```

      如果成功，此命令不會傳回任何內容。

1. 使用物件的名稱來取代 `thing_name`，然後執行此命令來刪除該物件。

   ```
   aws iot delete-thing --thing-name thing_name
   ```

   如果成功，此命令不會傳回任何內容。

### 清除 AWS 資源
<a name="iot-dc-cleanup-cloud-aws"></a>

此程序可協助您識別和移除您在完成此學習路徑中的教學課程時建立的其他 AWS 資源。


**在此學習路徑中建立的其他 AWS 資源**  

| 教學課程 | Resource Type (資源類型) | 資源名稱或 ID | 
| --- | --- | --- | 
|  [教學課程：使用 AWS IoT 裝置用戶端示範遠端動作 （任務）](iot-dc-runjobs.md)  | Amazon S3 物件 | hello-world-job.json | 
|  [教學課程：使用 AWS IoT 裝置用戶端示範遠端動作 （任務）](iot-dc-runjobs.md)  |  AWS IoT 任務資源  | 使用者定義 | 

**刪除在此學習路徑中建立 AWS 的資源**

1. 刪除在此學習路徑中建立的任務

   1. 執行此命令以列出 中的任務 AWS 帳戶。

      ```
      aws iot list-jobs
      ```

      命令會傳回您 AWS 帳戶 和 AWS 區域 中看起來像這樣的 AWS IoT 任務清單。

      ```
      {
          "jobs": [
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-2",
                  "jobId": "hello-world-job-2",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:40:36.825000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:40:41.375000+00:00",
                  "completedAt": "2021-11-16T23:40:41.375000+00:00"
              },
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
                  "jobId": "hello-world-job-1",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:35:26.381000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:35:29.239000+00:00",
                  "completedAt": "2021-11-16T23:35:29.239000+00:00"
              }
          ]
      }
      ```

   1. 對於您從清單中辨識為在此學習路徑中建立任務的每個任務，請將 `jobId`取代為要刪除的任務`jobId`值，然後執行此命令來刪除 AWS IoT 任務。

      ```
      aws iot delete-job --job-id jobId
      ```

      如果成功，此命令不會傳回任何內容。

1. 刪除儲存在此學習路徑 Amazon S3 儲存貯體中的任務文件

   1. 使用您採用的儲存貯體名稱來取代 `bucket`，然後執行此命令來列出您使用的 Amazon S3 儲存貯體中的物件。

      ```
      aws s3api list-objects --bucket bucket
      ```

      此命令會傳會儲存貯體中的 Amazon S3 物件清單，如下所示。

      ```
      {
          "Contents": [
              {
                  "Key": "hello-world-job.json",
                  "LastModified": "2021-11-18T03:02:12+00:00",
                  "ETag": "\"868c8bc3f56b5787964764d4b18ed5ef\"",
                  "Size": 54,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "iot_job_firmware_update.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"7c68c591949391791ecf625253658c61\"",
                  "Size": 66,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "order66.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"bca60d5380b88e1a70cc27d321caba72\"",
                  "Size": 29,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              }
          ]
      }
      ```

   1. 對於您從清單中辨識為在此學習路徑中建立的物件的每個物件，請使用儲存貯體名稱來取代 `bucket`，使用要刪除物件的鍵值來取代 `key`，然後執行此命令來刪除 Amazon S3 物件。

      ```
       aws s3api delete-object --bucket bucket --key key
      ```

      如果成功，此命令不會傳回任何內容。

刪除完成此學習路徑時建立的所有 AWS 資源和物件後，您可以重新開始並重複教學課程。