

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Argo CD 設定を構成する
<a name="argocd-configure-settings"></a>

EKS Capability for Argo CD により、完全マネージド Argo CD エクスペリエンスを取得できます。アップストリーム Argo CD には多くのオプション設定と機能があり、EKS Capability for Argo CD はそれらのサブセットをサポートしています。サポートされている設定では、クラスターの `argocd-cm` ConfigMap を介して、アップストリーム Argo CD と同じ方法でそれらを設定します。AWS はその ConfigMap からサポートされているフィールドを読み取り、マネージド Argo CD インスタンスに適用します。

以下のセクションでは、サポートされている設定で `argocd-cm` ConfigMap を設定する方法について説明します。

## 前提条件
<a name="_prerequisites"></a>

Argo CD 設定を構成する前に、以下が必要です:
+ Argo CD 機能が作成されている EKS クラスター ([Argo CD 機能を作成する](create-argocd-capability.md) を参照)
+ この機能の Argo CD 用に設定された名前空間 (デフォルトでは `argocd` 名前空間)
+ クラスターと通信できるように設定された `kubectl` CLI

## argocd-cm ConfigMap を設定する
<a name="_configure_the_argocd_cm_configmap"></a>

サポートされている Argo CD 設定を構成するには、クラスターに `argocd-cm` という名前の ConfigMap を作成します。マネージド機能は、この ConfigMap からサポートされているフィールドを読み取り、マネージド Argo CD インスタンスに適用します。この機能は、設定したサポートされていないフィールドや機能を無視します。サポートされているフィールドのリストをレビューして、設定が有効であることを確認します。

以下の要件で ConfigMap を作成します。
+ ConfigMap に `argocd-cm` という名前を付けます。
+ これをこの機能の Argo CD 用に設定された名前空間 (この機能の作成時に Argo CD 設定で設定した名前空間) に作成します。デフォルトでは、これは `argocd` 名前空間です。
+ ラベル `app.kubernetes.io/part-of: argocd` を適用します。このラベルは必須であり、アップストリームの Argo CD の動作と一致します。
+ アップストリーム Argo CD と同じフィールド形式とキーを使用します。

次の例では、ConfigMap の構造を示します:

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  labels:
    app.kubernetes.io/part-of: argocd
data:
  # Supported settings go here (see the following sections)
```

**重要**  
ConfigMap は安全なストアではありません。`argocd-cm` ConfigMap にシークレット、認証情報、またはその他の機密情報を入れないでください。

### サポートされている設定
<a name="_supported_settings"></a>

マネージド機能は、次の `argocd-cm` フィールドをサポートしています。


| フィールド | 説明 | 
| --- | --- | 
|  `resource.customizations.health.*`  | カスタムリソースのカスタムヘルスチェックスクリプト。「[カスタムヘルスチェック](#argocd-custom-health-checks)」を参照してください。 | 

## カスタムヘルスチェック
<a name="argocd-custom-health-checks"></a>

Argo CD は、デプロイするリソースのヘルスを評価します。Deployments や Services などの標準 Kubernetes リソースの場合、Argo CD にはヘルスロジックが組み込まれています。Argo CD が認識しないカスタムリソースでは、組み込みのヘルスロジックはなく、ヘルスステータスもレポートされません。

カスタムリソースにヘルスチェックがない場合、Argo CD はヘルスをレポートせず、アプリケーションの全体的なヘルスから除外します。その結果、リソースがまだプロビジョニング中または失敗した場合でも、アプリケーションは `Healthy` をレポートできます。つまり、同期の順序はレポートされたヘルスに依存するため、同期ウェーブはリソースの準備が完了する前に進行する可能性があります。

カスタムヘルスチェックを使用すると、カスタムリソースのヘルスロジックを定義できるため、Argo CD は正確なヘルスをレポートし、デプロイを正しく順序付けできます。同じ設定キーを使用して、アップストリーム Argo CD で行うのと同じ方法でカスタムヘルスチェックを定義します。既存のアップストリームスクリプトとコミュニティの例は、変更なしで Argo CD の EKS 機能と連携します。

### ACK と kro の組み込みヘルスチェック
<a name="_built_in_health_checks_for_ack_and_kro"></a>

EKS Capability for Argo CD には、[AWS Controllers for Kubernetes (ACK)](ack.md) および [kro (Kube Resource Orchestrator)](kro.md) リソースの組み込みヘルスチェックが含まれています。これらのリソースは、追加の設定なしで正確なヘルスをレポートします。

機能が ACK または kro リソースのヘルスを評価する方法を変更するために、そのリソースタイプのカスタムヘルスチェックを定義できます。リソースタイプ用に定義したカスタムヘルスチェックは、そのタイプの組み込みヘルスチェックを上書きします。

### カスタムヘルスチェックの記述
<a name="_write_a_custom_health_check"></a>

次の形式のキーを使用して、Lua スクリプトを `argocd-cm` ConfigMap に追加することで、カスタムヘルスチェックを定義します:

```
resource.customizations.health.<group>_<kind>
```

{{<group>}} をカスタムリソースの API グループに置き換え、{{<kind>}} をその種類に置き換えます。例えば、API グループ `example.com` と種類 `Database` を持つカスタムリソースのキーは `resource.customizations.health.example.com_Database` です。

Lua スクリプトは、グローバル `obj` 変数を介してリソースオブジェクトにアクセスできます。スクリプトは、`Healthy`、`Progressing`、`Degraded`、または `Suspended` のいずれかに設定された `status` フィールドを持つテーブルを返す必要があります。スクリプトは、オプションの `message` フィールドを設定して、説明的なステータスメッセージを提供することもできます。

次の ConfigMap の例では、`Database` カスタムリソースのヘルスチェックを定義します。スクリプトは、ステータスフェーズが `Ready` の場合にリソースを `Healthy` としてレポートし、それ以外の場合は `Progressing` としてレポートします:

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  labels:
    app.kubernetes.io/part-of: argocd
data:
  resource.customizations.health.example.com_Database: |
    hs = {}
    hs.status = "Progressing"
    hs.message = "Waiting for the resource to become ready"
    if obj.status ~= nil then
      if obj.status.phase == "Ready" then
        hs.status = "Healthy"
        hs.message = "Database is ready"
      end
    end
    return hs
```

ヘルスチェックスクリプトの形式、組み込みヘルスチェックのリスト、および適応できるコミュニティの例の詳細については、Argo CD ドキュメントウェブサイトの「[リソースヘルス](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/)」を参照してください。

### 安全と制限事項
<a name="_safety_and_limitations"></a>

マネージド機能を使用すると、カスタムヘルスチェックスクリプトは分離されたフルマネージドコンピューティングで実行されます。実行環境は機能ごとに分離され、クラスターのデータや AWS API にはアクセスできません。実行環境の一部をプロビジョニング、パッチ適用、または操作することはありません。

EKS 機能で使用するカスタムヘルスチェックを記述するときは、次の点に注意してください:
+  **標準 Lua ライブラリは使用できません。**`useOpenLibs` オプションは常に無効になっています。これはアップストリーム Argo CD でのデフォルトです。スクリプトはオペレーティングシステムまたはファイルシステムにアクセスできません。標準 Lua ライブラリに依存するセルフマネージド Argo CD からスクリプトを移行すると、この機能の同じ方法で実行されない場合があります。本番環境で使用する前に、開発環境でヘルスチェックスクリプトをテストすることをお勧めします。

ヘルス評価が一時的に利用できない場合、この機能はヘルスステータスを削除するのではなく、影響を受けたカスタムリソースを `Progressing` としてレポートします。これにより、評価が回復するまで、影響を受けたリソースがアプリケーションのヘルスに表示されます。

### カスタムヘルスチェックを検証する
<a name="_verify_a_custom_health_check"></a>

`argocd-cm` ConfigMap を適用または更新したら、ヘルスチェックがアクティブであることを確認します。

1. Argo CD UI で、ヘルスチェックを定義した種類のカスタムリソースを含むアプリケーションを選択します。スクリプトが返すヘルスステータスをリソースがレポートしていることを確認します。または、`argocd app get {{<application-name>}} ` を実行して、リソースのヘルスステータスを確認します。

1. リソースが予想されるヘルスをレポートしない場合は、以下を確認します:
   + ConfigMap は `argocd-cm` という名前であり、この機能の Argo CD 用に設定された名前空間にあります。
   + ConfigMap には必要な `app.kubernetes.io/part-of: argocd` ラベルがあります。
   + ヘルスチェックキーは、リソースタイプで正しい `<group>_<kind>` を使用します。