← ハンズオン一覧に戻る

AWS Hands-on / Compute

設定済みのサーバーをまるごと複製する

セットアップを終えた EC2 サーバーから「カスタム AMI(自分専用のイメージ)」を作り、そのイメージから新しいサーバーを起動します。何も入れ直していないのに、最初のサーバーと同じ状態のサーバーが立ち上がる——「サーバーの完成状態を焼き込んで複製する」やり方を体験します。

● Lv.2 基本的なリソースを作れる人 ⏱ 所要 40〜60 分 すべてコンソールで完結
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須EC2 インスタンスを起動し、セキュリティグループで通信を許可した経験があること
  • あると良いユーザーデータでサーバーの初期設定を自動化したことがある(複製の元になるサーバーを手早く作るのに使います。スクリプトは本文に用意しています)
  • あると良い「AMI(もとになる OS イメージ)を選んでインスタンスを起動した」ことを覚えている

※ このハンズオンは すべてコンソールだけで完結します。サーバーへのログイン(SSH)は使いません。複製できたかどうかは、ブラウザでページを開いて確認します。

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

時間をかけてサーバーをセットアップしたあと、「これとまったく同じサーバーをもう 1 台ほしい」と思うことがあります。素直にやるなら、新しいサーバーを起動して、同じソフトを入れ、同じ設定を一から繰り返すことになりますが、これは手間がかかるうえ、設定の入れ忘れや打ち間違いも起きがちです。

そこで使うのが AMI(Amazon マシンイメージ)です。AMI は「サーバーの完成状態をまるごと焼き込んだテンプレート」のようなもので、設定済みのインスタンスから自分専用の カスタム AMI を作れます。あとはその AMI を選んで起動するだけで、セットアップ済みの状態のサーバーが、何台でも・すぐに立ち上がります

最初にインスタンスを起動するときも「AMI」を選んだよね?

はい。Amazon Linux などは AWS が用意した AMI です。今回作るのは、それを土台に自分でセットアップした状態を焼き直した「自分専用の AMI」。出発点が「素の OS」から「設定済みのサーバー」に変わる、とイメージすると分かりやすいです。

起動時に毎回スクリプトで入れる方法とは何が違うの?

起動のたびにインストールする方法は、変更には強い反面、毎回その作業の時間がかかります。AMI はあらかじめ焼き込んでおくので、起動が速く、毎回まったく同じ状態になります。代わりに、中身を変えたいときは AMI を作り直す手間がかかります。今回はこの「焼き込んで複製する」側を体験します。

Goal

セットアップ済みの EC2 からカスタム AMI を作成し、その AMI から新しい EC2 を起動して、何もインストールしていないのに最初のサーバーと同じページが表示される(=複製できている)ことを確認する。

04 — Architecture

つくる構成

「設定済みサーバー」→「AMI を作成(焼き込み)」→「AMI から複製を起動」という 3 ステップで進みます。複製したサーバーには、何も入れ直さなくても元の状態がそのまま入っています。

① 設定済みサーバー
origin-server
Apache + 目印ページ入り
② カスタム AMI
my-web-ami
完成状態のテンプレート
③ 複製サーバー
clone-server
同じ状態で立ち上がる
複製サーバーは、起動時に何もインストールしていません。それでも同じページが出るのは、ソフトも設定も AMI に焼き込まれているからです。
05 — Requirements

要件

以下の流れで、「設定済みサーバーを作る」→「AMI 化する」→「複製を起動して確かめる」を順に行ってください。

No要件
1リージョンは「東京(ap-northeast-1)」を使用する。
2複製の元になる EC2 インスタンスを 1 台起動する。AMI は Amazon Linux 2023、インスタンスタイプは無料利用枠の対象(例:t2.micro / t3.micro)。名前タグは origin-server(例)。
3このサーバーに、複製できたと分かる「目印」を入れる。ユーザーデータで Apache(httpd)を起動し、固定の文言を書いたページ(例:「セットアップ済みサーバー」)を配置する。ブラウザで表示できるよう、セキュリティグループで HTTP(80)を許可する。
4origin-server からカスタム AMI を作成する(名前は my-web-ami など)。AMI の状態が 利用可能(available)になるまで待つ。
5作成した my-web-ami から、新しい EC2 インスタンスを 1 台起動する(名前は clone-server など)。ユーザーデータは設定しない。HTTP(80)を許可し、パブリック IP が付くようにする。
6clone-server のパブリック IP アドレスにブラウザでアクセスし、何もインストールしていないのに、origin-server と同じ目印ページが表示されることを確認する。
06 — Steps

構築の進め方

ポイントは、最後の複製サーバーにあえて何も設定しないこと。それでも同じページが出れば、「AMI に焼き込まれていた」とはっきり分かります。

  1. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

    AMI もリージョンごと

    作成した AMI は、そのリージョンの中にだけ現れます。元のインスタンスと同じリージョンで作業していることを最初にそろえておきましょう。

  2. 複製の元になるサーバー(origin-server)を起動する

    EC2 コンソールで「インスタンスを起動」を押し、名前 origin-server、AMI は Amazon Linux 2023、タイプは無料利用枠の対象を選びます。ネットワーク設定でパブリック IP の自動割り当てを有効にし、セキュリティグループで HTTP(80)を 0.0.0.0/0 から許可します。「高度な詳細」→「ユーザーデータ」に次を貼り付けて起動します。

    ユーザーデータ(origin-server のセットアップ用)
    #!/bin/bash
    dnf install -y httpd
    systemctl enable --now httpd
    # 複製を見分けるための「目印」。固定の文言にしておく
    echo "<h1>セットアップ済みサーバー</h1><p>このページは AMI に焼き込まれています</p>" > /var/www/html/index.html
    なぜ「固定の文言」にするの?

    あとで複製したサーバーに同じページが出るかを確かめます。文言を固定にしておくと、「これは元の状態がそのままコピーされた」とひと目で分かります。今回はセットアップの手早さのためユーザーデータを使いますが、手で設定しても構いません。

  3. 元サーバーが「設定済み」であることを確認する

    状態が「実行中(Running)」になり数分待ったら、origin-server のパブリック IP アドレスにブラウザでアクセスし、目印ページ(「セットアップ済みサーバー」)が表示されることを確かめます。これが「焼き込む前の完成状態」です。

    焼き込む中身を先に確定させる

    AMI は「この瞬間の状態」を写し取ります。先に元サーバーが期待どおり動いていることを確認してから AMI を作ると、複製も確実に同じ状態になります。

  4. origin-server からカスタム AMI を作成する

    「インスタンス」一覧で origin-server を選び、「アクション」→「イメージとテンプレート」→「イメージを作成」を選びます。イメージ名my-web-ami と入力し、そのまま「イメージを作成」を押します。

    作成中は少し待つ

    AMI の作成には数分かかります。左メニュー「AMI」を開き、my-web-ami の状態が 保留中(pending) から 利用可能(available) に変わるのを待ちましょう。available になるまでは、その AMI から起動できません。

  5. AMI から複製サーバー(clone-server)を起動する

    左メニュー「AMI」my-web-ami を選び、「AMI からインスタンスを起動」を押します。名前を clone-server にし、タイプは無料利用枠の対象、パブリック IP の自動割り当てを有効、HTTP(80)を許可するセキュリティグループを選びます。ユーザーデータには何も入れずに起動します。

    インスタンスを起動 — AMI を選択(イメージ)

    AMI の選択元

    マイ AMI
    自分が作成したカスタム AMI から選ぶ
    クイックスタート
    AWS が用意した標準 AMI から選ぶ

    my-web-ami は自分専用の AMI なので「マイ AMI」タブを開きます

    ここがこのハンズオンの肝

    複製サーバーには、わざと何のセットアップもしません。それでも次のステップで同じページが出れば、「ソフトも設定も AMI に入っていた」ことの動かぬ証拠になります。

  6. 複製できたことをブラウザで確認する

    clone-server「実行中」になったら、そのパブリック IP アドレスにブラウザでアクセスします。何もインストールしていないのに、origin-server と同じ「セットアップ済みサーバー」ページが表示されるはずです。これで複製は成功です。

    AMI に「入っているもの・いないもの」

    ディスクの中身(OS・入れたソフト・置いたファイル)は AMI に焼き込まれます。一方で、セキュリティグループやパブリック IP アドレスは AMI には含まれません。だから複製側でも HTTP の許可とパブリック IP の設定が必要になります。

    AMI に含まれる(複製される)

    • OS とその設定
    • インストールしたソフト(Apache など)
    • 置いたファイル(目印ページなど)

    AMI に含まれない(起動時に指定)

    • セキュリティグループ
    • パブリック IP アドレス
    • インスタンスタイプ・キーペアなど
07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。

Pitfall 01 — AMI から起動しようとしても見つからない・起動できない

「作ったはずの AMI が選べない/一覧に出てこない」

多くはAMI がまだ利用可能になっていないことが原因です。①「AMI」一覧で my-web-ami の状態が available になっているかpending の間は起動に使えません)、②表示しているリージョンが、AMI を作成したリージョンと同じかを確認しましょう。作成直後は数分待つ必要があります。

Pitfall 02 — 複製サーバーでページが表示されない

「clone-server にアクセスしても、目印ページが出ない」

ソフトは焼き込まれていても、通信の入口は複製側で開ける必要があります①clone-server のセキュリティグループで HTTP(80)を許可しているか(セキュリティグループは AMI に含まれません)、②パブリック IP アドレスが付いているかhttp:// でアクセスしているかを見直しましょう。Apache 自体は AMI に入っているので、入れ直す必要はありません。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。EC2 コンソールとブラウザを開いて、次を順に確かめましょう。

  • 「インスタンス」一覧に origin-serverclone-server2 台がある。
  • 「AMI」一覧に my-web-ami があり、状態が 利用可能(available) になっている。
  • clone-server「AMI ID」が、my-web-ami のものになっている(詳細画面で確認できます)。
  • origin-server のパブリック IP を開くと、目印ページが表示される。
  • clone-server のパブリック IP を開くと、同じ目印ページが表示される(ユーザーデータを設定していないのに表示される、がポイント)。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. 複製サーバーでは、セキュリティグループを改めて指定する必要がありました。OS やソフトは AMI に含まれるのに、セキュリティグループやパブリック IP が含まれないのはなぜでしょうか。それぞれが「何に属するもの」かを考えてみましょう。
    ヒント
    AMI が写し取るのは「ディスクの中身」です。一方、セキュリティグループやパブリック IP は、サーバーの中身というより「そのサーバーをネットワーク上にどう置くか」という外側の設定です。どこまでが“イメージ”でどこからが“起動時の指定”か、という線引きで考えてみましょう。
  2. 同じ Web サーバーを 10 台用意する場面を考えます。「起動のたびにスクリプトでインストールする方法」と「AMI に焼き込んで複製する方法」では、それぞれどんな利点・欠点があるでしょうか。
    ヒント
    焼き込み方式は「起動が速い・毎回同じ」が強みですが、中身を変えたいときは作り直しが要ります。スクリプト方式は「変更に強い」反面、起動のたびに時間がかかります。台数・更新の頻度・起動の速さといった観点で比べると、場面ごとの向き・不向きが見えてきます。
  3. AMI を作ったあとに、元のサーバーへ新しいソフトを追加しました。すでに作成済みの AMI には、その変更は反映されるでしょうか。反映させたい場合はどうすればよいか考えてみましょう。
    ヒント
    AMI は「作った瞬間の状態」を写したものなので、あとからの変更は自動では入りません。最新の状態を配りたいなら、もう一度 AMI を作り直すことになります。これを定期的に・自動で行う仕組み(イメージを継続的に作るサービス)があることも調べてみましょう。
10 — Clean up

後片づけ

AMI は、見えないところにディスクのコピー(スナップショット)を持っていて、それにストレージ料金がかかります。AMI を消すときは「登録解除」と「スナップショット削除」の両方が必要な点に注意しましょう。

  1. インスタンスを終了する:「インスタンス」で origin-serverclone-server を選び、「インスタンスを終了(Terminate)」。状態が「終了済み」になれば、サーバーの料金は止まります。
  2. AMI を登録解除する:左メニュー「AMI」で my-web-ami を選び、「アクション」→「AMI を登録解除」を選びます。これで AMI からの起動はできなくなります。
  3. スナップショットを削除する:左メニュー「スナップショット」を開き、my-web-ami に対応するスナップショットを選んで削除します。登録解除だけでは、このスナップショットが残って料金が発生し続けます。
  4. セキュリティグループを削除する(任意):このハンズオン用に作ったセキュリティグループは、インスタンスを終了したあとに削除できます(他で使っていないことを確認してから)。
Caution — AMI を消すときはスナップショットも忘れずに

「登録解除」だけでは、ディスクのコピーが残る

AMI の実体は、EBS ボリュームのスナップショット(ディスクのコピー)として保存されています。AMI を「登録解除」しても、このスナップショットは自動では消えず、保存している間ストレージ料金がかかり続けます。後片づけでは、登録解除に加えてスナップショットの削除まで行いましょう。デフォルト VPC やデフォルトのサブネットは消さないようにしてください。

コストに関する注意: EC2 インスタンスは起動している間、課金されますt2.micro / t3.micro などは無料利用枠の対象で、月あたり一定時間まで無料。ただし枠は時間の合計なので、2 台動かすと早く消費します)。作成した AMI は、その実体である EBS スナップショットに対してストレージ料金がかかります(保存しているサイズに応じた少額の課金で、消し忘れると残り続けます)。各インスタンスに付くディスク(EBS ボリューム)や、割り当てられる public IPv4 アドレスにも料金がかかります。VPC・サブネット・セキュリティグループ自体には料金はかかりません。短時間で終えれば少額にとどまりますが、使い終えたら上の「後片づけ」で、インスタンスの終了・AMI の登録解除・スナップショットの削除をすべて行いましょう。最新の料金は AWS の公式料金ページで確認してください。