【初心者だよ その1】 アプリ開発者が初めてAWSを触ってみた

# まえふり

![AmazonWebServices.png](https://qiita-image-store.s3.amazonaws.com/0/82601/dad57452-099a-3786-e014-5ba547919b97.png)


　これからいくつかのタイトルに分けて、アプリと通信するサーバーを全て***AWS(Amazon Web Services)***で開発したお話しをしていきます。
　私は、もともとアプリ開発がメインなのですが、仕事でWeb開発をやるようになり、特に最近ではWebとアプリの同時開発をやり始めてからというもの、苦手意識でなかなかやろうとしなかった***サーバーの分野***を知っていくようになってきたサーバー初心者ですー。

　近年、アプリ開発が目立ちますが、その裏には必ずと言っていいほどサーバー通信を行い、ユーザー情報を常にサーバーに集約させることで、いつでもどのデバイスでも同じユーザー情報を扱えることができる、というサービスが当たり前になっています。
　
　そんなこんなで、最近***面白いサービス***と***ある出来事***があったことを機会に、アレコレやってきたことを簡単に紹介と自分の頭を整理することを兼ねて、Qiitaの記事にまとめようと思った次第です。(***※***若干言い訳が入ってますが、それはのちほど笑)
　　

## 初めてサーバーを契約すること
　もともとゲーム開発やアプリ開発しかやってこなかったこととサーバーは面倒くさいからと言う理由で、ニフティのmBaaSである[NIFTY Cloud](http://mb.cloud.nifty.com/about.htm)とGMOのSaaSである[Photon Cloud](http://photonengine.jp/)を扱っていました。そして今回、初めてサーバーを契約しました。

　なので、サーバーの契約にかかる費用が一番気になっていたこともあり、[AWSの1年間無料期間](https://aws.amazon.com/jp/free/)を利用していこうと考えてサーバーの契約にはAWSにしました。あと、AWSのサービスを全部使って他のサービスを扱わなければ請求書も一緒だし、余計な手間がかからなく済むと思って、全てサーバーに必要なことはAWS上でやろうと決めました。

## AWSの契約 ![General_AWScloud.png](https://qiita-image-store.s3.amazonaws.com/0/82601/46fe5146-def0-8b92-6685-0e789026491d.png)
![AWS契約.png](https://qiita-image-store.s3.amazonaws.com/0/82601/a684988c-1b02-1d89-6c3c-5a174b638726.png)

　12月26日（月）18:00までキャンペーンをやってるみたいですね。

　ちなみに、[AWSの契約](https://aws.amazon.com/jp/campaigns/2016-xmas/?sc_channel=PS&sc_campaign=acquisition_JP&sc_publisher=google&sc_medium=cloud_computing_b&sc_content=aws_campaign_bmm&sc_detail=%2Baws%20%2Bキャンペーン&sc_category=cloud_computing&sc_segment=163292051886&sc_matchtype=b&sc_country=JP&sc_brand=brand&ef_id=WExAIAAAAS7prWWj:20161210174920:s)は一瞬で終わったので、特に話すことはないです。しいて言うなら、キャッシュカードが必要です。あと、公式で簡単に契約フローが書かれているので、[こちら](https://aws.amazon.com/jp/register-flow/)を見ながら登録して大丈夫でした。

　AWSは、使う頻度で費用がかかる従量課金制なので契約する前と使う前は結構心配だったのですが、、、
無料枠と[チュートリアル](https://aws.amazon.com/jp/getting-started/?nc2=h_l2_cc)があり、また、AWSに関する記事が多かったこともあって、今ではなんとか変にお金がかかっている状態にはなっていません笑(***← ちょっと重要かな***)


## AmazonでWebサーバーを作る
　さて、AWSを契約をしたはいいもののどうしたらいいのか、、、とならないように事前にやることを決めていました。AWSでWebサイトを建てる際に必要なサービスが約3つほどあります。

・ ![Compute_AmazonEC2.png](https://qiita-image-store.s3.amazonaws.com/0/82601/268e07a8-86df-668b-b826-ade4a2c32cb2.png)　[Amazon EC2](https://aws.amazon.com/jp/ec2/): コンピューティング

・ ![Storage-Content-Delivery_AmazonS3.png](https://qiita-image-store.s3.amazonaws.com/0/82601/a4de9864-20a0-44b3-14c8-8ee57fbe105f.png)　[Amazon S3](https://aws.amazon.com/jp/s3/): ストレージ

・ ![Database_AmazonRDS.png](https://qiita-image-store.s3.amazonaws.com/0/82601/e6867d9d-b118-4196-0850-7cf718f972b2.png)　[Amazon RDS](https://aws.amazon.com/jp/rds/): データベース

　見ての通りEC2から用意しなければサーバーはできないので、まず、EC2を触りました。
というのも、無料枠は各サービスに制約があり、ある一定を越えると無料枠ではなくなるシステムになっています。

　EC2を扱う際には、サーバーのインスタンスを生成する必要があり、異なるサーバーOSの中から1つ選ぶ必要がありました。実際の手順は省きます。
　というのも、以下の記事のようにいろんな方がとても分かりやすくまとめられているので、こちらを参考にインスタンスを作るといいでしょう。私も参考にさせていただきました。
　　
[0から始めるAWS入門②：EC2編](http://qiita.com/hiroshik1985/items/f078a6a017d092a541cf)
[5分でできる!? AWS EC2 インスタンス作成](https://www.skyarch.net/blog/?p=883)


## Amazon EC2 ![Compute_AmazonEC2.png](https://qiita-image-store.s3.amazonaws.com/0/82601/268e07a8-86df-668b-b826-ade4a2c32cb2.png)
　EC2でのLinuxでは、1つのインスタンスタイプしか無料枠がないので、その無料枠インスタンスを扱うことにあります。スペックは、低から中らしいです。

![Vagrant.png](https://qiita-image-store.s3.amazonaws.com/0/82601/52504468-9f80-43ae-94de-eb2d5757e211.png)


　もともと[Vagrant](https://ja.wikipedia.org/wiki/Vagrant_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2))で[CentOS](https://ja.wikipedia.org/wiki/CentOS)を起動させてローカルでWeb開発していたので、EC2のOS選択は、Linux(実際は***Amazon Linux***となっている)と決めていました。


 ↓ EC2インスタンス生成
![EC2インスタンス生成.jpg](https://qiita-image-store.s3.amazonaws.com/0/82601/e358d49c-4a24-fcf0-4250-ac46954287b3.jpeg)

 ↓ EC2作成と起動直後
![EC2作成と起動直後.jpg](https://qiita-image-store.s3.amazonaws.com/0/82601/b7b4f1ff-fa33-7ec6-02aa-2ab58e83fcfc.jpeg)
　
　
　EC2のインスタンスが作れたところで、次に***LAMP(Linux Apache MySQL PHP)***環境のセットアップを行いました。
　内容は、公式で[チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html)を用意されていたので、その内容に沿ってサーバーの構築をしていきました。
つまずくことなくセットアップが終わったので、公式のチュートリアル通りに行えばラクショーっすよ！！w

##　Amazon Route53 ![Networking_AmazonRoute53.png](https://qiita-image-store.s3.amazonaws.com/0/82601/e661c7d3-f246-112c-e5c4-74f7fc015976.png)

　EC2の用意はできて、サーバーにアクセスしてページが開ける最低限の用意はできたものの、サーバーだけあってもアクセスするための道が繋がっていなければサーバーへのアクセスできません。
　ドメインの設定を行う必要があります。ここで迷ったことが、ホントにAWS上でドメインの契約まで行うか考えました。他サイトのドメインを契約するサービスを見て、値段は安いもののAWSと連携する作業を調べると、あまりにも面倒だったので、結局はAWS上でドメインの契約まで行いました。

　[Amazon Route53](https://aws.amazon.com/jp/route53/)は、ドメインの契約だけでなく、ドメインとAWS上で動作するサーバーとの連携とドメインに関する設定は、ほぼほぼRoute53で設定することになります。
　もちろん、サーバーを契約することが初めてなのでチョードキドキしながらドメインの名前を決めて契約を行いました笑
　　
　　
 ↓ Route53でドメインの契約
![Route53でドメインの契約.png](https://qiita-image-store.s3.amazonaws.com/0/82601/1f4e181d-98ad-11f0-bf35-0d8fd6aa9192.png)
　　
　　
 ↓ ドメイン契約後ページ
![Route53でドメイン後.png](https://qiita-image-store.s3.amazonaws.com/0/82601/f28d6978-5df7-7428-f5bd-b8b6ec7687ca.png)
　　
　　
 ↓ 契約後の請求内容
![Route53でドメイン後の請求内容.png](https://qiita-image-store.s3.amazonaws.com/0/82601/7a55960d-23d2-c94a-edcf-62dcc2bb4fc6.png)

 ↓ ドメイン契約後、自動でRote53に設定されているドメイン
![ドメインRote53.png](https://qiita-image-store.s3.amazonaws.com/0/82601/0df8138b-b63f-1076-63af-274291e4ad66.png)

　
##　サイトへアクセス

 ↓ サブドメインの設定
![EC2インスタンスにHTTPアクセスする際に設定したサブドメインの設定.png](https://qiita-image-store.s3.amazonaws.com/0/82601/1ca09d78-c1f4-19f1-b55c-1b29a1b0a479.png)
　　
　　
 ↓ サブドメインにアクセスした直後、サブドメインのアクセス先がないためこのページが表示
![ドメイン設定後のEC2インスタンスにHTTPアクセス.png](https://qiita-image-store.s3.amazonaws.com/0/82601/af506987-8569-f7a6-d1d6-b81f7fc785ca.png)

 ↓ /var/www/html/にindex.htmlを作成し、簡単なメッセージを用意後、契約したドメインでアクセス!!!(感動w)
![ドメイン設定後アクセスした結果.png](https://qiita-image-store.s3.amazonaws.com/0/82601/29b6357f-f243-d311-e161-b2528fe02e25.png)

ｷﾀ━━━━(ﾟ∀ﾟ）━━━━！！！！！！！！！
　　
　　


##　まとめ
　ここまでで、サーバーの契約からサイトのアクセスまでできました。
　
  
　だがしかし、ここでAWSに詳しい人は考えただろう。

　「べつにRoute53を設定しなくてもアクセスぐらいだったら***バプリックIPでアクセスできる***のに」、と。笑
　　Vagrantの開発で、VMの作成からサブドメインまでの設定がクセになっていました。設定後いろいろと気づいたので、改めて調べると公式の↓この辺が特に勉強になりました。
　[Amazon EC2 インスタンスの IP アドレッシング](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-instance-addressing.html)
　[VPC での DNS の使用](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/vpc-dns.html)
　
　ま、まぁ、次の目的が***無料でHTTPS対応して***WebAPIの開発をやりたかったので、い、いいんですけどねw
　今でもネットワークに関しては理解できてなく、、なんとなくわかる程度です。自分なりに理解ができ、分かりやすく説明ができるようになれば、改めて初心者編の話しをQiitaにまとめようと考えてますー！
　　
　もともと、とある記事で***AWSだと無料でSSLの対応ができる***ことを知り、ドメインの契約を行い、SSLまで設定するところまで頑張る予定でした。その話しは、次回でまとめていますので、結構つまづいたこともあり、同じようにAWSで契約からSSLまで作業される方の役に立てたらうれしいです！


##　次回移行のお話し
　　【初心者だよ その1】 アプリ開発者が初めてAWSを触ってみた　　　　　← いまここ
　　[【初心者だよ その2】 AWSで無料SSLをやってみた](http://qiita.com/gremito/items/2a416b042a0c94d4541d)