Terraform EKSモジュールを利用してEKSクラスターを作成する方法

AWS Elastic Kubernetes Service (Amazon EKS)クラスターをTerraformでセットアップする必要がある場合は、運が良いです。Terraform EKSモジュールとその他必要なリソースを使用して、1つのTerraform構成を作成し、コードでAKSクラスターを作成できます。

Amazon EKSは、独自のKubernetesクラスターをインストール、運用、および維持することなくAWS上でKubernetesを実行するための管理されたサービスです。Terraformを使用してEKSクラスターを構築することで、リソースを迅速かつ効率的に自動化されたアプローチで作成できます。

このチュートリアルでは、ステップバイステップでTerraform構成を構築し、Terraformを使用してEKSクラスターを構築する方法を学びます。さあ、始めましょう!

前提条件

この投稿はステップバイステップのチュートリアルになります。一緒に進む場合は、以下の準備が整っていることを確認してください:

  • Amazon Web Service (AWS) アカウント
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should consider Visual Studio (VS) Code as it understands the HCL Terraform language well.
  • Terraform – このチュートリアルでは、Terraform v0.14.9をUbuntu 18.04.5 LTSで実行しますが、Terraformがある任意のオペレーティングシステムで動作するはずです。

AWS EKSクラスターのTerraform構成のビルド

Terraformは、インフラストラクチャをコードとして構築、変更、およびバージョン管理するためのツールで、さまざまな構成ファイルを使用します。各ファイルは、プレーンテキスト形式(.tf)またはJSON形式(.tfjson)で書かれています。

まず、AKSクラスターをゼロから作成するTerraform構成を作成しましょう。

1. ターミナルを開く。

2. ~/terraform-eks-cluster-demoという名前のフォルダを作成し、そのフォルダに作業ディレクトリを変更(cd)します。このフォルダには作業するすべての構成ファイルが含まれます。

mkdir ~/terraform-eks-cluster-demo
cd ~/terraform-eks-cluster-demo

3. 次に、お気に入りのコードエディタを開いて、次の構成をコピー/貼り付けて、main.tfという名前のファイルを~/terraform-eks-cluster-demoに保存します。このmain.tfファイルは、AKSクラスターのTerraform構成です。

main.tfファイルにはEKSクラスターをプロビジョニングするために必要なすべてのリソースが含まれています:

  • AWS Identity and Access Management(IAM)ロール(terraformekscluster)- このリソースは、Amazon EKSによって管理され、他のAWSサービス(AWS S3、CloudWatchなど)に代わってサービスで使用するリソースを管理するために呼び出します。
  • AWS EC2セキュリティグループresource "aws_security_group" "eks-cluster")- AWS EKSクラスターからの着信および送信ネットワークトラフィックを許可します。 SG-eks-clusterという名前のセキュリティグループを起動し、VPC IDにアタッチして、クラスターからのすべてのトラフィックの流入/流出を許可します。 0.0.0.0/0はインターネットのIPアドレスです。
  • EKSクラスターterraformEKScluster)- このEKSクラスターはバージョン1.19になります。
  • EKSノードが他のAWSサービスに呼び出しを行うIAMロール(eks-node-group)。このロールは、インスタンス上で一時的なセキュリティ資格情報を想定して、他のAWSリソースにアクセスするためのポリシーがアタッチされています。
  • EKSクラスターノードグループnode_group1)- このリソースは、scaling_config属性を介してクラスターが持つノードの数を定義します。
# AWSサービスを使用してリソースを管理するために、Kubernetesクラスターが他のAWSサービスに代わって呼び出しを行うためのIAMロールを作成します。

resource "aws_iam_role" "iam-role-eks-cluster" {
  name = "terraformekscluster"
  assume_role_policy = <<POLICY
{
 "Version": "2012-10-17",
 "Statement": [
   {
   "Effect": "Allow",
   "Principal": {
    "Service": "eks.amazonaws.com"
   },
   "Action": "sts:AssumeRole"
   }
  ]
 }
POLICY
}

# terraformeksclusterロールにEKS-Clusterポリシーを添付します。

resource "aws_iam_role_policy_attachment" "eks-cluster-AmazonEKSClusterPolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
  role       = "${aws_iam_role.iam-role-eks-cluster.name}"
}


# AWS EKSクラスター間のネットワークトラフィックのセキュリティグループ。

resource "aws_security_group" "eks-cluster" {
  name        = "SG-eks-cluster"
  vpc_id      = "vpc-123456789"  

# EgressはEKSクラスターからインターネットへのアウトバウンドトラフィックを許可します

  egress {                   # アウトバウンドルール
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
# インターネットからEKSクラスターへのインバウンドトラフィックを許可します

  ingress {                  # インバウンドルール
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

}

# EKSクラスターの作成

resource "aws_eks_cluster" "eks_cluster" {
  name     = "terraformEKScluster"
  role_arn =  "${aws_iam_role.iam-role-eks-cluster.arn}"
  version  = "1.19"

# VPC構成の追加

  vpc_config {             # vpcおよびネットワーク設定を使用してEKSを構成する
   security_group_ids = ["${aws_security_group.eks-cluster.id}"]
   subnet_ids         = ["subnet-1312586","subnet-8126352"] 
    }

  depends_on = [
    "aws_iam_role_policy_attachment.eks-cluster-AmazonEKSClusterPolicy",
    "aws_iam_role_policy_attachment.eks-cluster-AmazonEKSServicePolicy",
   ]
}

# EKSノードが他のAWSサービスと連携するためのIAMロールを作成します。


resource "aws_iam_role" "eks_nodes" {
  name = "eks-node-group"

  assume_role_policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
POLICY
}

# ノードメンバーにさまざまなポリシーを添付します。

resource "aws_iam_role_policy_attachment" "AmazonEKSWorkerNodePolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy"
  role       = aws_iam_role.eks_nodes.name
}

resource "aws_iam_role_policy_attachment" "AmazonEKS_CNI_Policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
  role       = aws_iam_role.eks_nodes.name
}

resource "aws_iam_role_policy_attachment" "AmazonEC2ContainerRegistryReadOnly" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
  role       = aws_iam_role.eks_nodes.name
}

# EKSクラスターノードグループを作成します

resource "aws_eks_node_group" "node" {
  cluster_name    = aws_eks_cluster.eks_cluster.name
  node_group_name = "node_group1"
  node_role_arn   = aws_iam_role.eks_nodes.arn
  subnet_ids      = ["subnet-","subnet-"]

  scaling_config {
    desired_size = 1
    max_size     = 1
    min_size     = 1
  }

  depends_on = [
    aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
    aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
    aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
  ]
}

4. 〜/terraform-eks-cluster-demoに別のファイルを作成し、provider.tfと名付け、以下の内容を貼り付けます。プロバイダーのファイルは、AWS、Oracle、Azureなどのプロバイダーを定義し、Terraformが正しいクラウドサービスに接続できるようにします。

チュートリアルでは、us-east-2リージョンでリソースを作成します。

provider "aws" {
   region = "us-east-2"
 }

5. 以下の必要なファイルがすべてフォルダ内に存在することを確認するには、treeコマンドを実行します。

The folder structure of Terraform files

AWS EKSモジュールを使用したAWS EKSクラスターの作成

Terraform構成ファイルと変数ファイルが準備できたら、Terraformを初期化してクラスターを作成する準備が整いました。 AKSクラスターをプロビジョニングするには、他のTerraform構成と同様に、Terraformが3つのコマンド(terraform initterraform planterraform apply )を使用します。

これから各段階を説明します。

1. ターミナルを開き、~/terraform-eks-cluster-demoディレクトリに移動します。 cd ~/terraform-eks-cluster-demo

cd ~/terraform-eks-cluster-demo

2. 同じディレクトリでterraform initコマンドを実行します。 terraform initコマンドは、リソースを操作するために必要なプラグインとプロバイダを初期化します。

terraform init

すべてがうまくいけば、以下のように出力にメッセージTerraformが正常に初期化されましたが表示されます。

Initializing the terraform

3.次に、terraform planコマンドを実行します。 terraform planの実行は必須ではありませんが、構成ファイルの構文が正しいことを確認し、インフラストラクチャにプロビジョニングされるリソースのブループリントを提供するために推奨されます。

terraform plan

成功すると、出力にPlan:「X」を追加、「Y」を変更、または「Z」を破棄のようなメッセージが表示されます。

Running the plan command in Terraform

4.次に、terraform applyを実行して、トレーニングホイールを取り除き、Terraformを呼び出してAKSクラスターを作成します。 terraform applyを呼び出すと、現在のディレクトリ内の各構成(*.tf)が読み込まれ、EKSクラスターやその他のコンポーネントを構築するためにAWSに送信される状態ファイルがコンパイルされます。

AWSは、各EKSクラスターに対して1時間あたり$0.10を請求します。作成したテストクラスターは必ず破棄してください!

terraform apply
Running the Terraform apply command

AWS EKSクラスターの検証

この時点で、機能するAKSクラスターが構築されているはずですが、AWS管理コンソールで確認してみてください。

1.お気に入りのウェブブラウザを開き、AWS管理コンソールに移動し、ログインします。

2.上部の検索バーをクリックし、EKSを検索し、Elastic Kubernetes Serviceメニューアイテムをクリックします。そこにはterraformEKScluster EKSクラスターが表示されるはずです。

Navigating to the EKS service
Checking the terraformEKS Cluster

クリックしてください:設定、そして、以下に示すように、Terraform構成で定義した各コンポーネントが正常に作成されているはずです。

Node Role and EKS cluster role.
Security group applied on EKS Cluster.
Node group node_group1

結論

このチュートリアルでは、Terraformを使用してAWS EKSクラスターとそのコンポーネントをデプロイする方法を学びました。これで、このEKSクラスターを使用してアプリケーションをデプロイする準備が整いました!

あなたは新しく見つけたクラスターにどのアプリケーションをデプロイする予定ですか?

Source:
https://adamtheautomator.com/terraform-eks-module/