Я использую Terraform для предоставления кластера EKS (в основном по примеру здесь ). В конце урока есть метод вывода configmap с помощью команды terraform output
, а затем применения его к кластеру с помощью kubectl apply -f <file>
. Я пытаюсь вставить эту команду kubectl
в файл Terraform, используя ресурс kubernetes_config_map
, однако при первом запуске Terraform я получаю следующую ошибку:
Error: Error applying plan:
1 error(s) occurred:
* kubernetes_config_map.config_map_aws_auth: 1 error(s) occurred:
* kubernetes_config_map.config_map_aws_auth: the server could not find the requested resource (post configmaps)
Странно то, что каждый последующий terraform apply
работает и применяет карту конфигурации к кластеру EKS. Это приводит меня к мысли, что это, возможно, проблема с выбором времени? Я попытался предварительно выполнить ряд действий между подготовкой кластера и применением карты конфигурации, но это не сработало. Я также поставил явный аргумент depends_on
, чтобы убедиться, что кластер был полностью подготовлен, прежде чем пытаться применить карту конфигурации.
provider "kubernetes" {
config_path = "kube_config.yaml"
}
locals {
map_roles = <<ROLES
- rolearn: ${aws_iam_role.eks_worker_iam_role.arn}
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
ROLES
}
resource "kubernetes_config_map" "config_map_aws_auth" {
metadata {
name = "aws-auth"
namespace = "kube-system"
}
data {
mapRoles = "${local.map_roles}"
}
depends_on = ["aws_eks_cluster.eks_cluster"]
}
Я ожидаю, что это будет работать правильно в первый раз, однако он запускается только после применения того же файла без изменений во второй раз.
Я попытался получить больше информации, включив флаг отладки TRACE
для terraform, однако единственный вывод, который я получил, был точно такой же ошибкой, что и выше.