EC2ブートストラップ入門ガイド

ブートストラップとは?

EC2インスタンスのブートストラップとは、インスタンスが起動する際に自動的に実行される初期設定プロセスのことです。これにより、インスタンス起動時に必要なソフトウェアのインストールやサービスの設定などを自動化できます。

ブートストラップの全体像

ブートストラップの全体像の図 EC2インスタンスのブートストラップとは、インスタンスが起動する際に自動的に実行される初期設定プロセスのことです。5個のコンポーネント(矩形)、矢印や接続線で構成された図。9個のラベル付き要素を含む。 EC2ブートストラッププロセス EC2インスタンス起動 ユーザーデータ実行 設定完了 ユーザーデータ内容: • パッケージ更新・インストール • アプリケーションのデプロイ • 設定ファイルの配置 • サービスの開始

ブートストラップの主な目的は、インスタンス起動時に自動的に以下のタスクを実行することです:

ブートストラップの方法

1

ユーザーデータの活用

EC2インスタンス起動時に「ユーザーデータ」としてシェルスクリプトやクラウドイニットなどの初期化コードを提供できます。

#!/bin/bash
# システム更新
yum update -y

# Apacheウェブサーバーのインストール
yum install -y httpd

# サービスの有効化と開始
systemctl enable httpd
systemctl start httpd

# シンプルなウェブページの作成
echo "<html><body><h1>Hello from EC2</h1></body></html>" > /var/www/html/index.html

注意: ユーザーデータスクリプトは、デフォルトでrootユーザーとして実行されます。最大サイズは16KBまでです。

2

ユーザーデータの指定方法

EC2インスタンス作成時に、以下の手順でユーザーデータを設定できます:

  1. EC2ダッシュボードから「インスタンスの起動」を選択
  2. AMI、インスタンスタイプなどを選択
  3. 「詳細設定」セクションを開く
  4. 「ユーザーデータ」テキストボックスにスクリプトを入力
ユーザーデータの指定方法の図 4個のコンポーネント(矩形)で構成された図。ラベル: EC2インスタンス作成画面、詳細設定、ユーザーデータ、#!/bin/bash... EC2インスタンス作成画面 詳細設定 ユーザーデータ #!/bin/bash...

ブートストラップの高度な方法

CloudFormationの使用

AWSのCloudFormationテンプレートを使用して、より体系的なインフラストラクチャのプロビジョニングとEC2インスタンスのブートストラップを行うことができます。

Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-12345678
InstanceType: t2.micro
UserData:
Fn::Base64: !Sub |
#!/bin/bash -xe
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd

EC2 Image Builder

カスタムAMI(Amazon Machine Image)を作成し、ブートストラップの一部を事前に実行しておくことで、インスタンス起動時間を短縮できます。

メリット: インスタンス起動が高速化され、複雑な設定を事前に組み込めます。

活用例: 複数のインスタンスで同じ設定を繰り返し使用する場合に効果的です。

ユースケース別ブートストラップサンプル

A

Webサーバー構築

#!/bin/bash
# Amazon Linux 2用Webサーバー構築スクリプト

# システム更新
yum update -y

# Apacheインストール
yum install -y httpd

# PHPインストール
amazon-linux-extras install -y php7.4

# サービス開始
systemctl start httpd
systemctl enable httpd

# サンプルコンテンツ設置
echo '<?php phpinfo(); ?>' > /var/www/html/info.php
echo '<html><body><h1>サーバー準備完了!</h1></body></html>' > /var/www/html/index.html
B

アプリケーションサーバー構築

#!/bin/bash
# NodeJSアプリケーションサーバー構築スクリプト

# システム更新
yum update -y

# Node.jsインストール
curl -fsSL https://rpm.nodesource.com/setup_14.x | bash -
yum install -y nodejs

# Gitインストール
yum install -y git

# アプリケーションのクローン
git clone https://github.com/example/node-app.git /opt/node-app

# 依存関係のインストール
cd /opt/node-app
npm install

# PM2でアプリケーション起動
npm install -g pm2
pm2 start app.js
pm2 startup
pm2 save

ブートストラップのベストプラクティス

推奨事項

  • スクリプトをモジュール化して再利用可能にする
  • エラーハンドリングを組み込む
  • ログを取得して診断を容易にする
  • セキュリティ更新を含める
  • S3やGitHubからスクリプトを取得する

避けるべきこと

  • 秘密情報をプレーンテキストで埋め込む
  • 複雑すぎるスクリプトを作成する
  • エラー処理を省略する
  • 起動時間を極端に長くする
  • 信頼できないソースからスクリプトを実行する

TIP: Systems Manager Parameter StoreやSecretsManagerを活用して、スクリプト内に秘密情報を直接書き込まずに設定を管理できます。

エラーハンドリングの例

#!/bin/bash
# エラーハンドリング付きブートストラップスクリプト

# エラー発生時に終了するように設定
set -e

# ログファイルの設定
LOGFILE="/var/log/bootstrap.log"

# ログ関数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOGFILE
}

# エラーハンドラー
error_handler() {
log "エラーが発生しました: $1 ($2)"
exit 1
}

# エラーハンドラーを設定
trap 'error_handler "${BASH_COMMAND}" "$?"' ERR

# 開始ログ
log "ブートストラッププロセスを開始します"

# システム更新
log "システムの更新を開始します"
yum update -y
log "システムの更新が完了しました"

# 他のインストールと設定...
log "ブートストラッププロセスが正常に完了しました"

ブートストラップのトラブルシューティング

一般的な問題と解決策

問題 考えられる原因 解決策
スクリプトが実行されない • シバン(#!)の不足
• 実行権限の問題
• Base64エンコーディングの問題
• スクリプトの先頭に #!/bin/bash を追加
• ログを確認(/var/log/cloud-init-output.log)
スクリプトがエラーで終了 • 依存関係の欠如
• ネットワーク接続の問題
• 構文エラー
• エラーログを確認
• 依存関係を事前インストール
• スクリプトのテスト実行
起動時間が長すぎる • 重いパッケージのダウンロード
• 非効率なスクリプト
• リソース競合
• AMIに事前インストール
• 非同期処理の活用
• スクリプトの最適化

診断方法: EC2インスタンスに接続し、以下のログファイルを確認してブートストラッププロセスのトラブルシューティングを行えます:

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log
  • /var/log/user-data.log(カスタムログの場合)

まとめ

EC2ブートストラップを使うことで、インスタンス起動時に自動的に設定を行い、一貫性のあるインフラストラクチャを効率的に構築できます。ユーザーデータスクリプトは単純なものから始め、徐々に高度な手法に移行していくことで、AWSでのインフラ管理スキルを向上させることができます。

次のステップ

  • 独自のブートストラップスクリプトを作成してみる
  • CloudFormationやAWS CDKでインフラのコード化を試す
  • Systems ManagerやAnsibleなどの高度な設定管理ツールを学ぶ

関連リソース

  • AWS公式ドキュメント:「インスタンスユーザーデータ」
  • AWS CloudFormationテンプレートリファレンス
  • AWS Systems Manager ユーザーガイド

Created by SSuzuki1063

AWS SAP Learning Resources