『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_id
をmodule.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"
}
コメント