

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

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

# Application を作成する
<a name="argocd-create-application"></a>

Application は、ターゲットクラスター内のデプロイを表します。Application ごとに、ソース (Git リポジトリ) と宛先 (クラスターと名前空間) を定義します。適用すると、Argo CD は Git リポジトリのマニフェストで指定されたリソースをクラスター内の名前空間に作成します。Application では、ワークロードのデプロイを指定することが多くなるものの、送信先クラスターで使用可能な Kubernetes リソースを管理することもできます。

## 前提条件
<a name="_prerequisites"></a>
+ EKS クラスターに Argo CD 機能が作成されていること
+ リポジトリアクセスが設定されていること (「[リポジトリアクセスを設定する](argocd-configure-repositories.md)」を参照)
+ ターゲットクラスターが登録されていること (「[ターゲットクラスターを登録する](argocd-register-clusters.md)」を参照)
+  クラスターと通信できるように `kubectl` が設定されていること

## 基本的な Application を作成する
<a name="_create_a_basic_application"></a>

Git リポジトリからデプロイする Application を定義します。

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**注記**  
クラスターの登録時に使用したクラスター名で `destination.name` を使用します (ローカルクラスターの `in-cluster` の場合など)。`destination.server` フィールドは EKS クラスター ARN でも機能しますが、読みやすくするためにクラスター名を使用することをお勧めします。

Application を適用します。

```
kubectl apply -f application.yaml
```

アプリケーションのステータスを表示します。

```
kubectl get application guestbook -n argocd
```

## ソース設定
<a name="_source_configuration"></a>

 **Git リポジトリ**:

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **特定の Git タグまたはコミット**:

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Helm チャート**:

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **外部 Git リポジトリの値を含む Helm チャート** (マルチソースパターン):

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

詳細については、Argo CD ドキュメントの「[Helm Value Files from External Git Repository](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository)」を参照してください。

 **ECR Helm チャート**:

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

機能ロールに必要な ECR アクセス許可がある場合、リポジトリが直接使用されるため、リポジトリ設定は必要ありません。詳細については、「[リポジトリアクセスを設定する](argocd-configure-repositories.md)」を参照してください。

 **CodeCommit の Git リポジトリ**:

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

機能ロールに必要な CodeCommit アクセス許可がある場合、リポジトリが直接使用されるため、リポジトリ設定は必要ありません。詳細については、「[リポジトリアクセスを設定する](argocd-configure-repositories.md)」を参照してください。

 **CodeConnections の Git リポジトリ**:

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

リポジトリ URL 形式は、CodeConnections 接続 ARN から取得されます。機能ロールに必要な CodeConnections アクセス許可があり、接続が設定されている場合、リポジトリが直接使用されるため、リポジトリ設定は必要ありません。詳細については、「[リポジトリアクセスを設定する](argocd-configure-repositories.md)」を参照してください。

 **Kustomize**:

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## 同期ポリシー
<a name="_sync_policies"></a>

Argo CD によるアプリケーション同期の方法を制御します。

 **手動同期 (デフォルト)**:

アプリケーションを同期するには、手動による承認が必要です。

```
spec:
  syncPolicy: {}  # No automated sync
```

手動で同期をトリガーします。

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **自動同期**:

アプリケーションは、Git の変更が検出されたら自動的に同期します。

```
spec:
  syncPolicy:
    automated: {}
```

 **自己修復**:

クラスターに手動で加えられた変更を自動的に元に戻します。

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

有効にすると、Argo CD はクラスターに手動で直接加えられた変更を元に戻して、Git を信頼できるソースとして維持します。

 **プルーニング**:

Git から除去されたリソースを自動的に削除します。

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**警告**  
プルーニングにより、クラスターからリソースが削除されます。本番稼働環境での使用には注意が必要です。

 **自動同期を組み合わせる**:

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **再試行設定**:

失敗した同期の再試行動作を設定します。

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

これは、最初に作成される CRD に依存するリソースや、CRD がすぐに利用できない可能性がある kro インスタンスを操作する場合に特に便利です。

## 同期オプション
<a name="_sync_options"></a>

追加の同期設定:

 **名前空間が存在しない場合には作成する**:

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
```

 **リソースが見つからない場合は、ドライランをスキップする**:

まだ存在しない CRD (kro インスタンスなど) に依存するリソースを適用する場合に便利です。

```
spec:
  syncPolicy:
    syncOptions:
    - SkipDryRunOnMissingResource=true
```

これは、リソース自体のラベルを使用して特定のリソースに適用することもできます。

 **適用する前にリソースを検証する**:

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **同期が取れていない場合にのみ適用する**:

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## 高度な同期機能
<a name="_advanced_sync_features"></a>

Argo CD では、複雑なデプロイ向けに高度な同期機能をサポートしています。
+  **同期ウェーブ** - `argocd.argoproj.io/sync-wave` 注釈を使用してリソースの作成順序を制御します。
+  **同期フック** - `argocd.argoproj.io/hook` 注釈を使用して同期の前後にジョブを実行します (PreSync、PostSync、SyncFail)
+  **リソースのヘルス評価** - アプリケーションに固有のリソースのカスタムヘルスチェックです。

詳細については、Argo CD ドキュメントの「[同期ウェーブ](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/)」と「[リソースフック](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/)」を参照してください。

## 差分を無視する
<a name="_ignore_differences"></a>

Argo CD が他のコントローラー (HPA 管理レプリカなど) で管理されている特定のフィールドを同期しないようにします。

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

無視パターンとフィールド除外の詳細については、Argo CD ドキュメントの「[差分比較のカスタマイズ](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/)」を参照してください。

## マルチ環境デプロイ
<a name="_multi_environment_deployment"></a>

複数の環境に同じアプリケーションをデプロイします。

 **開発**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **本番稼働**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## Application をモニタリングおよび管理する
<a name="_monitor_and_manage_applications"></a>

 **アプリケーションのステータスを表示する**:

```
kubectl get application my-app -n argocd
```

 **Argo CD UI にアクセスする**:

EKS コンソールから Argo CD UI を開いて、アプリケーションのトポロジ、同期ステータス、リソースヘルス、デプロイ履歴を表示します。UI アクセスの手順については、「[Argo CD の使用](working-with-argocd.md)」を参照してください。

 **Application をロールバックする**:

以前のリビジョンにロールバックするには、Argo CD UI、Argo CD CLI を使用するか、Application 仕様の `targetRevision` を以前の Git コミットまたはタグに更新します。

Argo CD CLI を使用する:

```
argocd app rollback argocd/my-app <revision-id>
```

**注記**  
マネージド機能で Argo CD CLI を使用する場合は、名前空間プレフィックス `namespace/appname` を使用してアプリケーションを指定します。

詳細は、Argo CD ドキュメントの「[argocd app rollback](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/)」を参照してください。

## その他のリソース
<a name="_additional_resources"></a>
+  [Argo CD Project を操作する](argocd-projects.md) - Project でマルチテナント環境向けの Application を整理する
+  [ApplicationSet を使用する](argocd-applicationsets.md) - テンプレートで複数のクラスターにデプロイする
+  [Application 仕様](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/) - 詳細なアプリケーション API リファレンス
+  [同期オプション](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/) - 高度な同期設定