EC2インスタンスのインスタンスIDを取得して設定ファイルに記述したい件

2015.05.29

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。

設定ファイルに起動しているインスタンスの情報を記載したいといったニーズは様々な場面で出てくると思います。

そういった際に、いちいち手で書き換えるのは様々な事故を引き起こす可能性があります。

インスタンスの情報は取得したい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の情報も取得することが可能です。

インスタンスメタデータとユーザーデータ - Amazon Elastic Compute Cloud