

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

# 發佈元件以部署到您的核心裝置
<a name="publish-components"></a>

建置或完成元件版本後，您可以將其發佈至 AWS IoT Greengrass 服務。然後，您可以將它部署到 Greengrass 核心裝置。

如果您使用 [Greengrass 開發套件 CLI (GDK CLI)](greengrass-development-kit-cli.md) 來[開發和建置元件](create-components.md)，您可以使用 [GDK CLI](#publish-component-gdk-cli) 將元件發佈到 AWS 雲端。否則，[請使用內建 shell 命令和 AWS CLI](#publish-component-shell-commands) 來發佈元件。

您也可以使用 從 範本 AWS CloudFormation 建立元件和其他 AWS 資源。如需詳細資訊，請參閱 *AWS CloudFormation 使用者指南*[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html)中的[什麼是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 和 。

**Topics**
+ [發佈元件 (GDK CLI)](#publish-component-gdk-cli)
+ [發佈元件 (shell 命令）](#publish-component-shell-commands)

## 發佈元件 (GDK CLI)
<a name="publish-component-gdk-cli"></a>

遵循本節中的指示，使用 GDK CLI 發佈元件。GDK CLI 會將建置成品上傳至 S3 儲存貯體、更新配方中的成品 URIs，以及從配方建立元件。您可以指定要在 [GDK CLI 組態檔案中](gdk-cli-configuration-file.md)使用的 S3 儲存貯體和區域。

<a name="gdk-cli-s3-bucket-name-formation"></a>如果您使用 GDK CLI 1.1.0 版或更新版本，您可以指定`--bucket`引數來指定 GDK CLI 上傳元件成品的 S3 儲存貯體。<a name="gdk-cli-s3-bucket-name-formation-format"></a>如果您未指定此引數，GDK CLI 會上傳至名稱為 的 S3 儲存貯體`bucket-region-accountId`，其中儲存*貯*體和*區域*是您在 中指定的值`gdk-config.json`，而 *accountId* 是您的 AWS 帳戶 ID。如果儲存貯體不存在，GDK CLI 會建立儲存貯體。

**重要**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
根據預設，核心裝置角色不允許存取 S3 儲存貯體。如果這是您第一次使用此 S3 儲存貯體，您必須將許可新增至角色，以允許核心裝置從此 S3 儲存貯體擷取元件成品。如需詳細資訊，請參閱[允許存取元件成品的 S3 儲存貯體](device-service-role.md#device-service-role-access-s3-bucket)。

**發佈 Greengrass 元件 (GDK CLI)**

1. 在命令提示字元或終端機中開啟元件資料夾。

1. 如果您尚未建立 Greengrass 元件，請建置 元件。[元件建置](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build)命令會在元件`greengrass-build`資料夾中產生配方和成品。執行下列命令。

   ```
   gdk component build
   ```

1. 將元件發佈至 AWS 雲端。[元件發佈](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-publish)命令會將元件的成品上傳至 Amazon S3，並使用每個成品的 URI 更新元件的配方。然後，它會在 AWS IoT Greengrass 服務中建立元件。
**注意**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass 當您建立元件時， 會計算每個成品的摘要。這表示在建立元件之後，您無法修改 S3 儲存貯體中的成品檔案。如果您這樣做，包含此元件的部署將會失敗，因為檔案摘要不相符。如果您修改成品檔案，則必須建立新的元件版本。

   如果您`NEXT_PATCH`為 GDK CLI 組態檔案中的元件版本指定 ，則 GDK CLI 會使用 AWS IoT Greengrass 服務中尚不存在的下一個修補程式版本。

   執行下列命令。

   ```
   gdk component publish
   ```

   輸出會告訴您 GDK CLI 建立的元件版本。

   發佈元件之後，您可以將元件部署到核心裝置。如需詳細資訊，請參閱[將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。

## 發佈元件 (shell 命令）
<a name="publish-component-shell-commands"></a>

使用下列程序，使用 shell 命令和 AWS Command Line Interface () 發佈元件AWS CLI。當您發佈元件時，請執行下列動作：

1. 將元件成品發佈至 S3 儲存貯體。

1. 將每個成品的 Amazon S3 URI 新增至元件配方。

1.  AWS IoT Greengrass 從元件配方在 中建立元件版本。

**注意**  <a name="component-version-uniqueness-note"></a>
<a name="component-version-uniqueness-para"></a>您上傳的每個元件版本都必須是唯一的。請確定您上傳正確的元件版本，因為上傳之後就無法編輯。

您可以依照下列步驟，從您的開發電腦或 Greengrass 核心裝置發佈元件。

**發佈元件 (shell 命令）**

1. 如果元件使用 AWS IoT Greengrass 服務中存在的版本，則必須變更元件的版本。在文字編輯器中開啟配方、增加版本，並儲存檔案。選擇反映您對元件所做的變更的新版本。
**注意**  <a name="semver-note"></a>
<a name="semver-para"></a>AWS IoT Greengrass 使用元件的語意版本。語意版本遵循 *major*.*minor*.*patch* 號碼系統。例如，版本`1.0.0`代表元件的第一個主要版本。如需詳細資訊，請參閱[語意版本規格](https://semver.org/)。

1. 如果您的元件有成品，請執行下列動作：

   1. 將元件的成品發佈到 中的 S3 儲存貯體 AWS 帳戶。
**提示**  <a name="artifact-path-tip"></a>
我們建議您在 S3 儲存貯體成品路徑中包含元件名稱和版本。此命名機制可協助您維護先前元件版本使用的成品，因此您可以繼續支援先前的元件版本。

      執行下列命令，將成品檔案發佈至 S3 儲存貯體。將 amzn-s3-demo-bucket 取代為儲存貯體的名稱，並將 *artifacts/com.example.HelloWorld/1.0.0/artifact.py* 取代為成品檔案的路徑。

      ```
      aws s3 cp artifacts/com.example.HelloWorld/1.0.0/artifact.py s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```
**重要**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
根據預設，核心裝置角色不允許存取 S3 儲存貯體。如果這是您第一次使用此 S3 儲存貯體，您必須將許可新增至角色，以允許核心裝置從此 S3 儲存貯體擷取元件成品。如需詳細資訊，請參閱[允許存取元件成品的 S3 儲存貯體](device-service-role.md#device-service-role-access-s3-bucket)。

   1. 如果沒有名為 的清單，請`Artifacts`將其新增至元件配方。`Artifacts` 清單會出現在每個資訊清單中，定義元件在其支援的每個平台上的需求 （或元件對所有平台的預設需求）。

   1. 將每個成品新增至成品清單，或更新現有成品的 URI。Amazon S3 URI 由儲存貯體名稱和儲存貯體中成品物件的路徑組成。成品的 Amazon S3 URIs 看起來應該類似下列範例。

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```

   完成這些步驟後，您的配方應該會有如下所示的`Artifacts`清單。

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

   ```
   {
     ...
     "Manifests": [
       {
         "Lifecycle": {
           ...
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py",
             "Unarchive": "NONE"
           }
         ]
       }
     ]
   }
   ```

**注意**  
您可以新增 ZIP 成品`"Unarchive": "ZIP"`選項，以設定 AWS IoT Greengrass 核心軟體在元件部署時解壓縮成品。

------
#### [ YAML ]

   ```
   ...
   Manifests:
     - Lifecycle:
         ...
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py
           Unarchive: NONE
   ```

**注意**  
您可以使用 `Unarchive: ZIP`選項來設定 AWS IoT Greengrass 核心軟體，以在元件部署時解壓縮 ZIP 成品。如需如何在元件中使用 ZIP 成品的詳細資訊，請參閱 [artifacts：decompressedPath 配方變數](component-recipe-reference.md#component-recipe-artifacts-decompressed-path)。

------

   如需配方的詳細資訊，請參閱[AWS IoT Greengrass 元件配方參考](component-recipe-reference.md)。

1. 使用 AWS IoT Greengrass 主控台從配方檔案建立元件。

   執行下列命令，從配方檔案建立元件。此命令會建立元件，並將其發佈為 中的私有 AWS IoT Greengrass 元件 AWS 帳戶。將 *path/to/recipeFile* 取代為配方檔案的路徑。

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://path/to/recipeFile
   ```

   `arn` 從回應中複製 ，以在下一個步驟中檢查元件的狀態。
**注意**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass 當您建立元件時， 會計算每個成品的摘要。這表示在建立元件之後，您無法修改 S3 儲存貯體中的成品檔案。如果您這樣做，包含此元件的部署將會失敗，因為檔案摘要不相符。如果您修改成品檔案，則必須建立新的元件版本。

1.  AWS IoT Greengrass 服務中的每個元件都有 狀態。執行下列命令以確認您在此程序中發佈的元件版本狀態。將 *com.example.HelloWorld* 和 *1.0.0* 取代為要查詢的元件版本。將 取代`arn`為上一個步驟的 ARN。

   ```
   aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:account-id:components:com.example.HelloWorld:versions:1.0.0"
   ```

   操作會傳回包含元件中繼資料的回應。中繼資料包含`status`物件，其中包含元件狀態和任何錯誤，如適用。

   當元件狀態為 時`DEPLOYABLE`，您可以將元件部署到裝置。如需詳細資訊，請參閱[將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。