

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

# AWS IoT Greengrass Core ソフトウェアを設定する
<a name="configure-greengrass-core-v2"></a>

 AWS IoT Greengrass Core ソフトウェアには、ソフトウェアの設定に使用できるオプションが用意されています。デプロイを作成して、各 AWS IoT Greengrass コアデバイスで Core ソフトウェアを設定できます。

**Topics**
+ [Greengrass nucleus コンポーネントをデプロイする](#configure-nucleus-component)
+ [Greengrass nucleus をシステムサービスとして設定する](#configure-system-service)
+ [JVM オプションでメモリ割り当てを制御する](#jvm-tuning)
+ [コンポーネントを実行するユーザーを設定する](#configure-component-user)
+ [コンポーネントのシステムリソース制限を設定する](#configure-component-system-resource-limits)
+ [ポート 443 での接続またはネットワークプロキシを通じた接続](#configure-alpn-network-proxy)
+ [プライベート CA によって署名されたデバイス証明書を使用する](#configure-nucleus-private-ca)
+ [MQTT タイムアウトとキャッシュ設定を設定する](#configure-mqtt)
+ [IPv6 ネットワークで Greengrass Nucleus を設定する](#configure-ipv6)

## Greengrass nucleus コンポーネントをデプロイする
<a name="configure-nucleus-component"></a>

AWS IoT Greengrass は、Greengrass AWS IoT Greengrass コアデバイスにデプロイできるコンポーネントとして Core ソフトウェアを提供します。複数の Greengrass コアデバイスに同じ設定を適用するためのデプロイを作成することができます。詳細については、「[Greengrass nucleus](greengrass-nucleus-component.md)」および「[AWS IoT Greengrass Core ソフトウェア (OTA) の更新](update-greengrass-core-v2.md)」を参照してください。

## Greengrass nucleus をシステムサービスとして設定する
<a name="configure-system-service"></a>

以下を実行するには、デバイスの init システムで AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定する必要があります。
+ デバイスの起動時に AWS IoT Greengrass Core ソフトウェアを起動します。これは、大量のデバイスのフリートを管理する場合に有効な方法です。
+ プラグインコンポーネントをインストールして実行します。いくつかの AWS提供されるコンポーネントはプラグインコンポーネントであり、Greengrass nucleus と直接インターフェイスできます。コンポーネントタイプの詳細については、「[コンポーネントタイプ](develop-greengrass-components.md#component-types)」を参照してください。
+ over-the-air (OTA) 更新をコアデバイスの AWS IoT Greengrass Core ソフトウェアに適用します。詳細については、「[AWS IoT Greengrass Core ソフトウェア (OTA) の更新](update-greengrass-core-v2.md)」を参照してください。
+ デプロイによってコンポーネントが新しいバージョンに更新されるか、特定の設定パラメータが更新されると、コンポーネントが AWS IoT Greengrass Core ソフトウェアまたはコアデバイスを再起動できるようにします。詳細については、「[ブートストラップのライフサイクルステップ](component-recipe-reference.md#bootstrap-lifecycle-definition)」を参照してください。

**重要**  <a name="windows-system-service-requirement-important-note"></a>
Windows コアデバイスでは、 AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定する必要があります。

**Topics**
+ [nucleus をシステムサービスとして設定する (Linux)](#configure-system-service-linux)
+ [nucleus をシステムサービスとして設定する (Windows)](#configure-system-service-windows)

### nucleus をシステムサービスとして設定する (Linux)
<a name="configure-system-service-linux"></a>

Linux デバイスは、initd、systemd、SystemV などの様々な初期化システムをサポートします。 AWS IoT Greengrass Core ソフトウェアをインストールして nucleus をシステムサービスとして起動し、デバイスの起動時に起動するように `--setup-system-service true`引数を設定します。インストーラは、systemd を使用するシステムサービスとして AWS IoT Greengrass Core ソフトウェアを設定します。

nucleus がシステムサービスとして実行するように、手動で設定することもできます。次の例は、systemd のサービスファイルです。

```
[Unit]
Description=Greengrass Core

[Service]
Type=simple
PIDFile=/greengrass/v2/alts/loader.pid
RemainAfterExit=no
Restart=on-failure
RestartSec=10
ExecStart=/bin/sh /greengrass/v2/alts/current/distro/bin/loader

[Install]
WantedBy=multi-user.target
```

システムサービスを設定したら、次のコマンドを実行して、起動時のデバイスの起動と AWS IoT Greengrass Core ソフトウェアの起動または停止を設定できます。
+ サービス (systemd) のステータスを確認するには

  ```
  sudo systemctl status greengrass.service
  ```
+ デバイスの起動時に nucleus を起動できるようにするには。

  ```
  sudo systemctl enable greengrass.service
  ```
+ デバイスの起動時に nucleus の起動を停止するには。

  ```
  sudo systemctl disable greengrass.service
  ```
+  AWS IoT Greengrass Core ソフトウェアを起動するには。

  ```
  sudo systemctl start greengrass.service
  ```
+  AWS IoT Greengrass Core ソフトウェアを停止するには。

  ```
  sudo systemctl stop greengrass.service
  ```

### nucleus をシステムサービスとして設定する (Windows)
<a name="configure-system-service-windows"></a>

 AWS IoT Greengrass Core ソフトウェアをインストールして nucleus を Windows サービスとして起動し、デバイスの起動時に起動するように `--setup-system-service true`引数を設定します。

サービスを設定したら、次のコマンドを実行して、起動時のデバイスの起動と AWS IoT Greengrass Core ソフトウェアの起動または停止を設定できます。これらのコマンドを実行するには、管理者としてコマンドプロンプトまたは PowerShell を実行する必要があります。

------
#### [ Windows Command Prompt (CMD) ]
+ サービスのステータスを確認するには

  ```
  sc query "greengrass"
  ```
+ デバイスの起動時に nucleus を起動できるようにするには。

  ```
  sc config "greengrass" start=auto
  ```
+ デバイスの起動時に nucleus の起動を停止するには。

  ```
  sc config "greengrass" start=disabled
  ```
+  AWS IoT Greengrass Core ソフトウェアを起動するには。

  ```
  sc start "greengrass"
  ```
+  AWS IoT Greengrass Core ソフトウェアを停止するには。

  ```
  sc stop "greengrass"
  ```
**注記**  <a name="windows-ignore-shutdown-signal-behavior-note"></a>
Windows デバイスでは、 AWS IoT Greengrass Core ソフトウェアは Greengrass コンポーネントプロセスをシャットダウンしている間、このシャットダウンシグナルを無視します。このコマンドの実行時に AWS IoT Greengrass Core ソフトウェアがシャットダウンシグナルを無視する場合は、数秒待ってから再試行してください。

------
#### [ PowerShell ]
+ サービスのステータスを確認するには

  ```
  Get-Service -Name "greengrass"
  ```
+ デバイスの起動時に nucleus を起動できるようにするには。

  ```
  Set-Service -Name "greengrass" -Status stopped -StartupType automatic
  ```
+ デバイスの起動時に nucleus の起動を停止するには。

  ```
  Set-Service -Name "greengrass" -Status stopped -StartupType disabled
  ```
+  AWS IoT Greengrass Core ソフトウェアを起動するには。

  ```
  Start-Service -Name "greengrass"
  ```
+  AWS IoT Greengrass Core ソフトウェアを停止するには。

  ```
  Stop-Service -Name "greengrass"
  ```
**注記**  <a name="windows-ignore-shutdown-signal-behavior-note"></a>
Windows デバイスでは、 AWS IoT Greengrass Core ソフトウェアは Greengrass コンポーネントプロセスをシャットダウンしている間、このシャットダウンシグナルを無視します。このコマンドの実行時に AWS IoT Greengrass Core ソフトウェアがシャットダウンシグナルを無視する場合は、数秒待ってから再試行してください。

------

## JVM オプションでメモリ割り当てを制御する
<a name="jvm-tuning"></a>

メモリが制限された AWS IoT Greengrass デバイスで実行している場合は、Java 仮想マシン (JVM) オプションを使用して、 AWS IoT Greengrass Core ソフトウェアが使用するメモリ量を制御する最大ヒープサイズ、ガベージコレクションモード、コンパイラオプションを制御できます。JVM のヒープサイズは、[ガベージコレクション](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html)が発生する前、あるいはアプリケーションがメモリ不足になる前に、アプリケーションが使用できるメモリ量を決定します。最大ヒープサイズは、多量の作業を実行中にヒープを拡張する場合に JVM が割り当てることのできる最大メモリ容量を指定します。

メモリの割り当てを制御するには、新しいデプロイを作成するか、nucleus コンポーネントが含まれる既存のデプロイを修正し、[nucleus コンポーネント設定](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-jvm-options)内の `jvmOptions` 設定パラメータで JVM オプションを指定します。

要件に応じて、メモリ割り当てを減らすか、最小のメモリ割り当てで AWS IoT Greengrass Core ソフトウェアを実行できます。

**メモリ割り当ての削減**  
メモリ割り当てを減らして AWS IoT Greengrass Core ソフトウェアを実行するには、次の設定マージ更新例を使用して nucleus 設定で JVM オプションを設定することをお勧めします。

```
{
  "jvmOptions": "-XX:+UseSerialGC -XX:TieredStopAtLevel=1"
}
```

**最小限のメモリ割り当て**  
最小メモリ割り当てで AWS IoT Greengrass Core ソフトウェアを実行するには、次の設定マージ更新例を使用して nucleus 設定で JVM オプションを設定することをお勧めします。

```
{
  "jvmOptions": "-Xmx32m -XX:+UseSerialGC -Xint"
}
```

**重要**  
最小メモリ割り当てで AWS IoT Greengrass Core ソフトウェアを実行すると、JVM がより少ないメモリを使用するときにより多くの処理を行うため、低スペックシステムのパフォーマンスに大きな影響を与える可能性があります。メモリとパフォーマンスのニーズのバランスを取るために、オプションを調整することをお勧めします。

これらの設定マージ更新例では、次の JVM オプションを使用します。

`-XX:+UseSerialGC`  
JVM ヒープスペースにシリアルガベージコレクションを使用するように指定します。シリアルガベージコレクタは速度が遅くなりますが、他の JVM ガベージコレクションの実装と比べると使用するメモリが少なくなります。

`-XX:TieredStopAtLevel=1`  
Java ジャストインタイム (JIT) コンパイラを一度使用するように、JVM に指示します。JIT でコンパイルされたコードはデバイスメモリ内のスペースを使用するため、JIT コンパイラを複数回使用すると、1 回のコンパイルよりも多くのメモリを消費します。

`-XmxNNm`  
JVM の最大ヒープサイズを設定します。  
最大ヒープサイズの設定が低すぎると、パフォーマンスが低下したり、メモリ不足エラーが発生する可能性があります。`-XmxNNm` オプションで最大サイズを設定する前に、現在のヒープ使用量を測定することをお勧めします。JVM オプションを使用して `-XX:NativeMemoryTracking=detail` JVM を設定します。次に、[jcmd Utility](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html) 内の `VM.native_memory` コマンドリクエストを使用して、現在のヒープ使用量を測定します。
ヒープの測定がオプションでない場合は、開始値として `-Xmx64m` を使用してヒープサイズを 64 MB に制限します。その後、そこから最大ヒープサイズを段階的に減らしていきます。最小限のメモリ割り当てにする場合は、`-Xmx32m` を開始値として指定し、ヒープサイズを 32 MB に制限します。  
実際の要件に応じて、`-Xmx` の値は増減することができますが、最大ヒープサイズは 16 MB 以下に設定しないことを強く推奨します。また、必要な JVM ヒープサイズは、コアデバイスにデプロイされたプラグインコンポーネントをもとに、時間の経過とともに変化する場合もあります。最大ヒープサイズが環境に対して低すぎると、メモリ不足が原因で AWS IoT Greengrass Core ソフトウェアで予期しないエラーが発生する可能性があります。メモリ不足が原因でパフォーマンスが低下したり、エラーが発生したりする場合は、既知の正常な設定に戻します。例えば、通常のコミットヒープサイズが `41428KB` の場合、`-Xmx40m` を使用してヒープ使用量をわずかに制限します。

`-Xint`  
Java ジャストインタイム (JIT) コンパイラを使用しないように、JVM に指示します。代わりに、JVM は解釈専用モードで実行されます。このモードは JIT コンパイルコードを実行する場合よりも速度は遅く (低価格帯システムへのデプロイと比較して、潜在的に 20 倍遅くなる) なりますが、コンパイルされたコードはメモリ内のスペースを使用しません。

設定マージ更新の作成については、「[コンポーネント設定の更新](update-component-configurations.md)」を参照してください。

## コンポーネントを実行するユーザーを設定する
<a name="configure-component-user"></a>

 AWS IoT Greengrass Core ソフトウェアは、ソフトウェアを実行するものとは異なるシステムユーザーおよびグループとしてコンポーネントプロセスを実行できます。これにより、 AWS IoT Greengrass コアデバイスで実行されるコンポーネントにアクセス許可を付与することなく、 Core ソフトウェアをルートとして、または管理者ユーザーとして実行できるため、セキュリティが向上します。

次の表は、指定したユーザーとして AWS IoT Greengrass Core ソフトウェアが実行できるコンポーネントのタイプを示しています。詳細については、「[コンポーネントタイプ](develop-greengrass-components.md#component-types)」を参照してください。


| コンポーネントタイプ | コンポーネントユーザを設定する | 
| --- | --- | 
|  nucleus  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-no.png) いいえ   | 
|  プラグイン  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-no.png) いいえ   | 
|  ジェネリック  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-yes.png) はい   | 
|  Lambda (非コンテナ化)  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-yes.png) はい   | 
|  Lambda (コンテナ化)  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-yes.png) はい   | 

デプロイ設定で指定する前に、コンポーネントユーザーを作成する必要があります。Windows ベースのデバイスでは、LocalSystem アカウントの認証情報マネージャーインスタンスにも、ユーザーのユーザー名とパスワードを保存する必要があります。詳細については、「[Windows デバイスでコンポーネントユーザーをセットアップする](#create-component-user-windows)」を参照してください。

Linux ベースのデバイスでコンポーネントユーザーを設定する場合、オプションでグループを指定することもできます。ユーザーとグループを `user:group` の形式に従ってコロン (`:`) で区切って指定します。グループを指定しない場合、 AWS IoT Greengrass Core ソフトウェアはデフォルトでユーザーのプライマリグループになります。名前または ID を使用して、ユーザーとグループを識別できます。

Linux ベースのデバイスでは、コンポーネントを存在しないシステムユーザー (不明なユーザーとも呼ばれる) として実行することで、セキュリティを強化することもできます。Linux プロセスは、同じユーザーによって実行される他のプロセスに信号を送ることができます。不明なユーザーは他のプロセスを実行しないため、コンポーネントを不明なユーザーとして実行して、コンポーネントがコアデバイス上の他のコンポーネントに信号を送るのを防ぐことができます。コンポーネントを不明なユーザーとして実行するには、コアデバイスに存在しないユーザー ID を指定します。不明なグループとして実行する場合は、存在しないグループ ID を指定することもできます。

各コンポーネントと各コアデバイスごとに、ユーザーを設定することができます。
+ **コンポーネントの設定**

  各コンポーネントが、そのコンポーネントに固有のユーザーで実行されるように設定することができます。デプロイを作成するときに、各コンポーネントのユーザをそのコンポーネントの `runWith` 設定で指定できます。 AWS IoT Greengrass Core ソフトウェアは、コンポーネントを設定した場合、指定されたユーザーとしてコンポーネントを実行します。設定がない場合は、コアデバイス用に設定したデフォルトのユーザーとしてコンポーネントを実行します。デプロイ設定でコンポーネントユーザーを指定するための詳細については、[デプロイの作成](create-deployments.md) の [`runWith`](create-deployments.md#component-run-with-config) 設定パラメータを参照してください。
+ **コアデバイスのデフォルトユーザーを設定する**

   AWS IoT Greengrass Core ソフトウェアがコンポーネントの実行に使用するデフォルトユーザーを設定できます。 AWS IoT Greengrass Core ソフトウェアは、コンポーネントを実行するときに、そのコンポーネントのユーザーを指定しているかどうかを確認し、それを使用してコンポーネントを実行します。コンポーネントがユーザーを指定しない場合、 AWS IoT Greengrass Core ソフトウェアはコアデバイス用に設定したデフォルトユーザーとしてコンポーネントを実行します。詳細については、「[デフォルトのコンポーネントユーザーを設定する](#configure-default-component-user)」を参照してください。

**注記**  
Windows ベースのデバイスでは、コンポーネントを実行するにあたり、少なくとも一人のデフォルトユーザーを指定する必要があります。  
Linux ベースのデバイスでは、コンポーネントを実行するユーザーを設定しない場合には、以下について考慮する必要があります。  
 AWS IoT Greengrass Core ソフトウェアをルートとして実行した場合、ソフトウェアはコンポーネントを実行しません。root として実行する場合は、コンポーネントを実行するデフォルトユーザーを指定する必要があります。
 AWS IoT Greengrass Core ソフトウェアを非ルートユーザーとして実行する場合、ソフトウェアはそのユーザーとしてコンポーネントを実行します。

**Topics**
+ [Windows デバイスでコンポーネントユーザーをセットアップする](#create-component-user-windows)
+ [デフォルトのコンポーネントユーザーを設定する](#configure-default-component-user)

### Windows デバイスでコンポーネントユーザーをセットアップする
<a name="create-component-user-windows"></a>

**Windows デバイスでコンポーネントユーザーをセットアップするには**

1. デバイス上の LocalSystem アカウントにデフォルトユーザーを作成します。

   ```
   net user /add component-user password
   ```

1. [Microsoft の PsExec ユーティリティ](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)を使用して、コンポーネントユーザーのユーザー名とパスワードを LocalSystem アカウントの認証情報マネージャインスタンスに格納します。

   ```
   psexec -s cmd /c cmdkey /generic:component-user /user:component-user /pass:password
   ```
**注記**  
Windows デバイスでは、LocalSystem アカウントが Greengrass nucleus を実行します。コンポーネントユーザー情報を LocalSystem アカウントに保存するには、PsExec ユーティリティを使用する必要があります。認証情報マネージャーアプリケーションを使用すると、この情報は LocalSystem アカウントではなく、現在ログオンしているユーザーの Windows アカウントに保存されます。

### デフォルトのコンポーネントユーザーを設定する
<a name="configure-default-component-user"></a>

デプロイを使用して、コアデバイスのデフォルトユーザーを設定できます。このデプロイでは、[nucleus コンポーネント](greengrass-nucleus-component.md)の設定を更新します。

**注記**  
`--component-default-user` オプションを使用して AWS IoT Greengrass Core ソフトウェアをインストールするときに、デフォルトユーザーを設定することもできます。詳細については、「[AWS IoT Greengrass Core ソフトウェアをインストールします。](install-greengrass-core-v2.md)」を参照してください。

`aws.greengrass.Nucleus` コンポーネントに対する、以下の設定更新を指定する[デプロイを作成します](create-deployments.md)。

------
#### [ Linux ]

```
{
  "runWithDefault": {
    "posixUser": "ggc_user:ggc_group"
  }
}
```

------
#### [ Windows ]

```
{
  "runWithDefault": {
    "windowsUser": "ggc_user"
  }
}
```

**注記**  
指定するユーザーが存在し、このユーザーのユーザー名とパスワードが、Windows デバイス上にある LocalSystem アカウントの認証情報マネージャーインスタンスに格納されている必要があります。詳細については、「[Windows デバイスでコンポーネントユーザーをセットアップする](#create-component-user-windows)」を参照してください。

------

次の例では、`ggc_user` をデフォルトユーザー、および `ggc_group` をデフォルトグループとして設定する Linux ベースのデバイスのデプロイを定義しています。`merge` 設定の更新には、シリアル化された JSON オブジェクトが必要です。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"runWithDefault\":{\"posixUser\":\"ggc_user:ggc_group\"}}"
      }
    }
  }
}
```

## コンポーネントのシステムリソース制限を設定する
<a name="configure-component-system-resource-limits"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md) v2.4.0 以降で使用できます。現在、この機能は Windows AWS IoT Greengrass コアデバイスでサポートされていません。

各コンポーネントのプロセスがコアデバイスで使用できる CPU および RAM の最大使用数を設定できます。

下表は、システムリソースの制限をサポートするコンポーネントの種類を示したものです。詳細については、「[コンポーネントタイプ](develop-greengrass-components.md#component-types)」を参照してください。


| コンポーネントタイプ | システムリソースの制限を設定する | 
| --- | --- | 
|  nucleus  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-no.png) いいえ   | 
|  プラグイン  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-no.png) いいえ   | 
|  ジェネリック  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-yes.png) はい   | 
|  Lambda (非コンテナ化)  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-yes.png) はい   | 
|  Lambda (コンテナ化)  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/images/icon-no.png) いいえ   | 

**重要**  
[Docker コンテナで AWS IoT Greengrass Core ソフトウェアを実行する場合、](run-greengrass-docker.md)システムリソースの制限はサポートされていません。

各コンポーネントと各コアデバイスごとに、システムリソースの制限を設定することができます。
+ **コンポーネントの設定**

  各コンポーネントは、そのコンポーネントに固有のシステムリソース制限を設定することができます。デプロイを作成するときに、デプロイ内の各コンポーネントに対して、システムリソースの制限を指定することができます。コンポーネントがシステムリソース制限をサポートしている場合、 AWS IoT Greengrass Core ソフトウェアは、コンポーネントのプロセスにその制限を適用します。コンポーネントのシステムリソース制限を指定しない場合、 AWS IoT Greengrass Core ソフトウェアはコアデバイスに設定したデフォルトを使用します。詳細については、「[デプロイの作成](create-deployments.md)」を参照してください。
+ **コアデバイスのデフォルトを設定する**

   AWS IoT Greengrass Core ソフトウェアがこれらの制限をサポートするコンポーネントに適用するデフォルトのシステムリソース制限を設定できます。 AWS IoT Greengrass Core ソフトウェアがコンポーネントを実行すると、そのコンポーネントに指定したシステムリソース制限が適用されます。そのコンポーネントがシステムリソース制限を指定しない場合、 AWS IoT Greengrass Core ソフトウェアは、コアデバイス用に設定したデフォルトのシステムリソース制限を適用します。デフォルトのシステムリソース制限を指定しない場合、 AWS IoT Greengrass Core ソフトウェアはデフォルトでシステムリソース制限を適用しません。詳細については、「[デフォルトのシステムリソース制限を設定する](#configure-default-component-system-resource-limits)」を参照してください。

### デフォルトのシステムリソース制限を設定する
<a name="configure-default-component-system-resource-limits"></a>

[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)をデプロイして、コアデバイスのデフォルトのシステムリソース制限を設定することができます。デフォルトのシステムリソース制限を設定するには、`aws.greengrass.Nucleus` コンポーネントに対して次の設定更新を指定する[デプロイを作成します](create-deployments.md)。

```
{
  "runWithDefault": {
    "systemResourceLimits": {
      "cpu": cpuTimeLimit,
      "memory": memoryLimitInKb
    }
  }
}
```

次の例では、CPU 時間制限を `2` (4 つの CPU コアを持つデバイスでの使用量 50％ に相当) に設定するデプロイを定義しています。また、この例ではメモリ使用量を 100 MB に設定しています。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"runWithDefault\":{\"systemResourceLimits\":\"cpus\":2,\"memory\":102400}}}"
      }
    }
  }
}
```

## ポート 443 での接続またはネットワークプロキシを通じた接続
<a name="configure-alpn-network-proxy"></a>

AWS IoT Greengrass コアデバイスは、TLS クライアント認証で MQTT メッセージングプロトコル AWS IoT Core を使用して と通信します。慣例では、TLS を介した MQTT ではポート 8883 を使用します。ただし、セキュリティ対策として、制限の厳しい環境では一定範囲の TCP ポートに対するインバウンドトラフィックとアウトバウンドトラフィックを制限する場合があります。例えば、企業のファイアウォールでは HTTPS トラフィック用のポート 443 は開いても、あまり一般的ではないプロトコル用の他のポート (MQTT トラフィック用のポート 8883 など) は閉じる場合があります。他にも、制限のある環境によっては、インターネットに接続する前に、すべてのトラフィックがプロキシを経由する必要が生じる場合もあります。

**注記**  
Greengrass [nucleus コンポーネント v2.0.3 以前を実行する Greengrass ](greengrass-nucleus-component.md)コアデバイスは、ポート 8443 を使用して AWS IoT Greengrass データプレーンエンドポイントに接続します。これらのデバイスは、ポート 8443 でこのエンドポイントに接続できる必要があります。詳細については、「[プロキシまたはファイアウォールを介したデバイストラフィックを許可する](allow-device-traffic.md)」を参照してください。

これらのシナリオで通信を有効にするために、 には次の設定オプション AWS IoT Greengrass が用意されています。
+ **ポート 443 を介した MQTT 通信**。ネットワークでポート 443 への接続を許可している場合は、デフォルトのポート 8883 ではなくポート 443 を MQTT トラフィックに使用するように、Greengrass コアデバイスを設定することができます。ポート 443 への直接接続またはネットワークプロキシサーバーを介した接続を使用できます。証明書ベースのクライアント認証を使用するデフォルト設定とは異なり、ポート 443 上の MQTT は認証に[デバイスのサービスロール](device-service-role.md)を使用します。

  詳細については、「[ポート 443 経由で MQTT を設定する](#configure-mqtt-port-443)」を参照してください。
+ **ポート 443 を介した HTTPS 通信**。 AWS IoT Greengrass Core ソフトウェアはデフォルトでポート 8443 経由で HTTPS トラフィックを送信しますが、ポート 443 を使用するように設定できます。 AWS IoT Greengrass は [Application Layer Protocol Network](https://tools.ietf.org/html/rfc7301) (ALPN) TLS 拡張機能を使用してこの接続を有効にします。デフォルト設定と同様に、ポート 443 経由の HTTPS は証明書ベースのクライアント認証を使用します。
**重要**  
ALPN を使用したポート 443 経由の HTTPS 通信を有効にするためには、コアデバイスで Java 8 更新 252 以降が実行されている必要があります。Java バージョン 9 以降のすべての更新も、ALPN をサポートしています。

  詳細については、「[ポート 443 経由で HTTPS を設定する](#configure-https-port-443)」を参照してください。
+ **ネットワークプロキシを介した接続**。ネットワークプロキシサーバーを Greengrass コアデバイスに接続するための仲介役として設定できます。 AWS IoT Greengrass は、HTTP および HTTPS プロキシに対する基本認証をサポートしています。

  <a name="https-proxy-greengrass-nucleus-requirement"></a>HTTPS プロキシを使用するには、Greengrass コアデバイスで [Greengrass nucleus ](greengrass-nucleus-component.md) v2.5.0 以降を実行している必要があります。

   AWS IoT Greengrass Core ソフトウェアは、、`ALL_PROXY`、、`HTTP_PROXY``HTTPS_PROXY`および `NO_PROXY`環境変数を介してプロキシ設定をコンポーネントに渡します。コンポーネントはこれらの設定を使用して、プロキシ経由で接続する必要があります。コンポーネントは、一般的なライブラリ (boto3、cURL、python `requests` パッケージなど) を使用し、通常、これらの環境変数をデフォルトで使用して接続を行います。関数もこれらの同じ環境変数を指定した場合、 AWS IoT Greengrass ではオーバーライドされません。

  詳細については、「[ネットワークプロキシを設定する](#configure-network-proxy)」を参照してください。

### ポート 443 経由で MQTT を設定する
<a name="configure-mqtt-port-443"></a>

既存のコアデバイスに、または新しいコアデバイスに AWS IoT Greengrass Core ソフトウェアをインストールする際に、ポート 443 経由で MQTT を設定することができます。

**Topics**
+ [既存のコアデバイスにポート 443 経由で MQTT を設定する](#configure-mqtt-port-443-deployment)
+ [インストール中にポート 443 経由で MQTT を設定する](#configure-mqtt-port-443-installer)

#### 既存のコアデバイスにポート 443 経由で MQTT を設定する
<a name="configure-mqtt-port-443-deployment"></a>

デプロイを使用して、単一のコアデバイスまたはコアデバイスのグループに MQTT をポート 443 経由で設定できます。このデプロイでは、[nucleus コンポーネント](greengrass-nucleus-component.md)の設定を更新します。`mqtt` 設定を更新すると、nucleus が再起動します。

ポート 443経由で MQTT を設定するには、`aws.greengrass.Nucleus` コンポーネントに以下の設定更新を指定する[デプロイを作成します](create-deployments.md)。

```
{
  "mqtt": {
    "port": 443
  }
}
```

次の例では、ポート 443 経由で MQTT を設定するデプロイを定義します。`merge` 設定の更新には、シリアル化された JSON オブジェクトが必要です。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"mqtt\":{\"port\":443}}"
      }
    }
  }
}
```

#### インストール中にポート 443 経由で MQTT を設定する
<a name="configure-mqtt-port-443-installer"></a>

Core ソフトウェアを AWS IoT Greengrass コアデバイスにインストールするときに、ポート 443 経由で MQTT を設定できます。ポート 443 経由で MQTT を設定するには、`--init-config` インストーラ引数を使用します。この引数は、[手動によるプロビジョニング](manual-installation.md)、[フリートプロビジョニング](fleet-provisioning.md)、または[カスタムプロビジョニング](custom-provisioning.md)でインストールするときに指定できます。

### ポート 443 経由で HTTPS を設定する
<a name="configure-https-port-443"></a>

この機能を使用するには、[Greengrass nucleus](greengrass-nucleus-component.md) v2.0.4 以降が必要です。

既存のコアデバイスに、または新しいコアデバイスに AWS IoT Greengrass Core ソフトウェアをインストールする際に、ポート 443 経由で HTTPS を設定することができます。

**Topics**
+ [既存のコアデバイスにポート 443 経由で HTTPS を設定する](#configure-https-port-443-deployment)
+ [インストール中にポート 443 経由で HTTPS を設定する](#configure-https-port-443-installer)

#### 既存のコアデバイスにポート 443 経由で HTTPS を設定する
<a name="configure-https-port-443-deployment"></a>

デプロイを使用して、単一のコアデバイスまたはコアデバイスのグループに HTTPS をポート 443 経由で設定できます。このデプロイでは、[nucleus コンポーネント](greengrass-nucleus-component.md)の設定を更新します。

ポート 443 経由で HTTPS を設定するには、`aws.greengrass.Nucleus` コンポーネントに以下の設定更新を指定する[デプロイを作成します](create-deployments.md)。

```
{
  "greengrassDataPlanePort": 443
}
```

次の例では、ポート 443 経由で HTTPS を設定するデプロイを定義します。`merge` 設定の更新には、シリアル化された JSON オブジェクトが必要です。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"greengrassDataPlanePort\":443}"
      }
    }
  }
}
```

#### インストール中にポート 443 経由で HTTPS を設定する
<a name="configure-https-port-443-installer"></a>

Core ソフトウェアを AWS IoT Greengrass コアデバイスにインストールするときに、ポート 443 経由で HTTPS を設定できます。ポート 443 経由で HTTPS を設定するには、`--init-config` インストーラ引数を使用します。この引数は、[手動によるプロビジョニング](manual-installation.md)、[フリートプロビジョニング](fleet-provisioning.md)、または[カスタムプロビジョニング](custom-provisioning.md)でインストールするときに指定できます。

### ネットワークプロキシを設定する
<a name="configure-network-proxy"></a>

このセクションの手順に従って、Greengrass コアデバイスが HTTP または HTTPS ネットワークプロキシを介してインターネットに接続するように設定します。コアデバイスが使用するエンドポイントとポートの詳細については、「[プロキシまたはファイアウォールを介したデバイストラフィックを許可する](allow-device-traffic.md)」を参照してください。

**重要**  
コアデバイスで [Greengrass nucleus](greengrass-nucleus-component.md) v2.4.0 以前のバージョンが動作している場合、ネットワークプロキシを使用するには、デバイスのロールが以下の権限を許可している必要があります。  
`iot:Connect`
`iot:Publish`
`iot:Receive`
`iot:Subscribe`
これは、デバイスがトークン交換サービスの AWS 認証情報を使用して MQTT 接続を認証するため必要です AWS IoT。デバイスは MQTT を使用して からデプロイを受信およびインストールするため AWS クラウド、ロールにこれらのアクセス許可を定義しない限り、デバイスは機能しません。デバイスは通常 MQTT 接続を認証するために X.509 証明書を使用しますが、プロキシを使用している場合には、認証にこれを使用できません。  
デバイスのロールを設定する方法の詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

**Topics**
+ [既存のコアデバイスでネットワークプロキシを設定する](#configure-network-proxy-deployment)
+ [インストール中にネットワークプロキシを設定する](#configure-network-proxy-installer)
+ [コアデバイスが HTTPS プロキシを信頼できるようにする](#https-proxy-certificate-trust)
+ [networkProxy オブジェクト](#network-proxy-object)

#### 既存のコアデバイスでネットワークプロキシを設定する
<a name="configure-network-proxy-deployment"></a>

デプロイを使用して、単一のコアデバイスまたはコアデバイスのグループにネットワークプロキシを設定できます。このデプロイでは、[nucleus コンポーネント](greengrass-nucleus-component.md)の設定を更新します。`networkProxy` 設定を更新すると、nucleus が再起動します。

ネットワークプロキシを設定するには、`aws.greengrass.Nucleus` コンポーネントに以下の設定更新をマージする[デプロイを作成します](create-deployments.md)。この設定更新プログラムには、[networkProxy オブジェクト](#network-proxy-object)が含まれます。

```
{
  "networkProxy": {
    "noProxyAddresses": "http://192.168.0.1,www.example.com",
    "proxy": {
      "url": "https://my-proxy-server:1100"
    }
  }
}
```

次の例では、ネットワークプロキシを設定するデプロイを定義します。`merge` 設定の更新には、シリアル化された JSON オブジェクトが必要です。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"networkProxy\":{\"noProxyAddresses\":\"http://192.168.0.1,www.example.com\",\"proxy\":{\"url\":\"https://my-proxy-server:1100\",\"username\":\"Mary_Major\",\"password\":\"pass@word1357\"}}}"
      }
    }
  }
}
```

#### インストール中にネットワークプロキシを設定する
<a name="configure-network-proxy-installer"></a>

Core ソフトウェアを AWS IoT Greengrass コアデバイスにインストールするときに、ネットワークプロキシを設定できます。`--init-config` インストーラ引数を使用して、ネットワークプロキシを設定します。この引数は、[手動によるプロビジョニング](manual-installation.md)、[フリートプロビジョニング](fleet-provisioning.md)、または[カスタムプロビジョニング](custom-provisioning.md)でインストールするときに指定できます。

#### コアデバイスが HTTPS プロキシを信頼できるようにする
<a name="https-proxy-certificate-trust"></a>

HTTPS プロキシを使用するようにコアデバイスを設定する場合は、コアデバイスにプロキシサーバー証明書チェーンを追加して、コアデバイスが HTTPS プロキシを信頼するようにする必要があります。この設定を行わなかった場合、コアデバイスがプロキシ経由でトラフィックをルーティングしようとしたときにエラーが発生する可能性があります。コアデバイスの Amazon ルート CA 証明書ファイルにプロキシサーバー CA 証明書を追加します。

**コアデバイスに HTTPS プロキシを信頼させるには**

1. コアデバイス上で Amazon ルート CA 証明書ファイルを検索します。
   + [自動プロビジョニング](quick-installation.md)を使用して AWS IoT Greengrass Core ソフトウェアをインストールした場合、Amazon ルート CA 証明書ファイルは にあります`/greengrass/v2/rootCA.pem`。
   + [手動](manual-installation.md)プロビジョニングまたは[フリートプロビジョニング](fleet-provisioning.md)を使用して AWS IoT Greengrass Core ソフトウェアをインストールした場合、Amazon ルート CA 証明書ファイルが に存在する可能性があります`/greengrass/v2/AmazonRootCA1.pem`。

   Amazon ルート CA 証明書がこれらの場所に存在しない場合は、`/greengrass/v2/config/effectiveConfig.yaml` の `system.rootCaPath` プロパティを確認して場所を見つけます。

1. Amazon ルート CA 証明書ファイルにプロキシサーバー CA 証明書ファイルの内容を追加します。

   次の例は、Amazon ルート CA 証明書ファイルに追加されたプロキシサーバー CA 証明書を示しています。

   ```
   -----BEGIN CERTIFICATE-----
   MIIEFTCCAv2gAwIQWgIVAMHSAzWG/5YVRYtRQOxXUTEpHuEmApzGCSqGSIb3DQEK
   \nCwUAhuL9MQswCQwJVUzEPMAVUzEYMBYGA1UECgwP1hem9uLmNvbSBJbmMuMRww
   ... content of proxy CA certificate ...
   +vHIRlt0e5JAm5\noTIZGoFbK82A0/nO7f/t5PSIDAim9V3Gc3pSXxCCAQoFYnui
   GaPUlGk1gCE84a0X\n7Rp/lND/PuMZ/s8YjlkY2NmYmNjMCAXDTE5MTEyN2cM216
   gJMIADggEPADf2/m45hzEXAMPLE=
   -----END CERTIFICATE-----
   
   -----BEGIN CERTIFICATE-----
   MIIDQTCCAimgF6AwIBAgITBmyfz/5mjAo54vB4ikPmljZKyjANJmApzyMZFo6qBg
   ADA5MQswCQYDVQQGEwJVUzEPMA0tMVT8QtPHRh8jrdkGA1UEChMGDV3QQDExBBKW
   ... content of root CA certificate ...
   o/ufQJQWUCyziar1hem9uMRkwFwYVPSHCb2XV4cdFyQzR1KldZwgJcIQ6XUDgHaa
   5MsI+yMRQ+hDaXJiobldXgjUka642M4UwtBV8oK2xJNDd2ZhwLnoQdeXeGADKkpy
   rqXRfKoQnoZsG4q5WTP46EXAMPLE
   -----END CERTIFICATE-----
   ```

#### networkProxy オブジェクト
<a name="network-proxy-object"></a>

ネットワークプロキシに関する情報を指定するには、`networkProxy` オブジェクトを使用します。このオブジェクトには、次の情報が含まれます。

`noProxyAddresses`  
(オプション) プロキシの対象外となる IP アドレスやホスト名をカンマで区切ったリスト。

`proxy`  
接続先のプロキシ。このオブジェクトには、次の情報が含まれます。    
`url`  
プロキシサーバーの URL (`scheme://userinfo@host:port` 形式)。  <a name="nucleus-component-configuration-proxy-url-segments"></a>
+ `scheme` - スキーム。`http` または `https` である必要があります。
**重要**  
<a name="https-proxy-greengrass-nucleus-requirement"></a>HTTPS プロキシを使用するには、Greengrass コアデバイスで [Greengrass nucleus ](greengrass-nucleus-component.md) v2.5.0 以降を実行している必要があります。  
HTTPS プロキシを設定する場合は、コアデバイスの Amazon ルート CA 証明書にプロキシサーバー CA 証明書を追加する必要があります。詳細については、「[コアデバイスが HTTPS プロキシを信頼できるようにする](#https-proxy-certificate-trust)」を参照してください。
+ `userinfo` - (オプション) ユーザー名とパスワードの情報。この情報を `url` で指定する場合、Greengrass コアデバイスは `username` および `password` フィールドを無視します。
+ `host` – プロキシサーバーのホスト名または IP アドレス。
+ `port` - (オプション) ポート番号。ポートを指定しない場合、Greengrass コアデバイスは次のデフォルト値を使用します。
  + `http` – 80
  + `https` – 443  
`username`  
(オプション) プロキシサーバーを認証するユーザー名です。  
`password`  
(オプション) プロキシサーバーを認証するパスワードです。

## プライベート CA によって署名されたデバイス証明書を使用する
<a name="configure-nucleus-private-ca"></a>

カスタムのプライベート認証機関 (CA) を使用する場合は、 Greengrass nucleus の **greengrassDataPlaneEndpoint** で **iotdata** を設定する必要があります。このオプションは、**--init-config** [インストーラ引数](configure-installer.md)を使用するデプロイまたはインストール中に設定できます。

デバイスが接続する Greengrass データプレーンのエンドポイントを、カスタマイズすることができます。この設定オプションを **iotdata** に設定して、Greengrass データプレーンエンドポイントを (**iotDataEndpoint** により指定することが可能な) IoT データエンドポイントと同じエンドポイントに設定できます。

## MQTT タイムアウトとキャッシュ設定を設定する
<a name="configure-mqtt"></a>

 AWS IoT Greengrass 環境では、コンポーネントは MQTT を使用して通信できます AWS IoT Core。 AWS IoT Greengrass Core ソフトウェアは、コンポーネントの MQTT メッセージを管理します。コアデバイスが AWS クラウドへの接続を失うと、ソフトウェアは MQTT メッセージをキャッシュして、接続が復元されたときに後で再試行します。メッセージのタイムアウトやキャッシュのサイズなどの設定を設定できます。詳細については、「[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)」の「`mqtt` および `mqtt.spooler` 設定パラメータ」を参照してください。

AWS IoT Core は、MQTT メッセージブローカーにサービスクォータを課します。これらのクォータは、コアデバイスと AWS IoT Core間に送信されるメッセージに適用される場合があります。詳細については、「*AWS 全般のリファレンス*」の「[AWS IoT Core message broker service quotas](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits)」を参照してください。

## IPv6 ネットワークで Greengrass Nucleus を設定する
<a name="configure-ipv6"></a>

 Greengrass Nucleus は Greengrass API AWS IoT Core を通じて と通信します。 [ APIs](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) Greengrass API は、デュアルスタック環境で IPv6 をサポートしています。

IPv6 のデュアルスタックエンドポイントを有効にするには:
+  システムプロパティ `aws.useDualstackEndpoint=true`、および `java.net.preferIPv6Addresses=true` を `jvmOptions` に追加します 
+  `s3EndpointType` を `DUALSTACK` に設定します。

 [デプロイ](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html)時にこのオプションを設定するか、`--init-config` [インストーラ引数](https://docs.aws.amazon.com/greengrass/v2/developerguide/configure-installer.html)を使用して手動でプロビジョニングします。詳細については、「[Using Amazon S3 dual-stack endpoints](https://docs.aws.amazon.com/AmazonS3/latest/API/dual-stack-endpoints.html)」を参照してください。

**Example デプロイ用のコード:**  

```
{
    "jvmOptions": "-Daws.useDualstackEndpoint=true",
    "s3EndpointType":"DUALSTACK"
}
```

**Example 手動プロビジョニングによる `config.yaml`:**  

```
---
system:
  ...
services:
  aws.greengrass.Nucleus:
    ...
    configuration:
      ...
      jvmOptions: "-Daws.useDualstackEndpoint=true -Djava.net.preferIPv6Addresses=true"
      s3EndpointType: "DUALSTACK"
```