# さわってわかるクラウド入門 AWS演習
# v20220119.1
# 概要
- AWS環境上に、Webサーバーとリレーショナルデータベースを用いた標準的な構成のWebアプリケーションを構築します
- EC2でのWebサーバーの作成と、RDSでのMariaDBサーバーの構築を体験できます。ネットワークはすでに作成済みのため、すぐにサーバー構築に取り掛かることができます
- 演習が完了すると、以下の構成が出来上がります。受講者様PCのWebブラウザからEC2インスタンスに接続し、Webアプリケーションの動作確認を実施します
- 所要時間は約40分です
- オプション演習を用意しています。演習が早く終わった場合にはぜひ実施してみてください
# この演習で学べること
- AWSマネージメントコンソールの基本的な使い方
- セキュリティグループの設定方法
- 検証環境向けのRDSインスタンスの構築方法
- 検証環境向けのEC2インスタンスの構築方法
- (オプション)AWSでのネットワーク構成
- (オプション) EC2インスタンスからのRDSデータベース利用方法
# 演習の前にお読みください
- マネージメントコンソールへのログインURL、ユーザー名、パスワードは受講当日に講師から伝えられます
- マネージメントコンソールへの文字入力は、必ず半角英数字でのみ行ってください
- 手順中に設定の指示がない場合は、画面上での値の入力や変更は不要です。次の手順に進んでください
- 設定値を入力する場合は、できるだけコピペしてください。手入力は記載ミスの恐れがあります
- 演習手順について講師に確認する場合は、項目の番号をお伝え下さい。例:2-3の手順5番
# 凡例
- 手順書内での凡例は以下の通りです。ご活用ください
- 補足
作業手順の補足事項を記載しています
- 予備知識
TIP
予備知識を記載しています
- 注意
WARNING
主に、作業ミスの起きやすいポイントや注意事項を記載しています
- 動作不良等
DANGER
うまく動作しないときに確認するポイントを記載しています。講師に確認する際に、ご自分でもチェックしてみてください
# 演習環境の有効期限等について
- 演習環境の有効期限は、講義当日の23時までです。23時以降になると、パスワードが変更され利用できなくなります
- 演習で作成したEC2及びRDSの各インスタンスは、20時になると自動で削除されますのでご了承ください。なお、この時間帯に作業していると、リソースが自動で削除されますのでご注意ください
- 講義終了後の演習環境でのログインは、上記時間までご自由に実施ください。演習を再度実行したい場合は、作成したEC2インスタンスやRDSインスタンスを削除してから実施してください
# 演習手順
# 1. AWSコンソールへのログイン
講師から伝えられたログイン用のURLにWebブラウザでアクセスしてください。AWSのログイン画面が開きます
Zoomのチャットで配布された場合は、クリックするだけで画面が開きます
講師から伝えられたユーザー名及びパスワードを入力して [サインイン] ボタンを押下してください
TIP
ログイン直後の画面に新しいAWSコンソールのホームというボックスが表示されることがあります。その場合は新しいコンソールのホームに切り替えるというボタンを押してください。AWSのマネージメントコンソールは、ユーザーの要望を取り入れて日々進化しているため、このような表示が出ることがあります
マネージメントコンソールがブラウザ上に表示されます。AWSの世界へようこそ!
パスワードを保存するかを確認されることがありますが、どちらでも構いません。再ログインする可能性がある場合は、手間を省くために保存しても結構です
画面右上に東京と表示されていることを確認してください。東京以外の表示になっている場合はその地名をクリックし、ドロップダウンボックスから東京を選択してください
# 2. セキュリティグループの作成
- ファイアーウォールの機能であるセキュリティグループを作成します。Webサーバー用とデータベースサーバー用の2つを作成します。まずはWebサーバー用のセキュリティグループから作成しましょう
- セキュリティグループはVPCに設定します。本来はVPCの作成から行う必要がありますが、この演習ではVPCはすでに作成済みの為、すぐにセキュリティグループを設定可能です
# 手順
画面左上の虫眼鏡アイコンのボックスにEC2と入力します(小文字でも可)。表示された一覧からEC2をクリックしてください
EC2という文字をクリックしてください。他の箇所はクリックしても反応しません
EC2のダッシュボードが表示されます。「おかえりなさい」という吹き出しが表示されることがありますが、無視してかまいません
左側のメニューにて、セキュリティグループをクリックしてください
右上の [セキュリティグループの作成] ボタンを押下してください
以下を設定します
項目 設定値 セキュリティグループ名 web-sg 説明 web server security group VPC 表示されているものを X で削除したのち、選択肢の中からLabVPCを選択 インバウンドルール欄の [ルールを追加] ボタンを押下してください
カスタムTCPをクリックし、HTTPを選択
ソース欄にある空白のボックスをクリックし、選択肢から0.0.0.0/0を選択
右下の [セキュリティグループを作成] ボタンを押下してください
作成したセキュリティグループの詳細画面に遷移します。時間に余裕があれば内容を確認してください
続けて、データベース用のセキュリティグループも作成します。左側メニューにてセキュリティグループをクリックしてください。
右上の [セキュリティグループの作成] ボタンを押下してください
以下を設定します
項目 設定値 セキュリティグループ名 db-sg 説明 db server security group VPC 表示されているものを X で削除したのち、選択肢の中からLabVPCを選択 インバウンドルール欄の [ルールを追加] ボタンを押下してください
カスタムTCPをクリックし、MYSQL/Auroraを選択
ソース欄にある空白のボックスをクリックし、選択肢からweb-sgを選択
[右下のセキュリティグループを作成] ボタンを押下してください
作成したセキュリティグループの詳細画面に遷します。時間に余裕があれば内容を確認してください
TIP
web-sgを作成するときはソースとして0.0.0.0/0というIPアドレスを設定しましたが、db-sgのときはソースとしてweb-sgを設定しました。これは、web-sgが設定されているEC2インスタンスをソースとして信用する、という意味です。
# 3. データベースインスタンスの作成
- Webアプリケーションが表示する項目を保管しておくデータベースを作成します。これまでにデータベースの構築経験のある方はぜひ、その時の作業内容と比較してみて下さい。「マネージドデータベース」の便利さを体験してみましょう
- データベースインスタンスは起動に数分かかるため、Webサーバーより先に構築しておくことで作業時間を短縮できます
# 手順
画面左上の虫眼鏡アイコンのボックスにRDSと入力します(小文字でも可)。表示された一覧からRDSをクリックしてください
RDSのダッシュボードが表示されます。左側メニューにてデータベースをクリックしてください。データベース一覧画面に遷移します
右側の [データベースの作成] ボタンを押下してください
データベース作成方法を選択 は、「標準作成」のままにしてください
エンジンのオプションにて、MariaDBのタイルをクリックしてください
バージョンは、10.3.31を選択します。もし10.3.31がない場合は、10.3.x のxが最大のものを選択してください
テンプレートでは、開発/テストをクリックしてください
設定にて、以下を設定します
項目 設定値 DBインスタンス識別子 sawakuwa-lab-db マスターユーザー名 admin マスターパスワード password パスワードを確認 password DBインスタンスクラスにて、バースト可能クラス(tクラスを含む) を選択します。
ドロップダウンリスト内に表示されたインスタンスクラスが db.t3.micro であることを確認して次に進んでください。異なる場合はドロップダウンリストから db.t3.micro を選択してください
ストレージに関する設定は変更せず先に進みます
可用性と耐久性では、スタンバイインスタンスを作成しないでくださいにチェックが入っていることを確認して次に進んでください
接続では、以下を設定します
項目 設定値 Virtual Private Cloud (VPC) LabVPC サブネットグループ db-subnet-group 既存のVPCセキュリティグループ default の横のXをクリックし default を削除。続けてリストボックスをクリックし、表示されたものから db-sg を選択。 アベイラビリティゾーン ap-northeast-1a WARNING
セキュリティグループの設定で、default の削除を忘れるとデータベースを利用できませんので注意してください
TIP
サブネットグループは、RDSインスタンスを冗長構成にする際に配置するアベイラビリティゾーンを設定するための機能です。本来はRDSインスタンス構築よりも前に設定しておく必要がありますが、この演習では予め作成済みのものを使用しています
追加設定は以下を設定してください
WARNING
アベイラビリティゾーンのすぐ下の追加設定は、無視してください。大きなフォントの追加設定が作業対象です
項目 設定値 最初のデータベース名 labdb 自動バックアップを有効にします チェックを外してください 暗号化 チェックを外してください 拡張モニタリングの有効化 チェックを外してください 一番下まで進み、[データベースの作成] ボタンを押下してください。しばらく待つとデータベースの一覧画面が表示されます
WARNING
ご利用のブラウザによっては、パスワードの侵害という警告が出ることがありますが、無視して警告を閉じてください。また、ブラウザでのパスワードの保存は不要です。
データベースインスタンスの作成が完了するまで少し時間がかかります。完了を待たずに次に進んでください
TIP
RDSの設定画面は、後の手順でも利用します。ブラウザ操作に慣れている場合は、ブラウザタブを複製しておくと以降の手順の時間短縮になります
# 4. Webサーバー作成
- WebサーバーとなるEC2インスタンスを起動します。Webサーバーアプリケーションフレームワークには、Python製の flask を利用しています
- サーバーアプリケーションの実行に必要なミドルウェアやアプリケーション本体は、ユーザーデータ(後述)を使ってインスタンス起動時に自動でインストールされるようにします。ですので簡単な設定だけでWebサーバーが利用できます。
# 手順
# 4-1. EC2インスタンス作成
画面左上の虫眼鏡アイコンのボックスにEC2と入力します(小文字でも可)。表示された一覧からEC2をクリックしてください。EC2のダッシュボードが表示されます
最初の作業でセキュリティグループの作成を行っているので、セキュリティグループの画面が表示されるかもしれませんが、気にせず先の手順に進んでください
左側メニューで、インスタンスをクリックしてください
先頭に三角のアイコンの付いていない方をクリックしてください
画面右上にある [インスタンスを起動] ボタンを押下してください。インスタンスを起動するための画面に遷移します
TIP
EC2インスタンスを作成することを、「起動」と言います。また、「シャットダウン」はEC2インスタンスの削除を意味します
名前とタグのボックスに、インスタンスの名前を設定します。ボックスに websv と入力したら、次に進んでください
起動するOSを確認します。以下を確認してください
- 説明の下に、Amazon Linux 2 Kernel 5.10 AMI 2.0.20220912.1 x86_64 HVM gp2 とあること
20220912 の部分は違う表記でも問題ありません
- アーキテクチャが、 64ビット (x86) になっていること
もし表記が上記と異なっている場合は、Amazonマシンイメージ(AMI) のドロップダウンボックスから、上記の 説明 の状態になるものを選択してください
次にインスタンスタイプ、つまりインスタンスのスペックを確認します。インスタンスタイプの下の表記が t2.micro であることを確認してください。もし異なる場合は、ドロップダウンボックスから t2.micro を選択してください
次のキーペアは今回は利用しません。ドロップダウンボックスから、 キーペアなしで続行 を選択してください
TIP
キーペアは、インスタンスにSSHログインするための認証鍵です。今回はSSHではない方法でインスタンスにログインするので不要です
次はネットワークの設定を行います。右にある [編集] ボタンを押して、以下を設定してください
項目 設定値 VPC LabVPC サブネット PublicSubnet パブリックIPの自動割り当て 有効化
※自動で設定されているはずですが、ご確認くださいファイアーウォール(セキュリティグループ) 既存のセキュリティグループを選択する を選択したあと、
共通のセキュリティグループにて web-sg を選択WARNING
次に進む前に、以下をよく確認してください
- サブネットの選択で、PublicSubnet を選択しているか
- セキュリティグループで、web-sg を選択しているか
- サブネットの選択で、PublicSubnet を選択しているか
ストレージを設定 は変更不要です。そのまま先に進んでください
高度な詳細 を2か所設定します(指示のない場所は変更不要です)。もし、高度な詳細のメニューが開かれていない場合は、頭にある▼をクリックして展開してください
IAMインスタンスプロフィール のドロップダウンボックスから Ec2DefaultRole を選択してください
ユーザーデータが表示されるまで下にスクロールし、ボックスに以下の全ての行をコピペしてください
#!/bin/sh sudo yum install -y python3 python3-pip git mariadb sudo pip3 install flask pymysql python-dotenv git clone https://github.com/trainocate-japan/sawakura-labs.git /home/ec2-user/sawakura-labs sudo chown -r ec2-user:ec2-user /home/ec2-user/
TIP
ユーザーデータは、EC2インスタンスの起動時にスクリプトを自動で実行してくれる機能です。 ミドルウェアのアップデートなどOSのインストール後に必ず実行する処理や、アプリケーションのインストール作業などを自動化することができます
これで設定は完了です。[インスタンスの起動] ボタンを押下してください。画面が遷移し、情報が表示されます。[インスタンスの表示] ボタンを押下してください
インスタンスの状態が 保留中から実行中に変わるまでお待ちください(通常数秒で変わります)
保留中という表記は pending と表示されることもあります。同じく、実行中の表記は running と表示されることがあります
インスタンスの行をどこでもよいのでクリックしてください。画面下半分にインスタンスの情報が表示されます
右の列にパブリックIPv4 DNSという記載があるので、そのアドレスをテキストエディタ等にコピペして保管してください
TIP
ホスト名の左にある四角いアイコンをクリックするとコピーできます
# 4-2. データベースのホスト名確認
- そろそろデータベースの起動が完了しているはずです。Webアプリケーションを使うために必要なデータベースのホスト名を確認しましょう
# 手順
- 画面左上の虫眼鏡アイコンのボックスにRDSと入力します(小文字でも可)。表示された一覧からRDSをクリックします
- 左側メニューより、データベースをクリックします
- データベース一覧が表示されます。sawakura-lab-dbをクリックしてデータベースの詳細情報を表示してください
- エンドポイントという欄に「sawakura-lab-db.xxxxxx.ap-northeast-1.rds.amazonaws.com」 のような文字列が表示されています。これがデータベースのホスト名です。この文字列を全てコピーしてテキストエディタなどに貼り付けて保管しておいてください。
# 4-3. EC2インスタンスのシェルへログイン
- Webアプリケーションを起動するためにシェルにログインします。通常はTeratermなどでSSH接続 しますが、今回はAWSマネージメントコンソールから直接インスタンスのシェルにログイン可能な、SessionManagerという機能を使います
# 手順
WARNING
以降、コピペの作業が発生しますので、ペーストのミスがないか注意しながら進めてください。また、Ctrl-Vでのペーストができない場合は、マウスの右クリックメニューからのペーストなどを試してみてください
画面左上の虫眼鏡アイコンのボックスにEC2と入力します(小文字でも可)。表示されたメニューのEC2をクリックします
インスタンス一覧に、先程起動したEC2インスタンスが表示されます。インスタンスの行をどこでもよいので右クリックしてメニューを表示し、接続を選択してください
インスタンスに接続 という画面に切り替わります。セッションマネージャーというタブをクリックしてください
WARNING
セッションマネージャーの他に、EC2 Instance Connectなどのタブも並んでいます。間違えないようにご注意ください
右下の[接続]ボタンがオレンジ色で表示されることを確認してください。オレンジ色で表示されていれば、[接続]を押下してください
DANGER
接続ボタンがオレンジ色にならない場合は以下を確認してください
- web-sgセキュリティグループのアウトバウンドに0.0.0.0/0が設定されているか(デフォルトで設定されていますが、まれに作業ミスで削除や変更してしまうケースがあります)
- EC2インスタンスのIAMロールにEc2DefaultRoleが設定されているか
接続ボタンを押下すると、しばらくしてインスタンスのシェルに接続され、Linuxコマンドが実行可能な状態になります。sh-4.2$ と表示されるまで、少しお待ち下さい
Webアプリケーションの配置されているLinuxユーザーに切り替えます。次のコマンドを実行してください
sh-4.2$ の後にコピー&ペーストしてからEnterキー、で実行できます
sudo su - ec2-user
[ec2-user@ip-X-X-X-X]$ と表示されれば問題ありません。次に進んでください
続けて、Webアプリケーションの配置されたディレクトリに移動します。次のコマンドを実行してください
cd sawakura-labs
TIP
EC2インスタンスを起動するときに設定したユーザースクリプトにより、Webアプリケーション一式がsawakura-labsというディレクトリにダウンロードされています。時間に余裕があれば、ディレクトリの中身を見てみてください
# 5. Webアプリケーションの実行と動作確認
- いよいよアプリケーションを実行します。アプリケーションはユーザーデータを使ってインストール済みなため、データベースの設定を行うだけで実行できます
- RDSで構築したデータベースは、オンプレミス等で利用している一般的なSQLデータベースと全く同じ方法で利用可能です。時間に余裕のある方はオプション演習で体験してみてください
# 手順
先程の作業に続けて、以下のコマンドを実行してください。これでWebアプリケーションが起動します
sudo python3 app.py
問題なく起動すると、以下のようなメッセージが表示され、Webブラウザからのアクセスを受け付けられる状態になります(表示内容は環境により異なります)
* Serving Flask app 'app' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on all addresses. WARNING: This is a development server. Do not use it in a production deployment. * Running on http://10.0.1.xx:80/ (Press CTRL+C to quit)
ブラウザで新たに別のタブを開いてください。テキストエディタ等に保管しておいたEC2インスタンスのホスト名(パブリックIPv4 DNS)をブラウザのURL欄にペーストして、Enterキーを押下してください
WARNING
パブリックIPv4 DNS は、ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.comのような文字列です。データベースのホスト名と間違えないようにご注意ください
Webアプリケーションが動作し、データベースホスト設定というページが表示されるはずです
DANGER
ページが表示されない場合は、以下が原因の可能性が高いです。確認してみましょう
- セキュリティグループ web-sg の設定間違い(ソースアドレスや、誤ってアウトバウンド側を設定変更していた、など)
- セキュリティグループ db-sg の設定間違い(ソースアドレスや、誤ってアウトバウンド側を設定変更していた、など)
- ブラウザに貼り付けたURLのコピペミス
テキストエディタ等に保管しておいたデータベースのホスト名を画面中のボックスにペーストし、[設定]ボタンを押下してください
WARNING
データベースのホスト名 は、sawakura-lab-db.xxxxxx.ap-northeast-1.rds.amazonaws.comのような文字列です。EC2インスタンスのパブリックIPv4 DNSと間違えないようにしましょう
ここまでの手順が問題なければ、弊社のクラウドコース一覧が表示されるはずです。ぜひ、今後ともご贔屓にお願い致します!
以上でラボは終了です。お疲れさまでした!
TIP
データベースのホストを入力しただけでクラウドコースの一覧が表示されることを不思議に思われたかもしれません。RDSの構築作業では、データベース名とユーザー名等は設定しましたが、データの中身までは定義していませんでした。
実は、app.pyの中でクラウドコースの一覧のデータを入力しています。データベースのホスト名が設定されたあとに、SQLを発行してクラウドコースの一覧を投入しているのです。興味のある方は、app.pyの中身を確認してみてください
# おわりに
# Opt. オプション演習
- 演習が早く終了した方は、オプション演習を実施してより理解を深めてみましょう
# Opt.1 ネットワーク構成の確認
- 今回の演習では、ネットワーク構成はすでに作成済みだったため、すぐにサーバーを配置することができました。しかし実際にAWSでインフラを構成するときはネットワークの作成が必要です。演習環境のネットワークがどのような構成だったかを振り返ってみましょう
- WIP
# Opt.2 RDSの確認
- RDSで作成したデータベースインスタンスの詳細を確認してみましょう
- WIP サブネットグループを入れる
# Opt.3 Webサーバーからデータベースを利用する
- RDSでデータベースを構築しても、利用方法は従来のリレーショナルデータベースと全く同じです。Webサーバーのシェルから、mysqlクライアントを使ってデータベースを利用してみましょう
- WIP