EKS x Terraformな人はEKS Blueprintsをチェックしてみて

2022.09.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

EKSをTerraformでプロビジョニングされている方は、一度 terraform-aws-eks-blueprints リポジトリを覗いてみることをおすすめします!今回言いたいのはこれだけです。

EKS Blueprintsとは

一言で言えばEKSの実装例集です。 aws-ia(AWS Integration and Automation)というAWSのGitHubアカウントがホストしているリポジトリです。

EKS自体のIaC、またそのEKSクラスターの上に様々なツールをインストールするIaCはなかなかに複雑で、KubernetesやAWS、さらにはそのツールについての理解が必要です。私はいつもどのレイヤ(Kubernetes,AWS,各種ツール…)の知識が足りて無いのかわからなくなって混乱しています…しんどいです笑

そこでBlueprintsです。このリポジトリには色々な要件のEKSのIaC例があります。

実装例

なので、やりたいことがこのリポジトリにあれば、そのコードを読んで具体的な実装方法を学ぶことができます!

実際私はFargateノードだけの構成を作る際に参考にしました。公式ドキュメントにも記載がありますが、CoreDNSはデフォルトではEC2ノードで稼働するように設定されており、Fargateノードだけにするとエラーになります。そのワークアラウンドが実装されていて非常に助かりました。またREADME.mdにその部分の丁寧な解説があったのも良かったです。

モジュールとしても使える

モジュールもたくさん提供されているので、これらを直接呼び出せば細かな実装を書く手間から開放されます。モジュールからさらに別モジュールを呼んだりしていてちょっと理解が大変なものもありますが…

私はAWS Load Balancer Controllerのモジュールを利用しました。Version指定はクエリストリングで行ないます。(参考:Module Sources | Terraform by HashiCorp)

module "aws_load_balancer_controller" {
  source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons/aws-load-balancer-controller?ref=v4.8.1"

  helm_config = {
    set_values = [
      {
        name  = "vpcId"
        value = module.vpc.vpc_id
      },
      {
        name  = "podDisruptionBudget.maxUnavailable"
        value = 1
      },
    ]
  }
  addon_context = merge(
    local.eks_blueprints_addon_context_default,
    {
      irsa_iam_role_path            = "/"
      irsa_iam_permissions_boundary = ""
      default_repository            = "602401143452.dkr.ecr.ap-northeast-1.amazonaws.com"
    }
  )
}

CDK版もある

私はまだ使ったことが無いですがCDK版もあるようです。

参考情報