執筆中
用語
AWSとは
- クラウド上でサーバーやネットワークを構築するためのサービス
サーバーやネットワークはサービスの中の一つ
インフラ
- サーバーやネットワーク
インフラを構築
- ネットワークを構成し、サーバーをネットワークに接続する
サーバー
- サービスを提供するコンピューター
WebサーバーやDBサーバーなど呼び名は複数あるが役割によって呼び名が異なるだけ
ネットワーク
- 複数のコンピューターをつないで、データを送受信できるようにする
rootユーザー
- 全権限を持つユーザー
IAMユーザー
- 作業用ユーザー。作業者毎にIAMを作成し、権限を割り振り、操作に制限をつける
Cloud Trail
- 操作ログを記録するサービス
デフォルトで90日保存
リージョン
- AWSの各サービスが提供されている地域
リージョンによって使えるサービスが異なる
アベイラビリティゾーン
- 各リージョン内にある独立したデータセンター
物理的に距離がある → 災害対策
VPC
- AWS上に仮想ネットワークを作成できるサービス
サブネット
- VPCを細かく分割したネットワーク
分割のメリット
- Webサーバーはインターネットに接続させたいけど、DBサーバーは隔離したいなどのケースにセキュリティ上強くなる
パブリックサブネット
- インターネットから接続できるサブネット
プライベートサブネット
- インターネットから接続できないサブネット
VPC基本設計
複数のアベイラビリティゾーンそれぞれにサブネットを作成、サーバーを配置することで冗長性を高める(災害に強いインフラ)
ビット
- 0か1か。コンピュータデータの最小単位。
バイト
- 8ビットで1バイト
IPアドレス
- ネットワーク上の機器(VPCやパブリック)を識別するためのインターネットの住所。
パブリック(グローバル)IPアドレス
- インターネットに接続する際に使用するIPアドレス
ルーターを介して割り当てられるIPアドレス。同じルーター(wi-fiルーター)を使っていれば同じパブリックIPアドレスになる。
プライベート(ローカル)IPアドレス
- インターネットで使用されないIPアドレス
ルーターを介してデバイス毎に割り当てられる(一意な)IPアドレス。
社内LANの構築などに使用。
CIDRブロック
- VPC全体のIPアドレスの範囲をCEDR表記で指定
テナンシー
- 物理ハードウェア(Server)を専用するオプション
専用にするとEC2の料金が割高になったりするらしい
ルーター
- IPアドレスがどのデバイスに紐づいているのか、どのネットワークに所属しているのかを管理しているデバイス
ルーティング
- サブネットをインターネットに接続するための設定
ターゲット
- 次のルーター(管理しているルーター名)
インターネットゲートウェイ
- VPCやパブリックとインターネットをつなげる仮想のルーター
EC2
- AWSが提供する仮想サーバー
インスタンス
- EC2から立てられた1つのサーバー
AMI
- インスタンス起動に必要な情報が入ったOSイメージ
AMIのおかげで自分でOSをインストールする必要がなくなる
インスタンスタイプ
- インスタンスのスペックを定義したもの
- CPU、メモリ、ストレージ、ネットワーク帯域がセットになっているパックで、インスタンスファミリー、インスタンス世代、インスタンスサイズから構成される
インスタンスファミリー
- どういう特徴をもったインスタンスか
CPUの最適化、メモリの最適化、価格の最適化など各特徴をもつ
インスタンス世代
- 数値が大きくなるほど世代が高い
世代が高いほど高性能
インスタンスサイズ
- CPU、メモリ、ネットワークのキャパシティによって分類される
ストレージ
- サーバーにくっつけるデータの保存場所
EBSとインスタンスストアの2種類
SSH
- 通信内容が暗号化された遠隔ログインシステム
サーバーと自分の目の前のパソコンをセキュアにつなぐサービス
SSHでログイン
- 物理的に離れている場所にあるサーバーに入って、自分のパソコンから操作できるようにする
基本的にサーバーにログインする時は通信が暗号化されているSSHを使う
SSHログイン(初回)
$ chmod 600 xxxxxxxxxxxx.pem
$ ssh -i xxxxxxxxxxxx.pem ec2-user@パブリックIPアドレス
chmod 600 xxxxxxxxxxxx.pem
→ 権限の上書き
ssh -i xxxxxxxxxxxx.pem ec2-user@パブリックIPアドレス
→ 秘密鍵を使って指定のIPアドレスへsshログイン
sshd
- ユーザーからのコマンドを受け付けるプログラム
SSH接続をSSHサーバーにリクエストするとSSHサーバー内のsshdが起動するからクライアントでサーバーを操作できるようになる仕組み
公開鍵認証
- SSHログイン時に認証を行う仕組み
- 公開鍵はサーバーが保有、秘密鍵をもっているユーザーのみログイン可能
- EC2作成時にキーペアを作成、pemファイルをダウンロード → このpemファイルが秘密鍵
ポート番号
- プログラムのアドレス
どのアプリケーションと通信するかを指定する
ウェルノウンポート番号
- 標準で決められている番号
- 0~1023までの整数値
- SSHのポート番号は22
- HTTPのポート番号は80
- HTTPSのポート番号は443番
- SMTPのポート番号は25
Linux
- サーバーのOS
yum(ヤム)
- Linuxのパッケージ管理ツール
Linuxへライブラリ(パッケージ)をインストールしたりアンインストールしたりするツール
$ sudo yum update -y
sudo
→ root権限で
yum update
→ yumの中身を最新に
-y
→ yesの略
apache
- Webサーバーソフトウェア
Nginx(エンジンエックス)
- apacheの代替のWebサーバーソフトウェア
ファイアウォール
- 通して良いデータだけ通して、それ以外は遮断する機能
セキュリティグループ
- ファイアウォールの役割を担う
デフォルトでは22番ポート(ssh接続)のみ許可されている。
つまりhttpとhttpsのポート接続を許可させる必要がある。
インバウンド
- サーバーへ入ってくる通信
アウトバウンド
- サーバーから出て行く通信
Elastic IPアドレス
- インターネット経由でアクセス可能なグローバルIPアドレスを取得し、インスタンスに付与できるサービス
インスタンスのパブリックIPアドレスを固定するために使用する。
インスタンス可動 → 無料
インスタンス不動 → 課金(Elastic IPアドレスを開放すればOK)
ドメイン
- WebサイトのURL
ドメインの構造
www
→ 第四レベルドメイン
example
→ 第三レベルドメイン
co
→ 第二レベルドメイン
jp
→ トップレベルドメイン
各レベルのドメインはユニークでないと登録できない
DNS
- IPアドレスとドメインを紐付けるシステム
ネームサーバーとフルリゾルバの2つから構成
ネームサーバー
- 紐付いたIPアドレスとドメイン名が登録されているサーバー
フルリゾルバ
- 特定のドメイン名に紐付くIPアドレスをネームサーバーに問い合わせて教えてくれるサーバー
リソースレコード
- DNSのIPアドレスとドメインの紐付け一つ一つのこと
Route53
- AWSのDNSサービス(ネームサーバーの役割)
ドメイン名に紐付いたIPアドレスにアクセスできるようになる
RDS
- AWSのフルマネージドなリレーショナルデータベースのサービス
マルチAZ(アベイラビリティゾーン)である必要がある
複数AZにサブネットが必要
マスタースレーブ方式
- マルチAZを具体化した呼び名
複数AZにDBサーバーを設置し、普段使うDBサーバーをマスター、何らかの障害でマスターがダウンした時に使用するDBサーバーをスレーブと呼び、スレーブはマスターにレプリケーションしている
レプリケーション
- 同期
フルマネージド
- AWSが運用・管理をするサービス
1日1回バックアップを自動で取得
リレーショナルデータベース
- データベース
可用性
- 障害があってもサービスが停止しないかを図る
スナップショット
- バックアップ
リストア
- スナップショットを元にDBインスタンスの作成
DBサブネットグループ
- VPC内にあるサブネットを複数指定してRDSインスタンスが起動するサブネットを指定する設定
指定したサブネットの中でRDSが作成されるようになる
DBパラメータグループ
- DBの設定値を指定するもの
RDSではDBの設定ファイルを直接編集できないため
RDS適用タイプ
- static DBパラメータ変更後はインスタンス起動後に設定反映
- dynamic DBパラメータ変更後は動的に設定反映
DBオプショングループ
- DBの機能を設定
プロトコル
- コンピュータ同士がネットワークを利用して通信するために決められた約束
HTTP、TCP、IP、SMTPなど
TCP/IPプロトコル郡
- TCP・IPを中心として、インターネットを構築する上で必要なプロトコル郡の総称
HTTP
- コンテンツの送受信に用いられる通信の約束
HTTPリクエストとHTTPレスポンスで通信が成り立つ
HTTPリクエスト構成
- リクエストライン、ヘッダー、ボディの3つから成り立つ
リクエストライン
- どのURIに対して何をしてほしいか要求
例:GET/http~/1.1
GET → HTTPメソッド
http~ → リクエスト先のURI
1.1 → そのプロトコルのver
HTTPメソッド
- コンテンツに対してどんな操作をするかを表したもの
- GET データを取得する → サイトの閲覧
- POST データの送信や作成 → 投稿や保存
URI
- URLからドメインをぬいたパス
ヘッダー
- クライアントから送信する追加情報
ボディ
- オプション機能としてあるだけでつけないことが多い
HTTPレスポンスの構成
- ステータスライン、ヘッダー、ボディの3つから成り立つ
ステータスライン
- リクエストの成否を返答
例:http~/1.1 200 OK
200 → ステータスコードの数字
OK → ステータスコードに対応した文字列
ステータスコード
- HTTP通信の結果の成否を示す値
- 200 成功
- 300番台 リダイレクト
- 400番台 クライアント側のエラー
- 500番台 サーバー側のエラー
ヘッダー
- 追加情報を返す
ボディ
- リクエストに対するコンテンツ
htmlのテキストデータが入る
TCP
- 信頼性のある通信を提供
データの到達確認や、コネクション管理を行う
届いていなければ再送信する
UDP
- 信頼性はないが高速な通信を提供
動画通信や電話通信など
パケット
- データを小分けにした1つ1つ
データはパケットで送受信される
ネットワーク層の役割
- 最終的な宛先のコンピュータにパケットを届けること
IPプロトコルの役割
- IPアドレス
- ルーティング
- パケットの分割・再構築処理
IPアドレス
ルーティング
- 最終的な宛先のコンピュータまでのパケット配送
S3
- AWSのクラウドストレージサービス
- デフォルトでアクセスを拒否(アクセス権限のあるIAMユーザーを作成する必要がある)
オンライン上のファイルの保存場所。(無料枠には含まれない)
S3の重要概念
- バケット
- オブジェクト
- キー
バケット
- オブジェクトの保存場所
オブジェクト
- データ本体のことでURLが付与される
キー
- オブジェクトのURLパス
スケールアウト
- サーバーの台数を増やすこと
バッチ
- 定期的に実行するプログラム
CloudFront
- AWSのコンテンツ配信サービス(CDNのサービス)
キャッシュ機能により高速にコンテンツを配信するサービス
CDN
- コンテンツ配信サービスの総称
オリジンサーバー
- 元になる画像を配信するサーバー(今回だとS3)
ディストリビューション
- CloudFrontのルール
CertificateManager(サーティフィケートマネージャー)
- 証明書を発行・管理するためのAWSのサービス
SSLサーバー証明書
- WEBサイトの運営者が実在するかを確認し、ブラウザとWEBサーバーで暗号化通信(https)するための電子証明書
ELB
- AWS上のロードバランサー
- ヘルスチェック機能
アプリケーションへのアクセスを複数のサーバーに自動で分散するサービス
ロードバランサー
- 各サーバーにアクセスを振り分け、負荷を分散する機能
ヘルスチェック
- 複数EC2インスタンスの中から正常な(稼働している)インスタンスにのみ振り分ける機能
冗長化
- 稼働率を向上させる手段で、システムの構成要素を多重化すること
サーバーを複数台設置しアクセスを分散することで冗長化を行う
稼働率
- 障害発生間隔
- 平均復旧時間
稼働率を向上させる = 障害発生間隔を長くし、平均復旧時間を短くすること
プロビジョニング
- アクセス数を予測し、適切にリソースを準備することで負荷を均一にさばくこと
負荷をさばく方法
- スケールアップ 個々の要素の性能を向上
- スケールアウト 個々の要素の数を増やす
ECS
- AWSのコンテナオーケストレーションサービス
ロードバランサーやオートスケーリングと組み合わさったサービス
ECSを動かすためのEC2インスタンスも自動で追加・削除される
コンテナオーケストレーション
- コンテナを管理する技術
コンテナ化されたアプリケーションのデプロイやスケーリング、管理などができる
マイクロサービス
- コンテナと相性の良いソフトウェアの設計思想
タスク
- タスク定義を元に作成されるコンテナ
タスク定義
- コンテナ全般に渡る設定
Dockerfileと似ている
クラスター
- 複数のサーバーを統合して処理を行うこと
ECR
- AWSが提供するDockerコンテナレジストリ(AWS版Dockerhub)
Dockerコンテナの保管(アップデート)場所
コンテナレジストリ
- イメージの保存、管理
terraform
- AWSやHeroku、GCPなどの構成管理を行うソフトウェア
ファイル構成は .thファイルに記述する
GCP
- Google Cloud Platform
Googleがクラウド上で提供するサービス群の総称
Gmail、Youtube、Google Mapなど
AWS CLI
- AWSサービスを管理するための統合ツール
ターミナルからAWSの各サービスの制御ができるようになる
その他
メモ
- apacheの参照場所
ブラウザからapacheへアクセスがくると、/var/www/html/以下にあるファイルをレスポンスとして返す
- 著作権関係ない画像の検索
Google → ツールクリック → ライセンス → 改変後の再使用が許可された画像
- サーバー構成のベストプラクティス
Webサーバーの冗長化と負荷分散
DBサーバーの冗長化
- Webサーバー → N+1(Nは普段使用しているWebサーバーの数)
- DBサーバー → マスタースレーブ方式
理解が不十分な箇所
- IPアドレス
- ポート番号
- Route53の概念
デプロイ流れ
- IAM作成(権限、操作ログ設定)
- VPC構築
- VPCを作成する
- サブネットを作成する
- ルーティングを設定して、パブリックサブネットをインターネットにつなげる
- VPCにサーバーを配置
- Webサーバーソフトウェアをインストール
- SSHでサーバーにログイン
- apacheをインストール
- ファイアウォールの設定
- Elastic IPアドレスでIPアドレスを固定
- ドメインの取得
- お名前.comなど
- ドメインのネームサーバーをRoute53に変更
- Route53でホストゾーンを作成
- ネームサーバーをRoute53に変更
- ドメインに紐付くIPアドレスを登録
- Route53でレコードセットを作成
- プライベートサブネットの作成(RDS配置のため)
- RDS作成準備
- セキュリティグループの作成(EC2)
- DBサブネットグループの作成
- DBパラメータグループの作成
- DBオプショングループの作成
- RDS作成
- DBエンジン
- 本番環境
- DB詳細の指定
- 詳細設定の設定
- アプリケーションをサーバーにインストール
- S3設置
- バケット作成
- 権限を持ったIAMユーザーを作成(一般的ではない)
- アプリケーションの設定