フロントエンドエンジニアのAWS基礎学習〜

# はじめに

フロントエンドエンジニアでインフラ技術をメインにさわる事はないと思っていたんですけど、基礎知識を疎かにすると実際の業務で関わってきた時に少なからず必要になってくると思うので、今回は備忘録＆アウトプットで学習を進めていこうと思っております！

##まずインフラって？？

自分でサービスを作れたり、課題に対してシステム全体で対応することができるようになる。また以下のメリットがあります。

- 自分自身でインフラを構築して、サービスをリリースできるようになる。
- 開発する際のテスト環境が作れる。
- 障害があったとき、問題を検知し切り分けることができる。
- 対応策を考えるとき、アプリケーションだけでなくシステム全体で対応できる。
などなどのメリットがある。

### インフラの基本構築

1. `サーバーの構成`　サーバーを設置、OSやソフトウェアの設定

2. `ネットワークの構成`　ネットの接続、IPアドレスの範囲決めや割り当て、ドメインとIPアドレスの紐付けなど

## AWSとは
![https://capsulecloud.io/assets/img/aws/amazon_web_services_logo.png](https://capsulecloud.io/assets/img/aws/amazon_web_services_logo.png)

- `AWS` ... 画像でもあるように`amazon web services`という。Amazon社が提供するクラウドサービス。クラウドサービスとして世界最大規模。

### AWSの特徴

サービスの豊富さやリソースの柔軟性、使った分だけ支払う従量課金などの特徴がある。



##AWSの代表的なサービス

- `VPC`(Virtual Private Cloud)
AWSアカウント専用の仮想ネットワーク

- `EC2` (Elastic Compute Cloud)
AWS上に仮想サーバーを作るサービス

- `S3`(Simple Storage Service)
Webサーバーやデータのバックアップ等のストレージとしてデータを保存し保護する

- `Route 53`
ドメインにIPアドレスを紐付け情報を提供するサービス

### 作業用（IAM）／ルートユーザーについて
- `ルートユーザー`　AWSサービスやリソース全てのアクセス権をもつ特権ユーザー。
アカウントの変更や解約、サポートプランの変更などをするときだけに使用する。極力を使わない。

- `作業用ユーザー（IAMユーザー）`　AWSで作成するユーザーで認証情報とアクセス許可を個別に変更できる。
AWSの操作するコンソール画面にログインするときや通常の作業は`IAMユーザー`を使用する

##VPC について

AWS上に仮想ネットワークを作成できるサービス

![https://cdn-ak.f.st-hatena.com/images/fotolife/k/kawakamasu/20180929/20180929205154.png](https://cdn-ak.f.st-hatena.com/images/fotolife/k/kawakamasu/20180929/20180929205154.png)

## VPCの基礎知識

####リージョン
AWSの各サービスが提供されている地域のこと（アメリカ、東京、アフリカ、アイルランドなど）

![https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2020/03/17/aws_regions-1.png](https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2020/03/17/aws_regions-1.png)


####アベイラビリティゾーン

独立したデータセンターのこと。
複数立てることで、他のアベイラビリティゾーンがダメになっても他が補うことでシステムが正常稼働してくれる。

![https://image.itmedia.co.jp/news/articles/1908/28/ki_1609376_aws02_w290.png](https://image.itmedia.co.jp/news/articles/1908/28/ki_1609376_aws02_w290.png)

####サブネット

VPCを細く区切ったネットワーク。
Webサーバーはインターネットから接続でき、DBサーバーは接続できなくする。

![https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2015/07/c1bfa8532cc463ea0fd0d1c6728fb87d.png](https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2015/07/c1bfa8532cc463ea0fd0d1c6728fb87d.png)


####IPアドレス

ネットワーク上の機器を識別するためのインターネットの住所。
32ビットで構成され、10進数での表現になる。
例）10101100,00010100,00000001,00000001 👉 172.20.1.1
また、IPアドレスは`パブリックIPアドレス`と`プライベートIPアドレス`の2種類がある。

#####パブリックIPアドレス
インターネットに接続する際に使用するIPアドレス。重複を防ぐため`ICANN`という団体が管理している。

#####プライベートIPアドレス
インターネットで使用されないIPアドレス。下記の範囲が決まっていて自由に使用が可能。

![https://www.liveon.ne.jp/glossary/wk/img/private_ip-01.png](https://www.liveon.ne.jp/glossary/wk/img/private_ip-01.png)

####ルーティング
ネットワーク同士をIPアドレスを通じて接続できることを言い、ルーターがIPアドレスの行き先を管理している。

また、ルーティング処理を記録して処理を行う際に参照するのが、`ルートテーブル（ルーティングテーブル）`と言い「宛先のIPアドレス」と「次のルーター（ターゲット）」の書式で設定されている。
![https://i0.wp.com/docs.aws.amazon.com/ja_jp/vpc/latest/userguide/images/internet-gateway-overview-diagram.png?w=792&ssl=1](https://i0.wp.com/docs.aws.amazon.com/ja_jp/vpc/latest/userguide/images/internet-gateway-overview-diagram.png?w=792&ssl=1)



画像のルートテーブル（Custom route table）を見ると、
「10.0.0.0/16」のIPアドレスは自身のインターネット（local）に繋がり、

「0.0.0.0/0」となっているIPアドレスは、`デフォルトルート`と言ってルートテーブルに登録されているIPアドレスにどれにも一致してない経路を指しており、インターネットと接続をするため`インターネットゲートウェイ`と接続する必要がある。

`インターネットゲートウェイ`はVPCとインターネットとの間に通信を可能にする。

### ネットワークを構築する作業内容

VPCの基礎知識を用いて、ネットワークを構築する流れが以下のようになります。

①VPCの作成
👇
②サブネット作成（パブリック＆プライベート作成）
👇
③ルーティング設定（インターネットゲートウェイ＆ルートテーブル作成）

##EC2について
AWSクラウド上の仮想サーバー。またEC2では仮想サーバの事を`インスタンス`という単位で扱います。 
数分で起動し、1時間または数秒単位の従量課金で、サーバーの追加・削除、マシンスペック変更も数分で可能。

![https://image.itmedia.co.jp/ait/articles/2011/30/l_news013_01.png](https://image.itmedia.co.jp/ait/articles/2011/30/l_news013_01.png)

###EC2の基礎知識

#### AMI

`AMI（Amazon Machine Image）`はインスタンス起動に必要な情報が入ったOSのイメージ。サーバーのテンプレートのようなもの。

#### インスタンスタイプ

サーバーのスペックを定義したもの。
タイプによりCPUやメモリ、ストレージ、ネットワーク帯域が異なる。またスペックによって料金が異なる。
`インスタンスファミリー`は世代を表しており、数字が大きほど新しい。また、`インスタンスサイズ`はCPUを指します。

![https://www.bit-drive.ne.jp/managed-cloud/column/images/column22/img_01.jpg](https://www.bit-drive.ne.jp/managed-cloud/column/images/column22/img_01.jpg)

#### ストレージ
サーバーに紐付けるデータの保存場所。ECのストレージには以下の2種類がある。

- `EBS(Elastic Block Store)` 
高い可溶性と耐久性を持ち、インスタンスの付け替えが可能なうえ再起動してもデータが保存されている。
EBSの料金は発生する。

- `インスタンスストア`
インスタンス専用の一時的なストレージ。インタスタンスの付け替えができず、再起動したらデータがクリアされる。
ただし、料金は無料。

### 仮想サーバーを作成する作業内容

ES２の基礎知識とSSHでES２インスタンスへの接続やセキュリティの設定を合わせて、以下の作業になります。

①AMIの選択
👇
②インスタンスタイプの選択
👇
③ストレージの追加
👇
④セキュリティグループの設定
👇
⑤SSHキーペアの設定

###Route 53について
AWSのDNSサービス。
`DNS`というのは、ドメイン名の管理システム。ドメイン名をIPアドレスへ変換し、紐付けをする。
また、以下の二つから構成されている。

- `ネームサーバー`　ドメイン名に紐ずくIPアドレスが登録されているサーバー
- `フルリゾルバ`　どのドメインにIPアドレスが紐づいているか教えてくれるサーバー 

`Route 53`の特徴としては、`ネームサーバー`の役割を果たしており、高可用性100%を示しており、ほぼサーバーが落ちることはないことを示しています。

![https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2014/11/20141106_route53_0021.png](https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2014/11/20141106_route53_0021.png)

###Route 53でDNSを設定する作業手順

①ドメインのネームサーバーをRoute 53に変更
　Route 53でホストゾーンを作成
　ネームサーバーをお名前.comからRoute 53へ変更
👇
②ドメインに紐づくIPアドレスを登録
Route 53でレコードセットを作成
 
##S3について
安価で耐久性の高いAWSのクラウドストレージサービス。
画像やデータの保管する場所として利用されており、容量無制限で高いデータの耐久性があります。

また、実際に使用した分の料金が発生する従量課金サービスでもあります。

![https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/images/s3-photo-album-example.png](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/images/s3-photo-album-example.png)

バケットやオブジェクトに対してアクセス制限を設定できる。

#### バケット
オブジェクトの保存場所。バケットを作成し、その配下にデータを格納するイメージ。また複数のバケットを作成することができる。

####オブジェクト
データ本体を表し、S3に格納されるファイル。また、ファイルにURLが作成される。

#### キー
オブジェクトの格納URLのパスを表す。

### データベース構築の作業手順

①AWS側の準備
・S3のバケット作成
・S3の権限を持ったIAMユーザーの作成
👇
②サイトの設定(WordPress)

#参考記事
ドキュメント：[https://docs.aws.amazon.com/ja_jp/](https://docs.aws.amazon.com/ja_jp/)
参考記事：[https://aws.taf-jp.com/blog/35503](https://aws.taf-jp.com/blog/35503)
Udemy:[https://www.udemy.com/course/aws-and-infra/](https://www.udemy.com/course/aws-and-infra/)

#感想
正直なところインフラって何？？って感じでずっとおざなりにしていたので今回はAWSという知見からインフラの知識を少し学べました。フロントエンドを学習していく中でインフラの知識がまだまだ浅いので、LinuxやDockerについてもどんどん勉強していきたい意欲が湧いてきました！