

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

# AWS Controllers for Kubernetes を使用して Amazon Managed Service for Prometheus を管理する
<a name="integrating-ack"></a>

Amazon Managed Service for Prometheus は、[AWS Controllers for Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/docs/community/overview/) と統合され、Amazon EKS のワークスペース、アラートマネージャー、ルーラーリソースの管理をサポートします。 AWS Controllers for Kubernetes カスタムリソース定義 (CRDs) とネイティブ Kubernetes オブジェクトは、クラスター外のリソースを定義しなくても使用できます。

このセクションでは、既存の Amazon EKS クラスターで AWS Controllers for Kubernetes と Amazon Managed Service for Prometheus を設定する方法について説明します。

[AWS Controllers for Kubernetes ](https://aws.amazon.com/blogs/containers/aws-controllers-for-kubernetes-ack/)を紹介し[、Amazon Managed Service for Prometheus 用の ACK コントローラーを紹介](https://aws.amazon.com/blogs/mt/introducing-the-ack-controller-for-amazon-managed-service-for-prometheus/)するブログ記事を読むこともできます。

## 前提条件
<a name="ack-prereqs"></a>

 AWS Controllers for Kubernetes と Amazon Managed Service for Prometheus を Amazon EKS クラスターと統合する前に、次の前提条件が必要です。
+ Amazon Managed Service for Prometheus [AWS アカウント および IAM ロールをプログラムで作成するには、既存の および アクセス許可](AMP-setting-up.md)が必要です。
+ OpenID Connect (OIDC) を有効にした既存の [Amazon EKS クラスター](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html)が必要です。

  OIDC が有効でない場合、次のコマンドを使用して有効にすることができます。*YOUR\$1CLUSTER\$1NAME* と *AWS\$1REGION* は、アカウントに応じた適切な値に置き換えてください。

  ```
  eksctl utils associate-iam-oidc-provider \
      --cluster ${YOUR_CLUSTER_NAME} --region ${AWS_REGION} \
      --approve
  ```

  Amazon EKS で OIDC を使用する方法の詳細については、「Amazon EKS ユーザーガイド**」の「[OpenID Connect アイデンティティプロバイダーからクラスターのユーザーを認証する](https://docs.aws.amazon.com/eks/latest/userguide/authenticate-oidc-identity-provider.html)」と「[クラスター用の IAM OIDC プロバイダーの作成](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)」を参照してください。
+ Amazon EKS クラスターに [Amazon EBS CSI ドライバーがインストール](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)されている必要があります。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) がインストールされている必要があります。 AWS CLI は、コマンドラインから AWS 機能を呼び出すために使用されます。
+ Kubernetes のパッケージマネージャーである [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) がインストールされている必要があります。
+ Amazon EKS クラスターで、[Prometheus のコントロールプレーンメトリクス](https://docs.aws.amazon.com/eks/latest/userguide/prometheus.html)がセットアップされている必要があります。
+ 新しいワークスペースからのアラートの送信先となる [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/) トピックが必要です。[トピックにメッセージを送信するためのアクセス許可が Amazon Managed Service for Prometheus に付与されている](AMP-alertmanager-receiver-AMPpermission.md)ことを確認してください。

Amazon EKS クラスターが正しく構成されたら、`kubectl get --raw /metrics` を呼び出して、Prometheus 用にフォーマットされたメトリクスを確認できます。これで、 AWS Controllers for Kubernetes サービスコントローラーをインストールし、それを使用して Amazon Managed Service for Prometheus リソースをデプロイする準備が整いました。

## AWS Controllers for Kubernetes を使用したワークスペースのデプロイ
<a name="ack-deploy-workspace"></a>

新しい Amazon Managed Service for Prometheus ワークスペースをデプロイするには、 AWS Controllers for Kubernetes コントローラーをインストールし、それを使用してワークスペースを作成します。

**AWS Controllers for Kubernetes を使用して新しい Amazon Managed Service for Prometheus ワークスペースをデプロイするには**

1. 以下のコマンドを実行し、Helm を使用して Amazon Managed Service for Prometheus サービスコントローラーをインストールします。詳細については、GitHub [の Controllers for Kubernetes ドキュメントの「Install an ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/install/) AWS Controller」を参照してください。*region* には、`us-east-1` など、システムに適したリージョンを使用してください。

   ```
   export SERVICE=prometheusservice
   export RELEASE_VERSION=`curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | jq -r '.tag_name | ltrimstr("v")'`
   export ACK_SYSTEM_NAMESPACE=ack-system
   export AWS_REGION=region
   
   aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
   helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller \
     oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION --set=aws.region=$AWS_REGION
   ```

   しばらくすると、成功を示す次のようなレスポンスが表示されます。

   ```
   You are now able to create Amazon Managed Service for Prometheus (AMP) resources!
   The controller is running in "cluster" mode.
   The controller is configured to manage AWS resources in region: "us-east-1"
   ```

   オプションで、次のコマンドを使用して Controllers for Kubernetes AWS コントローラーが正常にインストールされたことを確認できます。

   ```
   helm list --namespace $ACK_SYSTEM_NAMESPACE -o yaml
   ```

   これにより、コントローラー `ack-prometheusservice-controller` に関する情報 (`status: deployed` など) が返されます。

1. `workspace.yaml` という名前のファイルを作成し、次のテキストを記述します。これは、作成するワークスペースの設定として使用されます。

   ```
   apiVersion: prometheusservice.services.k8s.aws/v1alpha1
   kind: Workspace
   metadata:
     name: my-amp-workspace
   spec:
     alias: my-amp-workspace
     tags:
       ClusterName: EKS-demo
   ```

1. 次のコマンドを実行してワークスペースを作成します (このコマンドでは、ステップ 1 で設定したシステム変数が使用されます)。

   ```
   kubectl apply -f workspace.yaml -n $ACK_SYSTEM_NAMESPACE
   ```

   しばらくすると、アカウントに `my-amp-workspace` という新しいワークスペースが表示されます。

   次のコマンドを実行して、ワークスペース ID** などのワークスペースの詳細とステータスを確認します。または、[Amazon Managed Service for Prometheus コンソール](https://console.aws.amazon.com/prometheus)で新しいワークスペースを確認することもできます。

   ```
   kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
   ```
**注記**  
新しいワークスペースを作成する代わりに、[既存のワークスペースを使用](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/)することもできます。

1. この後で作成する Rulegroups と AlertManager の設定として、2 つの新しい yaml ファイルを以下に示す内容で作成します。

   次の設定を `rulegroup.yaml` として保存します。*WORKSPACE-ID* は、前のステップで確認したワークスペース ID に置き換えます。

   ```
   apiVersion: prometheusservice.services.k8s.aws/v1alpha1
   kind: RuleGroupsNamespace
   metadata:
     name: default-rule
   spec:
     workspaceID: WORKSPACE-ID
     name: default-rule
     configuration: |
       groups:
       - name: example
         rules:
         - alert: HostHighCpuLoad
           expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 60
           for: 5m
           labels:
             severity: warning
             event_type: scale_up
           annotations:
             summary: Host high CPU load (instance {{ $labels.instance }})
             description: "CPU load is > 60%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
         - alert: HostLowCpuLoad
           expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) < 30
           for: 5m
           labels:
             severity: warning
             event_type: scale_down
           annotations:
             summary: Host low CPU load (instance {{ $labels.instance }})
             description: "CPU load is < 30%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
   ```

   次の設定を `alertmanager.yaml` として保存します。*WORKSPACE-ID* は、前のステップで確認したワークスペース ID に置き換えます。*TOPIC-ARN* を通知を送信する Amazon SNS トピックの ARN に置き換え、*REGION* を使用中の に置き換え AWS リージョン ます。Amazon Managed Service for Prometheus に、Amazon SNS トピックへの[アクセス許可が必要](AMP-alertmanager-receiver-AMPpermission.md)であることを忘れないでください。

   ```
   apiVersion: prometheusservice.services.k8s.aws/v1alpha1
   kind: AlertManagerDefinition
   metadata:
     name: alert-manager
   spec:
     workspaceID: WORKSPACE-ID
     configuration: |
       alertmanager_config: |
         route:
            receiver: default_receiver
         receivers:
           - name: default_receiver
             sns_configs:
             - topic_arn: TOPIC-ARN
               sigv4:
                 region: REGION
               message: |
                 alert_type: {{ .CommonLabels.alertname }}
                 event_type: {{ .CommonLabels.event_type }}
   ```
**注記**  
これらの設定ファイルの形式の詳細については、「[RuleGroupsNamespaceData](https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-RuleGroupsNamespaceData.html)」および「[AlertManagerDefinitionData](https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html)」を参照してください。

1. 次のコマンドを実行して、ルールグループとアラートマネージャーの設定を作成します (このコマンドでは、ステップ 1 で設定したシステム変数が使用されます)。

   ```
   kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE
   kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE
   ```

   しばらくすると変更が有効になります。
**注記**  
リソースを作成するのではなく更新する場合は、yaml ファイルを更新し、`kubectl apply` コマンドを再実行するだけです。  
リソースを削除するには、次のコマンドを実行します。*ResourceType* は、削除するリソースのタイプとして、`Workspace`、`AlertManagerDefinition`、`RuleGroupNamespace` のいずれかに置き換えます。*ResourceName* は、削除するリソースの名前に置き換えます。  

   ```
   kubectl delete ResourceType ResourceName -n $ACK_SYSTEM_NAMESPACE
   ```

これで、新しいワークスペースのデプロイは完了です。次のセクションでは、このワークスペースにメトリクスを送信するようにクラスターを構成する方法を説明します。

## Amazon Managed Service for Prometheus ワークスペースに書き込むための Amazon EKS クラスターの構成
<a name="ack-configure-workspace"></a>

このセクションでは、Helm を使用して、Amazon EKS クラスターで実行されている Prometheus を構成し、前のセクションで作成した Amazon Managed Service for Prometheus ワークスペースへのメトリクスのリモートで書き込みを行う方法について説明します。

この手順では、メトリクスの取り込みに使用するために作成した IAM ロールの名前が必要です。まだ作成していない場合は、「[Amazon EKS クラスターからメトリクスを取り込むためのサービスロールの設定](set-up-irsa.md#set-up-irsa-ingest)」を参照して、詳細と手順を確認してください。これらの手順に従うと、`amp-iamproxy-ingest-role` という IAM ロールが作成されます。

**Amazon EKS クラスターをリモート書き込み用に構成するには**

1. 次のコマンドを使用して、ワークスペースの `prometheusEndpoint` を取得します。*WORKSPACE-ID* は、前のセクションで確認したワークスペース ID に置き換えます。

   ```
   aws amp describe-workspace --workspace-id WORKSPACE-ID
   ```

   返される結果には prometheusEndpoint が含まれ、次のような形式になります。

   ```
   https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-a1b2c3d4-a123-b456-c789-ac1234567890/
   ```

   後のステップで使用するために、この URL を保存しておきます。

1. 次のテキストで新しいファイルを作成し、`prometheus-config.yaml` という名前を付けます。*account* は自分のアカウント ID に、*workspaceURL/* は先ほど確認した URL に、*region* はシステムの適切な AWS リージョン に置き換えます。

   ```
   serviceAccounts:
           server:
               name: "amp-iamproxy-ingest-service-account"
               annotations:
                   eks.amazonaws.com/role-arn: "arn:aws:iam::account:role/amp-iamproxy-ingest-role"
   server:
       remoteWrite:
           - url: workspaceURL/api/v1/remote_write
             sigv4:
               region: region
             queue_config:
               max_samples_per_send: 1000
               max_shards: 200
               capacity: 2500
   ```

1. 次の Helm コマンドを使用して、Prometheus のチャート名、名前空間の名前、チャートのバージョンを確認します。

   ```
   helm ls --all-namespaces
   ```

   ここまでの手順に基づくと、Prometheus チャートと名前空間にはどちらも `prometheus` という名前が付いていて、チャートのバージョンは `15.2.0` のようになります。

1. 前のステップで確認した *PrometheusChartName*、*PrometheusNamespace*、*PrometheusChartVersion* を使用して、次のコマンドを実行します。

   ```
   helm upgrade PrometheusChartName prometheus-community/prometheus -n PrometheusNamespace -f prometheus-config.yaml --version PrometheusChartVersion
   ```

   数分後に、アップグレードが成功したことを示すメッセージが表示されます。

1. 必要に応じて、`awscurl` を使用して Amazon Managed Service for Prometheus エンドポイントにクエリを実行して、メトリクスが正常に送信されていることを確認します。*Region* を使用中 AWS リージョン の に、*workspaceURL/* をステップ 1 で見つけた URL に置き換えます。

   ```
   awscurl --service="aps" --region="Region" "workspaceURL/api/v1/query?query=node_cpu_seconds_total"
   ```

これで、YAML ファイルを設定として使用して、Amazon Managed Service for Prometheus ワークスペースを作成し、そのワークスペースに Amazon EKS クラスターから接続することができました。これらのファイルはカスタムリソース定義 (CRD) と呼ばれ、Amazon EKS クラスター内に配置されます。 AWS Controllers for Kubernetes コントローラーを使用して、クラスターからすべての Amazon Managed Service for Prometheus リソースを直接管理できます。