如何让Terraform在CNI已安装时忽略错误继续执行?
解决Terraform安装EKS CNI插件时已存在报错的问题
方案1:先检查插件状态,存在则更新,不存在则创建
修改local-exec的命令逻辑,先通过aws eks describe-addon判断VPC CNI插件是否已存在:
- 若插件已存在,执行
update-addon命令确保配置和版本与预期一致 - 若插件不存在,执行
create-addon完成安装
修改后的完整配置:
### Installing CNI Addon ### resource "null_resource" "install-CNI" { provisioner "local-exec" { when = create interpreter = ["bash", "-c"] command = <<EOT CLUSTER_NAME="${data.aws_eks_cluster.Custom_Dev-cluster-deploy.name}" ADDON_NAME="vpc-cni" ADDON_VERSION="v1.11.2-eksbuild.1" ROLE_ARN="${aws_iam_role.Custom_Dev-cluster.arn}" # 检查插件是否已存在 if aws eks describe-addon --cluster-name $CLUSTER_NAME --addon-name $ADDON_NAME >/dev/null 2>&1; then echo "Addon $ADDON_NAME already exists, updating to target version..." aws eks update-addon \ --cluster-name $CLUSTER_NAME \ --addon-name $ADDON_NAME \ --addon-version $ADDON_VERSION \ --service-account-role-arn $ROLE_ARN \ --resolve-conflicts OVERWRITE else echo "Creating addon $ADDON_NAME..." aws eks create-addon \ --cluster-name $CLUSTER_NAME \ --addon-name $ADDON_NAME \ --addon-version $ADDON_VERSION \ --service-account-role-arn $ROLE_ARN \ --resolve-conflicts OVERWRITE fi EOT } triggers = { "before" = null_resource.eks-config-file.id } }
方案2:仅忽略已存在的错误(简单场景适用)
如果不需要更新现有插件,只希望在插件已存在时跳过错误继续执行,可以给命令添加错误捕获逻辑,仅忽略ResourceInUseException:
### Installing CNI Addon ### resource "null_resource" "install-CNI" { provisioner "local-exec" { when = create interpreter = ["bash", "-c"] command = <<EOT aws eks create-addon \ --cluster-name ${data.aws_eks_cluster.Custom_Dev-cluster-deploy.name} \ --addon-name vpc-cni \ --addon-version v1.11.2-eksbuild.1 \ --service-account-role-arn ${aws_iam_role.Custom_Dev-cluster.arn} \ --resolve-conflicts OVERWRITE 2>&1 || { # 判断错误是否为插件已存在 if grep -q "ResourceInUseException" <<< "$output"; then echo "Addon already exists, proceeding with remaining tasks..." exit 0 else # 其他错误正常抛出 exit 1 fi } EOT } triggers = { "before" = null_resource.eks-config-file.id } }
说明
- 方案1更推荐,能确保插件始终处于你指定的版本和配置状态,适合需要严格管控集群组件的场景
- 方案2仅做错误忽略,不会修改现有插件,适合只需要确认插件存在即可的轻量化场景
内容的提问来源于stack exchange,提问作者curiousgeek
相关产品推荐
相关产品推荐

