2021/05/24

AWSにおけるユーザーデータの使い方とは?Amazon EC2におけるユーザーデータの導入と運用

 
  

ユーザーデータとは?


AWSのAmazon EC2においてインスタンスの実行時にタスクやスクリプト処理させるために記述した設定です。デフォルトではインスタンスの初期起動時のみに使用されますが、設定を変更することでインスタンスが起動するごとに実行するようにできます。

ユーザーデータを扱うときにはいくつか注意事項があります。特に重要なのは、インスタンスにデータへ送るときは暗号化されていないことと、base64のテキストにしてデータを与えなければ処理ができないことです。

長所として、EC2のコンソールで直感的にユーザーデータを設定することもできれば、あるいはファイルを指定して読みこませることもできるという柔軟性があります。

インスタンスはユーザーデータの変更に影響されないことについて注意が必要です。

ユーザーデータを活用することでEC2におけるテンプレートの設定作業を効率化し、AWSによるサービス展開を効率よく行えます。

cloud-init

cloud-initはユーザーデータ機能に関連する機能です。

AWSのAmazon EC2インスタンス起動時に設定処理ができる機能として採用されたこの機能は、その優れた性能からほかのLinux OSにおいてもインスタンス起動時の設定処理に使われるようになりました。

よってAWSのユーザーデータ機能について理解することは、ほかのサービスにおけるユーザーデータについても理解を深めることになり、逆にほかのサービスでcloud-initを理解していればAWSで使われているユーザーデータの理解も容易になります。

セキュリティ上の注意事項

ユーザーデータにアクセスできるのはインスタンスだけですが、データのやり取りは暗号化されていないことからセキュリティ上のリスクがあります。

パスワードや在存期間の長い暗号化キーをユーザーデータには含めないようにすることが、安全なデータ管理のために望ましい選択肢です。

例えばインスタンス、あるいはインスタンスで実行されたソフトウェアに対してアクセス権のある場合は、メタデータが表示できる可能性があります。

ユーザーデータ仕様上の制約

テキストがbase64エンコードされているデータをインスタンスはユーザーデータの処理において使用できます。

これは最初からユーザーデータを定義したファイルの内容がbase64でエンコード済みであるものに限定される仕様ではなく、インスタンスに渡されるときにbase64エンコードされたテキストであるならば、元はbase64エンコードでないデータであっても処理が可能です。

テキストについてはスクリプト文も可能で、ユーザーデータからスクリプト文を実行できます。

ユーザーデータを使って必要なデータをスクリプト文の実行により収集し、そのインスタンスへと引き渡すことによって、設定作業にかかる煩雑な作業の軽減を実現可能です。

タイムゾーンのような環境設定などテンプレートかできるような作業を自動化することにより、手入力によるエラーを予防することもできます。

Amazon EC2におけるユーザーデータの導入


ユーザーデータの機能はAmazon EC2の基本機能であることから、追加のサービスを導入する必要がないので手軽に始められます。

インスタンス起動ウィザードからユーザーデータの設定をすることも可能で、内容にはスクリプト文を入れることでスクリプトの実行が可能です。

また設定においてはウィザード上に内容を直接設定するほかにも、ユーザーデータのファイルを指定する機能があることから、保守性にも優れています。

しかしデフォルトの設定ではインスタンスの初回起動時にしかユーザーデータは利用されず、インスタンスの起動ごとにユーザーデータを使いたいときには追加の設定が必要です。

コンソールでユーザーデータを設定する

Amazon EC2のインスタンス起動ウィザードにおいて、ユーザーデータを設定が行えます。

このとき、ユーザーデータはBase64エンコードされていないテキストをコンソールに入力したり、ユーザーデータを設定したファイルを指定したりと柔軟な設定が可能です。

ユーザーデータには設定情報を記述することだけでなく、スクリプトコマンドを記述してiインスタンスの起動時に実行できます。

スクリプトの実行時はrootユーザーとして実行されることから、sudoコマンドを使用してはいけない仕様です。また作成されたファイルはrootユーザーの所有になることから、必要に応じて適切なアクセス権を設定する必要があります。

インスタンス起動のごとにユーザーデータを使うための設定

ユーザーデータはデフォルトだとインスタンスの初回起動時にしか読み込まれない仕様です。初回以外にもユーザーデータを読みこませる必要があるときは、そのための設定を改めて用意することによりインスタンスの起動時に処理が行われるようになります。

まずcloud-initの導入が前提となるので、最新版のものがインストールされていない場合は準備が必要です。

その後、MIME マルチパートファイルを用いてユーザーデータの読み込みを初回以外でも行うよう設定します。

Amazon EC2におけるユーザーデータの運用


ユーザーデータの変更はインスタンスに対してリアルタイムに反映できないことから、停止と再起動の操作が必要です。

Amazon EC2のサービスを展開するにあたって、ユーザーデータに変更が生じたときにインスタンスへ正しく反映させるような状況は十分に起こり得ます。

ルートボリュームがEBSの場合、インスタンスが停止中の場合はユーザーデータの変更が可能です。この時にインスタンス停止によるデータへの影響をよく意識しておくことが重要になります。

またユーザーデータはデフォルトではインスタンスの初回起動時にしか読み込まれないことから、MIME マルチパートファイルを用いるなどといった方法で、再度のユーザーデータ読み込みをするよう設定しておくことが必要です。

停止したインスタンスのユーザーデータ変更

ルートボリュームがEBSの場合は、ユーザーデータについてインスタンスが停止中であれば変更が可能です。

まずインスタンスの停止時には、インスタンスストアボリュームのデータが消去されるという点に注意する必要があります。よって最初に必要なデータをすべてストレージに退避する作業してから、インスタンスを停止することでデータを保護できます。

その保護対応が終わったのちインスタンスの停止を実行しますが、停止するまでは数分ほど時間のかかる場合があることを意識しておくことも大切です。

それからユーザーデータを編集して内容を保存します。

変更したユーザーデータの影響

ユーザーデータの変更はインスタンスに対して影響を与えない仕様です。よってインスタンスに反映させるためには、MIMEマルチパートファイルを用いてインスタンスが起動するごとにユーザーデータを読み込むよう設定変更するといった対応が必要になります。

そのほか、Shutdown with Sysprepオプションを使うことによって、次回の起動時や再起動時だけユーザーデータを読み込むような措置が可能です。

EC2Configの設定を変更して、Enable UserData execution for next service startの設定を有効にするという対応もできます。

ユーザーデータを活用してAWSによるサービスを向上しよう!


AWSにおいてAmazon EC2によるインスタンス起動時の処理に追加設定を加えられるユーザーデータは優れた機能です。

多くの機能を選択肢として持つAWSの特性上、インスタンスの起動後に設定が必要となるパラメーターは増大しがちであり、それを手入力で設定することは手間がかかるだけでなくエラーの原因となり、AWSの魅力を損なう結果となります。

ユーザーデータを活用することでインスタンスの起動時に設定処理が行えることから、設定にかかる手間と潜在的なエラー要因を削減し、AWSのパフォーマンスを落とすことなく効果的に運用できるのです。

デフォルトでは初回起動時だけ使われるというユーザーデータの仕様に注意し、適切な設定とすることでAWSの運用を最適な状態にできます。

ユーザーデータを有効に活用することで、効率よくAWSによるサービスを展開できるのです。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】