Ошибка создания Terraform aws_eks_node_group с launch_template «Не поддерживается — запрошенная конфигурация в настоящее время не поддерживается»

#amazon-web-services #terraform #amazon-eks #packer

#amazon-web-services #терраформирование #амазонка-экс #упаковщик

Вопрос:

Цель моих усилий: создать узел EKS с пользовательским AMI (ubuntu)

Заявление о проблеме: при создании aws_eks_node_group вместе с launch_template я получаю сообщение об ошибке:

Ошибка: ошибка ожидания создания группы узлов EKS (qa-svr-centinela-eks-cluster01:qa-svr-centinela-nodegroup01): AsgInstanceLaunchFailures: не удалось запустить экземпляры по требованию. Не поддерживается — запрошенная конфигурация в настоящее время не поддерживается. Пожалуйста, проверьте документацию на наличие поддерживаемых конфигураций. Не удалось запустить экземпляр EC2.. Идентификаторы ресурсов: [eks-82bb24f0-2d7e-ba9d-a80a-bb9653cde0c6]

Пока что исследования: согласно AWS, мы можем начать использовать пользовательские AMI для EKS. Теперь пользовательский образ ubuntu, который я использую, создается с помощью Packer, и я шифровал загрузку и использовал для этой цели внешний ключ AWS KMS. Сначала я подумал, что, возможно, проблема с шифрованием, используемым для AMI. Поэтому я удалил шифрование для AMI из кода упаковщика. Но это не решило проблему. Может быть, я не думаю в правильном направлении?

Любая помощь приветствуется. Спасибо.

Используемый код Terraform приведен в сообщении ниже.

Я пытаюсь создать группу узлов EKS с помощью шаблона запуска. Но попадание в ошибку.

код упаковщика

 source "amazon-ebs" "ubuntu18" {
    ami_name = "pxx3"
    ami_virtualization_type = "hvm"
    tags = {
        "cc" = "sxx1"
        "Name" = "packerxx3"
    }
    region = "us-west-2"
    instance_type = "t3.small"
    # AWS Ubuntu AMI 
    source_ami = "ami-0ac73f33a1888c64a"
    associate_public_ip_address = true
    ebs_optimized = true
    # public subnet
    subnet_id = "subnet-xx"
    vpc_id = "vpc-xx"
    communicator = "ssh"
    ssh_username = "ubuntu"
}
build {
    sources = [
        "source.amazon-ebs.ubuntu18"
    ]
    provisioner "ansible" {
        playbook_file = "./ubuntu.yml"
    }
}
 

ubuntu.yml — используется только для установки нескольких библиотек

 ---
- hosts: default
  gather_facts: no
  become: yes
  tasks:
    - name: create the license key for new relic agent
      shell: |
        curl -s https://download.newrelic.com/infrastructure_agent/gpg/newrelic-infra.gpg | apt-key add - amp;amp; 
        printf "deb [arch=amd64] https://download.newrelic.com/infrastructure_agent/linux/apt bionic main" | tee -a /etc/apt/sources.list.d/newrelic-infra.list
    - name: check sources.list
      shell: |
        cat /etc/apt/sources.list.d/newrelic-infra.list
    - name: apt-get update
      apt: update_cache=yes force_apt_get=yes
    - name: install new relic agent
      package:
        name: newrelic-infra
        state: present
    - name: update apt-get repo and cache
      apt: update_cache=yes force_apt_get=yes
    - name: apt-get upgrade
      apt: upgrade=dist force_apt_get=yes
    - name: install essential softwares
      package:
        name: "{{ item }}"
        state: latest
      loop:
        - software-properties-common
        - vim
        - nano
        - glibc-source
        - groff
        - less
        - traceroute
        - whois
        - telnet
        - dnsutils
        - git
        - mlocate
        - htop
        - zip
        - unzip
        - curl
        - ruby-full
        - wget
      ignore_errors: yes
    - name: Add the ansible PPA to your system’s sources list
      apt_repository:
        repo: ppa:ansible/ansible
        state: present
        mode: 0666
    - name: Add the deadsnakes PPA to your system’s sources list
      apt_repository:
        repo: ppa:deadsnakes/ppa
        state: present
        mode: 0666
    - name: install softwares
      package:
        name: "{{ item }}"
        state: present
      loop:
        - ansible
        - python3.8
        - python3-winrm
      ignore_errors: yes
    - name: install AWS CLI
      shell: |
        curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
        unzip awscliv2.zip
        ./aws/install
 

конфигурация aws_eks_node_group.

 resource "aws_eks_node_group" "nodegrp" {
  cluster_name    = aws_eks_cluster.eks.name
  node_group_name = "xyz-nodegroup01"
  node_role_arn   = aws_iam_role.eksnode.arn
  subnet_ids      = [data.aws_subnet.tf_subnet_private01.id, data.aws_subnet.tf_subnet_private02.id]
  scaling_config {
    desired_size = 2
    max_size     = 2
    min_size     = 2
  }
  depends_on = [
    aws_iam_role_policy_attachment.nodepolicy01,
    aws_iam_role_policy_attachment.nodepolicy02,
    aws_iam_role_policy_attachment.nodepolicy03
  ]
  launch_template {
    id = aws_launch_template.eks.id
    version = aws_launch_template.eks.latest_version
  }
}
 

конфигурация aws_launch_template.

 resource "aws_launch_template" "eks" {
  name = "${var.env}-launch-template"
  update_default_version = true
  block_device_mappings {
    device_name = "/dev/sda1"
    ebs {
      volume_size = 50
    }
  }
  credit_specification {
    cpu_credits = "standard"
  }
  ebs_optimized                        = true
  # AMI generated with packer (is private)
  image_id                             = "ami-0ac71233a184566453"
  instance_type                        = t3.micro
  key_name                             = "xyz"
  network_interfaces {
    associate_public_ip_address = false
  }
}
 

Комментарии:

1. Можете ли вы предоставить фактический код, а не скриншоты кода? Также каковы значения ваших переменных?

2. готово, спасибо, что указали.

3. Значения переменных, используемых в источнике экземпляра?

4. экземпляр t3.micro с 50 ГБ диска. И я удалил переменные. Спасибо

5. Вы проверили первоначальную документацию github.com/terraform-aws-modules/terraform-aws-eks/tree/master / … Я думаю, это то, что вам нужно.