User dataにスクリプトを設定してサーバー設定を自動化するAWS Tips

User Dataとスクリプトを組み合わせると、インスタンスにログインすることなく、パッケージのインストールやユーザーの追加が可能です。その方法と注意点を解説します。

» 2014年08月25日 18時00分 公開
[竹永篤史@IT]
「AWS Tips」のインデックス

連載目次

 User dataにシェルスクリプトまたはcloud-initディレクティブを指定することによって、インスタンスの起動中に指定した処理を実行して、インスタンスにログインすることなく目的の環境を構築することが可能です。

 自動化できる作業の例としては以下のものがあります

  • パッケージのインストール、更新
  • ユーザーの追加、SSH公開鍵の追加
  • ファイルの作成、追記
  • その他、シェルスクリプトで実行できる全ての作業

 なお、User dataに指定されたスクリプトは、特に指定がない限りはインスタンスの初回起動時のみに実行されます。

User dataの設定方法

 起動時に使用されるUser dataは、Launch Instance画面の3ページ目、Configure Instance Detailsの下部にあるAdvanced Detailsから指定することができます。

シェルスクリプトで設定する

 User dataにはシェルスクリプトをそのまま入力することが可能です。コマンドは全て管理者権限で実行されますので、スクリプト内で作成されたファイルについては、権限やオーナーの変更を行わないと一般ユーザーからファイルの閲覧や編集ができなくなってしまいます。

 参考例として、プリインストールされているパッケージをアップデートして、HTTPサーバーの追加・起動と自動起動を設定するスクリプトを記載します。

#!/bin/bash
yum update -y
yum install -y httpd
service httpd start
chkconfig httpd on

 上記スクリプトをUser dataに指定して作成した後、インスタンスのPublic IPにアクセスすると、Apacheのテストページが表示されます。

cloud-initディレクティブで設定する

 シェルスクリプトの代わりに、またはシェルスクリプトと一緒にcloud-initディレクティブで初回起動時の処理を記述することも可能です。記述するフォーマットはYAMLですが、ドキュメントを見ないと何ができるのかが分かりづらいので注意が必要です。

 上記サンプルをcloud-initディレクティブで書き換えた例を下記に示します。

#cloud-config
repo_update: true
repo_upgrade: all
packages:
 - httpd
runcmd:
 - service httpd start
 - chkconfig httpd on

 repo_updateの行でallを指定していますが、実際はkernelやNVIDIA関係のパッケージはアップデートされません。これらのパッケージもアップデートしたい場合は、下のruncmdの行にyum update -yなどのコマンドを追加するとアップデートできます。

User dataにスクリプトを指定する際の注意点

 起動時にシェルスクリプトやcloud-initディレクティブを指定してインスタンスを準備するのは便利ですが、いくつかの注意点もあります。

全てのスクリプトの実行は管理者ユーザーで行われる

 スクリプト内で作成したファイルなどは所有者が管理者になってしまうため、作業のために接続した一般ユーザーが目的のファイルを閲覧、編集できない状態になります。それを防ぐためには、スクリプト内でファイルの所有者と権限を一般ユーザーでもアクセスできるように変更する必要があります。

User dataに記載された内容は暗号化されない

 User dataはManagement Consoleやインスタンス内から容易にアクセス可能なため、秘密鍵やアクセスキーなどのアクセスされて困る情報は格納しないでください。

ログ以外からスクリプトの終了が確認できない

 時間のかかるスクリプトを実行中でもインスタンスにログインできてしまうため、何らかの形で実行終了を通知する、または確実に終了するまで待ってからインスタンスにログインして作業を行うことをお勧めします。

 実行ログはManagement Console上でインスタンスを右クリックしてGet System Logをクリックするか、インスタンス内の/var/log/cloud-init.logから確認できます。

User dataに記入されたスクリプトなどの扱いはインスタンスのOSに依存する

 選択するOSによってはまったく処理がされない可能性があります。この記事ではAmazon Linux AMI 2014.03で検証を行っています。


 上記の点に気を付ければ、インスタンスを新規作成する際に行う定型的な作業を全てコピー&ペーストで済ませることができるので、ぜひご活用ください。

竹永 篤史(たけなが あつし)

サーバーワークス テクニカルチーム

好きなAWSサービス(?)はAPI。

2013年度に新卒入社後、サービス開発チームでCloudworksの開発に携わる。2014年度よりテクニカルチームに転属し、CIerとしての経験を積んでいる真っただ中。

最近の愛読書はAWSドキュメント


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。