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例があります。
実装例
- VPCも併せてつくる基本的な構成
- EC2ノードなしFargateノードだけの構成
- プライベートクラスター
- ArgoCDでGitOps
- Karpenter
- AWS Distro for OpenTelemetry (ADOT)
なので、やりたいことがこのリポジトリにあれば、そのコードを読んで具体的な実装方法を学ぶことができます!
実際私は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版もあるようです。