AWSでWEBサイトを構築する際に必須のAWSサービスたちをご紹介

## はじめに

私は普段開発エンジニアをしているのですが、仕事上AWSでWebサイトを構築させていただきましたので、タイトルにもある通り、AWSでWEBサイトを構築する際に必須のAWSサービスたちをご紹介しようと思います。

## まず初めに必ずしてほしいこと

下記はWebサイトの運用以外でも必須レベルの設定だと私は思っています。

- ルートユーザーに多要素認証(MFA)を設定する

- ルートユーザーの代わりに管理者権限が付与されたIAMユーザーを作成。以降、ルートユーザーは極力使用しない

- 作成した管理者ユーザーに、請求とコスト管理用の管理者アクセス権限を付与する

- CloudTrailを設定して、AWS APIの呼び出しをすべて記録する

- AWS Configを有効にして、AWSリソース(EC2やVPCなど)の構成変更を記録する

- Cost Explorerを有効にして、使用料を確認できるようにする

- Cost Explorerで予算を設定し、メールで通知設定を行う

- Amazon GuardDutyを有効にして、セキュリティの脅威を監視する

- 動作をテストするには、最初のサーバーを作成し、ログインできることを確認する。確認できたら削除する

- PCでAWS CLIを起動して操作する(任意)

[引用] [AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)](https://www.amazon.co.jp/AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3-%E5%B7%9D%E7%95%91%E5%85%89%E5%B9%B3/dp/4815607850/ref=asc_df_4815607850/?tag=jpgo-22&linkCode=df0&hvadid=707442440784&hvpos=&hvnetw=g&hvrand=8456454083051439366&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009547&hvtargid=pla-1679725221528&psc=1&mcid=8f2eac4c52603b459fa19a10d5ce88be&th=1&psc=1&gad_source=1)

:::note info
MFAに関しては、ルートユーザーに設定していない状態だとAWSのコンソール画面上で警告のような通知がされるので特段意識する必要はないでしょう。
:::

## AWS CloudTrail

![cloudtrail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/b948edbb-08c6-0fb7-7623-0d43566a87fa.png)

いつ誰(ユーザーやAPIなど)が何を行ったかをJSON形式で記録できるサービスです。
これは言わずもがな、チームで開発する際には必須だということはお分かりいただけるでしょう。

## AWS Config

![awsConfig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/e71fbe57-b9e5-e8e9-1d8f-b2f1e8039914.png)

ルールを自分で設定し、そのルールが守られていないアーキテクチャや設定になっていた場合に警告してくれるサービスです。また、EC2やVPCなどのリソース構成も記録してくれます。ルールで言うと例えば、「ssh接続をインバウンドルールで許可している場合にIP制限がかかっている」などがあり、それが守られていなければ警告されます。リソースの構成もなんでも記録できるのですが、私は予算の関係で利用するサービスのみ記録しています。

## AWS Cost Explorer

![awsCostExplorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/0779dee7-d821-5dae-4f00-911f1a74b842.png)

主にコストに関する設定や管理などができるサービスです。特に予算を決定してemail通知しておくことはとてもおすすめです。

## Amazon GuardDuty

![amazonGuardDuty.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/34603e5d-9017-919d-51bd-f57498c0de9b.png)

これ簡単です。有効にするだけ、以上です。

## Amazon EC2 (Elastic Compute Cloud)

![amazonEc2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/d12de059-53aa-5e37-4497-73240153dcdb.png)

これはAWSサービスの中で一番有名なサービスなのでは無いでしょうか。主にサーバーの役割を担います。と言うかサーバーです。笑
余談ですが、僕は案外昔からサーバーに興味があったのですが、実機を買うわけにもいかず、かといって高いお金を払って買ったパソコンにLinuxをぶちこんで弄ると言うのも少し気が引けていてあまりサーバーに関わることができませんでした。(もちろんVirtual Boxなどでは触っていました)
ところがどっこいこのサービスを見つけた当初はサーバーへの愛が上がりましたね。(これからは好きなように君をいじれるんだね、、、と)

## Amazon S3

![amazonS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/77401279-46c7-f04a-f616-a7ad083e9411.png)

主にストレージとして扱います。静的ウェブサイトのホストとしても扱えますが、やはりログや画像ファイルなどを保存するストレージの用途として扱うことが多いのでは無いのでしょうか。
**S3 Glacier**というサービスも併せて利用することをお勧めします。こちらは簡単にS3のアーカイブバージョンだと思っていただいて大丈夫です。90日S3に保存されているデータはS3 Glacierに移行などしてコスト削減を図れます。(ただデータを取り出す際に少々手間がかかることにご注意ください)

## Amazon RDS

![amazonRds.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/acb20f38-7c31-2d4c-0162-ecbd67699681.png)

データベースとして利用します。MySQLやPostgreSQLなど多種多様なデータベースエンジンを選択できます。

:::note info
余談なのですが、RDSやECSなど元はEC2なんですね。(まあサーバーなので当たり前の話ですが)
EC2をAmazonさんがデータベース専用に作成してくれたのをRDS、コンテナ専用に作り替えてくれたのがECS。
ざっくり言えばこんな具合なのですが、サーバー系のサービスはEC2で全て実現可能ということを知っていただきたかったのです。
:::

## Amazon VPC

![amazonVpc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/42f446b0-20ce-2786-a842-351431b90652.png)

VPCはVirtual Private Cloudの略です。ここでのご紹介になり少し遅く感じますが、これは一言で言うと仮想ネットワークです。この仮想ネットワークの中に自分のEC2やRDSなどを構築して初めてインターネットと通信ができます。

## Amazon CloudFront

![amazon-cloudfront_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/75469783-fbcc-b253-f9af-fb186f5b8c55.png)

俗に言うContents Delivery Networkというものです。キャッシュサーバーとしての役割を担ってくれます。これによりユーザービリティの向上が測れるだけでなく、サーバーのネットワーク負荷を下げたり、DDoS攻撃などに対してセキュリティ対応力を高めることができます。


## Amazon Route 53

![aws-route53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/13d548ee-d77e-2083-25e4-eb2ddfe953e1.png)

主にドメインを取得・管理するサービスです。AWSではDNSサーバーを明示的に構築する必要はなく、このサービスを利用してIPアドレスとドメイン名を紐づけるだけで自動でDNSとしての役割を担ってくれる便利なサービスです。また、SSL化もこのサービスで実装可能です。

## AWS Certificate Manager

![aws-certificate-manager--logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/545053cd-3dd7-b680-b379-611443eddb19.png)

先ほどRoute 53の部分で述べたSSL/TLS証明書の発行をこのサービスで行います。Route 53とセットで利用されることが多いのではないでしょうか。

## AWS IAM

![images.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/d4e4945c-229e-b5b1-ec3c-26d4bb226642.jpeg)

ユーザーやユーザーキーの管理をします。このサービスで権限なども設定できるため、必須のサービスです。Linuxシステムでいう、ユーザーやユーザーグループなどと同じだとイメージしていただけると取っ付きやすいかと思います。

## AWS WAF&Shield

![waf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/d5a57a86-a2ce-af58-227e-d51e0dd9fed9.png)

少しAWS Configと似ているところがありますが、サービス内容としては全く違います。構築したWEBサーバーへアクセスするリクエストを制御したりDDosの影響範囲を小さくしてくれるWEBアプリケーション単位のファイアウォールの役割をしてくれます。より低レイヤーのファイアウォールの役割を担ってくれるサービスにはセキュリティグループやACLなどがありますが、こちらもセキュリティ面では必須のサービスて言っても過言ではないでしょう。

## Amazon CloudWatch

![awsClooudwathc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/25cbdd45-d6f0-85c1-1d9a-a4b89b327415.png)

殆どのサービスのログやアプリケーションの状況を管理できます。ただし、EC2のメモリなどは標準で準備されているのですが、CPUやその他サービスのログ状況などは、AWS CLIを利用してCloudWatchとコネクションしたり、Data Kinesis Firehouseを利用してCloudWatchが読み取れる形式に変更すると言ったことをしなければいけないため注意が必要です。

## AWS Lamda

![awsLamda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/ae47123f-03d5-4315-af9c-da44a6900de2.png)

私が一番好きなサービスです。(だから画像が大きいわけではないです)
正直このサービスがあればなんでも実現可能。とまでは言いませんが、非常にインフラアーキテクチャの拡張性に長けているサービスです。前に説明したCloudTrailにも実は裏側でLamdaが動いていたり(自動)と、万能サービスです。利用方法としてはトリガー(特定の事柄**が**発生)されるとイベント(特定の事柄**を**発生)させるといった具合です。これらの内容は関数で定義するため、開発エンジニアの方々も触っていて楽しいのではないのでしょうか。

## AWS Auto Scaling

![awsAutoScaling.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/deef794c-95f6-ae6f-5119-3a23934b10cf.png)

これはやはり、EC2のEC2 Auto Scalingで利用されることが多いのではないでしょうか。というのもECSやEKSでは特に設定しなくても標準でAuto Scalingが搭載されているからです。
設定例としては、EC2のメモリが60%を超えたらもう一つ全く同じ設定のEC2を構築するといった具合でしょうか。その名の通り設定した基準に基づいて自動でEC2などのインスタンスをスケールアウト・スケールインしてくれるサービスです。

## AWS KMS

![KMS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3829908/d3f311aa-4009-2a08-cca0-871b44cbef81.png)

データを暗号化してくれるサービスです。そのデータを暗号化するキーをCDKというのですが、それをさらに暗号化するCMKを利用してオーナーはデータを扱います。(ちなみにそのCMKもAWS上で暗号化されています笑)
企業でのプロジェクトなど、データ漏洩によって信頼を失うことができない状況である方は特に必須のサービスとなります。また、キーというとユーザーが利用するイメージがありますが、CloudTrailなどのリソースもそのキーを扱うよう設定することができます。(というかそうしないと暗号化されない)

## まとめ

いきなりインフラを任されたり、自分で本格的なインフラを構築してみたいが何から手をつけたらわからないという方は、まずは上記でご紹介したサービスに**一度触れてみることを強くお勧めします**。
慣れてきたら詳細な設定や何が自分のプロジェクトに必要でそうでないかなど分かってくると思います。
それではまた別の記事でお会いしましょう。ご精読ありがとうございました。