【らくちんAWS】 LightsailからはじめるAWSエンジニア (後編) 【AWS完全に理解した】

前編: [【らくちんAWS】LightsailからはじめるAWSエンジニア (前編)【EC2よりカンタン】](https://qiita.com/H40831/items/a131e849b3d76fd04f2d)
![AWSロゴ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365927/0172e7d0-c089-a0c1-a251-280f84e7cf42.png)

#この記事について
この記事は、「AWSは難しくて嫌だ！」と感じる人の苦手意識を克服するために、
[AWS Lightsail](https://aws.amazon.com/jp/lightsail-vps/)という初心者向けサービスを起点にAWSを紹介させていただく記事です。
[前編](https://qiita.com/H40831/items/a131e849b3d76fd04f2d)でLightsailの紹介をさせていただいてますので、よければ先に読んでみてください。

#この記事を書いたきっかけ
2020年現在、AWSでは175を超えるサービスを提供しており、AWSの存在感は圧倒的なものとなっています。
しかし、WEBサーバーの実装すら未経験だったわたしは、
WEBサーバーを構築するための「EC2」というサービスについて理解するだけで精一杯でした。
やっとの思いでEC2を利用した練習作品を開発したあとは、HerokuやFirebaseのような、
難しいことを考えなくてもWEBアプリをリリースできるサービスのほうに興味が寄っていきました。

そんなときに知ったのが、AWS Lightsailでした。
LightsailはEC2とは違い、色々調べなくてもカンタンにサーバーを借りて、SSH接続ができるそうです。
ハードルは低いのに、素のサーバーのように扱うことができるので、
SSH接続ができないHerokuやFirebaseと比べると、とても自由度が高く、魅力を感じました。

しかし、LightsailはEC2と比べると認知度が低く、情報を探してもあまり出てきません。
そのため、実際に使うべきかどうか足踏みしていました。
そんな中、[AWSマンガ](https://aws.amazon.com/jp/campaigns/manga/series/)と出会いました。
第１話で紹介されるサービスがLightsailだったので、
Lightsailの使い方をより深く知ることができる！と歓喜しました。
しかし、読みすすめると、物語中の開発規模は壮大で、
LightsailにとどまらないAWSの各種サービスの使用例がたくさん説明されていました。
それは、いままで「AWSといえばクラウドサーバー」という使い方しかイメージできていなかったわたしにとって、刺激的な内容でした。
AWSマンガのおかげで、わたしの中のAWSの入り口はぐぐっと広がり、
AWSでどんなことができるのか、もっともっと知りたいと思い、ひたすら調べてメモをしていきました。

このとき調べた知識を共有することで、
わたしと同じようにAWSに苦手意識を持っていた駆け出しエンジニアのみなさんも、
AWSの扉を開くことができたらいいなと思い、記事にまとめました。

長い内容になりますが、小分けにしながら読み進めていただければと思います。
よろしくお願いいたします！

#記事のコンセプト
**記事のターゲット層について**
この記事は、フロントエンドからデビューした駆け出しエンジニアをメインターゲットとしております。
「自身でAWSのサービスの取捨選択ができるくらいまで知る」ということを最優先に考えているため、
記事の中には、極端な表現があるかもしれません。

この記事の内容を理解したあとは、
他の情報や、記事のコメントなどを参考にして、より知識を深めていただければと思います。

**記事タイトルについて**
記事タイトルで掲げている「AWSエンジニア」というのは「AWSが使えるエンジニア」という意味であり、
「AWSのプロフェッショナル」という意味ではありません。

#紹介するサービスについて
この記事では、Lightsailから使い方を連想しやすいサービスを選んで、
サービスの認知度順に各サービスを説明します。
選ぶサービスや認知度はわたしの個人的主観にもとづいて選んだものです。
紹介しなかったサービスの中でも有用なサービスはたくさんありますので、
この記事は、あくまでAWSへの入り口を広げるだけという、ざっくりした気持ちで読んでください。

認知度は、下記のようなイメージです。

**認知度 ☆☆☆**
Lightsailを使わないでAWSを扱うのであれば、まず知っておいたほうがいいレベル。

**認知度 ☆☆★** 
知っていると、よりAWSを使いこなせるレベル。

**認知度 ☆★★** 
そんな事もできるのか！AWSおもしろい！と思えるレベル。
（AWSはサーバー関連の機能ばかり提供しているわけではないということを理解していただくための、
おまけ程度の紹介です。）


#認知度 ☆☆☆
##EC2
Lightsailと同じように、SSH接続ができるサーバーを作るサービスです。
AWSの基本中の基本なので、「AWSを使う＝EC2を使う」と言っても過言ではありません。

<details><div>
Lightsailとの違いは、カスタマイズ性がとても高いことです。
スペックのバランスやセキュリティの条件をはじめとする、あらゆる項目を自由に設定することができます。
（逆に言うと、設定しなければいけません。）
そのため、インスタンスの作成画面や管理画面は、かなり複雑な見た目になっています。
<br>LightsailもEC2も、サーバーを使って出来ることは全て実現可能です。
WEBサーバーや、その中で使うフレームワークやライブラリ等の機能は、EC2にインストールして使うことになりますし、
データベースをはじめ、他のAWSのサービスで実現すべき機能も、EC2サーバーに導入することは可能です。
<br>しかし、他のサービスで実現できる機能は、できるだけ他のサービスとEC2を組み合わせて使った方がいいというのがAWSの基本になります。
これはなぜかというと、全ての機能をサーバー１台に任せてしまうと、
サーバーにトラブルがあったときに、全ての機能・データがサーバーの道連れになる危険性があるからです。
サーバーのトラブルの例としては、下記のような感じです。

- 操作ミスによるサーバーのシャットダウンや、データの消去
- サイバー攻撃や不正アクセス、ハッキングなどの被害
- アクセスが爆発的に増えてしまった場合、サーバーのスペックが足りなくなる

このため、EC2を使ってインフラ環境を構築する場合は、
他のあらゆるAWSサービスをできるだけ学習していくべきというのが基本です。

しかしLightsailの場合は、他のサービスを組み合わせるための学習に時間を使わなくても、
使いたい機能を管理画面で利用設定するだけでカンタン＆固定料金で導入できますので、
これがLightsailが分かりやすさに特化してると言える、ひとつの理由になります。
</div></details>

##RDS
データベース専用のサーバーを作成するサービスです。

<details><div>
RDSにデータベースを隔離しておくことで、以下のようなメリットを得ることができます。

- EC2になにかしらのトラブルがあっても、データの消去や漏洩などのトラブルを回避することができる。
- EC2を酷使してしまい、サーバーが重くなっても、データベースだけは高速で動かしつづけることができる。
- 定期的な自動バックアップ機能や、スナップショット（ある時点のバックアップデータを保存しておく）機能が用意されているので、万が一のトラブルへの対処もカンタンにできる。

ただし、[EC2にDBを導入したほうが費用は安い](https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=2744)という情報もあるので、
安全性と費用、どちらを優先するかは検討する必要があります。
</div></details>

Lightsailの場合は、データベース機能（有料）があらかじめ用意されているので、
そちらの機能を利用することになります。

##S3
EC2に連携できるストレージを作成するサービスです。
圧倒的に価格が安いうえに、耐久性は99.999999999%と公言している、非常に優秀なサービスです。

<details><div>
通常のストレージであれば、何GBでいくら、のような単位で購入する形態が一般的ですが、
S3の場合、容量は無制限で、容量が増えるたびに使用料金が増えていくようなサービスとなります。

USBメモリや外付けハードディスクのように
保存してあるデータを直接読み込んで編集・保存することはできず、
FTPサーバーのように、ファイルを取り出して編集してから保存するような使い方になります。

また、S3ならではの重要な機能として「静的ファイルのホスティング」があります。
ホスティングとは、サーバー上のファイルにインターネット経由でアクセスできるようにすることです。
静的ファイルとは、サーバーの処理で内容を書き換えるような「動的ファイル」ではない、
あらかじめ内容が決まっているファイルのことです。
S3のメイン機能はあくまでデータの保存ですが、
静的ファイルであれば、別途WEBサーバーを用意しなくてもこれだけで配信できてしまうのです。
先程もいったように、S3は圧倒的に価格が安く、耐久性はほぼ100%なので、
低コストで、アクセスが増えても落ちないページの配信が可能になります。
近頃、WEBサーバーを用意しないで開発を行う「サーバーレス開発」が流行っているのは、
このような素晴らしいサービスが世に誕生してきたからなんだろうな〜と思わされます。

S3のタイプ（ストレージクラス）にも色々な種類がありますが、
S3 Glacier DeepArchiveというタイプが特に気になりました。
データを取得するのに12~48時間かかり、保管するファイルを気軽に削除することもできないかわりに、
それでも構わないようなファイルの保管が目的であれば、また一段とびっくりするような安価で使うことができるそうです。

</div></details>

Lightsailの場合は、ストレージの追加オプション（有料）があらかじめ用意されているので、
そちらの機能を利用することになります。

<details><div>
ですがこれは、S3と同様の機能とは言えないので混同しないよう気をつけてください。
たとえばLightsailでは容量をあらかじめ決めておく必要があったり、
静的ファイルの配信機能がなかったりします。
S3 Glacier DeepArchiveのような個性的なストレージクラスも存在しません。
</div></details>

##Route53
さきほど紹介したEC2やS3、このあと説明するELBやCloudFrontのような
ユーザーにコンテンツを配信するサービスに、独自ドメインを適用するサービスです。
※「独自ドメインの適用」＝「オリジナルのURL（アドレス）でアクセスできるようにする」という事です。

<details><div>
独自ドメインを使う権利を得るためには、[お名前.com](https://www.onamae.com/)や[ムームードメイン](https://muumuu-domain.com/)などのドメイン管理会社（＝レジストラ）に年額を支払ってドメインを取得してもらうのですが、
Route53ではこれも一緒に対応してもらうことが可能です。

Route53で取得したドメインはもちろんのこと、
他社で取得したドメインであっても、AWSの各サービスと連携できるように管理してくれます。
</div></details>

Lightsailの場合、ドメインを管理してサーバーへ割り当てる機能はあらかじめ用意されているため、
すでにドメインを持っている場合は、その機能を利用することになります。
まだドメインを持っていない場合、Lightsailの機能ではドメインの取得はできないので、
Route53や他社レジストラを利用して取得する必要があります。

#認知度 ☆☆★
##WAF
Webアプリケーションファイアウォールです。
名前のとおり、サーバーに対する攻撃から、サーバーを守るためのセキュリティ機能です。

<details><div>
どのようなルールでサーバーを守るかは、手動で設定することもできますが、
AWS Marketplaceというサービス上で販売されている有料のセキュリティールールを利用することで、
より手軽に強力なルールを適用することもできます。

AWSは標準で「セキュリティグループ」と呼ばれるセキュリティ機能が用意されていますので、
WAFはそれに追加でセキュリティ機能をつけたい人のためのサービスになります。
（たとえば、日本以外または特定の国からのアクセスをブロックするなどです。）

WAFを利用するためには、後述のCloudFrontまたはELBというサービスを利用する必要があります。
EC2などのサービスに直接適用することはできませんので、
WAFを利用する場合は上記どちらかのサービスの利用料もかかってきます。

</div></details>
Lightsailの場合、ファイアウォール機能が予め用意されているので、基本的な設定はそちらで行うことになります。

<details><div>
しかし、これはWAFというよりセキュリティグループ的な立ち位置の機能になるので、
セキュリティ機能を追加したい場合はWAFの利用が必要になります。

※LightsailではIP制限が出来ないという情報が出回っていますが、[2020年5月から対応可能になっています。](https://aws.amazon.com/jp/about-aws/whats-new/2020/05/amazon-lightsail-firewall-now-supports-source-ip-based-rules-and-ping/)
※LightsailでWAFが利用できるのかについては、調べても詳しい情報が見つけられませんでした。
[こちらのQ&A](https://serverfault.com/questions/1006870/use-aws-waf-to-block-traffic-to-my-lightsail-instance)にて、Lightsailのロードバランサー機能を利用すればWAFの利用ができるかのような記述がありますが、
実際にやってみたことはないので、やってみて出来たらこの記事に追記します。
詳しくご存知の方は、情報提供いただければ嬉しく思います。
（上記Q&Aの時点ではLightsailのCDN配信機能が未実装でしたので、CDN機能とWAFの連携ができるかについては一切言及されていません。）
</div></details>

##Cloud9
サーバー上のソースコードに対してIDE（統合開発環境）を利用できる、**無料**(※)
のサービスです。
IDEというのはVSCodeやPhpStormのような、機能が豊富なエディタのことです。
※Cloud9で接続するためのサーバーを新規作成する場合、その費用は発生します。

<details><div>
サーバー上で開発を行うことにより、複数人で開発する場合もOSやバージョンが違うことによるトラブルや説明の手間を省くことができます。
また、ソースコードをリアルタイムで共有しながら一緒にプログラミングできる機能もあります。（VSCodeでいう「LiveShare」のような機能です。）

通常サーバー上のソースコードを編集するためには、
サーバーにSSH接続して「vim」というターミナル画面用のエディタを使って編集するか、
手元のPCでソースを編集してからサーバーにアップロードするという手順を踏む必要がありますので、この必要がなくなるのは非常に楽です。
ただし、手元のPCにサーバーをたてて開発（＝ローカル環境で開発）をする場合、上記のようなメリットはありません。（[Cloud9を利用する事自体は可能のようです。](https://blog.f-arts.work/archives/1038)）

</div></details>

[Lightsailの場合もCloud9との連携が可能です](https://dev.classmethod.jp/articles/aws-reinvent-clud9-on-lightsail/)が、するかどうかは検討が必要です。

<details><div>
検討が必要な理由は以下です。
通常、すでにネットに公開しているサービス、つまり本番環境のソースコードを直接いじる機会は少ないと思います。
テスト環境としてのサーバーを用意するなら、サーバーの起動時間によって料金が増減するEC2のほうがお得かもしれません。
（噂では、EC2の最安プランであれば料金は１時間あたり１円程度とのこと。）
しかし、本番環境とテスト環境の構成が違うことはトラブルの原因にもなります。
そのあたりも含め、何を優先するかを検討してから選択していただければと思います。
</div></details>

##CloudFront
CDN配信機能です。
WEBサーバーから配信しているファイルを、AWSが持っている全国各地のサーバーにキャッシュさせておくことで、
アクセスしてきたユーザーの現在地から一番近い場所にあるサーバーからファイルを配信することができます。

<details><div>
CDNを利用する主なメリットは２つあります。

- ユーザーがページを表示する速度が早くなる。
- ファイルを配信する機能を自分のサーバーではなくファイルをキャッシュしているサーバーが担当することになり、自分のサーバーの負担を軽くすることができる。

</div></details>

Lightsailの場合は、CDN配信機能（有料）があらかじめ用意されているので、
そちらの機能を利用することになります。
※LightsailにCDN配信機能がついたのは、2020年7月です。それより古い情報に惑わされないよう気をつけてください。

##ELB
ロードバランサー機能です。

１台のPCでWEBサービスを運用していると、バズったりしてアクセスが増大したときに、サーバーがパンクして落ちてしまうことがあります。
そうならないように、同じWEBサービスを配信するサーバーを複数台用意しておくことで、サーバーダウンを回避する方法があります。
ロードバランサーは、そのとき用意した複数台のサーバーと、ユーザーのアクセスの間に設置して、
各サーバーの状態を考慮して適切なサーバーにアクセスを振り分けます。

<details><div>
上述のCDNとの使い分け方ですが、
サーバーサイドレンダリングを使ってページを作成するような構成の場合、
ファイルをキャッシュしておくCDN機能では対応できません。
そのため、そのような場合はロードバランサーを使う必要があります。

ちなみに、ロードバランサーはあくまで「各サーバーへの振り分け」を行う機能ですので、
「同じ機能を有する複数のサーバーを用意する」という部分は、こちらで費用や作業を負担して構築する必要があります。
</div></details>

Lightsailの場合は、ロードバランサー機能（有料）があらかじめ用意されているので、
そちらの機能を利用することになります。

##Lambda
関数をクラウド上に保管して、実行できる状態にしておけるサービスです。
つまるところ「バッチ処理」を管理してくれるということです。

<details><div>
料金は、関数を100万回実行するまでは無料で、それを超過すると従量課金になります。
なんでもかんでもLambdaに頼るような、サーバーレスな使い方をしなければ、
基本的に無料でいけるだろうという値段設定なのが、魅力的です。

実行時間が1５分までの関数であれば、Lambdaでの実行が可能です。
それよりも長い時間がかかる場合は、AWS Batchというサービスを利用する必要があるようです。
</div></details>

LightsailとLambdaの連携はそれなりに手間がかかるようなので、
バッチ処理が必要ならばLightsailサーバー上に作成したほうがスッキリするかと思います。

#認知度 ☆★★

##Marketplace
構築済みのEC2のマシンイメージ（AMI）や、WAFのセキュリティルールなど、
AWSのサービス上で使用できるイメージを売買できる市場です。

##Workspaces
クラウド上の仮想PCを使用できるサービスです。
EC2やLightsailと違いGUIが利用できるため、サーバーとしてではなく、
仮想環境や、遠隔操作できるPCのような使い方がメインになります。

##Connect
自動電話受付窓口を作成するサービスです。
「◯◯のご用の方は◯番を押してください」みたいなやつです。

##SES
メールの送受信サービスです。
メールマガジンの配信などができます。

##Athena
AWSのストレージ上にあるファイル（主にCSVやEXCELのような形式のファイル）の中に書いてあるデータを、
データベースと同じ言語（SQL）を使って検索することができるサービスです。

##Chime
SlackやGoogleハングアウトのようなチャット・会議ツールです。

##Chatbot
チャットボットをつくるサービス。
AWS Chimeの他に、Slackとも連携できるらしいです。


#おわり
いかがでしょうか？
記事の前編と後編を読んでいただいた方は、いままでよりグッとAWSの理解度が深まったのではないでしょうか？
過去の自分とおなじように、AWSに苦手意識を持っていた方々が、
AWSをなんとなく理解できるようになっていけたら、嬉しく思います。

##紹介しなかったサービスについて
この記事に載っていない他サービスのことも広く知りたい場合は、
クラスメソッド社の[AWS全サービスまとめ](https://dev.classmethod.jp/articles/aws-summary-2020/)を読んでみてください。
クラスメソッド社はAWSの研究意欲が高く、ブログでの知識共有を積極的に行ってくださっているすごい会社です。
AWSをより深く突っ込んでいくことになった場合、こちらのブログにお世話になることは少なくないかと思います。

かわいらしい公式のCM動画も見つけましたので、
文章で読むのがキツいという方は、こちらを観てみてください！
[AWS CM動画 - YouTube](https://www.youtube.com/playlist?list=PLwvrL0-3AsdnPAnpGdMcckUmy7-lWokJz)