AnsibleによるAWS EKSデプロイ - oomichi/try-kubernetes GitHub Wiki

Terraformもアレなため、AnsibleでIaCをする必要があった。 Azure AKSは簡単にIaCできたが、AWS EKSはいろいろと大変そうなのでココに整理する。

IAMの作成

作業中: 既存のIAMがあったので本章は中断

EKSクラスタを作成する前に、そのためのIAMを作成する必要がある。 AnsibleでIAM作成を行う場合、community.aws.iam_role モジュールで行う。

このモジュールで問題となるのが必須パラメータ assume_role_policy_document である。 AssumeRole とは、AWS STS(Security Token Service)の一機能であり、IAMロールに設定した権限を一時的に使えるようにするためのToken(認証情報)を発行するものである。この一時的な認証情報は「アクセスキー」、「シークレットキー」、「セッショントークン」で構成される。

この AssumeRole 自体、Ansibleモジュール amazon.aws.sts_assume_role>https://docs.ansible.com/ansible/latest/collections/amazon/aws/sts_assume_role_module.html があるので、それを使って発行してみる。

VPC (Virtual Private Cloud)の作成

EKSクラスタにSubnetを割り当てるため、それを事前に作成する必要がある。 更にSubnetを作るためにはVPCを作成する必要がある。 そのための Ansible プレイブックは以下の通り。

  - name: Create a VPC(Virtual Private Cloud)
    amazon.aws.ec2_vpc_net:
      name: "{{ eks_name }}"
      region: "{{ region }}"
      cidr_block: 172.16.16.0/20
    register: created_vpc

上記の段階では Subnet は作られないので、Subnet を以下のプレイブックで作成する。

  - name: Create controle plane subnet
    amazon.aws.ec2_vpc_subnet:
      state: present
      region: "{{ region }}"
      vpc_id: "{{ created_vpc.vpc.id }}"
      cidr: 172.16.16.0/24
      tags:
        Name: EKS CP Subnet
    register: eks_subnet_cp
  - name: Create node subnet
    amazon.aws.ec2_vpc_subnet:
      state: present
      region: "{{ region }}"
      vpc_id: "{{ created_vpc.vpc.id }}"
      cidr: 172.16.17.0/24
      tags:
        Name: EKS Node Subnet
    register: eks_subnet_node

Security Groupの作成

  - name: Create a security group
    amazon.aws.ec2_security_group:
      name: "{{ eks_name }}"
      description: eks security group
      region: "{{ region }}"
      vpc_id: "{{ created_vpc.vpc.id }}"
      rules:
        - proto: tcp
          from_port: 22
          to_port: 22
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 4321
          to_port: 4321
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 9017
          to_port: 9017
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 8000
          to_port: 8000
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 7890
          to_port: 7890
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 8765
          to_port: 8765
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 3389
          to_port: 3389
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 5432
          to_port: 5432
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 1230
          to_port: 1240
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 5005
          to_port: 5005
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 8080
          to_port: 8080
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          from_port: 37939
          to_port: 37939
          cidr_ip: 0.0.0.0/0
    register: created_security_group
  - name: Create an EKS cluster
    community.aws.eks_cluster:
      name: "{{ eks_name }}"
      region: "{{ region }}"
      version: 1.28
      role_arn: "{{ eks_role_arn }}"
      subnets:
        - "{{ eks_subnet_cp.subnet.id }}"
        - "{{ eks_subnet_node.subnet.id }}"
      security_groups:
        - "{{ created_security_group.group_id }}"
    register: caller_facts