You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:27:20