# さわってわかるクラウド入門 AWS演習
# v20221208.1
# Linux および Python実践カスタマイズ版
# 概要
- AWS環境上に、Webサーバーとリレーショナルデータベースを用いた標準的な構成のWebアプリケーションを構築します
- EC2でのWebサーバーの作成と、RDSでのMariaDBサーバーの構築を体験できます。ネットワークはすでに作成済みのため、すぐにサーバー構築に取り掛かることができます
- 演習が完了すると、以下の構成が出来上がります。受講者様PCのWebブラウザからEC2インスタンスに接続し、Webアプリケーションの動作確認を実施します
- このカスタマイズ版では、Webアプリケーションの改変とデプロイを体験できます
- 所要時間は約120分です
# この演習で学べること
- AWSマネージメントコンソールの基本的な使い方
- セキュリティグループの設定方法
- 検証環境向けのRDSインスタンスの構築方法
- 検証環境向けのEC2インスタンスの構築方法
- Linuxを操作してPython製Webアプリケーションをデプロイする方法
- Flaskフレームワークを利用したWebアプリケーションのデータベースにカラムを追加する方法
# 演習の前にお読みください
- マネージメントコンソールへのログイン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 を選択してください
ストレージでは、ストレージ容量を変更します。ストレージ割り当ての数値を20に変更して次に進んでください(元々の値は200です)
可用性と耐久性では、スタンバイインスタンスを作成しないでくださいにチェックが入っていることを確認して次に進んでください
接続では、以下を設定します
項目 設定値 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, SSD Volume Type とあること
20220912 の部分は違う表記でも問題ありません
- アーキテクチャが、 64ビット (x86) になっていること
もし表記が上記と異なっている場合は、Amazonマシンイメージ(AMI) のドロップダウンボックスから、上記の 説明 の状態になるものを選択してください
次にインスタンスタイプ、つまりインスタンスのスペックを確認します。インスタンスタイプの下の表記が t2.micro であることを確認してください。もし異なる場合は、ドロップダウンボックスから t2.micro を選択してください
次のキーペアは今回は利用しません。ドロップダウンボックスから、 キーペアなしで続行 を選択してください
TIP
キーペアは、インスタンスにSSHログインするための認証鍵です。今回はSSHではない方法でインスタンスにログインするので不要です
次はネットワークの設定を行います。右にある [編集] ボタンを押して、以下を設定してください
項目 設定値 VPC LabVPC サブネット PublicSubnet パブリックIPの自動割り当て 有効化
※自動で設定されているはずですが、ご確認くださいファイアーウォール(セキュリティグループ) 既存のセキュリティグループを選択する を選択したあと、
共通のセキュリティグループにて web-sg を選択WARNING
次に進む前に、以下をよく確認してください
- サブネットの選択で、PublicSubnet を選択しているか
- セキュリティグループで、web-sg を選択しているか
- サブネットの選択で、PublicSubnet を選択しているか
ストレージを設定 は変更不要です。そのまま先に進んでください
高度な詳細 を1か所設定します(指示のない場所は変更不要です)。もし、高度な詳細のメニューが開かれていない場合は、頭にある▼をクリックして展開してください
IAMインスタンスプロフィール のドロップダウンボックスから Ec2DefaultRole を選択してください
これで設定は完了です。[インスタンスの起動] ボタンを押下してください。画面が遷移し、情報が表示されます。
[すべてのインスタンスの表示] ボタンを押下してください
インスタンスの状態が 保留中から実行中に変わるまでお待ちください(通常数秒で変わります)
保留中という表記は 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
接続ボタンがオレンジ色にならない場合は以下を確認してください
- EC2インスタンス作成時に、サブネットの選択で PublicSubnet を選択しているか
- web-sgセキュリティグループのアウトバウンドに0.0.0.0/0が設定されているか(デフォルトで設定されていますが、まれに作業ミスで削除や変更してしまうケースがあります)
- EC2インスタンスのIAMロールにEc2DefaultRoleが設定されているか
接続ボタンを押下すると、しばらくしてインスタンスのシェルに接続され、Linuxコマンドが実行可能な状態になります。sh-4.2$ と表示されるまで、少しお待ち下さい
# 5. Webアプリケーションのデプロイ
- 起動したEC2インスタンスのシェルを操作してWebアプリケーションをデプロイします。基本的なLinuxコマンドを使用して作業を完了させてください
- 実行するコマンドは表示されていないので、思いつかない場合は過去の研修資料やネットを利用してコマンドを探してください。「実行コマンド」を展開すると解答として正しいコマンドが表示されますが、原則として解答は見ないで進めてください
- AmazonLinux2でデフォルトで用意されているユーザー名は ec2-user です。作業はこのユーザーで行います。ユーザーの変更は以下の手順に含まれているので、間違わないように実行してください
TIP
操作を間違ってEC2インスタンスが動作しなくなっても、インスタンスを削除して 4. Webサーバー作成 からやり直すことができます。まずはいろいろチャレンジしてみましょう
ログイン時点のシェルは使いにくいため、まずはBashに切り替えます。Bashを起動してください
実行コマンド(解答)
bash
Webアプリケーションを配置するLinuxユーザー ec2-user にスイッチユーザーしてください
WARNING
ec2-user にはパスワードが設定されていないため、 root 権限でユーザーを切り替える必要があります。root権限でコマンドを実行するにはどうすればよかったでしょうか?思い出してみてください
実行コマンド(解答)
sudo su - ec2-user
[ec2-user@ip-X-X-X-X]$ と表示されれば問題ありません。次に進んでください
デプロイに必要なパッケージをインストールします。以下のパッケージをインストールしてください。OSはAmazonLinux2ですが、パッケージマネージャーは yum が使えます
- python3
- python3-pip
- git
- mariadb
実行コマンド(解答)
sudo yum install -y python3 python3-pip git mariadb
Webアプリケーションが依存するパッケージをインストールします。以下のPythonパッケージをインストールしてください
- flask
- pymysql
- python-dotenv
WARNING
インストールは、システム全体に行ってください(ルート権限が必要です)Python仮想環境を利用する場合は、ローカルでも構いません
実行コマンド(解答)
sudo pip3 install flask pymysql python-dotenv
以下のコマンドでWebアプリケーションをデプロイします
git clone https://github.com/trainocate-japan/sawakura-labs.git
最後に、ファイルの所有者変更を行いWebアプリケーションの動作に支障が出ないようにします。 /home/ec2-user ディレクトリの全ファイルの所有者を、グループも含め ec2-user に変更してください
実行コマンド(解答)
sudo chown -R ec2-user:ec2-user /home/ec2-user/
# 6. Webアプリケーションの実行と動作確認
- いよいよアプリケーションを実行します。これまでの設定がうまくいっていれば問題なく起動します。うまく起動できない場合は、エラーメッセージをよく読んで対応しましょう
# 手順
先程の作業に続けて、以下のコマンドを実行してください。これで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の中でクラウドコースの一覧のデータを入力しています。次のソース改変の際に、コードを読んでみてください
# 7. Webアプリケーションの改変
- 最後に、Webページに表示される内容を拡充するためアプリケーションの改変を行います。要件を読み、正しく実装を行い、動作確認をしてください
- 実装が早く終わった方は、オプション要件に挑戦してみてください
# 要件
# 必須要件
- コース一覧の情報に「日数」を追加するし、Webページに表示されるようにする
- 成果物の例
コースコード | コース名 | 日数 |
---|---|---|
NFC0313G | クラウドコンピューティング概要 | 1 |
(省略) | ||
NFC0267G | クラウドアーキテクト・ファーストステップ | 2 |
(省略) |
# オプション要件
- コース情報を追加できるボタンを設置する
# ヒント
- 実装の方法は問いません。既存のテーブルへのカラム追加でも、テーブルを削除して作り直しでも、いかなる方法でも結構です
- ソースコードの改変は自由です
- データベース名、ログイン情報は演習ガイドに記載されています
- データベースへのログインは、mysqlクライアントを利用します(MariaDBインストール時にすでにインストール済みです)
# おわりに
- お疲れ様でした!AWSの演習はいかがだったでしょうか?
- このプロセスと同じことを、もしオンプレミスで実施した場合、どれくらいの時間と手間がかかったでしょうか? クラウドの便利さや手軽さが伝われば幸いです。
- もしよろしければ、Zoomチャットなどで演習の感想を聞かせてください!