

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS IoT Greengrass コンポーネントレシピリファレンス
<a name="component-recipe-reference"></a>

コンポーネントレシピは、コンポーネントの詳細、依存関係、アーティファクト、およびライフサイクルを定義するファイルです。コンポーネントのライフサイクルでは、コンポーネントのインストール、実行、シャットダウンなどのために実行するコマンドを指定します。 AWS IoT Greengrass コアは、レシピで定義したライフサイクルを使用してコンポーネントをインストールして実行します。この AWS IoT Greengrass サービスは レシピを使用して、コンポーネントのデプロイ時にコアデバイスにデプロイする依存関係とアーティファクトを識別します。

レシピでは、コンポーネントがサポートしているプラットフォームごとに、固有の依存関係とライフサイクルを定義できます。この機能を使用すれば、要件が異なる複数のプラットフォームを持つデバイスにコンポーネントをデプロイすることができます。また、これを使用して、 がコンポーネントをサポートしていないデバイスにコンポーネントをインストール AWS IoT Greengrass しないようにすることもできます。

各レシピには、マニフェストのリストが含まれます。各マニフェストは、プラットフォームがそれらの要件を満たすコアデバイスに使用する一連のプラットフォーム要件、ライフサイクル、そしてアーティファクトを指定します。コアデバイスは、デバイスが満たすプラットフォーム要件が含まれる最初のマニフェストを使用します。プラットフォーム要件のないマニフェストを指定すれば、すべてのコアデバイスと一致します。

マニフェストにないグローバルライフサイクルを指定することもできます。グローバルライフサイクルでは、ライフサイクルのサブセクションを識別する選択キーを使用することができます。その後、マニフェスト内でこれらの選択キーを指定することで、マニフェストのライフサイクルに加えて、グローバルライフサイクルのこれらのセクションも使用することができます。コアデバイスは、マニフェストがライフサイクルを定義していない場合にのみ、マニフェストの選択キーを使用します。マニフェストの `all` 選択を使用すると、選択キーのないグローバルライフサイクルのセクションに一致させることができます。

 AWS IoT Greengrass Core ソフトウェアは、コアデバイスに一致するマニフェストを選択した後、以下を実行して、使用するライフサイクルステップを特定します。
+ 選択したマニフェストがライフサイクルを定義している場合、コアデバイスはそのライフサイクルを使用します。
+ 選択したマニフェストがライフサイクルを定義していない場合、コアデバイスはグローバルサイクルを使用します。コアデバイスは、グローバルライフサイクルのどのセクションを使用するかを特定するために以下を実行します。
  + マニフェストが選択キーを定義している場合、コアデバイスはマニフェストの選択キーが含まれるグローバルライフサイクルのセクションを使用します。
  + マニフェストが選択キーを定義していない場合、コアデバイスはマニフェストの選択キーが含まれないグローバルライフサイクルのセクションを使用します。この動作は、`all` 選択を定義するマニフェストと同じです。

**重要**  <a name="recipe-core-device-manifest-requirement"></a>
コアデバイスは、コンポーネントをインストールするにあたり、マニフェストのプラットフォーム要件を少なくとも 1 つ満たす必要があります。コアデバイスに一致するマニフェストがない場合、 AWS IoT Greengrass Core ソフトウェアはコンポーネントをインストールせず、デプロイは失敗します。

レシピは [JSON](https://en.wikipedia.org/wiki/JSON) または [YAML](https://en.wikipedia.org/wiki/YAML) 形式で定義できます。レシピの例セクションには、各形式のレシピが含まれています。

**Topics**
+ [レシピの検証](#recipe-validation)
+ [レシピの形式](#recipe-format)
+ [レシピ変数](#recipe-variables)
+ [レシピの例](#recipe-examples)

## レシピの検証
<a name="recipe-validation"></a>

Greengrass は、コンポーネントバージョンを作成するときに JSON または YAML コンポーネントレシピを検証します。このレシピの検証では、デプロイの問題の可能性を防ぐために、JSON または YAML コンポーネントレシピに一般的なエラーがないかをチェックします。検証では、レシピに一般的なエラー (カンマ、中括弧、フィールドの欠落など) がないかチェックし、レシピに正しい形式が使用されていることを確認します。

レシピ検証エラーメッセージが表示された場合は、カンマ、中括弧、またはフィールドが欠落していないかレシピを確認してください。[レシピの形式](#recipe-format)を見て、フィールドが欠落していないことを確認します。

## レシピの形式
<a name="recipe-format"></a>

コンポーネントのレシピを定義するときには、レシピドキュメントで次の情報を指定します。YAML と JSON 形式のレシピにも同じ構造が適用されます。

`RecipeFormatVersion`  
レシピのテンプレートバージョン。次のオプションを選択します。  
+ `2020-01-25`

`ComponentName`  
このレシピが定義するコンポーネントの名前。コンポーネント名は、各リージョンの AWS アカウント で一意である必要があります。  
**ヒント**  
+ 逆ドメイン名の形式にすれば、社内での名前のコリジョンを回避することができます。例えば、会社が `example.com` を所有しており、太陽エネルギープロジェクトに取り組んでいる場合は、Hello World コンポーネントの名前を `com.example.solar.HelloWorld` にすることができます。こうすることで、会社内のコンポーネント名のコリジョンを回避できます。
+ コンポーネント名に `aws.greengrass` プレフィックスを使用することは避けてください。 AWS IoT Greengrass は提供する[パブリックコンポーネント](public-components.md)でこのプレフィックスを使用します。パブリックコンポーネントと同じ名前を選択すると、パブリックコンポーネントがあなたのコンポーネントに置き換えられます。次に、 は、そのパブリックコンポーネントへの依存関係を持つコンポーネントをデプロイするときに、パブリックコンポーネントの代わりにコンポーネント AWS IoT Greengrass を提供します。この機能を使用すると、パブリックコンポーネントの動作を上書きできますが、パブリックコンポーネントの上書きを意図していない場合には、他のコンポーネントも破損させてしまう可能性があります。

`ComponentVersion`  
コンポーネントのバージョン。major、minor、および patch の各値の最大値は 999999 です。  
<a name="semver-para"></a>AWS IoT Greengrass はコンポーネントにセマンティックバージョンを使用します。セマンティックバージョンは、major.minor.patch といった番号システムに準拠します。例えば、バージョン `1.0.0` は、コンポーネントの最初のメジャーリリースを表しています。詳細については、「[セマンティックバージョンの仕様](https://semver.org/)」を参照してください。

`ComponentDescription`  
(オプション) コンポーネントの説明。

`ComponentPublisher`  
コンポーネントのパブリッシャーまたは作成者。

`ComponentConfiguration`  
(オプション) コンポーネントの設定またはパラメータを定義するオブジェクト。デフォルト設定を定義しておけば、コンポーネントをデプロイするときに、コンポーネントに提供する設定オブジェクトを指定することができます。コンポーネント設定は、ネストされたパラメータと構造をサポートします。このオブジェクトには、次の情報が含まれます。    
`DefaultConfiguration`  
コンポーネントのデフォルト設定を定義するオブジェクト。このオブジェクトの構造を定義します。  
<a name="configuration-value-type-note"></a>AWS IoT Greengrass は設定値に JSON を使用します。JSON は数値タイプを指定しますが、整数と浮動小数点数を区別しません。その結果、 AWS IoT Greengrassで設定値が浮動小数点数に変換されることがあります。コンポーネントが正しいデータタイプを使用することを確認するには、数値の設定値を文字列として定義することをお勧めします。次に、整数または浮動小数点としてコンポーネントでパースします。これにより、設定値が設定とコアデバイスに対して同じタイプであることを保証します。

`ComponentDependencies`  <a name="recipe-reference-component-dependencies"></a>
(オプション) コンポーネントのコンポーネント依存関係を定義するオブジェクトのディクショナリ。各オブジェクトのキーは、コンポーネントの依存関係の名前を識別します。 AWS IoT Greengrass は、コンポーネントのインストール時にコンポーネントの依存関係をインストールします。 は、コンポーネントの起動前に依存関係が開始されるまで AWS IoT Greengrass 待機します。各オブジェクトには、次の情報が含まれます:    
`VersionRequirement`  
この依存関係との互換性のあるコンポーネントバージョンを定義する npm スタイルのセマンティックバージョン制約。1 つのバージョンまたはバージョンの範囲を指定できます。詳細については、「[npm セマンティックバージョン計算ツール](https://semver.npmjs.com/)」を参照してください。  
`DependencyType`  
(オプション) 依存関係のタイプ。次のオプションから選択します。  
+ `SOFT` - 依存関係が状態を変化させても、コンポーネントは再起動しません。
+ `HARD` - 依存関係が状態を変化させると、コンポーネントは再起動します。
デフォルトは `HARD` です。

`ComponentType`  
(オプション) コンポーネントのタイプ。  
コンポーネントの作成時に recipe. AWS IoT Greengrass sets でコンポーネントタイプを指定することはお勧めしません。
タイプは、次のいずれかになります。  
+ `aws.greengrass.generic` - コンポーネントはコマンドを実行するか、アーティファクトを提供します。
+ `aws.greengrass.lambda` – コンポーネントは [Lambda ランチャーコンポーネント](lambda-launcher-component.md)を使用して、 Lambda 関数を実行します。`ComponentSource` パラメータは、このコンポーネントが実行する Lambda 関数の ARN を指定します。

  Lambda 関数からコンポーネントを作成する AWS IoT Greengrass ときに によって設定されるため、このオプションを使用することはお勧めしません。詳細については、「[AWS Lambda 関数を実行する](run-lambda-functions.md)」を参照してください。
+ `aws.greengrass.plugin` – コンポーネントは Greengrass nucleus と同じ Java 仮想マシン (JVM) で実行されます。プラグインコンポーネントをデプロイするか再起動すると、Greengrass nucleus が再起動します。

  プラグインコンポーネントは Greengrass nucleus と同じログファイルを使用します。詳細については、「[AWS IoT Greengrass ログのモニタリング](monitor-logs.md)」を参照してください。

  このオプションは、Greengrass nucleus と直接インターフェイスする AWS Java で記述された提供コンポーネントを対象としているため、コンポーネントレシピで使用することはお勧めしません。どのパブリックコンポーネントがプラグインなのかの詳細については、「[AWS が提供したコンポーネント](public-components.md)」を参照してください。
+ `aws.greengrass.nucleus` - nucleus コンポーネント。詳細については、「[Greengrass nucleus](greengrass-nucleus-component.md)」を参照してください。

  コンポーネントレシピでこのオプションを使用することは推奨しません。これは、Greengrass nucleus コンポーネントを対象としたもので、 AWS IoT Greengrass Core ソフトウェアの最低限の機能のみが提供されるからです。
レシピからコンポーネントを作成する場合は `aws.greengrass.generic`、Lambda 関数からコンポーネントを作成する場合は `aws.greengrass.lambda` がデフォルトです。  
詳細については、「[コンポーネントタイプ](develop-greengrass-components.md#component-types)」を参照してください。

`ComponentSource`  
(オプション) コンポーネントが実行する Lambda 関数の ARN。  
Lambda 関数からコンポーネントを作成するときに、recipe. AWS IoT Greengrass sets でコンポーネントソースを指定することはお勧めしません。詳細については、「[AWS Lambda 関数を実行する](run-lambda-functions.md)」を参照してください。

  `Manifests`   
オブジェクトのリストで、各オブジェクトがコンポーネントのライフサイクル、パラメータ、およびプラットフォームに対する要件を定義しています。コアデバイスが複数のマニフェストのプラットフォーム要件に一致する場合、 はコアデバイスが一致する最初のマニフェスト AWS IoT Greengrass を使用します。コアデバイスが正しいマニフェストを確実に使用するように、まずはより厳格なプラットフォーム要件を持つマニフェストを定義してください。すべてのプラットフォームに適用されるマニフェストは、リストの最後のマニフェストである必要があります。  
コアデバイスは、コンポーネントをインストールするにあたり、マニフェストのプラットフォーム要件を少なくとも 1 つ満たす必要があります。コアデバイスに一致するマニフェストがない場合、 AWS IoT Greengrass Core ソフトウェアはコンポーネントをインストールせず、デプロイは失敗します。
各オブジェクトには、次の情報が含まれます:    
`Name`  
(オプション) このマニフェストが定義するプラットフォームのわかりやすい名前。  
このパラメータを省略すると、 はプラットフォーム`os`と から名前 AWS IoT Greengrass を作成します`architecture`。  
  `Platform`   
(オプション) このマニフェストが適用されるプラットフォームを定義するオブジェクト。すべてのプラットフォームに適用されるマニフェストを定義する場合は、このパラメータを省略します。  
このオブジェクトは、コアデバイスが動作するプラットフォームに関するキーと値のペアを指定します。このコンポーネントをデプロイすると、 AWS IoT Greengrass Core ソフトウェアはこれらのキーと値のペアをコアデバイスのプラットフォーム属性と比較します。 AWS IoT Greengrass Core ソフトウェアは常に `os`と を定義し`architecture`、追加の属性を定義する場合があります。Greengrass nucleus コンポーネントをデプロイするときに、コアデバイスのカスタムプラットフォーム属性を指定することができます。詳細については、「[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)」の「[プラットフォームの上書きパラメータ](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides)」を参照してください。  
キーと値のペアごとに、次のいずれかの値を指定できます。  
+ `linux` または `windows` などの正確な値。正確な値は、数字または文字で始まっている必要があります。
+ `*`: これはすべての値と一致します。値が存在しない場合でも一致します。
+ `/windows|linux/` などの Java スタイルの正規表現。正規表現は、スラッシュ文字 (`/`) で開始し終了する必要があります。たとえば、正規表現 `/.+/` は空白以外のすべての値と一致します。
このオブジェクトには、次の情報が含まれます。    
`runtime`  
このマニフェストがサポートするプラットフォームの [Greengrass nucleus ランタイム](https://docs.aws.amazon.com/greengrass/v2/developerguide/how-it-works.html#concept-overview)。プラットフォーム `runtime` で複数のマニフェストを定義する場合、レシピでサポートされているランタイム値は `aws_nucleus_lite` および `*` のみです。クラシックデバイスをターゲットにするには、レシピでランタイムフィールドを指定しないでください。サポートされている Greengrass Nucleus ランタイムには、以下の値が含まれます。  
+ `*`
+ `aws_nucleus_lite`  
`os`  
(オプション) このマニフェストがサポートするプラットフォームのオペレーティングシステムの名前。一般的なプラットフォームには次の値が含まれます。  
+ `linux`
+ `windows`
+ `darwin` (macOS)  
`architecture`  
(オプション) このマニフェストがサポートするプラットフォームのプロセッサアーキテクチャ。一般的なアーキテクチャには次の値が含まれます。  
+ `amd64`
+ `arm`
+ `aarch64`
+ `x86`  
`architecture.detail`  
(オプション) このマニフェストがサポートするプラットフォームのプロセッサアーキテクチャの詳細。一般的なアーキテクチャの詳細には次の値が含まれます。  
+ `arm61`
+ `arm71`
+ `arm81`  
`key`  
(オプション) このマニフェストに対して定義するプラットフォーム属性。*Key* をプラットフォーム属性の名前に置き換えます。 AWS IoT Greengrass Core ソフトウェアは、このプラットフォーム属性を Greengrass nucleus コンポーネント設定で指定したキーと値のペアと一致させます。詳細については、「[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)」の「[プラットフォームの上書きパラメータ](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides)」を参照してください。  
逆ドメイン名の形式にすれば、社内での名前のコリジョンを回避することができます。例えば、会社が `example.com` を所有していて、ラジオプロジェクトで作業している場合には、カスタムプラットフォーム属性に `com.example.radio.RadioModule` という名前を付けることができます。こうすることで、会社内のプラットフォーム属性名のコリジョンを回避できます。
たとえば、`com.example.radio.RadioModule` というプラットフォーム属性を定義して、コアデバイスで利用可能な無線モジュールに基づいて、異なるマニフェストを指定することができます。各マニフェストには、異なるハードウェア設定に適用する異なるアーティファクトを含めることができるため、コアデバイスにデプロイするソフトウェアセットを最小限に抑えることができます。  
  `Lifecycle`   
このマニフェストが定義するプラットフォームに、コンポーネントをインストールして実行する方法を定義するオブジェクトまたは文字列。すべてのプラットフォームに適用される[グローバルライフサイクル](#global-lifecycle-definition)を定義することもできます。コアデバイスは、使用するマニフェストでライフサイクルが指定されていない場合にのみ、グローバルライフサイクルを使用します。  
このライフサイクルはマニフェスト内で定義します。ここで指定するライフサイクルステップは、このマニフェストが定義するプラットフォームにのみ適用されます。すべてのプラットフォームに適用される[グローバルライフサイクル](#global-lifecycle-definition)を定義することもできます。
このオブジェクトまたは文字列には、次の情報が含まれます。    
  `Setenv`   
(オプション) すべてのライフサイクルスクリプトに提供する、環境変数のディクショナリ。これらの環境変数は、各ライフサイクルスクリプトの `Setenv` で上書きすることができます。  
  `install`   
(オプション) コンポーネントのインストール時に実行するスクリプトを定義するオブジェクトまたは文字列。 AWS IoT Greengrass Core ソフトウェアは、ソフトウェアが起動するたびにこのライフサイクルステップも実行します。  
`install` スクリプトが成功コードで終了すると、コンポーネントは `INSTALLED` 状態に入ります。  
このオブジェクトまたは文字列には、次の情報が含まれます。    
`Script`  <a name="recipe-lifecycle-script"></a>
実行するスクリプト。  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(オプション) ルート権限でスクリプトを実行できます。このオプションを に設定すると`true`、 AWS IoT Greengrass Core ソフトウェアはこのコンポーネントを実行するように設定したシステムユーザーとしてではなく、このライフサイクルスクリプトをルートとして実行します。デフォルトは `false` です。  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(オプション) スクリプトを実行するかどうかを決定するためのチェック。実行可能ファイルがパス上にあるかどうか、あるいはファイルが存在するかどうかを確認するように定義できます。出力が true の場合、 AWS IoT Greengrass Core ソフトウェアはステップをスキップします。次のいずれかの値を選択します。  
+ `onpath runnable` - システムパス上に runnable があるかどうかをチェックします。例えば、Python 3 が利用可能な場合には、**onpath python3** を使用してこのライフサイクルステップをスキップします。
+ `exists file` - ファイルが存在するかどうかをチェックします。たとえば、`/tmp/my-configuration.db` が存在する場合には、**exists /tmp/my-configuration.db** を使用してこのライフサイクルステップをスキップします。  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(オプション) AWS IoT Greengrass Core ソフトウェアがプロセスを終了する前に、スクリプトが実行できる最大時間 (秒単位)。  
デフォルト: 120 秒  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(オプション) スクリプトに提供する環境変数のディクショナリ。これらの環境変数は、`Lifecycle.Setenv` で指定した変数を上書きします。  
  `run`   
(オプション) コンポーネントの開始時に実行するスクリプトを定義するオブジェクトまたは文字列。  
このライフサイクルステップが実行されると、コンポーネントは `RUNNING` 状態に入ります。`run` スクリプトが成功コードで終了すると、コンポーネントは `STOPPING` 状態に入ります。`shutdown` スクリプトを指定すると実行されます。指定しない場合、コンポーネントは `FINISHED` 状態になります。  
このコンポーネントに依存するコンポーネントは、このライフサイクルステップが実行されたときに開始されます。依存コンポーネントが使用するサービスなどのバックグラウンドプロセスを実行するには、代わりに `startup` ライフサイクルステップを使用します。  
`run` ライフサイクルによりコンポーネントをデプロイすると、そのライフサイクルスクリプトが実行された直後から、デプロイが完了したコアデバイスを報告できるようになります。その結果、`run` ライフサイクルスクリプトが実行後すぐに失敗した場合でも、そのデプロイを正常に完了することができます。デプロイステータスを、コンポーネントの開始スクリプトの結果に依存させたい場合は、代わりに `startup` ライフサイクルステップを使用します。  
1 つの `startup` または `run` ライフサイクルのみを定義できます。
このオブジェクトまたは文字列には、次の情報が含まれます。    
`Script`  <a name="recipe-lifecycle-script"></a>
実行するスクリプト。  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(オプション) ルート権限でスクリプトを実行できます。このオプションを に設定すると`true`、 AWS IoT Greengrass Core ソフトウェアはこのコンポーネントを実行するように設定したシステムユーザーとしてではなく、このライフサイクルスクリプトをルートとして実行します。デフォルトは `false` です。  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(オプション) スクリプトを実行するかどうかを決定するためのチェック。実行可能ファイルがパス上にあるかどうか、あるいはファイルが存在するかどうかを確認するように定義できます。出力が True の場合、 AWS IoT Greengrass Core ソフトウェアはこのステップをスキップします。次のいずれかの値を選択します。  
+ `onpath runnable` - システムパス上に runnable があるかどうかをチェックします。例えば、Python 3 が利用可能な場合には、**onpath python3** を使用してこのライフサイクルステップをスキップします。
+ `exists file` - ファイルが存在するかどうかをチェックします。たとえば、`/tmp/my-configuration.db` が存在する場合には、**exists /tmp/my-configuration.db** を使用してこのライフサイクルステップをスキップします。  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(オプション) AWS IoT Greengrass Core ソフトウェアがプロセスを終了するまでにスクリプトが実行できる秒単位の最大時間。  
デフォルトでは、このライフサイクルステップはタイムアウトしません。このタイムアウトを省略すると、`run` スクリプトが終了するまで実行されます。  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(オプション) スクリプトに提供する環境変数のディクショナリ。これらの環境変数は、`Lifecycle.Setenv` で指定した変数を上書きします。  
  `startup`   
(オプション) コンポーネントの開始時に実行するバックグラウンドプロセスを定義するオブジェクトまたは文字列。  
依存関係のあるコンポーネントを起動する前に、正常に終了させる、あるいはコンポーネントのステータスを `RUNNING` に更新するコマンドを実行するには、`startup` を使用します。終了していないスクリプトをコンポーネントが開始した場合に、そのコンポーネントのステータスを `RUNNING` または `ERRORED` にセットするには、[UpdateState](ipc-component-lifecycle.md#ipc-operation-updatestate) IPC オペレーションを使用します。例えば、`/etc/init.d/mysqld start` で MySQL プロセスを開始する `startup` ステップを定義することができます。  
このライフサイクルステップが実行されると、コンポーネントは `STARTING` 状態に入ります。`startup` スクリプトが成功コードで終了すると、コンポーネントは `RUNNING` 状態に入ります。その後、依存コンポーネントを開始することができます。  
`startup` ライフサイクルによりコンポーネントをデプロイすると、そのライフサイクルスクリプトが終了したか、もしくは状態を報告した後に、コアデバイスがデプロイの完了を報告できるようになります。言い換えると、すべてのコンポーネントの起動スクリプトが終了したか、あるいは状態を報告するまで、デプロイのステータスは `IN_PROGRESS` のままです  
1 つの `startup` または `run` ライフサイクルのみを定義できます。
このオブジェクトまたは文字列には、次の情報が含まれます。    
`Script`  <a name="recipe-lifecycle-script"></a>
実行するスクリプト。  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(オプション) ルート権限でスクリプトを実行できます。このオプションを に設定すると`true`、 AWS IoT Greengrass Core ソフトウェアはこのコンポーネントを実行するように設定したシステムユーザーとしてではなく、このライフサイクルスクリプトをルートとして実行します。デフォルトは `false` です。  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(オプション) スクリプトを実行するかどうかを決定するためのチェック。実行可能ファイルがパス上にあるかどうか、あるいはファイルが存在するかどうかを確認するように定義できます。出力が True の場合、 AWS IoT Greengrass Core ソフトウェアはこのステップをスキップします。次のいずれかの値を選択します。  
+ `onpath runnable` - システムパス上に runnable があるかどうかをチェックします。例えば、Python 3 が利用可能な場合には、**onpath python3** を使用してこのライフサイクルステップをスキップします。
+ `exists file` - ファイルが存在するかどうかをチェックします。たとえば、`/tmp/my-configuration.db` が存在する場合には、**exists /tmp/my-configuration.db** を使用してこのライフサイクルステップをスキップします。  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(オプション) AWS IoT Greengrass Core ソフトウェアがプロセスを終了する前に、スクリプトが実行できる最大時間 (秒単位)。  
デフォルト: 120 秒  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(オプション) スクリプトに提供する環境変数のディクショナリ。これらの環境変数は、`Lifecycle.Setenv` で指定した変数を上書きします。  
  `shutdown`   
(オプション) コンポーネントのシャットダウン時に実行するスクリプトを定義するオブジェクトまたは文字列。シャットダウンライフサイクルを使用して、コンポーネントが `STOPPING` 状態にあるときに実行するコードを実行します。シャットダウンライフサイクルは、`startup` または `run` スクリプトによって開始されたプロセスを停止するために使用できます。  
`startup` でバックグラウンドプロセスを開始した場合は、コンポーネントがシャットダウンするときには `shutdown` ステップを使用してそのプロセスを停止します。例えば、`/etc/init.d/mysqld stop` で MySQL プロセスを停止する `shutdown` ステップを定義することができます。  
`shutdown` スクリプトは、コンポーネントが `STOPPING` 状態になった後に実行されます。スクリプトが正常に完了すると、コンポーネントは `FINISHED` 状態になります。  
このオブジェクトまたは文字列には、次の情報が含まれます。    
`Script`  <a name="recipe-lifecycle-script"></a>
実行するスクリプト。  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(オプション) ルート権限でスクリプトを実行できます。このオプションを に設定すると`true`、 AWS IoT Greengrass Core ソフトウェアはこのコンポーネントを実行するように設定したシステムユーザーとしてではなく、このライフサイクルスクリプトをルートとして実行します。デフォルトは `false` です。  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(オプション) スクリプトを実行するかどうかを決定するためのチェック。実行可能ファイルがパス上にあるかどうか、あるいはファイルが存在するかどうかを確認するように定義できます。出力が True の場合、 AWS IoT Greengrass Core ソフトウェアはこのステップをスキップします。次のいずれかの値を選択します。  
+ `onpath runnable` - システムパス上に runnable があるかどうかをチェックします。例えば、Python 3 が利用可能な場合には、**onpath python3** を使用してこのライフサイクルステップをスキップします。
+ `exists file` - ファイルが存在するかどうかをチェックします。たとえば、`/tmp/my-configuration.db` が存在する場合には、**exists /tmp/my-configuration.db** を使用してこのライフサイクルステップをスキップします。  
`Timeout`  
(オプション) AWS IoT Greengrass Core ソフトウェアがプロセスを終了するまでにスクリプトが実行できる秒単位の最大時間。  
デフォルト: 15 秒。  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(オプション) スクリプトに提供する環境変数のディクショナリ。これらの環境変数は、`Lifecycle.Setenv` で指定した変数を上書きします。  
  `recover`   
(オプション) コンポーネントにエラーが発生したときに実行するスクリプトを定義するオブジェクトまたは文字列。  
この手順は、コンポーネントが `ERRORED` 状態になったときに実行されます。コンポーネントが正常に回復しないで 3 回 `ERRORED` になると、コンポーネントは `BROKEN` 状態に変わります。`BROKEN` コンポーネントを修復するには、もう一度デプロイする必要があります。  
このオブジェクトまたは文字列には、次の情報が含まれます。    
`Script`  <a name="recipe-lifecycle-script"></a>
実行するスクリプト。  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(オプション) ルート権限でスクリプトを実行できます。このオプションを に設定すると`true`、 AWS IoT Greengrass Core ソフトウェアはこのコンポーネントを実行するように設定したシステムユーザーとしてではなく、このライフサイクルスクリプトをルートとして実行します。デフォルトは `false` です。  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(オプション) スクリプトを実行するかどうかを決定するためのチェック。実行可能ファイルがパス上にあるかどうか、あるいはファイルが存在するかどうかを確認するように定義できます。出力が True の場合、 AWS IoT Greengrass Core ソフトウェアはこのステップをスキップします。次のいずれかの値を選択します。  
+ `onpath runnable` - システムパス上に runnable があるかどうかをチェックします。例えば、Python 3 が利用可能な場合には、**onpath python3** を使用してこのライフサイクルステップをスキップします。
+ `exists file` - ファイルが存在するかどうかをチェックします。たとえば、`/tmp/my-configuration.db` が存在する場合には、**exists /tmp/my-configuration.db** を使用してこのライフサイクルステップをスキップします。  
`Timeout`  
(オプション) AWS IoT Greengrass Core ソフトウェアがプロセスを終了するまでにスクリプトが実行できる秒単位の最大時間。  
デフォルト: 60 秒  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(オプション) スクリプトに提供する環境変数のディクショナリ。これらの環境変数は、`Lifecycle.Setenv` で指定した変数を上書きします。  
  `bootstrap`   
(オプション) AWS IoT Greengrass Core ソフトウェアまたはコアデバイスの再起動が必要となるスクリプトを定義するオブジェクトまたは文字列。これにより、オペレーティングシステムの更新やランタイムの更新などをインストールした後に再起動するコンポーネントを開発することができます。  
 AWS IoT Greengrass Core ソフトウェアまたはデバイスの再起動を必要としない更新プログラムまたは依存関係をインストールするには、[インストールライフサイクル](#install-lifecycle-definition)を使用します。
Core AWS IoT Greengrass ソフトウェアがコンポーネントをデプロイする場合、このライフサイクルステップはインストールライフサイクルステップの前に実行されます。  
+ コンポーネントがコアデバイスに初めてデプロイされる場合。
+ コンポーネントのバージョンが変更される場合。
+ コンポーネント設定が更新されたことで、ブートストラップスクリプトが変更される場合。
 AWS IoT Greengrass Core ソフトウェアがデプロイにブートストラップステップがあるすべてのコンポーネントのブートストラップステップを完了すると、ソフトウェアが再起動します。  
Core ソフトウェアまたは AWS IoT Greengrass コアデバイスを再起動するには、 AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定する必要があります。 AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定しない場合、ソフトウェアは再起動しません。詳細については、「[Greengrass nucleus をシステムサービスとして設定する](configure-greengrass-core-v2.md#configure-system-service)」を参照してください。
このオブジェクトまたは文字列には、次の情報が含まれます。    
`BootstrapOnRollback`  
この機能を有効にすると、`BootstrapOnRollback` は、失敗したターゲットデプロイの一部としてブートストラップライフサイクルステップを完了または実行しようとしたコンポーネントに対してのみ実行されます。この機能は、Greengrass nucleus バージョン 2.12.0 以降で使用できます。
(オプション) ロールバックデプロイの一部としてブートストラップライフサイクルステップを実行できます。このオプションを `true` に設定すると、ロールバックデプロイ内で定義されたブートストラップライフサイクルステップが実行されます。デプロイが失敗すると、ロールバックデプロイ中にコンポーネントのブートストラップライフサイクルの以前のバージョンが再実行されます。  
デフォルトは `false` です。  
`Script`  
実行するスクリプト。このスクリプトの終了コードは、再起動の指示を定義しています。次の終了コードを使用します。  
+ `0` – AWS IoT Greengrass Core ソフトウェアまたはコアデバイスを再起動しないでください。 AWS IoT Greengrass Core ソフトウェアは、すべてのコンポーネントのブートストラップ後も再起動します。
+ `100` – AWS IoT Greengrass Core ソフトウェアの再起動をリクエストします。
+ `101` - コアデバイスの再起動をリクエストします。
終了コード 100～199 は特別動作向けに予約済みです。その他の終了コードは、スクリプトエラーを表します。  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(オプション) ルート権限でスクリプトを実行できます。このオプションを に設定すると`true`、 AWS IoT Greengrass Core ソフトウェアはこのコンポーネントを実行するように設定したシステムユーザーとしてではなく、このライフサイクルスクリプトをルートとして実行します。デフォルトは `false` です。  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(オプション) AWS IoT Greengrass Core ソフトウェアがプロセスを終了する前に、スクリプトが実行できる最大時間 (秒単位)。  
デフォルト: 120 秒  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(オプション) スクリプトに提供する環境変数のディクショナリ。これらの環境変数は、`Lifecycle.Setenv` で指定した変数を上書きします。  
  `Selections`   
(オプション) このマニフェストに対して実行する[グローバルライフサイクル](#global-lifecycle-definition)のセクションを指定する選択キーのリスト。グローバルライフサイクルでは、任意のレベルで選択キーを使用してライフサイクルステップを定義し、ライフサイクルのサブセクションを選択することができます その後、コアデバイスは、このマニフェストの選択キーと一致するセクションを使用します。詳細については、「[グローバルライフサイクルの例](#global-lifecycle-definition)」を参照してください。  
コアデバイスは、このマニフェストがライフサイクルを指定していない場合にのみ、グローバルライフサイクルを使用します。
`all` 選択キーを指定して、選択キーを持たないグローバルライフサイクルのセクションを実行することができます。  
  `Artifacts`   
(オプション) このマニフェストが定義するプラットフォーム上のコンポーネントのバイナリアーティファクトを定義するオブジェクトのリスト。例えば、コードまたはイメージをアーティファクトとして定義できます。  
コンポーネントがデプロイされると、 AWS IoT Greengrass Core ソフトウェアはアーティファクトをコアデバイスのフォルダにダウンロードします。アーティファクトは、ソフトウェアがダウンロードした後に抽出するアーカイブファイルとして定義することもできます。  
[レシピ変数](#recipe-variables)を使用すれば、コアデバイス上のアーティファクトがインストールされているフォルダへのパスを取得することができます。  
+ 通常のファイル - [artifacts:path レシピ変数](#component-recipe-artifacts-path)を使用して、アーティファクトが含まれるフォルダへのパスを取得します。例えば、レシピで `{artifacts:path}/my_script.py` を指定すれば、URI `s3://amzn-s3-demo-bucket/path/to/my_script.py` を持つアーティファクトへのパスを取得できます。
+ 抽出されたアーカイブ - [artifacts:decompressedPath レシピ変数](#component-recipe-artifacts-decompressed-path)を使用して、抽出されたアーカイブアーティファクトが含まれるフォルダへのパスを取得します。 AWS IoT Greengrass Core ソフトウェアは、各アーカイブをアーカイブと同じ名前のフォルダに抽出します。例えば、レシピで `{artifacts:decompressedPath}/my_archive/my_script.py` を指定すれば、URI `s3://amzn-s3-demo-bucket/path/to/my_archive.zip` を持つアーカイブアーティファクト内にある `my_script.py` へのパスを取得できます。
ローカルコアデバイス上でアーカイブアーティファクトを持つコンポーネントを開発する場合、そのアーティファクトの URI がない可能性があります。アーティファクトを抽出する `Unarchive` オプションを使用してコンポーネントをテストするには、ファイル名がアーカイブアーティファクトファイルの名前と一致する URI を指定します。アーカイブアーティファクトのアップロード先となる予定の URI を指定することも、新しいプレースホルダ URI を指定することもできます。例えば、ローカルデプロイ時に `my_archive.zip` アーティファクトを抽出する場合には、`s3://amzn-s3-demo-bucket/my_archive.zip` を指定できます。
各オブジェクトには、次の情報が含まれます:    
`Uri`  
S3 バケット内のアーティファクトの URI。 AWS IoT Greengrass Core ソフトウェアは、アーティファクトがすでにデバイスに存在する場合を除き、コンポーネントのインストール時にこの URI からアーティファクトを取得します。各アーティファクトには、各マニフェスト内に一意のファイル名がある必要があります。  
`Unarchive`  
(オプション) 解凍するアーカイブのタイプ。次のオプションから選択します。  
+ `NONE` - ファイルは解凍するアーカイブではありません。 AWS IoT Greengrass Core ソフトウェアによって、コアデバイス上のフォルダにアーティファクトがインストールされます。[artifacts:path レシピ変数](#component-recipe-artifacts-path)を使用して、このフォルダへのパスを取得することができます。
+ `ZIP` - ファイルは ZIP アーカイブです。 AWS IoT Greengrass Core ソフトウェアは、アーカイブと同じ名前のフォルダにアーカイブを抽出します。[artifacts:decompressedPath レシピ変数](#component-recipe-artifacts-decompressed-path)を使用して、このフォルダが含まれるフォルダへのパスを取得することができます。
デフォルトは `NONE` です。  
  `Permission`   
(オプション) このアーティファクトファイルに設定するアクセス許可を定義するオブジェクト。読み取り許可と実行許可を設定できます。  
 AWS IoT Greengrass Core ソフトウェアではコンポーネントがアーティファクトフォルダ内のアーティファクトファイルを編集できないため、書き込みアクセス許可を設定することはできません。コンポーネント内のアーティファクトファイルを編集するには、別の場所にコピーするか、新しいアーティファクトファイルをパブリッシュしてデプロイします。
アーティファクトを解凍するアーカイブとして定義すると、 AWS IoT Greengrass Core ソフトウェアはアーカイブから解凍するファイルにこれらのアクセス許可を設定します。 AWS IoT Greengrass Core ソフトウェアは、フォルダのアクセス許可を `Read`および `ALL`の に設定します`Execute`。これにより、コンポーネントはフォルダ内の解凍されたファイルを表示できるようになります。アーカイブからの個々のファイルにアクセス許可を設定する場合は、[インストールライフサイクルスクリプト](#install-lifecycle-definition)でアクセス許可を設定することができます。  
このオブジェクトには、次の情報が含まれます。    
`Read`  
(オプション) このアーティファクトファイルに設定する読み取りアクセス許可。このコンポーネントに依存するコンポーネントなどの他のコンポーネントがこのアーティファクトにアクセスできるようにするには、`ALL` を指定します。次のオプションから選択します。  
+ `NONE` - ファイルは読み取れません。
+ `OWNER` - このコンポーネントを実行するように設定したシステムユーザーがファイルを読み取ることができます。
+ `ALL` - このファイルはすべてのユーザーが読み取ることができます。
デフォルトは `OWNER` です。  
`Execute`  
(オプション) このアーティファクトファイルに設定する実行アクセス許可。`Execute` アクセス許可は、`Read` アクセス許可を意味します。例えば、`Execute` に対して `ALL` を指定すると、すべてのユーザーがこのアーティファクトファイルを読み取り、実行できるようになります。  
次のオプションから選択します。  
+ `NONE` - ファイルは実行できません。
+ `OWNER` - このコンポーネントを実行するように設定したシステムユーザーがファイルを実行することができます。
+ `ALL` - このファイルはすべてのユーザーが実行することができます。
デフォルトは `NONE` です。  
`Digest`  
(読み取り専用) アーティファクトの暗号化ダイジェストハッシュ。コンポーネントを作成すると、 はハッシュアルゴリズム AWS IoT Greengrass を使用してアーティファクトファイルのハッシュを計算します。その後、コンポーネントをデプロイするときに、Greengrass nucleus がダウンロードされたアーティファクトのハッシュを計算し、このダイジェストとハッシュを比較することでインストール前にアーティファクトを検証します。ハッシュがダイジェストと一致しない場合、デプロイは失敗します。  
このパラメータを設定すると、 はコンポーネントの作成時に設定した値を AWS IoT Greengrass 置き換えます。  
`Algorithm`  
(読み取り専用) アーティファクトのダイジェストハッシュを計算するために が AWS IoT Greengrass 使用するハッシュアルゴリズム。  
このパラメータを設定すると、 はコンポーネントの作成時に設定した値を AWS IoT Greengrass 置き換えます。

  `Lifecycle`   
コンポーネントをインストールして実行する方法を定義するオブジェクト。コアデバイスは、使用する[マニフェスト](#manifest-definition)でライフサイクルが指定されていない場合にのみ、グローバルライフサイクルを使用します。  
このライフサイクルはマニフェスト外で定義します。マニフェストと一致するプラットフォームに適用される[マニフェストのライフサイクル](#manifest-lifecycle-definition)を定義することもできます。
グローバルライフサイクルでは、各マニフェストで指定した特定の[選択キー](#manifest-selections-definition)に対して実行するライフサイクルを指定することができます。選択キーは、各マニフェストに対して実行するグローバルライフサイクルのセクションを識別する文字列です。  
選択キーがないセクションのデフォルトは、`all` 選択キーです。つまり、マニフェストで `all` 選択キーを指定することで、選択キーがないグローバルライフサイクルのセクションを実行することができることになります。グローバルライフサイクルで `all` 選択キーを指定する必要はありません  
マニフェストでライフサイクルまたは選択キーが定義されていない場合、コアデバイスはデフォルトで `all` 選択を使用します。つまりこの場合、コアデバイスは、選択キーを使用しないグローバルライフサイクルのセクションを使用することになります。  
このオブジェクトには、[マニフェストのライフサイクル](#manifest-lifecycle-definition)と同じ情報が含まれていますが、任意のレベルで選択キーを指定することで、ライフサイクルのサブセクションを選択することができます。  
選択キーとライフサイクルキーが競合することがないように、各選択キーには小文字のみを使用することを推奨します。ライフサイクルキーは大文字で始まります。

**Example トップレベルの選択キーを使用したグローバルライフサイクルの例**  

```
Lifecycle:
  key1:
    install:
      SkipIf: either onpath executable or exists file
      Script: command1
  key2:
    install:
      Script: command2
  all:
    install:
      Script: command3
```

**Example 末尾レベルの選択キーを使用したグローバルライフサイクルの例**  

```
Lifecycle:
  install:
    Script:
      key1: command1
      key2: command2
      all: command3
```

**Example 複数のレベルの選択キーを使用したグローバルライフサイクルの例**  

```
Lifecycle:
  key1:
    install:
      SkipIf: either onpath executable or exists file
      Script: command1
  key2:
    install:
      Script: command2
  all:
    install:
      Script:
        key3: command3
        key4: command4
        all: command5
```

## レシピ変数
<a name="recipe-variables"></a>

レシピ変数は、現在のコンポーネントと nucleus の情報を公開し、レシピで使用できるようにします。例えば、レシピ変数を使用して、ライフサイクルスクリプトで実行するアプリケーションにコンポーネント設定パラメータを渡すことができます。

レシピ変数は、以下のコンポーネントレシピの各セクションで使用できます。
+ ライフサイクル定義。
+ コンポーネント構成定義 ([Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 以降を選択し、[interpolateComponentConfiguration](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-interpolate-component-configuration) 設定オプションに `true` を設定している場合)。レシピ変数は、[コンポーネント設定の更新をデプロイ](update-component-configurations.md#merge-configuration-update-recipe-variables)する際にも、使用することが可能です。

レシピ変数は `{recipe_variable}` 構文を使用します。中括弧はレシピ変数を示しています。

AWS IoT Greengrass では、次のレシピ変数がサポートされています。

`component_dependency_name:configuration:json_pointer`  
このレシピが定義するコンポーネント、またはこのコンポーネントが依存するコンポーネントの設定パラメータの値。  
この変数を使用して、コンポーネントのライフサイクルで実行するスクリプトにパラメータを提供することができます。  
AWS IoT Greengrass は、コンポーネントライフサイクル定義でのみこのレシピ変数をサポートします。
このレシピ変数には、次の入力があります。  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` - (オプション) クエリを実行するコンポーネント依存関係の名前。このレシピが定義するコンポーネントを照会する場合は、このセグメントを省略します。直接的な依存関係のみを指定できます。
+ `json_pointer` - 評価する設定値への JSON ポインタ。JSON ポインタはフォワードスラッシュ (`/`) で始まります。ネストされたコンポーネント設定の値を識別するには、フォワードスラッシュ (`/`) を使用して、設定の各レベルのキーを区切ります。数字をキーとして使用して、リスト内のインデックスを指定できます。詳細については、「[JSON ポインタの仕様](https://tools.ietf.org/html/rfc6901)」を参照してください。

  AWS IoT Greengrass Core は YAML 形式のレシピに JSON ポインタを使用します。
JSON ポインタは次のノードタイプを参照できます。  
+ 値 node. AWS IoT Greengrass Core は、レシピ変数を値の文字列表現に置き換えます。Null 値は文字列の `null` に置き換えられます。
+ オブジェクト node. AWS IoT Greengrass Core は、レシピ変数をそのオブジェクトのシリアル化された JSON 文字列表現に置き換えます。
+ node. AWS IoT Greengrass Core はレシピ変数を置き換えません。
例えば、`{configuration:/Message}` レシピ変数は、コンポーネント設定の `Message` キーの値を取得します。`{com.example.MyComponentDependency:configuration:/server/port}` レシピ変数は、コンポーネント依存関係の `server` 設定オブジェクトにある `port` の値を取得します。

  `component_dependency_name:artifacts:path`   
このレシピが定義するコンポーネント、またはこのコンポーネントが依存するコンポーネントのアーティファクトのルートパス。  
コンポーネントをインストールすると、 はコンポーネントのアーティファクトを、この変数が公開するフォルダ AWS IoT Greengrass にコピーします。この変数を使用して、コンポーネントのライフサイクルで実行するスクリプトの場所などを特定できます。  
<a name="recipe-variable-artifact-folder-permissions"></a>このパスのフォルダは読み取り専用です。アーティファクトファイルを変更するには、ファイルを現在の作業ディレクトリなどの別の場所にコピーします (`$PWD` または `.`)。その後、その場所でファイルを変更します。  
<a name="recipe-variable-component-dependency-artifact-file-permissions"></a>コンポーネントの依存関係からアーティファクトを読み取るか実行するには、そのアーティファクトの `Read` または `Execute` のアクセス許可が `ALL` である必要があります。詳細については、コンポーネントレシピで定義した「[アーティファクトアクセス許可](#component-artifact-permission)」を参照してください。  
このレシピ変数には、次の入力があります。  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` - (オプション) クエリを実行するコンポーネント依存関係の名前。このレシピが定義するコンポーネントを照会する場合は、このセグメントを省略します。直接的な依存関係のみを指定できます。

  `component_dependency_name:artifacts:decompressedPath`   
このレシピが定義するコンポーネント、またはこのコンポーネントが依存するコンポーネントの解凍されたアーカイブアーティファクトのルートパス。  
コンポーネントをインストールすると、 はコンポーネントのアーカイブアーティファクトを、この変数が公開するフォルダに AWS IoT Greengrass 解凍します。この変数を使用して、コンポーネントのライフサイクルで実行するスクリプトの場所などを特定できます。  
各アーティファクトは、解凍されたパス内のフォルダに解凍されます。フォルダの名前はアーティファクトと同じ名前から拡張子を引いたものになります。例えば、`models.zip` という名前の ZIP アーティファクトは、`{artifacts:decompressedPath}/models` フォルダに解凍されます。  
<a name="recipe-variable-artifact-folder-permissions"></a>このパスのフォルダは読み取り専用です。アーティファクトファイルを変更するには、ファイルを現在の作業ディレクトリなどの別の場所にコピーします (`$PWD` または `.`)。その後、その場所でファイルを変更します。  
<a name="recipe-variable-component-dependency-artifact-file-permissions"></a>コンポーネントの依存関係からアーティファクトを読み取るか実行するには、そのアーティファクトの `Read` または `Execute` のアクセス許可が `ALL` である必要があります。詳細については、コンポーネントレシピで定義した「[アーティファクトアクセス許可](#component-artifact-permission)」を参照してください。  
このレシピ変数には、次の入力があります。  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` - (オプション) クエリを実行するコンポーネント依存関係の名前。このレシピが定義するコンポーネントを照会する場合は、このセグメントを省略します。直接的な依存関係のみを指定できます。

  `component_dependency_name:work:path`   
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.0.4 以降に利用できます。  
このレシピが定義するコンポーネント、またはこのコンポーネントが依存するコンポーネントのワークパス。このレシピ変数の値は、コンポーネントのコンテキストから実行されたときの `$PWD` 環境変数と [pwd](https://en.wikipedia.org/wiki/Pwd) コマンドの出力と同じです。  
このレシピ変数を使用して、コンポーネントと依存関係間でファイルを共有できます。  
このパスのフォルダは、このレシピが定義するコンポーネントと、同じユーザーおよびグループとして実行される他のコンポーネントが、読み取り書き込むことができます。  
このレシピ変数には、次の入力があります。  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` - (オプション) クエリを実行するコンポーネント依存関係の名前。このレシピが定義するコンポーネントを照会する場合は、このセグメントを省略します。直接的な依存関係のみを指定できます。

`kernel:rootPath`  
 AWS IoT Greengrass Core ルートパス。

`iot:thingName`  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.3.0 以降に利用できます。  
コアデバイスの AWS IoT モノの名前。

## レシピの例
<a name="recipe-examples"></a>

コンポーネントのレシピを作成する際には、次のレシピ例を参照してください。

AWS IoT Greengrass は、Greengrass ソフトウェアカタログと呼ばれる Greengrass コンポーネントのインデックスをキュレートします。このカタログは、Greengrass コミュニティによって開発された Greengrass コンポーネントを追跡します。このカタログから、コンポーネントをダウンロード、変更、デプロイして Greengrass アプリケーションを作成できます。詳細については、「[コミュニティコンポーネント](greengrass-software-catalog.md)」を参照してください。

**Topics**
+ [Hello World コンポーネントレシピ](#recipe-example-hello-world)
+ [Python ランタイムコンポーネントの例](#recipe-example-python-runtime)
+ [複数のフィールドを指定するコンポーネントレシピ](#recipe-example-all-fields)

### Hello World コンポーネントレシピ
<a name="recipe-example-hello-world"></a>

次のレシピは、Python スクリプトを実行する Hello World コンポーネントについて説明しています。このコンポーネントはすべてのプラットフォームをサポートしており、 AWS IoT Greengrass が Python スクリプトに引数としてわたす `Message` パラメータを受け入れます。これは、[入門チュートリアル](getting-started.md)の Hello World コンポーネントのためのレシピです。

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

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.HelloWorld",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "My first AWS IoT Greengrass component.",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "Message": "world"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "run": "python3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
      }
    }
  ]
}
```

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

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.HelloWorld
ComponentVersion: '1.0.0'
ComponentDescription: My first AWS IoT Greengrass component.
ComponentPublisher: Amazon
ComponentConfiguration:
  DefaultConfiguration:
    Message: world
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      run: |
        python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
  - Platform:
      os: windows
    Lifecycle:
      run: |
        py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
```

------

### Python ランタイムコンポーネントの例
<a name="recipe-example-python-runtime"></a>

次のレシピは、Python をインストールするコンポーネントについて説明しています。このコンポーネントは 64 ビット Linux デバイスをサポートします。

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

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.PythonRuntime",
  "ComponentDescription": "Installs Python 3.7",
  "ComponentPublisher": "Amazon",
  "ComponentVersion": "3.7.0",
  "Manifests": [
    {
      "Platform": {
        "os": "linux",
        "architecture": "amd64"
      },
      "Lifecycle": {
        "install": "apt-get update\napt-get install python3.7"
      }
    }
  ]
}
```

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

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.PythonRuntime
ComponentDescription: Installs Python 3.7
ComponentPublisher: Amazon
ComponentVersion: '3.7.0'
Manifests:
  - Platform:
      os: linux
      architecture: amd64
    Lifecycle:
      install: |
        apt-get update
        apt-get install python3.7
```

------

### 複数のフィールドを指定するコンポーネントレシピ
<a name="recipe-example-all-fields"></a>

次のコンポーネントレシピでは、複数のレシピフィールドを使用します。

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

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.FooService",
  "ComponentDescription": "Complete recipe for AWS IoT Greengrass components",
  "ComponentPublisher": "Amazon",
  "ComponentVersion": "1.0.0",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "TestParam": "TestValue"
    }
  },
  "ComponentDependencies": {
    "BarService": {
      "VersionRequirement": "^1.1.0",
      "DependencyType": "SOFT"
    },
    "BazService": {
      "VersionRequirement": "^2.0.0"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux",
        "architecture": "amd64"
      },
      "Lifecycle": {
        "install": {
          "Skipif": "onpath git",
          "Script": "sudo apt-get install git"
        },
        "Setenv": {
          "environment_variable1": "variable_value1",
          "environment_variable2": "variable_value2"
        }
      },
      "Artifacts": [
        {
          "Uri": "s3://amzn-s3-demo-bucket/hello_world.zip",
          "Unarchive": "ZIP"
        },
        {
          "Uri": "s3://amzn-s3-demo-bucket/hello_world_linux.py"
        }
      ]
    },
    {
      "Lifecycle": {
        "install": {
          "Skipif": "onpath git",
          "Script": "sudo apt-get install git",
          "RequiresPrivilege": "true"
        }
      },
      "Artifacts": [
        {
          "Uri": "s3://amzn-s3-demo-bucket/hello_world.py"
        }
      ]
    }
  ]
}
```

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

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.FooService
ComponentDescription: Complete recipe for AWS IoT Greengrass components
ComponentPublisher: Amazon
ComponentVersion: 1.0.0
ComponentConfiguration:
  DefaultConfiguration:
    TestParam: TestValue
ComponentDependencies:
  BarService:
    VersionRequirement: ^1.1.0
    DependencyType: SOFT
  BazService:
    VersionRequirement: ^2.0.0
Manifests:
  - Platform:
      os: linux
      architecture: amd64
    Lifecycle:
      install:
        SkipIf: onpath git
        Script: sudo apt-get install git
      SetEnv:
        environment_variable1: variable_value1
        environment_variable2: variable_value2
    Artifacts:
      - Uri: 's3://amzn-s3-demo-bucket/hello_world.zip'
        Unarchive: ZIP
      - Uri: 's3://amzn-s3-demo-bucket/hello_world_linux.py'
  - Lifecycle:
      install:
        SkipIf: onpath git
        Script: sudo apt-get install git
        RequiresPrivilege: 'true'
    Artifacts:
      - Uri: 's3://amzn-s3-demo-bucket/hello_world.py'
```

------