はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- 必須EC2 インスタンスを起動し、セキュリティグループで通信を許可した経験があること
- あると良いユーザーデータでサーバーの初期設定を自動化したことがある(複製の元になるサーバーを手早く作るのに使います。スクリプトは本文に用意しています)
- あると良い「AMI(もとになる OS イメージ)を選んでインスタンスを起動した」ことを覚えている
※ このハンズオンは すべてコンソールだけで完結します。サーバーへのログイン(SSH)は使いません。複製できたかどうかは、ブラウザでページを開いて確認します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
時間をかけてサーバーをセットアップしたあと、「これとまったく同じサーバーをもう 1 台ほしい」と思うことがあります。素直にやるなら、新しいサーバーを起動して、同じソフトを入れ、同じ設定を一から繰り返すことになりますが、これは手間がかかるうえ、設定の入れ忘れや打ち間違いも起きがちです。
そこで使うのが AMI(Amazon マシンイメージ)です。AMI は「サーバーの完成状態をまるごと焼き込んだテンプレート」のようなもので、設定済みのインスタンスから自分専用の カスタム AMI を作れます。あとはその AMI を選んで起動するだけで、セットアップ済みの状態のサーバーが、何台でも・すぐに立ち上がります。
最初にインスタンスを起動するときも「AMI」を選んだよね?
はい。Amazon Linux などは AWS が用意した AMI です。今回作るのは、それを土台に自分でセットアップした状態を焼き直した「自分専用の AMI」。出発点が「素の OS」から「設定済みのサーバー」に変わる、とイメージすると分かりやすいです。
起動時に毎回スクリプトで入れる方法とは何が違うの?
起動のたびにインストールする方法は、変更には強い反面、毎回その作業の時間がかかります。AMI はあらかじめ焼き込んでおくので、起動が速く、毎回まったく同じ状態になります。代わりに、中身を変えたいときは AMI を作り直す手間がかかります。今回はこの「焼き込んで複製する」側を体験します。
セットアップ済みの EC2 からカスタム AMI を作成し、その AMI から新しい EC2 を起動して、何もインストールしていないのに最初のサーバーと同じページが表示される(=複製できている)ことを確認する。
つくる構成
「設定済みサーバー」→「AMI を作成(焼き込み)」→「AMI から複製を起動」という 3 ステップで進みます。複製したサーバーには、何も入れ直さなくても元の状態がそのまま入っています。
Apache + 目印ページ入り
完成状態のテンプレート
同じ状態で立ち上がる
要件
以下の流れで、「設定済みサーバーを作る」→「AMI 化する」→「複製を起動して確かめる」を順に行ってください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | 複製の元になる EC2 インスタンスを 1 台起動する。AMI は Amazon Linux 2023、インスタンスタイプは無料利用枠の対象(例:t2.micro / t3.micro)。名前タグは origin-server(例)。 |
| 3 | このサーバーに、複製できたと分かる「目印」を入れる。ユーザーデータで Apache(httpd)を起動し、固定の文言を書いたページ(例:「セットアップ済みサーバー」)を配置する。ブラウザで表示できるよう、セキュリティグループで HTTP(80)を許可する。 |
| 4 | origin-server からカスタム AMI を作成する(名前は my-web-ami など)。AMI の状態が 利用可能(available)になるまで待つ。 |
| 5 | 作成した my-web-ami から、新しい EC2 インスタンスを 1 台起動する(名前は clone-server など)。ユーザーデータは設定しない。HTTP(80)を許可し、パブリック IP が付くようにする。 |
| 6 | clone-server のパブリック IP アドレスにブラウザでアクセスし、何もインストールしていないのに、origin-server と同じ目印ページが表示されることを確認する。 |
構築の進め方
ポイントは、最後の複製サーバーにあえて何も設定しないこと。それでも同じページが出れば、「AMI に焼き込まれていた」とはっきり分かります。
-
マネジメントコンソールにサインインし、リージョンを合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。
AMI もリージョンごと作成した AMI は、そのリージョンの中にだけ現れます。元のインスタンスと同じリージョンで作業していることを最初にそろえておきましょう。
-
複製の元になるサーバー(origin-server)を起動する
EC2 コンソールで「インスタンスを起動」を押し、名前
origin-server、AMI は Amazon Linux 2023、タイプは無料利用枠の対象を選びます。ネットワーク設定でパブリック IP の自動割り当てを有効にし、セキュリティグループで HTTP(80)を0.0.0.0/0から許可します。「高度な詳細」→「ユーザーデータ」に次を貼り付けて起動します。#!/bin/bash dnf install -y httpd systemctl enable --now httpd # 複製を見分けるための「目印」。固定の文言にしておく echo "<h1>セットアップ済みサーバー</h1><p>このページは AMI に焼き込まれています</p>" > /var/www/html/index.html
なぜ「固定の文言」にするの?あとで複製したサーバーに同じページが出るかを確かめます。文言を固定にしておくと、「これは元の状態がそのままコピーされた」とひと目で分かります。今回はセットアップの手早さのためユーザーデータを使いますが、手で設定しても構いません。
-
元サーバーが「設定済み」であることを確認する
状態が「実行中(Running)」になり数分待ったら、
origin-serverのパブリック IP アドレスにブラウザでアクセスし、目印ページ(「セットアップ済みサーバー」)が表示されることを確かめます。これが「焼き込む前の完成状態」です。焼き込む中身を先に確定させるAMI は「この瞬間の状態」を写し取ります。先に元サーバーが期待どおり動いていることを確認してから AMI を作ると、複製も確実に同じ状態になります。
-
origin-server からカスタム AMI を作成する
「インスタンス」一覧で
origin-serverを選び、「アクション」→「イメージとテンプレート」→「イメージを作成」を選びます。イメージ名にmy-web-amiと入力し、そのまま「イメージを作成」を押します。作成中は少し待つAMI の作成には数分かかります。左メニュー「AMI」を開き、
my-web-amiの状態が保留中(pending)から利用可能(available)に変わるのを待ちましょう。available になるまでは、その AMI から起動できません。 -
AMI から複製サーバー(clone-server)を起動する
左メニュー「AMI」で
my-web-amiを選び、「AMI からインスタンスを起動」を押します。名前をclone-serverにし、タイプは無料利用枠の対象、パブリック IP の自動割り当てを有効、HTTP(80)を許可するセキュリティグループを選びます。ユーザーデータには何も入れずに起動します。AMI の選択元
マイ AMI自分が作成したカスタム AMI から選ぶクイックスタートAWS が用意した標準 AMI から選ぶ↳
my-web-amiは自分専用の AMI なので「マイ AMI」タブを開きますここがこのハンズオンの肝複製サーバーには、わざと何のセットアップもしません。それでも次のステップで同じページが出れば、「ソフトも設定も AMI に入っていた」ことの動かぬ証拠になります。
-
複製できたことをブラウザで確認する
clone-serverが「実行中」になったら、そのパブリック IP アドレスにブラウザでアクセスします。何もインストールしていないのに、origin-serverと同じ「セットアップ済みサーバー」ページが表示されるはずです。これで複製は成功です。AMI に「入っているもの・いないもの」ディスクの中身(OS・入れたソフト・置いたファイル)は AMI に焼き込まれます。一方で、セキュリティグループやパブリック IP アドレスは AMI には含まれません。だから複製側でも HTTP の許可とパブリック IP の設定が必要になります。
AMI に含まれる(複製される)
- OS とその設定
- インストールしたソフト(Apache など)
- 置いたファイル(目印ページなど)
AMI に含まれない(起動時に指定)
- セキュリティグループ
- パブリック IP アドレス
- インスタンスタイプ・キーペアなど
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「作ったはずの AMI が選べない/一覧に出てこない」
多くはAMI がまだ利用可能になっていないことが原因です。①「AMI」一覧で my-web-ami の状態が available になっているか(pending の間は起動に使えません)、②表示しているリージョンが、AMI を作成したリージョンと同じかを確認しましょう。作成直後は数分待つ必要があります。
「clone-server にアクセスしても、目印ページが出ない」
ソフトは焼き込まれていても、通信の入口は複製側で開ける必要があります。①clone-server のセキュリティグループで HTTP(80)を許可しているか(セキュリティグループは AMI に含まれません)、②パブリック IP アドレスが付いているか、③http:// でアクセスしているかを見直しましょう。Apache 自体は AMI に入っているので、入れ直す必要はありません。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。EC2 コンソールとブラウザを開いて、次を順に確かめましょう。
- 「インスタンス」一覧に
origin-serverとclone-serverの 2 台がある。 - 「AMI」一覧に
my-web-amiがあり、状態が利用可能(available)になっている。 clone-serverの「AMI ID」が、my-web-amiのものになっている(詳細画面で確認できます)。origin-serverのパブリック IP を開くと、目印ページが表示される。clone-serverのパブリック IP を開くと、同じ目印ページが表示される(ユーザーデータを設定していないのに表示される、がポイント)。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- 複製サーバーでは、セキュリティグループを改めて指定する必要がありました。OS やソフトは AMI に含まれるのに、セキュリティグループやパブリック IP が含まれないのはなぜでしょうか。それぞれが「何に属するもの」かを考えてみましょう。
ヒント
AMI が写し取るのは「ディスクの中身」です。一方、セキュリティグループやパブリック IP は、サーバーの中身というより「そのサーバーをネットワーク上にどう置くか」という外側の設定です。どこまでが“イメージ”でどこからが“起動時の指定”か、という線引きで考えてみましょう。 - 同じ Web サーバーを 10 台用意する場面を考えます。「起動のたびにスクリプトでインストールする方法」と「AMI に焼き込んで複製する方法」では、それぞれどんな利点・欠点があるでしょうか。
ヒント
焼き込み方式は「起動が速い・毎回同じ」が強みですが、中身を変えたいときは作り直しが要ります。スクリプト方式は「変更に強い」反面、起動のたびに時間がかかります。台数・更新の頻度・起動の速さといった観点で比べると、場面ごとの向き・不向きが見えてきます。 - AMI を作ったあとに、元のサーバーへ新しいソフトを追加しました。すでに作成済みの AMI には、その変更は反映されるでしょうか。反映させたい場合はどうすればよいか考えてみましょう。
ヒント
AMI は「作った瞬間の状態」を写したものなので、あとからの変更は自動では入りません。最新の状態を配りたいなら、もう一度 AMI を作り直すことになります。これを定期的に・自動で行う仕組み(イメージを継続的に作るサービス)があることも調べてみましょう。
後片づけ
AMI は、見えないところにディスクのコピー(スナップショット)を持っていて、それにストレージ料金がかかります。AMI を消すときは「登録解除」と「スナップショット削除」の両方が必要な点に注意しましょう。
- インスタンスを終了する:「インスタンス」で
origin-server・clone-serverを選び、「インスタンスを終了(Terminate)」。状態が「終了済み」になれば、サーバーの料金は止まります。 - AMI を登録解除する:左メニュー「AMI」で
my-web-amiを選び、「アクション」→「AMI を登録解除」を選びます。これで AMI からの起動はできなくなります。 - スナップショットを削除する:左メニュー「スナップショット」を開き、
my-web-amiに対応するスナップショットを選んで削除します。登録解除だけでは、このスナップショットが残って料金が発生し続けます。 - セキュリティグループを削除する(任意):このハンズオン用に作ったセキュリティグループは、インスタンスを終了したあとに削除できます(他で使っていないことを確認してから)。
「登録解除」だけでは、ディスクのコピーが残る
AMI の実体は、EBS ボリュームのスナップショット(ディスクのコピー)として保存されています。AMI を「登録解除」しても、このスナップショットは自動では消えず、保存している間ストレージ料金がかかり続けます。後片づけでは、登録解除に加えてスナップショットの削除まで行いましょう。デフォルト VPC やデフォルトのサブネットは消さないようにしてください。
コストに関する注意: EC2 インスタンスは起動している間、課金されます(t2.micro / t3.micro などは無料利用枠の対象で、月あたり一定時間まで無料。ただし枠は時間の合計なので、2 台動かすと早く消費します)。作成した AMI は、その実体である EBS スナップショットに対してストレージ料金がかかります(保存しているサイズに応じた少額の課金で、消し忘れると残り続けます)。各インスタンスに付くディスク(EBS ボリューム)や、割り当てられる public IPv4 アドレスにも料金がかかります。VPC・サブネット・セキュリティグループ自体には料金はかかりません。短時間で終えれば少額にとどまりますが、使い終えたら上の「後片づけ」で、インスタンスの終了・AMI の登録解除・スナップショットの削除をすべて行いましょう。最新の料金は AWS の公式料金ページで確認してください。