EC2インスタンスのインスタンスIDを取得して設定ファイルに記述したい件
はじめに
好物はインフラとフロントエンドのかじわらゆたかです。
設定ファイルに起動しているインスタンスの情報を記載したいといったニーズは様々な場面で出てくると思います。
そういった際に、いちいち手で書き換えるのは様々な事故を引き起こす可能性があります。
インスタンスの情報は取得したいEC2インスタンスから"http://169.254.169.254/latest/meta-data/" に アクセスすることで取得できるのでそれを用いて設定ファイルに反映させてみたいと思います。
前提
以下の様な設定ファイルのHostnameの箇所にインスタンス名を設定するといったケースを想定します。
Setting.conf
Hostname=
実装
curlコマンドとシェルスクリプトで実装します。
まずは先程の設定ファイルに置き換え対象文字列をセットしておきます。
置換時の事故回避と置き換わったかを確認しやすくするためです。
Setting.conf
Hostname=PleaseSetInstanceId
SetInstanceId.sh
#!/bin/bash instanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) sed -e 's/PleaseSetInstanceId/'${instanceId}'/g' ./Setting.conf > ./Setting.conf.AddInstanceID
3行目でcurlでアクセスした結果を取得しています。 オプションの-s を指定することでダウンロードの進捗状況を結果として表示させないようにしています。
4行目で取得した結果を用いてsedコマンドで置き換えを実施しています。
実行例
[ec2-user@ip-10-0-0-63 ~]$ curl http://169.254.169.254/latest/meta-data/instance-id -w "\n" i-5e405247 [ec2-user@ip-10-0-0-63 ~]$ cat ./Setting.conf Hostname=PleaseSetInstanceId [ec2-user@ip-10-0-0-63 ~]$ sh ./SetInstanceId.sh [ec2-user@ip-10-0-0-63 ~]$ cat ./Setting.conf.AddInstanceID Hostname=i-5e405247
無事に新しく作られたファイルの中身がインスタンスIDに書き換わっていることが確認できます。
まとめ
上記のようにすることで設定ファイルにインスタンス情報を自動で埋め込むことができました。
また、今回はインスタンスIDを取得しましたが、他のEC2の情報も取得することが可能です。