はじめに
EKSマネージド型ノードグループにおいて、自動生成された起動テンプレートを使用することは便利なのですが、デプロイされるEC2に設定されるセキュリティグループはEKSによって自動生成されるものになってしまいます。
また、公式資料にもある通り、自動生成された起動テンプレートを変更すること推奨されていません。
自動生成された起動テンプレートを変更することは推奨しません。したがって、柔軟性を高めたい場合は、最初にマネージド型ノードグループを作成するときにカスタム起動テンプレートを指定するようにしてください。
Cloudformationでの実装方法
今回は、EKSマネージド型ノードグループで使用する起動テンプレートを、Cfnで作成してみます。
※Amazon Linuxを使用
Userdataに関して、公式資料を初見した際に少しハマったたので、以下にポイントをまとめます。
・起動テンプレートにおいてAMI ID を指定しない場合:
Userdataは、MIME マルチパートアーカイブ形式である必要がある
・起動テンプレートにおいてAMI ID を指定した場合
EKS はUserdataのマージを行わないため、 bootstrap.sh スクリプトの実行を定義する必要がある
Cloudformationテンプレート
上記を踏まえ、AMIを指定した起動テンプレートをCfnで作成しました。
以下、起動テンプレートのYamlです。
AWSTemplateFormatVersion: "2010-09-09"
Description: "LaunchTemplate-test"
Parameters:
#===============================================================================
# Parameter
#===============================================================================
InstanceTypes:
Type: String
AmiType:
Type: String
DiscSize:
Type: String
Resources:
#===============================================================================
# Launch Template
#===============================================================================
LaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateName: "Test-LaunchTemplate"
LaunchTemplateData:
ImageId: !Ref AmiType
InstanceType: !Ref InstanceTypes
SecurityGroupIds:
- sg-xxxxxxxxxx
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeSize: !Ref DiscSize
VolumeType: gp2
DeleteOnTermination: true
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh sa-clstr
/opt/aws/bin/cfn-signal --exit-code $? \
--stack ${AWS::StackName} \
--resource NodeGroup \
--region ${AWS::Region}}
TagSpecifications:
- ResourceType: "launch-template"
Tags:
- Key: Env
Value: "test"