AWSを無料で使ってみる

#AWSを利用するにあたって
AWS(Amazon Web Services)とは[Amazonが提供するクラウドサービス(レンタルサーバー)](https://aws.amazon.com/jp/?nc2=h_lg)のことをいいます。クラウドサービスはデータをクラウドと呼ばれるインターネット上の保管場所に保管できるサービスのことです。主に、インターネット上でWEBサービスを展開したり、データ管理をしておくなど、災害リスクに備えているケースも最近では見られます。AWSはパブリッククラウドに分類されるクラウドサービスで、個人や企業など不特定なユーザーにサーバーやストレージ、データベース、ソフトウェアといったクラウド環境をインターネットを通じて提供するサービスのことをいいます。下記が利用する目的となります。

1. WEBサイト・WEBサービスの構築・運用「EC2(Amazon Elastic Compute Cloud)やAmazon Lightsail」
2. 災害時のデータバックアップ「AmazonS3(Amazon Simple Storage Service)」
3. ビッグデータの蓄積・分析・運用「AmazonEMR(Amazon Elastic MapReduce)」
4. 基幹・業務システムの構築
5. 統合開発環境(IDE)の構築「Amazon Cloud9」

従来の一般的なレンタルサーバーが月額に対し、AWSは１時間単位で料金が発生します。サーバーが大幅な読み込みによりダウンした場合、AWSは一時的に課金しサーバーを増強できたり、サーバーの負荷が高くなってきても自動的にサーバーの容量を増やしたりできます。更にサーバーが壊れても`スナップショット`と呼ばれる。保存機能を使って復元したりできます。従来、HTTPリクエストを送った場合→`ロードバランサー`→`WEBサーバー`→`データベース`といったサーバー構成になりますが、AWSの場合は、HTTPリクエスト→`ELB(ロードバランサー)`→`EC2(WEBサーバー)`→`RDS(データベース)`と呼んでいます。ロードバランサーとは、HTTPのリクエストをどのWEBサーバーに割り振りするかを決定するためのものになります。分散させる為にEC2(WEBサーバー)を２台用意したとしましょう。アクセス負荷を分散させるために、EC2(WEBサーバー)の台数を増やして負荷分散することを`スケールアウト`といいます。サーバーの台数を増やさずにメモリやCPUを増やしてサーバーのグレードを上げることを`スケールアップ`といいます。
#料金体系
AWSでは、**ELB(ロードバランサー) EC2(WEBサーバー) RDS(データベース)**各サービス毎に料金が発生します。

- [Elastic Load Balancing 料金](https://aws.amazon.com/jp/elasticloadbalancing/pricing/) 「１時間単位で使用した量で課金する金額が変わっていきます。ClassicからApplicationまでグレードによっても料金が違います。」

- [Amazon EC2 の料金](https://aws.amazon.com/jp/ec2/pricing/) 「LinuxOSやWindowsOSなどのOSを選べるようになっていて、OSを選択したらメモリやCPUなどのスペックを選んで行きます。それぞれのスペック毎に１時間あたりの料金が設定されています」

- [Amazon RDS の料金](https://aws.amazon.com/jp/rds/pricing/) 「MySQLやPostgreSQL、ORACLEなど色々なデータベースが選べるようになっています。こちらもサーバーのスペックによって１時間あたりの料金が変わって参ります」

料金を抑えるためにEC2一つだけのシンプルな構成でまずは試してみましょう。そうすることで、サーバーが１台になり、ロードバランサーが不要になります。更にこのEC2サーバーに直接MySQLやPostgreSQLをインストールすることでRDSの料金もカットすることが出来ます。ただ、RDSのサービスを利用したほうが、自動で定期バックアップを取ってくれたりするので、設計や予算で考えましょう。

また上記では、１時間単位での料金設定を説明してきましたが、`リザーブドインスタンス`といって１年先までを一括払いすることもでき、その場合料金が半分近く割引になるプランや、`登録してから１年間無料で使える枠`があるものもあります。

#AWSへのサインアップ

![sample1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/988ffd55-b78e-9aef-00ef-e7e4900c6673.png)AWSを利用するにはアカウントを作成する必要があり、予めメールアドレス、クレジットカード、電話番号の準備をしましょう。まずは、ブラウザで[こちらのAWSサインアップ画面](https://console.aws.amazon.com/)にアクセスして下さい。画面左下の`新しいAWSアカウントの作成`をクリックしてEメールアドレス、パスワード、AWSアカウント名を入力して`続行(ステップ1/5)`をクリックしましょう。連絡先情報→請求情報→本人確認(電話にて暗証番号を入力)の順にステップを進んでいきサインアップを完了させます。![sample2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/61cb3b89-767d-c557-4183-438b6f869d08.png)サインアップ完了ボタンをクリックし、AWSマネジメントコンソールへ進みましょう。上記のサインアップ画面に戻ってくるので、日常的なタスクを実行とあったので`IAMユーザー`(Identity and Access Management)を選択してアカウントIDを入力し`次へ`をクリック→セキュリティチェックが入るので6桁の文字を入力し送信。最終的にルートユーザーでサインインをしますが以下の画面になり、無事サインイン完了です。![sample3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/4a195c66-4150-85e1-e7d2-0946fc0c0506.png)


#実際にEC2を起動させてみましょう
まずは、契約をしてAWSマネジメントコンソールという管理画面から操作をしていきます。右上の▲からリージョン(どの地域のサーバーを使うか選択すること)を設定します。基本は「東京」を選択しましょう。次に左上のサービスをクリックし、検索窓にEC2と打って選択します。そしてメニューの**インスタンス**(起動する１台１台のサーバー)を選択し、インスタンスの作成を選択、次にどのOSを使うか選択「centos7系 LinuxOS Amazon Linux 2 AMI」が無料利用枠の対象なのでスタンダードでしょうか。OSを決めたらCPUやメモリなどのスペックを選択します。無料利用枠の対象である`t2.micro`を選択し確認と作成ボタンを押し確認画面で起動を押します。既存のキーペアか新しいキーペアを作成するか選択されます。`キーペア`というのはこのあと作成するサーバーへのSSHログインするための鍵になります。既存にした場合、すでに登録済みのSSHの鍵を使うことになるので、新しいキーペアの作成を選択してキーペアのダウンロードを行いましょう。最後にインスタンスの作成を押します。すると、`インスタンスは現在作成中です`とでますので、インスタンスの表示というボタンを押してインスタンスの一覧画面に戻りチェックを入れてみましょう。情報が色々と表示されるので、チェックが入った状態でアクションというところを押してみます。インスタンスの状態という所があるので、そこから停止や再起動が行えます。停止を行っている間は料金はかかりません。次にネットワーキングのセキュリティグループ（ポートの開放設定）の変更をクリックし紐付け設定を行います。メニューからセキュリティグループを選択して見てみると、セキュリティグループを作成するボタンがあったり、一覧でセキュリティグループがならんでいたりするのですが、いずれかをクリックしてみると各詳細が見れるようになっていて、`インバウンドルール`(WEBサーバーとして使えるようにHTTPの80番ポートやHTTPSの443番ポート、SSHにログインできるように２２番ポートが開放されていてサーバーに向かって入ってくるリクエストに対しどのポートを開放するか設定が行われる)や`アウトバウンドルール`(サーバーから出ていく方のルールを設定)を確認することが出来ます。

#EIP(エラスティックIP)
エラスティックIPとは、インスタンスは再起動することでIPアドレスが変わります。一般的なWEBサーバーはドメインをIPアドレスに紐付けて使用するので再起動するたびにIPアドレスが変わってしまうのを防ぐため、IPアドレスを固定する機能のことをいいます。メニュー画面から`elasticIP`を選択しIPアドレスの割り当てというボタンを押し固定IPアドレスの発行を行います。IPアドレスの発行を行ったら一覧画面から対象のIPアドレスにチェックを入れ`Actions`ボタンを押します。IPアドレスの開放や関連付けメニューが選択できるので、IPアドレスをどのインスタンスに紐付けるか設定を決めます。

#EC2に対してのSSHログイン
私はmacを扱っているので、今回はmacからEC2にSSHログインを行いたいと思います。macでSSHの設定をするときはターミナルより、`vi ~/.ssh/config`のコマンドで編集を行います。

```
Host freename
User ec2-user
Hostname 54.178.1xx.xx
Identityfile~/.ssh/awsfolder/awskey.pem
```
まずはHostには好きな名前を付けれます。User名はec2-user(EC2にログインする時のデフォルトのユーザー名)を指定します。Hostnameには発行した`elasticIP`を指定しましょう。Identityfile(アイデンティティーファイル)は鍵を設定するところなのでダウンロードした、キーペアの鍵を指定します。.sshフォルダの下にawsfolderというフォルダを今回は掘って鍵を置いてみました。ターミナルより`ssh freename(ホスト名)`を入力すると、EC2サーバーに対してSSHでログインすることができます。

#スナップショット
スナップショットでのバックアップ取得方法です。左メニューからボリュームを選択し、それぞれのEC2インスタンスに対するボリューム(ハードディスクの一覧)が表示されるので、ハードディスクを選択してアクションボタンでスナップショットの作成を実行させます。メニューのスナップショットにバックアップが作成されるのでサーバーに不具合が生じた場合に元の状態に戻してくれます。バックアップ→アクション→イメージの作成の順に進んで作成し、イメージの作成リクエストを受け取ります。次に左メニューのイメージの中のAMIをクリック、作成したサーバーの作成イメージが並んでいるので、対象のイメージを選択してアクション→起動させます。インスタンスタイプの選択画面になるのでどのタイプのEC2を立ち上げるか選択します。ここからは、新規にEC2インスタンスを作成した手順と一緒です。前にスナップショットを撮った時の状態でEC2インスタンスが立ち上がります。

#S3
AWSでよく使われるサービスの一つであるS3はファイルサーバーのことを指します。パソコンの容量が足りなくなった時に外付けハードディスクを使用するのと一緒でインターネットのクラウド上にファイルを保管して置けるのというものです。EC2の場合はサーバー1台のことをインスタンスと呼んでいましたが、S3の場合は、サーバー1台のことをバケット(S3バケット、バケツ)と呼びます。