

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

# Terraform を使用して Amazon EKS に CockroachDB クラスターをデプロイする
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay と Kalyan Senthilnathan、Amazon Web Services*

## 概要
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

このパターンは、[CockroachDB](https://www.cockroachlabs.com/docs/stable/) [演算子を使用して、Amazon Elastic Kubernetes Service (Amazon EKS) にマルチノード CockroachDB ](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview)クラスターをデプロイするための HashiCorp Terraform モジュールを提供します。CockroachDB は、地理的に分散されたクラスター間で自動水平シャーディング、高可用性、一貫したパフォーマンスを提供する分散 SQL データベースです。このパターンでは、Amazon EKS をマネージド Kubernetes プラットフォームとして使用し、TLS で保護されたノード通信用の [cert-manager](https://cert-manager.io/docs/) を実装します。また、トラフィック分散に [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) を使用し、耐障害性とパフォーマンスのためにデータを自動的にレプリケートするポッドを持つ CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) を作成します。

**対象者**

このパターンを実装するには、以下について理解しておくことをお勧めします。
+ HashiCorp Terraform の概念とコードとしてのインフラストラクチャ (IaC) プラクティス
+ AWS のサービス、特に Amazon EKS
+ StatefulSets、サービス設定などの Kubernetes の基本
+ 分散 SQL データベース
+ TLS 証明書管理などのセキュリティの概念。
+ DevOps プラクティス、CI/CD ワークフロー、インフラストラクチャの自動化

## 前提条件と制限
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Amazon EKS クラスターにリソースをデプロイするアクセス許可
+ ノードにラベルが付けられた Amazon EKS クラスターバージョン v1.23 以降 `node=cockroachdb`
+ [Amazon EKS クラスターにインストールされた Amazon Elastic Block Store Container Storage Interface (CSI) ドライバー](https://github.com/kubernetes-sigs/aws-ebs-csi-driver)バージョン 1.19.0 以降
+ Terraform CLI バージョン 1.0.0 以降、[インストール](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)済み
+ kubectl、[インストール済み](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ 「[インストール済み](https://git-scm.com/install/)」Git
+ AWS Command Line Interface (AWS CLI) バージョン 2.9.18 以降、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み

**制限事項**
+ CockroachDB Kubernetes 演算子は、マルチリージョンデプロイ用の複数の Kubernetes クラスターをサポートしていません。その他の制限については、「[Orchestrate CockroachDB Across Multiple Kubernetes Clusters](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) (CockroachDB ドキュメント）」および[CockroachDB Kubernetes Operator](https://github.com/cockroachdb/cockroach-operator) (GitHub)」を参照してください。
+ 永続ボリュームクレーム (PVCs) の自動プルーニングは現在、デフォルトで無効になっています。つまり、ノードを廃止して削除した後、オペレーターはポッドにマウントされた永続ボリュームを削除しません。詳細については、CockroachDB ドキュメントの[「自動 PVC プルーニング](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning)」を参照してください。

**製品バージョン**
+ CockroachDB バージョン 22.2.2

## アーキテクチャ
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**ターゲットアーキテクチャ**

次の図は、Virtual Private Cloud (VPC) 内の 3 つの AWS アベイラビリティーゾーンにまたがる高可用性 CockroachDB のデプロイを示しています。CockroachDB ポッドは Amazon EKS を通じて管理されます。このアーキテクチャは、ユーザーが Network Load Balancer を介してデータベースにアクセスする方法を示しています。これにより、トラフィックが CockroachDB ポッドに分散されます。ポッドは各アベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで実行され、耐障害性と耐障害性を提供します。

![VPC 内の 3 つの AWS アベイラビリティーゾーンにまたがる高可用性の CockroachDB デプロイ。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**作成されたリソース**

このパターンで使用される Terraform モジュールをデプロイすると、次のリソースが作成されます。

1. **Network Load Balancer** – このリソースは、クライアントリクエストのエントリポイントとして機能し、CockroachDB インスタンス全体にトラフィックを均等に分散します。

1. **CockroachDB StatefulSet** – StatefulSet は、Amazon EKS クラスター内の CockroachDB デプロイの目的の状態を定義します。CockroachDB ポッドの順序付けられたデプロイ、スケーリング、更新を管理します。

1. **CockroachDB ポッド** – これらのポッドは、Kubernetes ポッド内のコンテナとして実行される CockroachDB のインスタンスです。これらのポッドは、分散クラスター全体のデータを保存および管理します。

1. **CockroachDB データベース** – これは、複数のポッドにまたがる CockroachDB によって管理される分散データベースです。高可用性、耐障害性、パフォーマンスのためにデータをレプリケートします。

## ツール
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**AWS のサービス**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。

**その他のツール**
+ [HashiCorp Terraform](https://www.terraform.io/docs) は、コードを使用してクラウドインフラストラクチャとリソースを割り当てて管理するのに役立つ Infrastructure as Code (IaC) ツールです。
+ [kubectl](https://kubernetes.io/docs/tasks/tools/)は、Kubernetes クラスターに対してコマンドを実行するためのコマンドラインインターフェイスです。

**コードリポジトリ**

このパターンのコードは、GitHub [Deploy a CockroachDB cluster in Amazon EKS using Terraform repository ](https://github.com/aws-samples/crdb-cluster-eks-terraform)で入手できます。コードリポジトリには、Terraform の次のファイルとフォルダが含まれています。
+ `modules` folder – このフォルダには、CockroachDB の Terraform モジュールが含まれています。
+ `main` folder – このフォルダには、CockroachDB 子モジュールを呼び出して CockroachDB データベースクラスターを作成するルートモジュールが含まれています。

## ベストプラクティス
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ 3 つ未満のノードにスケールダウンしないでください。これは CockroachDB のアンチパターンと見なされ、エラーを引き起こす可能性があります。詳細については、CockroachDB ドキュメントの[「クラスタースケーリング](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html)」を参照してください。
+ Karpernter または Cluster Autoscaler を使用して Amazon EKS Auto Scaling を実装します。これにより、CockroachDB クラスターは水平方向および新しいノードを自動的にスケーリングできます。詳細については、Amazon EKS ドキュメントの「[Karpenter と Cluster Autoscaler を使用したクラスターコンピューティングのスケーリング](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html)」を参照してください。
**注記**  
`podAntiAffinity` Kubernetes スケジューリングルールにより、1 つの Amazon EKS ノードでスケジュールできる CockroachDB ポッドは 1 つだけです。
+ Amazon EKS セキュリティのベストプラクティスについては、Amazon EKS ドキュメントの[「セキュリティのベストプラクティス](https://docs.aws.amazon.com/eks/latest/best-practices/security.html)」を参照してください。
+ CockroachDB の SQL パフォーマンスのベストプラクティスについては、CockroachDB ドキュメントの[「SQL パフォーマンスのベストプラクティス](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html)」を参照してください。
+ Terraform 状態ファイルの Amazon Simple Storage Service (Amazon S3) リモートバックエンドの設定の詳細については、Terraform ドキュメントの[Amazon S3](https://developer.hashicorp.com/terraform/language/backend/s3)」を参照してください。

## エピック
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コードリポジトリを複製します。 | リポジトリのクローンを作成するには、次のコマンドを入力します。<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps エンジニア、Git | 
| Terraform 変数を更新します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps エンジニア、Terraform | 

### リソースのデプロイ
<a name="deploy-the-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| インフラストラクチャを準備します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps エンジニア、Terraform | 

### デプロイメントを確認する
<a name="verify-the-deployment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リソースの作成を確認します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps エンジニア | 
| (オプション) スケールアップまたはスケールダウン。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps エンジニア、Terraform | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| インフラストラクチャを削除します。 | ノードを にスケーリングすると`0`、コンピューティングコストを削減できます。ただし、このモジュールによって作成された永続的な Amazon EBS ボリュームには引き続き料金が発生します。ストレージコストを排除するには、以下の手順に従ってすべてのボリュームを削除します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## トラブルシューティング
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| プロバイダー認証情報の検証中にエラーが発生しました。 | Terraform `apply`または `destroy` コマンドを実行すると、次のエラーが発生することがあります。<br />`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`<br />このエラーは、ローカルマシンの設定で使用されている認証情報のセキュリティトークンの有効期限が切れていることが原因です。エラーを解決する方法については、 AWS CLI ドキュメントの[「設定の設定と表示](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods)」を参照してください。 | 
| 保留中状態の CockroachDB ポッド | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## 関連リソース
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [単一の Kubernetes クラスターに CockroachDB をデプロイする](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (CockroachDB ドキュメント)
+ [複数の Kubernetes クラスター間で CockroachDB をオーケストレーションする](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html) (CockroachDB ドキュメント)
+ [AWS プロバイダー](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Terraform ドキュメント)

## アタッチメント
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)」