해결된 질문
작성
·
229
1
terraform plan시 ch1/eks.tf 파일에서 오류가 발생합니다.
ch1 git:(main) ✗ terraform plan
╷
│ Error: Unsupported block type
│
│ on eks.tf line 23, in provider "helm":
│ 23: kubernetes {
│
│ Blocks of type "kubernetes" are not expected here. Did you mean to define argument "kubernetes"? If so, use the equals sign to assign it a value.
╵
소스를 아래와 같이 변경하였습니다.
kubernetes = {
....
exe = {
...
set = [
{
name = "clusterName"
value = var.ClusterBaseName
},
{
name = "serviceAccount.create"
value = "true"
},
{
name = "serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn"
value = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/AmazonEKSTFLBControllerRole-${module.eks.cluster_name}"
},
{
name = "region"
value = "ap-northeast-2"
}
]
커서에서 바이브코딩으로 바꿔서 문법에러는 안나는데 여전히 버전문제인지 해결이 안되네요.
ch1 git:(main) ✗ terraform plan
╷
│ Error: Unsupported block type
│
│ on eks.tf line 23, in provider "helm":
│ 23: kubernetes {
│
│ Blocks of type "kubernetes" are not expected here. Did you mean to define argument "kubernetes"? If so, use the equals sign to assign it a value.
╵
➜ ch1 git:(main) ✗ terraform init
Initializing the backend...
Initializing modules...
Downloading registry.terraform.io/terraform-aws-modules/eks/aws 20.37.1 for eks...
- eks in .terraform/modules/eks
- eks.eks_managed_node_group in .terraform/modules/eks/modules/eks-managed-node-group
- eks.eks_managed_node_group.user_data in .terraform/modules/eks/modules/_user_data
- eks.fargate_profile in .terraform/modules/eks/modules/fargate-profile
Downloading registry.terraform.io/terraform-aws-modules/kms/aws 2.1.0 for eks.kms...
- eks.kms in .terraform/modules/eks.kms
- eks.self_managed_node_group in .terraform/modules/eks/modules/self-managed-node-group
- eks.self_managed_node_group.user_data in .terraform/modules/eks/modules/_user_data
Downloading registry.terraform.io/lablabs/eks-external-dns/aws 1.2.0 for eks-external-dns...
- eks-external-dns in .terraform/modules/eks-external-dns
Downloading registry.terraform.io/terraform-aws-modules/iam/aws 5.39.0 for irsa-external-dns...
- irsa-external-dns in .terraform/modules/irsa-external-dns/modules/iam-assumable-role-with-oidc
Downloading registry.terraform.io/terraform-aws-modules/iam/aws 5.39.0 for irsa-lb-controller...
- irsa-lb-controller in .terraform/modules/irsa-lb-controller/modules/iam-assumable-role-with-oidc
Downloading registry.terraform.io/terraform-aws-modules/vpc/aws 5.21.0 for vpc...
- vpc in .terraform/modules/vpc
Initializing provider plugins...
- Finding hashicorp/cloudinit versions matching ">= 2.0.0"...
- Finding hashicorp/null versions matching ">= 3.0.0"...
- Finding cloudposse/utils versions matching ">= 0.17.0"...
- Finding hashicorp/aws versions matching ">= 4.0.0, >= 4.19.0, >= 4.33.0, >= 5.79.0, >= 5.95.0, < 6.0.0"...
- Finding hashicorp/helm versions matching ">= 2.6.0"...
- Finding hashicorp/kubernetes versions matching ">= 2.16.0"...
- Finding hashicorp/time versions matching ">= 0.9.0"...
- Finding hashicorp/tls versions matching ">= 3.0.0"...
- Installing hashicorp/helm v3.0.2...
- Installed hashicorp/helm v3.0.2 (signed by HashiCorp)
- Installing hashicorp/kubernetes v2.37.1...
- Installed hashicorp/kubernetes v2.37.1 (signed by HashiCorp)
- Installing hashicorp/time v0.13.1...
- Installed hashicorp/time v0.13.1 (signed by HashiCorp)
- Installing hashicorp/tls v4.1.0...
- Installed hashicorp/tls v4.1.0 (signed by HashiCorp)
- Installing hashicorp/cloudinit v2.3.7...
- Installed hashicorp/cloudinit v2.3.7 (signed by HashiCorp)
- Installing hashicorp/null v3.2.4...
- Installed hashicorp/null v3.2.4 (signed by HashiCorp)
- Installing cloudposse/utils v1.30.0...
- Installed cloudposse/utils v1.30.0 (self-signed, key ID ********)
- Installing hashicorp/aws v5.100.0...
- Installed hashicorp/aws v5.100.0 (signed by HashiCorp)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
➜ ch1 git:(main) ✗ terraform plan
╷
│ Error: Unsupported block type
│
│ on .terraform/modules/eks-external-dns/helm.tf line 41, in resource "helm_release" "this":
│ 41: dynamic "set" {
│
│ Blocks of type "set" are not expected here.
╵
╷
│ Error: Unsupported block type
│
│ on .terraform/modules/eks-external-dns/helm.tf line 49, in resource "helm_release" "this":
│ 49: dynamic "set_sensitive" {
│
│ Blocks of type "set_sensitive" are not expected here.
╵
╷
│ Error: Unsupported block type
│
│ on .terraform/modules/eks-external-dns/helm.tf line 57, in resource "helm_release" "this":
│ 57: dynamic "postrender" {
│
│ Blocks of type "postrender" are not expected here.
╵
➜ ch1 git:(main) ✗
답변 2
0
안녕하세요. CloudNet@ 팀입니다.
내용을 살펴보니... Helm Provider 버전이 올라가면서 생기는 이슈로 보이네요.
Helm Provider v3.0.0 릴리즈 노트를 보면... 아래와 같은 내용이 있습니다.
kubernetes block removed
Instead, use kubeconfig, config_path, or environment variables
[해결책]
required_providers에 helm provider 버전 고정
terraform {
required_providers {
helm = {
source = "hashicorp/helm"
version = "~> 2.12.1"
}
}
}해당 블록을 추가하고 아래 terraform init -upgrade 수행
terraform init -upgrade
해당 작업 수행 후 피드백 주시면 감사하겠습니다.
크게 위치나 파일은 상관 없는데요.
수정한 부분을 구분하기 좋게 eks.tf 파일 상단에 추가하면 좋을거 같습니다.
예를 들어 아래와 같이 말이죠. (eks.tf)
########################
# Provider Definitions #
########################
# AWS 공급자: 지정된 리전에서 AWS 리소스를 설정
provider "aws" {
region = var.TargetRegion
}
terraform {
required_providers {
helm = {
source = "hashicorp/helm"
version = "~> 2.12.1"
}
}
}
...
이후에 terraform 명령을 입력하는 것이죠.
terraform init -upgrade
terraform plan
감사합니다 :)
저도 조금 전에 재현 테스트 해보니 잘되더군요.
정리해보면, terraform init 시 provider를 가져올 때 별도의 정의가 없으면 최신 버전의 provider를 가져옵니다.
이때 공교롭게 helm provider가 3.x.x로 릴리즈 되면서... 구문에 대한 동작이 변경된 것이고...
이에 따라 terraform이 helm provider 호출 버전을 고정으로 맞춘 것이죠.
모든 장의 코드를 수정해서 git에 올려 두었으니 참고바랍니다.

이슈 사항 제보 감사드립니다. 👍
개인적인 의견으로 현재로썬 단순히 구문을 쓰는 방식이라 딱히 신규 helm 프로바이더를 쓸 필요성은 없어보입니다. terraform 환경이 우리 실습 환경 구성을 위한 요소일 뿐이죠.
그리고 현재 구성된 helm 사용 외부 module이 2.x.x로 최적화된 상태일 것인데요. 향후 대상 module이 최신 프로바이더에 맞춰져진 상태라면 side effect 고려 후 검토해 보겠습니다.
의견 감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Corwin님께서 Terraform을 사용하여 Amazon EKS 클러스터를 구성하는 과정에서 발생한 오류에 대해 질문해 주셨습니다. 이 문제는 Terraform의 helm 프로바이더와 관련된 설정 오류로 보입니다. 관련 내용을 다음과 같이 안내해 드리겠습니다.
Unsupported Block Type: provider "helm" 블록 내에서 kubernetes 블록 타입이 지원되지 않는다는 메시지는, kubernetes라는 블록이 해당 위치에 적합하지 않음을 나타냅니다. 이는 보통 설정 파일의 형식 오류에서 기인합니다.
helm 프로바이더의 경우 대개 helm_release 리소스 내에서 다양한 매개 변수를 설정합니다. kubernetes와 관련된 설정은 kubernetes 프로바이더 내에서 다루어야 합니다.Dynamic Block Errors: dynamic "set"와 같은 에러는 설정하려는 블록 타입이 helm_release에서 지원되지 않기 때문에 발생합니다.
helm_release에서는 일반적으로 set이나 set_string을 사용하여 Helm 차트 매개 변수를 전달합니다. 이들은 직간접적으로 매개 변수를 설정하는데 사용되며, Dynamic 블록은 Terraform에서 특정 조건에 따라 타겟 리소스를 구성할 때 사용됩니다. 설정을 직접 정의하는 방식이 필요합니다.권장 해결책:
코드 검토: eks.tf 파일 및 관련 템플릿 파일에서 블록 정의의 구조를 꼼꼼하게 검토하십시오. 예를 들어, kubernetes 설정은 일반적으로 helm 프로바이더 외부에서 설정됩니다.
문서 참조: Terraform Helm Provider 문서에서 helm_release에 대한 예제를 검토하여, 블록 정의가 올바른지 확인하십시오.
버전 호환성: 사용하는 Terraform 및 헬름 프로바이더의 버전이 요구 사항과 호환되는지 확인하십시오. 새로운 리소스나 매개 변수는 특정 버전 이후에만 지원될 수 있습니다.
유사한 문제가 다루어진 Q&A 포럼 링크:
Terraform 계획을 수립하는 중 발생할 수 있는 오류는 명확하지 않을 수 있으므로, 추가로 궁금한 점이 있으시면 구체적인 오류 메시지나 로그를 다시 한번 확인해 보신 후 질문해 주시기 바랍니다. 그러면 보다 구체적인 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
vpc.tf 상단에 버전 고정하는 코드를 추가하니 잘 진행됩니다.
(vscode(커서)에서 예전 문법에 빨간줄이 가긴 하지만요~)