【AWS超入門】勉強したことをまとめてみた

## はじめに
大学卒業後約3年半Javaメインのエンジニア→プログラマーから離れ営業企画など→約5年を経て再度エンジニアに！
というちょっと変わった経歴を持っています。
エンジニアに戻り数ヵ月、少しは感覚を取り戻したかなという頃に参加したプロジェクトでAWSを使うことになりました。 
一つ一つのサービスはなんとなく理解できても、それらをどう組み合わせて活用するのか？などなど、自分なりに理解したことをかなり噛み砕いてまとめてみました。   
私自身もAWS初心者向けの記事やサイトにとてもお世話になったので、この投稿も、AWSって聞いたことはあるけど詳しくはわからない…という方のAWS入門としてお役に立てれば嬉しいです。 
※認識違いなどありましたら、ご指摘いただければ幸いですm(_ _)m   
    
## AWS概要
#### Amazonが提供しているクラウドサービス    

2006年からAmazonが提供しているクラウドサービスの総称。
Amazonが持つ世界最大ECサイトのビジネス課題を解決するために構築したインフラやアプリケーションを、クラウドサービスとして一般公開したことがAWSの始まり。
AWSでは現在、120以上ものサービスが公開されており、世界のクラウドサービスの市場シェアは約35%で世界一。

その様々なサービスを組み合わせ、サーバやデータベースなどのITリソースを瞬時に構築することができます。

#### 4つの特徴

1. 従量課金制で低コストを実現 
利用サービスの通信料や通信時間に応じた料金を支払う従量課金制。
初期費用もかからない。

1. 高いセキュリティ 
政府機関や金融機関などにも採用されるほど高いセキュリティを誇る。
各国の規制やコンプライアンスにも対応している。

1. 安定したパフォーマンス
世界20ヶ所にも及ぶデータセンターで運営されており、ソフト・ハードともに常に最新の状態に保たれている。

1. 高い柔軟性・拡張性
様々なサービスがあるので、必要な機能を組み合わせたり、追加・停止したりすることが可能。

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

- #####Amazon EC2    
わずか数分で、OSを載せた仮想サーバを作成・利用できるサービス。 
標準的OSのWindows、Linuxが使用できる。
仮想ネットワークの環境も準備されている。
<font color="MediumSeaGreen">**インスタンス**</font>という単位でサーバを複数構築できるので、例えばAPサーバとDBサーバが必要な場合は、2つのインスタンスを作成して対応できる。   

- #####Amazon S3
高い耐久性をもつオブジェクトストレージ。
データの種類や容量を問わず保存・保護が可能。
ファイルのバックアップ、処理前のファイルの保存、処理後のファイルの保存や、
HTMLファイルを置いてwebブラウザから呼び出せば、webページを表示することもできる。

- #####Amazon RDS
リレーショナル型DB。
利用できるDBエンジンは、<font color="MediumSeaGreen">**Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle データベース、SQL Server**</font>の6つ。

- #####Amazon Lambda
サーバレスでプログラムを実行できる環境。
別サービスのイベント等をトリガーとして、自動でプログラムが実行される。
実行されるプログラムは「Lanbda関数」と呼ばれ、対応言語は、<font color="MediumSeaGreen">**Java、Node.js、C#、Python、Ruby、Go、PowerShell。**</font>

- ##### Amazon API Gateway
APIを簡単に作成し、AWS LambdaやEC2、AWS以外でパブリックとして公開されているアプリケーションを、APIとして公開することができる。
また、APIの管理に必要な事項をAWS側で提供してくれる。

- #####Amazon EventBridge
アプリケーションを、様々なリソースからのデータと簡単に接続できるサービス。
AWSリソースの状態変化を検知した際にイベントを生成し、そのイベントがあらかじめ設定したルールに合致した場合はイベントをターゲットに振り分け（トリガー）、ターゲットはイベントを処理する。
状態変化の検知だけでなく、特定の時刻などを指定してイベントをトリガーすることもできる。

- #####Amaon SNS
アプリケーションからの通知を行えるサービス。
「イベントドリブン」なメッセージを手軽に実現。
システム間メッセージングや、モバイルアプリへのプッシュ通知の送信、Email送信などが可能

※類似サービス：Amazon SES
Email配信サービス。
SNSでのEmail送信は、スケジュール送信ができない、容量制限があるため長文コンテンツには不向き等の注意点があるが、
SESはそれらをカバーできる。

ざっくりしたイメージは、SNSはアラート等のプッシュ通知に向いており、SESはメールマガジン等に向いている。





```
上記サービスの使用例

・S3にcsvファイルがアップロードされると（トリガー）Lambda関数が実行され、そのファイルを読み込みDBを更新
・EventBridgeで1日1回定時刻にイベントをトリガーしてLambda関数を実行し、DBから抽出した情報をもとにcsvを作成してS3にアップロード
・S3に画像ファイルがアップロードされると（トリガー）Lambda関数が実行され、webサイトやモバイルサイト用にリサイズして表示
・EventBridgeで1日1回定時刻にイベントをトリガーしてLambda関数を実行することで、在庫数が一定数を切った商品情報を抽出し、
  該当商品をお気に入り登録しているユーザーのスマホアプリにSNSでアラートを通知
```
他、国内企業の導入事例は[AWSのサイト](https://aws.amazon.com/jp/solutions/case-studies-jp/)で紹介されています。

## まずは覚えておきたい用語

- #####リージョン
AWSが運営されている世界各国の拠点のこと。
各リージョンではAWSのサービスがそれぞれ独立して提供されている。
現在日本には東京リージョンの他に大阪ローカルリージョンがあり（小規模データセンター群）、データセンターを増設して2021年初頭に"リージョン"に格上げされる予定。


- #####VPC
リージョンの中に置く、プライベートなネットワーク空間。ここに、EC2のインスタンスなどが置かれる。
基本的にVPCが必須だが、最初に使うVPCはAWS側が自動的に用意してくれる。

- #####サブネット
一般的なネットワーク用語としての「サブネット」とほぼ同じ概念。 
AWSの場合、VPC内にサブネットを構成して利用するのが基本。

- #####セキュリティグループ
どのインスタンスがどこと通信できるかを制御できる、インスタンス単位で設定できるファイアウォール。

- #####IAM（アイアム）
AWS上のサービスを操作するアクセス権限とユーザーを設定するサービス。
AWSリソースを制御するための権限やユーザーがアクセスするための認証情報を集中管理することができる。
IAMユーザー（グループ）、IAMポリシー、IAMロールがある。

- #####IAMポリシー
IAMユーザーやIAMロール（後述）にアタッチ（適用）することができる、AWSリソースへの操作権限設定。
「誰が」「どのAWSサービスの」「どのリソースに対して」「どんな操作を」「許可する(許可しない)」といったことがJSON形式で記述されており、AWSが用意してくれている。
（自作も可）

- #####IAMロール
S3などのAWSのサービス等に対し、AWSの操作権限を付与するための仕組み。
実態は、上記のポリシーがアタッチされているもの。


つまり、<font color="MediumSeaGreen">**ポリシーはロールに内包されているものであり、ロールは各AWSリソースに付与されているもの**</font>である。
例えば、あるLambda関数には1つだけロールを付与できるが、そのロールに様々なポリシーをアタッチする事で、そのLambda関数は様々なAWSリソースにアクセスする事ができるようになる。
（Lambda関数からS3のファイルを読み込んだりアップロードしたりできるようになる。）

## おわりに
もっともっとインプットしなければいけないことがたくさんですが、まずはここにまとめた知識、概念、単語は”最低限”必要かなと思いました。


わからないこと、困ったことはメンバーや先輩に聞くのももちろんですが、みんな同じところに躓くようで、ググれば解決策がたくさん出てきて大変助かりました。

次回はもっと技術的なことを書けたらいいなと思います:santa: