『AWSとTerraformで学ぶプロダクションレディなKubernetes』のエラーを修正する

『AWSとTerraformで学ぶプロダクションレディなKubernetes』を読みながらハンズオンをしているのですが、1.2章でEKSを構築する際に下記のようなエラーが出ました。


vscode ➜ /workspaces/terraform-template/terraform-aws-eks-example $ terraform apply
╷
│ Warning: Argument is deprecated
│ 
│   with module.vpc.aws_eip.nat,
│   on .terraform/modules/vpc/main.tf line 929, in resource "aws_eip" "nat":
│  929:   vpc = true
│ 
│ use domain attribute instead
╵
╷
│ Error: Error in function call
│ 
│   on .terraform/modules/eks/outputs.tf line 61, in output "cloudwatch_log_group_name":
│   61:   value       = element(concat(aws_cloudwatch_log_group.this[*].name, list("")), 0)
│     ├────────────────
│     │ while calling list(vals...)
│ 
│ Call to function "list" failed: the "list" function was deprecated in Terraform v0.12 and is no longer available; use tolist([ ... ]) syntax to write a literal list.
╵
╷
│ Error: Error in function call
│ 
│   on .terraform/modules/eks/outputs.tf line 66, in output "cloudwatch_log_group_arn":
│   66:   value       = element(concat(aws_cloudwatch_log_group.this[*].arn, list("")), 0)
│     ├────────────────
│     │ while calling list(vals...)
│ 
│ Call to function "list" failed: the "list" function was deprecated in Terraform v0.12 and is no longer available; use tolist([ ... ]) syntax to write a literal list.
╵
╷
│ Error: Unsupported argument
│ 
│   on .terraform/modules/vpc/main.tf line 36, in resource "aws_vpc" "this":
│   36:   enable_classiclink               = var.enable_classiclink
│ 
│ An argument named "enable_classiclink" is not expected here.
╵
╷
│ Error: Unsupported argument
│ 
│   on .terraform/modules/vpc/main.tf line 37, in resource "aws_vpc" "this":
│   37:   enable_classiclink_dns_support   = var.enable_classiclink_dns_support
│ 
│ An argument named "enable_classiclink_dns_support" is not expected here.
╵
╷
│ Error: Unsupported argument
│ 
│   on .terraform/modules/vpc/main.tf line 1153, in resource "aws_default_vpc" "this":
│ 1153:   enable_classiclink   = var.default_vpc_enable_classiclink
│ 
│ An argument named "enable_classiclink" is not expected here.
╵

バージョンが古く動かない部分があるようなので修正していきます。

eks.tf

公式を参考にバージョンを最新にして不要な項目を削除します。
逆にサブネットを指定するsubnet_idsを追加します。
また、module.eks.cluster_idmodule.eks.cluster_nameに変更します。

module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  version         = "20.31.6"
  cluster_name    = local.cluster_name
  cluster_version = local.cluster_version

  vpc_id = module.vpc.vpc_id
  subnet_ids = module.vpc.public_subnets
}

data "aws_eks_cluster" "cluster" {
  name = module.eks.cluster_name
  depends_on = [module.eks] # 追加: EKSモジュールの作成完了を待つ
}

data "aws_eks_cluster_auth" "cluster" {
  name = module.eks.cluster_name
  depends_on = [module.eks] # 追加: EKSモジュールの作成完了を待つ
}

vpc.tf

こちらも公式を見てバージョンを最新に更新します。

data "aws_availability_zones" "available" {}

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.17.0"

  name           = "vpc-example"
  cidr           = "10.0.0.0/16"
  azs            = data.aws_availability_zones.available.names
  public_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]

  public_subnet_tags = {
    "kubernetes.io/cluster/${local.cluster_name}" = "shared"
    "kubernetes.io/role/elb"                      = "1"
  }

}

main.tf

クラスターバージョンを最新のKubernetesバージョンに上げます。
また、私はaws ssoでアクセスしているため、awsにprofileを追加しています。

locals {
  cluster_name    = "eks-example"
  cluster_version = "1.31"
}

provider "aws" {
  region  = "us-east-1"
  profile = "AdministratorAccess-xxxxxxxxxx"
}

コメント

タイトルとURLをコピーしました