[AWS] EC2インスタンスに自動で連番をつけるAutoScalingグループを作る

はじめに

AutoScalingでEC2インスタンスを立ち上げる際に、自動でインスタンス名に連番を振りたい場合があると思います。

しかし現状ではAWSの機能だけでユニークな名前をつけることはできません。

実務でどうしてもインスタンスに自動で連番を振りたいケースがあったのでやり方を考えてみました。

パッと思いつくのは
・AutoScalingの起動時にSNS経由でLambdaを呼び出して命名
・EC2起動時のユーザーデータを使って名前を更新
あたりだったので、今回は余計なリソースを作成せずに済むユーザーデータのパターンでやってみました。

◆GitHubはこちら

テンプレート


今回作成したテンプレートは上記のものになります。

このテンプレートの中で連番をつけるために特別なことをしたのは、
・ユーザーデータ内でインスタンス一覧を取得して、Nameタグを更新。(153-155行目)
・EC2一覧とタグの作成が行えるIAMロールを作成。(170-171行目)
ということくらいでしょうか。

パラメータ

create-ec2-autoscaling.ymlのパラメータ
InstanceName EC2インスタンスの名前。後ろに-01などの連番が付与されます。
InstanceType1 優先的に実行するインスタンスタイプを選択します。
InstanceType2 予備のインスタンスタイプを選択します。(スポットインスタンス用の設定)
EC2SubnetIDs EC2インスタンスを立てるサブネットを選択します。
KeyName EC2インスタンスに接続するためのキーペアを選択します。
ImageId 実行するEC2のAMIのIDを入力します。
ECSSecurityGroups ECSインスタンスにアタッチするセキュリティグループを選択します。
ScalingDesiredCapacity EC2インスタンスの希望数です。
ScalingMaxSize EC2インスタンスの最大数です。
ScalingMinSize EC2インスタンスの最小数です。
OnDemandInstancePercentage オンデマンドインスタンスの割合を設定します。

挙動について


このテンプレートを作成すると、まずは「インスタンス名-00」という名称のインスタンスが実行されます。
その後、しばらくすると各インスタンスに連番が割り当てられます。


各インスタンスが起動したときに、自分自身に対する名前の更新を行うようになっています。

そのため、新しいインスタンスが起動したことで従来のインスタンスの連番が更新されることはありません

おわりに

ユーザーデータを使って自動的に連番を割り当てるAutoScalingを作成しました。

とりあえず動けばいいやの精神でワンライナーな更新コマンドを作っていたのでもう少し上手くやり用があったかなと思うのですが、あくまで個人ブログレベルのクオリティということはご了承ください。

もっと厳密にやるならIAMロールについても権限を絞った方が良かったり、同時実行対策をランダムSleep処理じゃなくてきちんと厳密にチェックさせたり、ミリ秒単位の差分をきちんと測ったりすべきなんですが、概ね意図した動作になるということで今の形で公開することにしました。

これをベースにより良いものを作る参考程度になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)