サーバーを構築してみたいと思ってドットインストールのレッスンを色々と進めてきました。
・サーバー構築を試してみた:AWS Clou9
・サーバー構築を試してみた:ローカルサーバーの構築1
・サーバー構築を試してみた:ローカルサーバーの構築2
お次は「AWS(Amazon Web Services)入門(全17回)」をやってみました。
https://dotinstall.com/lessons/basic_aws
これまではPHPとかRubyといった開発環境を色々インストールして、ちょこっと試してみたら終わりという感じのシンプルなものでしたが、今回は「ファイアウォール」とか「SSH」とか「データベース立ち上げ」とか「ロードバランサー」とか、これぞサーバー構築!といった感じの単語が目次にあるため期待しつつ開始。
出てくる用語
EC2(Elastic Compute Cloud)
仮想サーバーのこと
RDS(Relational Database Service)
データベースに特化したサービス
S3(Simple Storage Service)
ファイルを色々とアップできるストレージサービス
EBS(Elastic Block Store)
仮想サーバーを作成した際に作成されるボリューム
レクチャーを進めていった際のメモ:インスタンス作成
まず最初のアカウント取得とリージョンを設定したりは同じドットインストールの「AWS Cloud9 入門」のレクチャーで解説されているのでそちらが参考になるかと思います。
インスタンスを立ち上げる手順では、レクチャー動画の時点とはAWSのサイトのデザインがかなり変わっていますが、メニューの「サービス」から「EC2」を選んで「インスタンスを作成」ボタンを押せばOKです。
Linuxのディストリビューションを選択する手順では、現在は「Amazon Linux 2 AMI」と「Amazon Linux AMI」の2種類から選べますが、「2」の方は新しい代わりにそれまでの設定方法が色々違っているっぽいので後者の方が良さそうです。
インスタンスタイプは無料枠で選べるのが「現行世代」で1つしか無いので一択ですね。。
動画で「Availability Zone」の選択手順がありますが、サイト右下の「次の手順:インスタンスの詳細の設定」を押した先のサブネットの項目で「ap-northeast-1a」を選ぶことができました。
この辺り軽くググった時に解説されている記事をペタリ。
それからTermination Protectionについての手順は「シャットダウン動作」「削除保護の有効化」という項目がそれにあたる感じでしょうか。
キーペアの入力の工程は今のサイトでは後から登場します。
セキュリティグループの設定は名前を一応レクチャー動画に合わせて「quick-start-1」に変えて、ルールも動画と同じくHTTPを追加しました。
・タイプ SSH | ポート 22 | ソース 0.0.0.0/0
・タイプ HTTP | ポート 80 | ソース 0.0.0.0/0
最後にキーペアを「新しく作成」して、レクチャー動画と同じく「taguchi」と入力して作成して、キーペアのファイルもDLしておきました。
その後インスタンス作成が完了するとステータスが確認できるページに飛びますが、AWS Cloud9 のレクチャーも行っていた場合はそちらも並んでいるかと思います。
セキュリティグループの確認の手順は「説明」タブ内の「セキュリティグループ」の項目にある「インバウンドルールの表示」というリンクをクリックするとポップアップ表示されて確認できます。
Instance Actionsに関して「Terminate」はインスタンスを削除してしまうので注意と説明されていますが、ページ上部の「アクション」プルダウン内の「インスタンスの状態>終了」がそれにあたる感じでしょうか。削除とは書かれていないので、うっかり停止しようとして終了を選んでしまいそうですね。。
レクチャーを進めていった際のメモ:インスタンスへの接続
レッスン#05の動画ではここでいきなりターミナルみたいなものでコマンドを打ち込み始めますが、どうやらSSHでサーバーに接続するためのクライアントアプリを何かしら使う必要があるようです。
Windowsでローカルサーバー構築のレクチャーにも登場した「PuTTY」を使うのがポピュラーなようなので 、こちらをインストールして使うのが良さそうです。
手順について解説されている公式ドキュメントのURLを貼り付けておきます。
まずは「PuTTY」本体ではなくスタートメニューから「PuTTYgen」を起動して、プライベートキーの変換を先に行っておく必要があるようです。
上記ドキュメントの手順通りに進めて、あらかじめ作成しておいた「~~.pem」ファイルをロードして、同じ名前で「~~.ppk」ファイルを出力する流れになります。
次に「PuTTY」で設定を行いますが「Host Name (or IP address)」に何を入力すれば良いのかというと、Amazon Linuxなのでユーザー名は「ec2-user」で@の後ろのパブリックDNSネームはAWSのインスタンスのページの説明タブ内の「パブリックDNS (IPv4)」の項目内容をまるっとコピペすればOKです。
つまり下記のような感じになります。
ec2-user@ec2-54-ほにゃらら.ap-northeast-1.compute.amazonaws.com
成功するとコマンドプロンプトのような、PuTTYの真っ黒いウインドウが表示されて、コマンドを受け付ける状態になります。
そうしたらレクチャー#05 の 1分11秒 あたりまで進んだということになるかと思います。
その後「yum update」コマンドでアップデートしますが、完了後にインスタンスを再起動した方が良いようなのでAWSのページから行いました。そうするとPuTTYからの接続も再度行う必要があります。
レクチャーを進めていった際のメモ:htmlの作成
レッスン#06でhtmlを作成して試す工程がありますが、AWS Cloud9 のレクチャーで登場した‥「i」キーで編集モードに移って「esc」キーを押して「:wq」を入力、Enterキーで編集完了‥という流れで行う必要があります。
私の方でも無事、ブラウザからアクセスして「Hello!」の表示を確認できました。
その後、IPアドレスを作成してインスタンスに関連付けして、試しに手元のiPhoneのブラウザでアクセスできるのも確認。ちょっと感動。。
サーバーのスペックを上げるのも、一度インスタンスを停止してプルダウンからスペックを選んでまたインスタンスを再開するだけというお手軽操作で驚きました。。
レクチャーを進めていった際のメモ:データベースの作成と接続
データベースを作成後のステータス確認画面が、EC2のインスタンスのページ構成とはまた少し違いますね。スペック変更はデータベースの詳細ページの右上にある「変更」ボタンを押すと行えるのが確認できました。
次に「DB Security Group」の設定の工程ですが、データベース「mydbinstance」のページで「接続とセキュリティ」の項目を確認すると「VPC セキュリティグループ」にリンクがあり、すでに関連付けされているのでこちらで良いのでしょうか‥
しかしPuTTYで接続を試みて、パスワードを聞かれますが最初に設定したパスワードを入力してEnterを押すと、しばらく応答が無くて不安になってきたあたりで接続できませんでしたとエラーが表示されてしまいます。
その後に色々と試してうまくいったのでメモしておきます。
まず今起動中のEC2のインスタンスのページを表示して「説明」タブの「セキュリティグループ」の quick-start1のリンク先に飛んで、グループID(sg-で始まる内容)を適当なテキストエディタにでもコピペしておきます。
次に、AWSのデータベース「mydbinstance」のページの「接続とセキュリティ」タブを開いてページ下の方を見ると「セキュリティグループのルール」という項目があるので「rds-launch-wizard(sg-~~)」のリンクを開きます。
セキュリティグループが表示されたら「インバウンド」タブを開いて「編集」ボタンを押し、ソースのアドレスを先ほどコピペしておいたグループIDを入力します。
インバウンド
これでOKです。
PuTTYで以下のようにコマンドを入力します。
mysql -h エンドポイントをコピペ -P 3306 -u dbuser -p dotinstall
そしてパスワードを聞かれたら、データベース作成時に最初に設定したパスワードを入力して無事に接続できました。その後の「show databases;」でもちゃんと表示されました。
残りのレクチャーは、サーバーを複製する形で増設して、ロードバランサー(アクセスを分散したりできる)を設置してみたり、ストレージサービスのS3を使って画像をアップしたりウェブページをアップしたりといった内容になります。
とりあえず、何となくサーバー構築の流れが以前よりもう少しイメージを掴めたので行ってみてとても良かったです。
余談
ちなみに余談になりますが、こういった事例を教えていただいたことがあります。
とても恐ろしい‥!
こちらのようにシークレットキーを公開とかはしていませんが、念のためチュートリアルを終えた後はEC2インスタンスを削除して、料金が発生したらメールで通知があるよう設定しました。。
あと気になるのは無料期間が終わった時の料金ですよね。
こんな記事も。
月8000円は払えないですね。。
何かウェブアプリを作って公開する際のサーバーは自宅ではなくレンタルが良いと思っているので、色々検討してみたいと思います。