AWSでネットワーク・サーバーを構築する
システムをインフラから構築する
- インフラができるようになるメリット
- 自分でサービスを作れる
- 自分でインフラを構築してサービスをリリースできるようになる。
- 開発する際のテスト環境を自分で作れるようになる。
- システム全体で対応できる
- 障害があったときに、どこに問題があるか、切り分けられるようになる。
- 対応策を考える時、アプリケーションだけでなく、システム全体で対応できるようになる。
- 自分でサービスを作れる
- インフラを構築する手順
- ①サーバーの構成
- どのようなサーバーが必要かを考える
- サーバーを設置する
- サーバーのOSをインストールし、各種設定を行う
- 必要なソフトウェアをインストールし、設定する
- ②ネットワークの構成
- 構築したサーバーをネットワークに接続する
- ネットワークで使用するIPアドレスの範囲を決める
- サーバーにIPアドレスを割り当てる
- ドメイン名とIPアドレスの対応を割り当てる
- 構築したサーバーをネットワークに接続する
- ①サーバーの構成
AWSとは
- AWS(Amazon Web Services)は、Amazon社が提供するクラウドサービス。100以上のサービスが存在し、クラウドサービスとして世界最大規模。
- AWSの特徴
- サービスが豊富
- ECSやRDSなど、100以上のサービスが存在。
- 高負荷に耐えられる、信頼性の高いシステムを少ない手間で運用できる。
- リソースが柔軟
- リソースを、必要な時に必要な分だけ調達できる。
- 従量課金
- 使った分だけ支払う従量課金モデル。
- 不必要なときは使う必要がなく、費用対効果に優れている。
- サービスが豊富
インフラ
インフラとは?
サーバーとは?
ネットワークとは?
クラウドとは?
- ネットワークを利用してコンピューターリソースを利用する形態のこと。
-
オンプレミス
- インフラを自前で用意して、自社で所有・管理すること。
- 利点:自由度が高いこと。
- 欠点:初期コストがかかり、調達期間が必要で、サーバーの増減がしにくいこと。
-
クラウド(AWS)
- インフラをネットワーク経由で使用・管理すること。
- 利点:初期コストが少なく、すぐに始めることができ、サーバーの増減が自由にできること。
- 欠点:費用の予測がつきづらいこと、クラウド全体で障害が起こると対応のしようがないこと。
VPC
VPCとは?
リージョン
- AWSの各サービスが提供されている地域のこと。
- AWSのサービスを使う場合まずリージョンを設定し、リージョン毎にサーバーを作っていく。
アベイラビリティゾーン
サブネット
- VPCを分割して作った小さなネットワークのこと。
- サブネット内で1つをインターネットからアクセス可能なWebサーバー、もう1つをアクセスできないDBサーバーのように複数分けて作ることができる。
- 複数のアベイラビリティゾーンの中にそれぞれサブネットを作ることで冗長性を高める。
IPアドレス
-
ネットワーク構築の際には、まずIPアドレスの範囲を決める必要がある。
-
IPアドレスの種類
- パブリックIPアドレス:インターネットに接続する際に使用する
- プライベートIPアドレス:インターネットの接続には使用されない
-
CIDR表記:IPアドレスの後ろに「/」を書きその後ろにネットワーク部が先頭から何ビット目なのかを表記する。 例: 192.168.128.0/24 (ネットワーク部が24ビット目)
-
サブネットマスク表記:IPアドレスの後ろに「/」を書き、ネットワーク部を表すビットと同じ部分を1に、ホスト部を表すビットと同じ部分を0にする。
EC2
EC2とは?
- Elastic Compute Cloudの略でAWSクラウド上の仮想サーバー。
- インスタンスとはEC2から立てられたサーバーのこと。
AMI
インスタンスタイプ
- サーバーのスペックを定義したもの。
- 例 : m5.xlarge、スペックにより値段が変わる。
ストレージ
- サーバーにつけるデータの保存場所
- EBSとインスタンスストアの2種類ある
名前 | 説明 |
---|---|
EBS | ・高い可用性と耐久性を持つストレージ ・他のインスタンスに付け替え可能 ・EC2インスタンスはStop/TerminateしてもEBSは保持可能 ・Snapshotを取得しS3に保存可能 ・EBSの費用が別途発生 ・OSやDBなどの永続性と耐久性が必要なデータを置く |
インスタンスストア | ・インスタンス専用の一時的なストレージ ・他のインスタンスに付け替えることができない ・EC2インスタンスをStop/Terminateするとクリアされる ・追加費用なし ・なくなってはいけないデータを置かない ・一時ファイル、キャッシュなど、失われてもよいデータを置く |
SSH
公開鍵認証
-
サーバーの作成者だけがログインできるようにEC2ではSSHログイン時に公開鍵認証を行なっている。
-
公開鍵と秘密鍵を用いてログイン認証を行う仕組み。
ファイアウォール
Elastic IPアドレス
- EC2インスタンスのIPアドレスは、起動、停止すると別のIPアドレスが割り当てられてしまう。
- Elastic IPアドレスを使用することでIPアドレスの固定ができる。
- インスタンスを削除するまでずっとそのIPアドレスを使用できる。
Route 53
ドメイン
- インターネット上に存在するコンピューターやネットワークを識別するための名前。
- IPアドレスでは覚えにくいので、example.comのような形式で表すインターネット上の住所。
DNS
- ネームサーバーとフルリゾルバから構成されているドメインの管理システムで、ドメイン名をIPアドレスに変換する。
- ネームサーバー
- ドメイン名とそれに紐ずくIPアドレスが登録しているサーバー。電話帳のようなもの。
- フルリゾルバ
- 紐付くIPアドレスをネームサーバ-に問い合わせて、色々なネームサーバーに聞いて調べて教えてくれるサーバー。
Route 53とは?
- AWSのDNSサービス。ネームサーバーの役割を果たす。
- フルマネージドサービスで運用が楽。
- ホストゾーン:DNSのリソースレコードの集合。ゾーンファイルのようなもの。
- レコードセット:リソースレコードのこと。
- ルーティングポリシー:Route 53がRecord Setに対してどのようにルーティングを行うかを決める。
- ヘルスチェック:サーバーの稼働状況をチェック
RDS
RDSとは?
- フルマネージドなリレーショナルデータベースのサービス。
- AWSが構築や運用の管理をしてくれているのでRDSを使うことでコア機能の開発に注力できる。
- MySQLやPostgreSQLなどのデータベースが利用可能。
- RDSの特徴
- 可用性の向上:マルチAZを簡単に構築。
- パフォーマンスの向上:リードレプリカを簡単に構築。
- 運用負荷の軽減
IAM
IAMとは?
- AWSのサービスを利用するユーザー権限を管理するサービス。
- 各AWSリソースに対して別々のアクセス権限をユーザー毎に付与できるので、セキュリティを高めることができる。
ポリシー
- アクセス許可の定義。
- 「どのAWSサービスの」「どのリソースに」「どんな権限を」「許可するかしないかを」定義できる。
ユーザー
- 個々のアカウントのことで、一人一人に一つ一つのユーザーを作る。
グループ
- IAMユーザーの集合体で、複数のユーザーにアクセス権限を付与。
- 毎回ユーザー一人一人にポリシーを定義するのは手間だからグループを作りグループにポリシーを割り当てるので、まとめてポリシーを割り当てることができる。
ロール
S3
S3とは?
- 安価で耐久性の高いAWSのクラウドストレージサービス。
- S3を使うことでデータ容量を気にすることなく保存することができる。
- 画像などの静的コンテンツの配信、ログの出力先、静的なWebサイトをS3から公開するなどに利用される。
- S3の特徴
- バケット:オブジェクトの保存場所。名前はグルーバルでユニークな必要あり。
- オブジェクト:データ本体。S3に格納されるファイルで、URLが付与される。バケット内オブジェクト数は無制限。
- キー:オブジェクトの格納URLパス
CloudFront
- PCとS3の間の仲介に入り高速にコンテンツを配信するサービス。
- CloudFrontはPCからS3にリクエストがあった場合、コンテンツを取得してキャシングを行いキャッシュから配信するので、高速化されS3の負荷が減る。
ACM
ACMとは?
- AWS Certificate Managerの略で、AWS上のSSL証明書発行サービス。
- 簡単かつ安価にSSLの対応、そしてSSL証明書の更新ができる。
SSL証明書
- インターネット上でやりとりされるデータの「盗聴」「なりすまし」を防止するための暗号化プロトコル。
- SSLを使うことで送受信される情報を第三者に読み取られないように暗号化することができるので、 セキュリティの向上とアクセス権限をもたない人が、サーバーや情報システムの内部に侵入しないようにできる。
ALB
ALBとは?
- Application Load Balancerの略。複数のEC2インスタンスにアクセスを振り分けることで負荷分散でき高い可用性を実現できる。
- ACMを利用したSSL/TLS証明書の管理などセキュリティ面が充実している。
ECR
ECRとは?
- Elastic Container Registryの略。
- ECRはAWSが提供しているコンテナイメージの保管場所。
- ECSに統合することができるため、本番環境へのデプロイをスムーズにできる。
- AWSのDockerHubのようなイメージ。
ECS
ECSとは?
- Dockerコンテナを簡単に実行、停止、管理できるサービス。
- ECSを使うことで、複数のコンテナを統合して管理できる。
- aws上でいい感じにECRから
docker pull
して、docker run
するイメージ。
Clusterとは?
- タスクやサービスを使う論理的なグループ。
- コンテナを動かすec2やfargateの集合体。
- イメージは箱
Serviceとは?
- Taskをまとめて管理し、何個起動するのか指定、ALBと関連付けするもの。
- 同じサービス内で起動しているTaskは、同じTask Definitionからできている。
- コンテナ群のネットワークとかスケールとかいい感じにやってくれるマネージャー。
Task Definitionとは?
- ECSでコンテナを起動するための情報を記載したもの。
- どのimage使って、コンテナ起動するのかとか、cpuとメモリはどうするのかとかportはどうするかとか、コンテナが終了したり失敗した時に起動し直すのかどうかとか(他にも色々)を設定する。
- docker-compose.yml+Docker for Mac(メモリとか設定できる)のイメージ。
Taskとは?
- Task Definitionを元に起動した各コンテナ(またはコンテナの集まり)のこと。
- Railsでよくあるコンテナの構成で例えるなら、appで1タスク、nginxで1タスク、dbで1タスクみたいなイメージ。
Fargateとは?
- Fargateはサーバーの管理が不要なコンテナ向けのサーバーレスコンピューティングエンジン。
- EC2を利用した場合、自分でサーバーを起動してecs起動してと言うことをしていた
- しかし、Fargateを利用した場合は、ECSのServiceの状態によってTaskを自動的に起動したり終了したり、設定によってTask数を増やしたり減らしたりといったことを自動でしてくれる。
- EC2では起動していた分だけ課金されるが、Fargateの場合はリソースに対しての従量課金となっているため、コスパがいい。
CodePipeline
CodeCommitとは?
- AWSが提供しているプライベート用のGitリポジトリ。
- GitHubのAWS版のようなイメージ。
CodePipelineとは?
- CI/CDの中核となるサービス。CI/CDの全体フローを管理。
CodeBuildとは?
- CI部分を担当。ビルドやテストを行う。
- ビルドはDockerのコンテナイメージの作成などの用途で利用します。
CodeDeployとは?
- CD部分を担当。アプリケーションのデプロイ(リリース)を行う。
- EC2、オンプレ、Lambda、ECSへデプロイする仕組みを提供。
参考