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