VPC
VPCの概要
Virtual Private Cloud(VPC) VPCはAWSクラウド内に論理的に分離されたセクションを作り、ユーザーが定義した仮想ネットワークを構築するサービス
・任意のIPアドレス範囲の選択して仮想ネットワークを構築 ・サブネット作成、ルートテーブルやネットワークゲートウェイの設定など仮想ネットワーキング環境を完全に制御可能 ・必要に応じてクラウド内外のネットワーク同士を接続することも可能 ・複数の接続オプションが利用可能
VPCとの接続
Direct Conect
お客様のデータセンターやオフィスを専用線などを介してAWSへプライベートに接続するサービス
◾️メリット ・安価なアウトバウンドトラフィック料金 ・ネットワーク信頼性の向上 ・ネットワーク帯域幅の向上
Direct Connectロケーションに物理的に自社オンプレ環境を接続することでAWS環境との専用線接続を実現する
Direct Connect gateway
同一アカウントに所属する複数リージョンの複数AZから複数リージョンの複数VPCに接続
VPNとDirect Connect
VPNの方が安く素早く利用できるが、信頼性や品質は専用線が勝る
VPCエンドポイント
グローバルIPをもつAWSサービスに対して、VPCないから直接アクセスするための出口
Gateway型
サブネットに特殊なルーティングを設定し、VPC内部から直接外のサービスと通信する ◾️特徴 ・アクセス制御:エンドポリシーを設定 ・料金:無料 ・冗長性:AWS側が対応
PrivateLink型
サブネットにエンドポイント用のプライベートIPアドレスを生成し、DNSが名前解決でルーティングする ◾️特徴 ・アクセス制御:セキュリティグループを設定 ・料金:有料 ・冗長性:マルチAZ設計
NATゲートウェイ
プライベートサブネットのリソースがインターネットまたはAWSクラウドと通信が可能になる ◾️特徴 ・AWSによるマネージドNATサービス ・EIPの割り当て可能 ・最大10Gbpsの高パフォーマンス ・ビルトインで冗長化されている高可用性 ・アベイラビリティーゾーン毎に設置する
VPC Flow logs
ネットワークトラフィックを取得しCloudWatchでモニタリングできるようにする機能 ・ネットワークインターフェースを送信元 / 送信先とするトラフィックが対象 ・セキュリティグループとネットワークACLのルールでaccepted / rejectされたトラフィックログを取得 ・キャプチャウィンドウと言われる時間枠(約10分間)で収集、プロセッシング、保存する ・RDS、Redshift、ElasticCache、WorkSpacesのネットワークインタフェーストラフィックも取得可能 ・追加料金はなし
VPCの設定上限
・リージョンあたりのVPCの上限数 5 ・VPC当たりのサブネットの上限数 200 ・AWSアカウント当たりの1リージョン内のElasticIP数 5 ・ルートテーブル当たりのルート上限数 100 ・VPC当たりのセキュリティグループの上限数 500 ・セキュリティグループ当たりのルールの上限数 50
VPCを分割するケース
・アプリケーションによる分割 ・監査のスコープによる分割 ・リスクレベルによる分割 ・本番/ 検証 / 開発フェーズによる分割 ・部署による分割 共通サービスの切り出し
VPC Peering
・異なるAWSアカウント間のVPC間をピア接続可能 ・一部リージョン間の異なるVPC間のピア接続も可能 ・単一障害点や帯域幅のボトルネックは存在しない
EC2
EC2の概要
数分で利用可能となる従量課金で利用可能な仮想サーバー
・起動、ノード追加、削除、マシンスペック変更が数分で可能 ・汎用的なIntelアーキテクチャを採用 ・管理者権限で利用可能 ・WindowsやLinuxなどのほとんどのOSをサポート ・OSまでは提供されているタイプを選択することで自動設定され、OSより上のレイヤーを自由に利用可能 ・独自のAmazon Machine ImageにOS設定を作成し、保存して再利用が可能
EC2とは
利用する単位をインスタンスと呼び、任意のAZにインスタンスを立ち上げてサーバーとして利用する
①利用するAMIイメージ(OSセッティング)を選択 ②インスタンスタイプを選択 ③ストレージを選択 ④セキュリティグループを選択 ⑤SSHキーペアを設定
AMIイメージ
OSセッティング方式を選択すること
リサーブドインスタンス
利用期間を長期指定して利用する形式で、オンデマンドに比較して最大75%割安になる
スポットインスタンス
予備のコンピューティング容量を、オンデマンドインスタンスに比べて割引(最大90%引き)で利用できるEC2インスタンス
・予備用を入札式で利用するためとても安い(最大90%引き) ・起動に通常よりも少し時間がかかる ・予備用のため途中で削除される可能性がある →一時的な拡張などの用途で利用
Saving Plan
1〜3年の期間に一定の使用量を守ることによりAmazon EC2コストを削減する
・リザーブドインスタンスと同様に、1年または3年の期間に特定の量の処理能力(USD/時間で測定)を使用する契約を結ぶことで適用される割引契約 ・AWSコンピューティング使用料金を最大72%節約できる ・Amazon EC2、AWS Fargate、AWS Lambdaに適用可能
キャパシティーの予約
特定のアベイラビリティーゾーンのEC2インスタンスに対して任意の期間キャパシティーを予約する
物理対応可能なインスタンス
物理サーバーにインスタンスを起動して制御が可能なタイプのインスタンス
・ハードウェア専有インスタンス 専用HWのVPCで実行されるEC2インスタンス ホストHWにレベルで、他のAWSアカウントに属するインスタンスから物理的に分離する 同じAWSアカウントのインスタンスとはHWを共有する可能性がある
・Dedicated Host EC2インスタンス容量を完全に利用できる物理サーバー
・Bare Metal アプリケーションが基盤となるサーバーのプロセッサーとメモリーに直接アクセス可能なインスタンス AWSの各種サービスとの連携が可能でOSが直接下層のハードウェアにアクセス権限
ストレージ
EC2で直接利用するストレージは不可分なインスタンスストアと自分で設定するEBSの2つ
インスタンスストア ・ホストコンピュータに内蔵されたディスクでEC2と不可分のブロックレベルの物理ストレージ ・EC2の一時的なデータが保持され、EC2の停止、終了と共にクリアされる
Elastic Block Store(EBS) ・ネットワークで接続されたブロックレベルのストレージでEC2とは独立して管理される ・EC2をTerminateしてもEBSは保持可能で、SnapshotをS3に保持可能 ・別途EBS料金が必要
セキュリティグループ
インスタンスへのトラフィックのアクセス可否を設定するファイアーウォール機能を提供
キーペア
キーペアを利用して自身がダウンロードした秘密鍵とマッチした公開鍵を有するインスタンスにアクセスする
EC2のバックアップ
EC2インスタンスは定期的にバックアップすることが重要
・定期的にバックアップを取る ・定期的にリカバリプロセスを確認する ・複数のAZに重要なアプリケーションをデプロイすること ・ファイルオーバー対応を準備すること ・イベントをモニタリングして対応できるようにすること ・インスタンス起動時に動的IPアドレス処理の設定を行うこと
EBSの概要
EC2にアタッチされるブロックレベルのストレージサービス
◾️基本 ・OSやアプリケーション、データの置き場所など様々な用途で利用される ・実態はネットワーク接続型ストレージ ・99.999%の可用性 ・サイズは1GB〜16TB ・サイズと利用期間で課金
◾️特徴 ・ボリュームデータはAZ内で複数のHWにデフォルトでレプリケートされており、冗長化不要 ・セキュリティグループによる通信制御対象外であり、全ポートを閉じてもEBSは利用可能 ・データは永続的に保存 ・EC2インスタンスは他のAZ内のEBSにはアクセスできない ・EC2インスタンスに複数のEBSを接続することはできるが、EBSを複数のインスタンスで共有することはできない ・同じAZ内のインスタンスに付け替えできる
Snapshot
EBSはスナップショットを利用してバックアップを取得する
◾️特徴 ・Snapshotでバックアップ ・SnapshotからのEBSを復元する際は別AZにも可能 ・SnapshotはS3に保存される ・Snapshotの2世代目以降は増分データを保存する増分バックアップとなる(1世代目を削除しても復元は可能) ・Snapshot作成時にブロックレベルで圧縮して保管するため、圧縮後の容量に対して課金が行われる
スナップショットはリージョン間をまたいで利用可能 Snapshot作成時はデータ整合性を保つため静止点の設定を推奨
◾️Snapshot作成時はデータ整合性を保つため静止点の設定を推奨 ・ソフトウェアの機能を利用 ・ファイルシステムの機能を利用 ・バックアップソフトウェアの機能を利用 ・アプリケーションの停止 ・ファイルシステムのアンマウントなど
◾️保存期間や世代数は無制限 ◾️世代管理が必要な場合はAWS CLIやAPI等で自動化する
スナップショットとAMI Amazon Machine ImageはOS設定のイメージであり、Snapshotはストレージのバックアップとなる
◾️AMI ・ECインスタンスのOS設定などをイメージとして保持して新規インスタンス設定に転用するもの
◾️Snapshot ・ストレージ / EBSのその時点の断面のバックアップとして保持するもの ・ストレージの復元や複製に利用
EBSのボリュームタイプ
ユースケースに応じて性能やコストが異なる5種類のボリュームタイプから選択
◾️SSD ・汎用SSD →仮想デスクトップ →低レイテンシーを要求するアプリ →小〜中規模のデータベース →開発環境
・プロビジョンドIOPS →高いI/O性能に依存するNoSQLやアプリ →10,000IOPSや160MB / s超のワークロード →大規模DB
◾️HDD ・スループット最適化HDD →ビックデータ処理 →DWH →大規模なETL処理やログ分析
・コールドHDD →ログデータなどアクセス頻度が低いデータ →バックアップやアーカイブ
◾️マグネティック(Magnetic) →旧世代のボリュームで基本利用しない →データへのアクセス頻度が低いロークロード
インスタンスストア
EC2が利用するのはインスタンスストアとEBSの2タイプのストレージ
◾️インスタンスストア ・ホストコンピュータに内蔵されたディスクでEC2と不可分のブロックレベルの物理ストレージ ・EC2の一時的なデータが保持され、EC2の停止、終了とともにデータがクリアされる ・無料
◾️Elastic Block Store(EBS) ・ネットワークで接続されたブロックレベルのストレージでEC2とは独立管理 ・EC2で終了してもEBSデータは保持可能 ・SnapshotをS3に保持可能 ・別途EBS料金が必要
IAM
AWSの仕組み
・アンマネージド型 スケーリング / 耐障害性 / 可用性を利用者側で設定し、管理する必要がある メリット:設置が柔軟に可能 デメリット:管理が面倒
・マネージド型 スケーリング / 耐障害性 / 可用性がサービスに組み込まれており、AWS側で管理される メリット:管理が楽 デメリット;設定が限定的
IAM
概要
セキュリティに対してAWSとユーザーとで責任分界して対応する(責任共有モデル)
ユーザー側の責任範囲 ・IAMによるアカウント管理 ・セキュリティグループの設定 ・アプリケーションのロールベースのアクセス設定 ・ネットワーク / インスタンスオペレーションシステム(バッチ)などの設定 ・OS / ホストベースのファイアーウォール設置
IAMとは
AWS Identity and Access Management(IAM)は安全にAWS操作を実施するための認証・認可の仕組み →アクセス権限をどう管理するか・どう与えるかなどのアクセス権限全般の管理をする認証などの仕組み
・AWS利用者認証の実施 ・アクセスポリシーの設定 ・ユーザー個人またはグループ設定
ユーザー
ルートユーザー
最初に作成されるのがルートユーザー。 普段はあまり使わない。
・AWSルートアカウントのメールアドレスやパスワード変更 ・IMAユーザーの課金情報へのアクセスに関するactivate / deactivate ・他のAWSアカウントへのRoute53のドメイン登録の移行 ・CloudFrontのキーペア作成 ・AWSサービス(サポート等)のキャンセル ・AWSアカウントの停止 ・コンソリデイテッドビリングの設定 ・脆弱性診断フォームの提出 ・逆引きDNS申請
IAMユーザー
IAMポリシー内でAWSサービスを利用できるユーザー。 基本操作はIAMユーザーで実施することになる。
設定上限 1アカウントで5000ユーザーまで作成可能
設計内容 ユーザー名 パス(オプション) ユーザーにオプションとして設定できる情報であり、パスを元にユーザーの検索が可能となる。 組織階層やプロジェクトなどを設定できる。
所属グループ 10のグループまで設定可能。
IAMグループ
設定上限 1アカウントで300グループまで作成可能
設計内容 グループ名
パス(オプション) 組織階層などをセット
パーミッション グループに設定したパーミッションはIAMユーザーに付与したパーミッションと同時に評価する。
IAMポリシー
IAMポリシーを作成してユーザーなどへのアクセス権限を付与(JSON形式)
・管理ポリシー AWS管理ポリシー AWSが作成および管理する管理ポリシー
カスタマー管理ポリシー AWSアカウントで作成、管理する管理ポリシー。 同じポリシーを複数のIAMエンティティにアタッチできる。
・インラインポリシー 自身で作成および管理するポリシー 1つのプリンシパルエンティティ(ユーザー、グループ、またはロール)に埋め込まれた固有ポリシーで、プリンシパルエンティティにアタッチすることができる。
IAM設計
AWSを利用するユーザーの役割やアクセス権限を自社の組織構造と合わせて設計することが重要。
ベストプラクティス
1、アカウント設定などの重要な場合を除いて、ルートユーザーを利用しない 2、ルートユーザーなどの特権ユーザーに対して、MFAを有効化する 3、利用者ごとにIAMユーザーを作成する 4、組織利用の場合は、役割ごとのIAMグループを作成してグループで管理するのを基本とする 5、最小限の権限設定と不要な認証情報は削除を心がける 6、ユーザーのために強度の高いパスワードポリシーを設定する 7、EC2インスタンスで作動するアプリケーションなどプログラムから利用する場合はなるべくロールを使用する 8、モバイルやアプリケーションも含め、一時利用にはSTSなどで最小限の利用許可を与える 9、AWSアカウントのアクティビティを常に監視する
AWS Organizations
IAMのアクセス管理を大きな組織でも楽に実施できるようにするマネージド型サービス
・複数アカウントの一元管理 ・新規アカウント作成の自動化 ・一括請求
組織という単位を構成して、マスターアカウントがメンバーアカウントを管理するという仕組み
機能セットの選択
支払い一括代行とアカウントの全体管理 ・Consolidated Billing Only →支払一括代行のみを実施する場合に選択 ・All Feature →支払一括代行も含めて、企業内の複数アカウントを統制したい場合に選択
マスターアカウントの設定
AWSアカウントの中からマスターアカウントを選定する
Go 構文
Hello world
package main import "fmt" // 最初に呼び出される func init() { fmt.Println("Init!") } func bazz() { fmt.Println("Bazz") } // 2番目に呼び出される func main() { // bazz() fmt.Println("Hello world!", "TEST TEST") }
パッケージ(import)
package main import ( "fmt" "os/user" "time" ) func main() { fmt.Println("Hello world!", time.Now()) fmt.Println(user.Current()) }
変数宣言
var
package main import "fmt" var ( i int = 1 f64 float64 = 1.2 s string = "test" t, f bool = true, false ) func foo() { // :=は関数の中でしか使用できない xi := 1 xi = 2 xf64 := 1.2 var xf32 float32 = 1.2 xs := "test" xt, xf := true, false fmt.Println(xi, xf64, xf32, xs, xt, xf) // Printfの"%T"で型を調べて出力することができる fmt.Printf("%T\n", xf32) fmt.Printf("%T\n", xi) } func main() { fmt.Println(i, f64, s, t, f) foo() }
for文
package main import "fmt" func main() { for i := 0; i < 10; i++ { if i == 3 { fmt.Println("continue") continue } if i > 5 { fmt.Println("break") break } fmt.Println(i) } sum := 1 for sum < 10 { sum += sum fmt.Println(sum) } fmt.Println(sum) }
defere
package main import "fmt" func foo() { defer fmt.Println("world foo") fmt.Println("hello foo") } func main() { /* foo() defer fmt.Println("world") fmt.Println("hello") */ fmt.Println("run") defer fmt.Println(1) defer fmt.Println(2) defer fmt.Println(3) fmt.Println("success") }
run success 3 2 1
スライス
func main() { n := []int{1, 2, 3, 4, 5, 6} fmt.Println(n) // [1 2 3 4 5 6] fmt.Println(n[2]) // 3 fmt.Println(n[2:4]) // [3 4] fmt.Println(n[:2]) // [1 2] fmt.Println(n[2:]) // [3 4 5 6] fmt.Println(n[:]) // [1 2 3 4 5 6] n[2] = 100 fmt.Println(n) // [ 1 2 100 4 5 6] var board = [][]int{ []int{0, 1, 2}, []int{3, 4, 5}, []int{6, 7, 8}, } fmt.Println(board) // [[0 1 2] [3 4 5] [6 7 8]] n = append(n, 100, 200, 300, 400) fmt.Println(n) // [1 2 100 4 5 6 100 200 300 400] }
make
func main() { // makeで初期化 make(型type, 長さlen, 容量cap) n := make([]int, 3, 5) fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n) // len=3 cap=5 value=[0 0 0] n = append(n, 0, 0) fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n) // len=5 cap=5 value=[0 0 0 0 0] // スライスのため追加できる n = append(n, 1, 2, 3, 4, 5) fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n) // len=10 cap=10 value=[0 0 0 0 0 1 2 3 4 5] // 引数を一つにすると長さも容量も同じになる a := make([]int, 3) fmt.Printf("len=%d cap=%d value=%v\n", len(a), cap(a), a) // len=3 cap=3 value=[0 0 0] // 0のスライスをメモリに確保する b := make([]int, 0) // メモリに確保しない var c []int fmt.Printf("len=%d cap=%d value=%v\n", len(b), cap(b), b) // len=0 cap=0 value=[] fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c) // len=0 cap=0 value=[] c = make([]int, 5) for i := 0; i < 5; i++ { c = append(c, i) fmt.Println(c) // [0] [0 0] [0 0 0] [0 0 0 0] [0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0 1] [0 0 0 0 0 0 1 2] [0 0 0 0 0 0 1 2 3] [0 0 0 0 0 0 1 2 3 4] } fmt.Println(c) // [0 0 0 0 0 0 1 2 3 4] var d []int d = make([]int, 0, 5) for i := 0; i < 5; i++ { d = append(d, i) fmt.Println(d) // [0] [0 1] [0 1 2] [0 1 2 3] [0 1 2 3 4] } fmt.Println(d) // [0 1 2 3 4] }
map
func main() { m := map[string]int{"apple": 100, "banana": 200} fmt.Println(m) // map[apple:100 banana:200] fmt.Println(m["apple"]) // 100 m["banana"] = 300 fmt.Println(m) // map[apple:100 banana:300] // 新しい要素を追加 m["new"] = 500 fmt.Println(m) // map[apple:100 banana:300 new:500] // 存在しない値を取り出すと fmt.Println(m["nothing"]) // 0 // 値の確認 v, ok := m["apple"] fmt.Println(v, ok) // 100 true // 存在しない値を確認すると v2, ok2 := m["nothing"] fmt.Println(v2, ok2) // 0 false // mapは返り値を無視することができる v := m["apple"] fmt.Println(v) // 100 true // keyがstring、valueがintのmapを初期化 // メモリ上に空のマップを作成 m2 := make(map[string]int) m2["pc"] = 5000 fmt.Println(m2) // map[pc:5000] // メモリ上に入れるマップがないためpanicになる // マップを初期化していない状態(nil)で値をセットするとpanicになる var m3 map[string]int m3["pc"] = 5000 fmt.Println(m3) // panic: assignment to entry in nil map // varで宣言した場合はnilになる(スライスでもマップの場合でも) var s []int if s == nil { fmt.Println("Nil") // Nil } }
関数
func add(x, y int) (int, int) { return x + y, x - y } func cal(price, item int) (result int) { result = price * item return } func main() { r1, r2 := add(10, 20) fmt.Println(r1, r2) // 30 -10 r3 := cal(100, 2) fmt.Println(r3) // 200 f := func(x int) { fmt.Println("inner func", 1) } f(1) // inner func 1 // 省略記法 func(x int) { fmt.Println("inner func", 1) }(1) // inner func 1 }
ポインタ
package main import "fmt" func main() { var p *int fmt.Println(p == nil) // true 定義のみを行ったポインタ型の変数の初期値はnilになり、参照型と同じ様に振る舞う }
func Double(i int) { i = i * 2 } func main() { var n int = 100 Double(n) fmt.Println(n) // 100 }
0xc000b4008番地 100 変数n(実引数) ↓値渡しでは変数の値をコピーする 0x999b11111番地 100 変数i(仮引数) ↓この後Double関数が実行され、変数iの値が変更される 0x999b11111番地 200 変数i ↓値渡しのため変数nには反映されない(仮引数を変更しても、実引数には反映されない) fmt.Println(n) // 100
package main import "fmt" func main() { var p *int fmt.Println(p == nil) // true 定義のみを行ったポインタ型の変数の初期値はnilになり、参照型と同じ様に振る舞う }
json
import "encoding/json"
encoding/jsonパッケージはRFC4627に準拠したJSONエンコーディングを処理するエンコーダーとデコーダーの機能を提供
構造体型からJSONテキストへの変換
関数json.Marshalは、任意の構造体型からJSONテキストへのエンコード処理を実行する 内部的にreflectパッケージのリフレクション機能が使用されており、特別な設定をせずとも構造体型に定義されたフィールド名と値の組み合わせから自動的にJSONテキストを生成する
json.Marshalの戻り値は[]byte型のため、テキストとして確認する場合はstring(bs)のように文字列へ変換する必要がある また、出力されるJSONテキストのキーを構造体フィールド名ではなく、任意の名前にマッピングしたい場合は構造体の「タグ」を利用できる
gorilla/mux
func getArticle(w http.ResponseWriter, r *http.Request) { // Vars関数でパラメータの値を取得 // get http://localhost:8000/articles/1 -> 1を取得 params := mux.Vars(r) fmt.Println(params) // map[id:1] // reflect 動的に型を扱いたい場合に便利なパッケージ // typeof 型確認 fmt.Println(reflect.TypeOf(params["id"])) // string // Convert Type from String -> Int // Not handling err -> _ i, _ := strconv.Atoi(params["id"]) // URLに指定したIDの情報を取得 for _, article := range articles { if article.ID == i { json.NewEncoder(w).Encode(&article) } } }
Linuxディレクトリ構造
/bin OSが正常に動作するための実行ファイル(コマンドを実行するためのファイルが入っている、ls・cpコマンドなど)
/boot システムの起動に必要なファイル(あまりいじることはないはず)
/dev ハードウェア機器を表すファイル
/etc 設定ファイル
/home ユーザーのホームディレクトリ
/lib OSに必要なライブラリファイル
/media 外部の記憶媒体をマウント(システムが自動でマウントする場合)
/mnt 同上(ユーザーが自動でマウントする場合)
/opt 追加のアプリケーションがインストール(第三者のサードパーティアプリをインストールする場所、Chromeなど)
/proc OSのシステムをコントロール
/root rootアカウントのホームディレクトリ
/sbin ルートユーザーのみ実行できるプログラム
/sys OSの現在の状況に関する情報
/usr 全ユーザーが共通して利用するプログラムのデータ
/var システム運用中に生成、後から削除されるデータ
$ touch
(ファイル作成)
$ chmod u+rw-x,go+r-wx chownfile
(ファイルモードを「rw-r--r--」に変更)
$ ls -l chownfile
-rw-r--r-- 1 penguin linuc chownfile
$ chmod g+w chownfile
(グループにw(書き込み権限)を追加)
$ ls -l chownfile
-rw-rw-r-- 1 penguin linuc
$ chmod u-r,o+w chownfile
(ユーザーからr(読み込み権限)を削除、その他にw(書き込み権限)を追加)
$ ls -l chownfile
--w-rw-rw- 1 penguin linuc
Linuxディレクトリ構造
/bin OSが正常に動作するための実行ファイル(コマンドを実行するためのファイルが入っている、ls・cpコマンドなど)
/boot システムの起動に必要なファイル(あまりいじることはないはず)
/dev ハードウェア機器を表すファイル
/etc 設定ファイル
/home ユーザーのホームディレクトリ
/lib OSに必要なライブラリファイル
/media 外部の記憶媒体をマウント(システムが自動でマウントする場合)
/mnt 同上(ユーザーが自動でマウントする場合)
/opt 追加のアプリケーションがインストール(第三者のサードパーティアプリをインストールする場所、Chromeなど)
/proc OSのシステムをコントロール
/root rootアカウントのホームディレクトリ
/sbin ルートユーザーのみ実行できるプログラム
/sys OSの現在の状況に関する情報
/usr 全ユーザーが共通して利用するプログラムのデータ
/var システム運用中に生成、後から削除されるデータ
AWSコアサービス5
コンピューティング
アプリケーションを構築する際にサーバーなどのコンピューティングを起動・実行する関連サービス。
→AWSを利用して仮想サーバーを立ち上げるサービス
ELB / AutoScaling / セキュリティグループも必須
・AWS Lambda
→サーバレスでプログラミングコード処理を実行するサービス
・Amazon Lightsail
→仮想サーバー、ストレージ、データベース、およびネットワーキングを
予測可能な低価格で提供
・Amazon Elastic Container Service(ECS)
→Dockerコンテナをサポートする拡張性とパフォーマンスに優れた
コンテナオーケストレーションサービス
Lambda
インフラを気にすることなくアプリケーションコードを実行できるデータ処理サービス。
クライアントからのアクセスに対してデータを登録する単純な処理をEC2インスタンスに実行させていれば、
Lambdaに置き換えてサーバレスに実行処理することが可能。
Lambdaの特徴
サーバレスによりEC2インスタンスの代わりコードを実行することで効率的なアーキテクチャを実現する。
・AWSサービスと連携させることで簡単にイベントドリブンな
アプリケーションを実装可能
・Node.js / Javaで書かれたコードを実行
・100ミリ秒単位でコード実行時間に対しての課金であり
コスト効率が非常に高い
・オートスケール
Lambdaの仕組み
利用方法もシンプルでWEBアプリやモバイルアプリから簡単に利用可能。
Lambdaファンクションを用意する(コーティング)
↓
アプリからLambdaを呼び出す
Amazon Lightsail
秒単位で簡易にWEBサーバー構成を実現することができるサーバーフルセットを提供するVPSサービス。
◾️Lightsail
・簡易的に小規模のアプリケーションやWEBサイトを構築するために
利用するVPSを立ち上げる
・サーバー / ストレージ / ネットワーク / スナップショット 、
いくつもの機能が予め揃ったオールインワンで利用することが可能
◾️EC2
・仮想サーバーを立ち上げて、クラウド上で利用するサービス
小規模なWEBサーバーとしても大規模システム用のサーバーとしても
利用可能
・ネットワーク、ストレージ、DNSなどは他のAWSサービスを構築して
アーキテクチャを構成することが必要となる
Amazon Lightsailのユースケース
小規模WEBサイトやアプリケーションを構築する際や、スモールスタートする際はLightsailが利用可能。
◾️Lightsail
・シンプルなWEBサイトを構築する
・小規模なアプリケーションを構築する
・テスト、開発環境で一時的に利用する
・社内ツールや小規模なビジネス用ソフトウェアを起動する際に利用する
・スモールスタートでアプリ開発を実施する際に利用する
◾️EC2
・小規模アプリケーションを構築する
・複数台 / 複数レイヤーに及ぶ多層アーキテクチャを構成する際に利用する
・複数AZにAutoScalingする冗長性の高い構成を実現する
・データ処理やビッグデータ分析用のインスタンスとして処理を実行する
・厳密な運用監視によって大規模システムを構築する際に利用する
性能に応じた7つの利用プランから選択して利用可能。
オールインワンで値段が設定されており、イメージがつきやすい。
コンテナ
コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離する仮想化方式。
Docker
Dockerはコンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム。
・コンテナはホストマシンのカーネルを利用し、
プロセスやユーザなどを隔離する
・Dockerはミドルウェアのインストールや各種環境設定をコード化して管理
↓
1、コード化されたファイルを共有するため誰でも同じ環境構築が容易に可能
2、作成した環境を配布共有が容易
3、環境の即時構築、削除が容易なため、CI / CDによる開発ができる
Amazonのコンテナサービス
AWSでDockerを実現するための関連サービスはECR / ECS / EKSとFargateの4タイプ。
◾️レジストリ
コンテナエンジンに実行されるイメージが保管される場所
Amazon ECR
◾️コントロールプレーン
コンテナを管理するサービス
Amazon ECS
Amazon EKS
◾️データプレーン
コンテナが実行される環境
AWS Fargate
ユースケース分け
→仮想サーバーを単体で利用してアプリケーションを1から
構成することや、大規模インフラを構成する場合に利用する
◾️AWS Lambda
→単発のジョブなどのシステム処理をサーバレスで
コスト最適に実行する場合はEC2ではなくLambda関数を利用する
◾️Amazon Lightsail
→安価にシンプルなWEBサイトやアプリを利用したい場合、EC2+EBS+Route53などを構成するよりもLightsail
◾️Amazon Elastic Container Service(ECS)
→環境構築を自動化しつつ、CI / CDを実現した場合はDockerを利用する
ストレージ
AWSにおいてデータを保存する際に利用する多様なストレージ。
◾️Amazon Simple Storage Service(S3)
→スケーラビリティ、データ可用性、セキュリティ、および
パフォーマンスを提供するオブジェクトストレージサービス
◾️Amazon Elastic Block Store(EBS)
→EC2にアタッチして利用する専用のブロックストレージ
◾️Amazon Elastic File System(EFS)
→AWSクラウドサービスおよびオンプレミスリソースで使用するための
シンプルでスケーラブル、かつ伸縮自在な完全マネージド型の
◾️Amazon S3 Glacier
→安全性と耐久性に優れ、極めて低コストの
データのアーカイブや長期バックアップに使用する
EFS(Elastic File System)
複数のEC2インスタンスからアクセス可能な共有ストレージ。
◾️S3
・オブジェクトストレージでリージョンに設置
・HTTPによるAPI経由でアクセス
・大容量のデータを長期保守するためのもの
◾️EBS
・ブロックストレージでAZに設置
・EC2インスタンスのディスクボリュームとして利用するが、
物理的ではなくネットワーク経由で利用
・複数のEC2インスタンスにアタッチできない
◾️EFS
・NASに似たファイルストレージ
・ファイルシステムとして利用し、複数のEC2インスタンスでの
共有アクセスが可能
・S3と異なりインターネットから直接アクセスできない
その特徴はシンプルでスケーラブルで柔軟に利用できるファイルストレージであること。
◾️シンプル
・フルマネージド型サービス
・既存のNFSv4などのツールや標準プロトコル / APIでアクセス可能
◾️スケーラブル
・ペタバイトまでスケーラブルにデータを蓄積
・スループット / IOPS性能は自動的にスケーリングし、
低レイテンシーを維持
◾️柔軟性
・ファイルの減少に合わせて自動て拡張、縮小
・事前に容量を設定する必要なし
・使った分だけの従量課金
Amazon S3 Glacier
バックアップなど中長期保存用のS3よりも安価なストレージ。
・S3と同じ耐久性で値段が安い
・データ取得などの迅速性がない
Glacierの特徴
・Amazon S3 Glacierでは、データはアーカイブに保存される
・1つのアーカイブの最大サイズは40TB
・保存可能なアーカイブ数とデータ量に制限なし
・各アーカイブには作成時に一意のアーカイブIDが割り当てられ、
作成後はアーカイブを更新できない
・アーカイブを保存するためのコンテナとしてボールトを使用
(1つのAWSアカウントでは、最大1,000個のボールとを使用)
・Amazon S3のライフサイクルルールと連携させることにより、
全体的なストレージコストを削減
・Advanced Encryption Standard(AES)256ビット対称鍵を使用して
デフォルトで自動的に暗号化
・S3と違って直接データをアップロード、取得という処理ができないため、
S3ライフサイクル管理からか、プログラム処理による
アップロード / ダウンロードが必要
・Glacierの最低保持期間は90日
Glacierのデータ取出タイプ
Glacierのデータ取得タイプの設定に応じてデータ取得時間と取得時の料金が変わる。
◾️迅速
・迅速取り出しでは、アーカイブのサブセットが迅速に
必要になった場合にデータに素早くアクセスするモード
通常1〜5分以内で使用可能になる
◾️プロビジョニングキャパシティ
・プロビジョンドキャパシティーは、迅速取り出しの取得容量を必要な時に利用できることを保証する仕組み
◾️標準
・標準取り出しでは、数時間以内に全てのアーカイブに
アクセスできるデフォルト設定
通常、標準取り出しは3〜5時間で完了
◾️大容量
・大容量取り出しは、もっとも安価な取り出しオプションであり、
大量のデータ(ペタバイドのデータを含む)を
1日以内に低コストで取得できる
通常、大容量取り出しは5〜12時間で完了
Glacier Deep Archive
Glacierよりも値段が安くデータ保存が可能だが、データ取得はさらに遅くなる中長期保存用ストレージタイプ。
・Glacierよりさらに値段が安い
・Glacierよりさらにデータ取得が遅い
・基本的なデータモデル、管理はGlacierと同じ
・1GBあたりの月額料金0.00099USDから利用可能でAWSの最低価格
・データは3つ以上のAWSアベイラビリティゾーンにまたがって保存され、
S3と同様に99.999999999%の耐久性を実現
・標準取り出しで、データは12時間以内に取り出すことが可能
・大量取り出しで48時間以内にデータを取り出す
大容量取り出しをすることで取得コストを低減できる
◾️Amazon Simple Storage Service(S3)
→インターネットアクセス / EC2インスタンス間で共有 / 大容量データを
保存したいケースは基本はS3を利用する
◾️Amazon Elastic Block Store(EBS)
→EC2インスタンスにアタッチして、アプリケーションを構成するための
ボリュームディスクとして利用する場合はEBSを利用
◾️Amazon Elastic File System(EFS)
→インターネットアクセスは不可で、EC2インスタンス間での
データ共有をする場合はEFSを共有ストレージとして利用
◾️Amazon S3 Glacier
→データバックアップなど中長期にアクセス頻度が低いデータを
保存する場合にコスト最適を目指してGlacierを選択する
ネットワーキングとコンテンツ配信
ネットワークやコンテンツ配信・AWS環境への接続設定に利用するサービス。
→IPアドレス範囲の選択、サブネットの作成、ルートテーブルや
ネットワークゲートウェイの設定など、仮想ネットワーキング環境を
構築するサービス
→低レイテンシーの高速転送により世界中の視聴者に安全に配信する高速コンテンツ配信ネットワーク(CDN)サービス
◾️Amazon Route53
→DNSサーバーの機能を提供し、ドメイン変換とルーティングを実施するサービス
◾️AWS Direct Connect
→AWSとデータセンター、オフィス、またはコロケーション環境との間にプライベート接続を確立する専用線サービス
→リアルタイム双方向通信アプリケーションを実現するRESTfulAPI
およびWebSocketAPIを作成、管理する
→オンプレミスから実質無制限のクラウドストレージへのアクセスを
提供するハイブリッドクラウドストレージサービス
CloudFront
AWSが提供するCDN(Content Delivery Network)サービス。
CDNはWEBコンテンツ配信処理を高速化するためのサービス。
大規模なアクセスも世界中にあるエッジのキャパシティを活用して効率的かつ高速にコンテンツ配信が可能なサービス。
・200以上のエッジサーバによる高性能な分散配信
・高いパフォーマンス
・AWS WAF / AWS Shied / AWS Certificate Managerとの連携や
DDoS対策によるセキュリティ機能
・オリジンに対してHeader / Cookie / Query Stringによる
フォワード指定で、動的なページ配信が可能
Direct Connect
お客様のデータセンターやオフィスを専用線などを介してAWSへプライベートに接続するサービス。
メリット
・安価なアウトバウンドトラフィック料金
・ネットワーク信頼性の向上
・ネットワーク帯域幅の向上
Direct Connectの特徴
VPNの方が安く素早く利用できるが、信頼性や品質は専用線が勝る。
◾️コスト
→安価なベストエフォート回線が利用可能
◾️リードタイム
→クラウド上での接続設定で可能なため即時
→物理対応が必要なため数週間
◾️帯域幅
→暗号化のオーバーヘッドにより制限がある
→ポートあたり1G / 10Gbps
◾️品質
→インターネット経由のためネットワーク状態の影響を受ける
→キャリアにより高い品質が保証される
◾️障害切り分け
→インターネットベースのため自社で保持している範囲以外の
確認は難しい
→物理的に経路が確保されているため比較的容易
API Gateway
API GatewayはAPI作成 / 管理をフルマネージド型サービスで提供。
・最大数十万個のAPI同時呼び出し、受付が可能
・アクセス制御の管理
・EC2 / Lambda / 任意のウェブアプリケーションの
ワークロード処理を実行する
・Lambdaと密接に統合されている
・WebSocketを利用したリアルタイムかつ双方向通信のAPIも処理可能
API Gateway : APIとは
APIを通じてリクエストとレスポンスにより、他サービスの機能やデータを呼び出すことができる。
【専門的には】
・APIはアプリケーションソフトウェア開発に利用される標準的な
インターフェース群のこと
・中でもWEB APIはWEB上で他のサービスを呼び出す方式や取り決め
API Gatewayのユースケース
API Gatewayを連携口として外部アプリとの連携を実現する。
AWS Storage Gateway
標準的なストレージプロトコルを利用して外部システム環境とAWSのストレージサービスとを接続するサービス。
AWS Storage Gatewayの利点
AWSが有する機能や性能を活用できることが大きな利点。
・標準的なストレージプロトコルを活用したシームレスな統合
・キャッシュを活用した低レイテンシなアクセスが可能
・AWSストレージサービスの堅牢性、低コスト、拡張性
・効率的なデータ転送
・AWSのモニタリング、管理、セキュリティとの統合
AWS Storage Gatewayの用途
データ移転や保存などAWSストレージを利用したい場面に用いる。
・ビックデータ処理 / クラウドバースティング / システム移行のために
データをAWSストレージに移動させたいケース
・バックアップ、アーカイブ、災害対策としてAWSにデータを保持
・オンプレミス環境で容易にAWSストレージを活用
Storage Gatewayのタイプ
利用するデータタイプに応じて4つのゲートウェイを利用する。
◾️ファイルゲートウェイ
→Amazon S3オブジェクトにStorage Gatewayを経由して
ファイルデータを格納
◾️キャッシュ型ボリュームゲートウェイ
→頻繁にアクセスされるデータはローカルのストレージゲートウェイに
保持しながら、Amazon S3をプライマリデータストレージとして使用
◾️保管型ボリュームゲートウェイ
→保管型ボリュームを使用すると、プライマリデータをローカルに
保存する一方で、そのデータを非同期にAWSにバックアップ
◾️テープゲートウェイ
→Amazon S3とGlacierにデータを保管する仮想テープストレージとVTL管理
データベース
AWSでは様々なタイプのデータベースサービスがマネージド型サービスで提供されている。
◾️Amazon RDS
→MySQL、PostgreSQL、Oracle、SQL Server、MariaDB向けの
マネージドリレーショナルデータベースサービス
→MySQLおよびPostgreSQLと互換性のあるクラウド向けの分散、
高速化されたリレーショナルデータベース
→規模に関係なく数ミリ秒台のパフォーマンスを実現する、
key-valueおよびドキュメント型のNoSQL型のデータベース
◾️Amazon ElastiCache
→RedisまたはMemcachedに互換性のある完全マネージド型の
インメモリ、キャッシュDB(NoSQL型)
◾️Amazon Redshift
→高速かつシンプルで、費用対効果の高いデータウェアハウス
Aurora
クラウド時代の新しい分散型のリレーショナルデータベースとして誕生。
1から考えて構築された新RDB
・その特徴はNoSQL型の分散高速処理とRDBとしての
データ操作性を両立させたこと
MySQLと2.5〜5倍の性能を商用データベースの10分の1の価格で提供する高性能、低コストDB。
RDSにおいてデータベースソフトウェアの1つとして選択。
Auroraの特徴
高い並列処理性能によって大量の読み書きをするのに適したDB。
・高い並列処理によるストレージアクセスによって
クエリを高速処理することが可能
・Auroraは大量の書き込みや読み込みを同時に扱うことができる
・データベースの集約やスループット向上が見込まれる
・ただし、全てが5倍高速というわけではなく、
適用するべき領域を見つけて利用する
MySQL / PostgreSQLと互換性があり、同じ操作方法とそのコミュニティを利用することが可能。
DynamoDB
完全マネージド型のNoSQLデータベースサービス。
・ハイスケーラブルで無制限に性能を拡張できる
・負荷が高くなっても応答速度が低下しない低レイテンシー
・高可用性(SPOFなしでデータは3箇所のAZに保存)
・マネージド型のためメンテナンスフリー:CloudWatchで運用
・プロビジョンドスループット
→テーブルごとにReadとWriteに必要なスループットキャパシティを
割り当てる
・ストレージの容量制限がない
→データ容量の増加に応じたディスクやノードの増設は一切不要
DynamoDBのできること
キーバリュー(ワイドカラム型)でデータを簡易に操作することができる。
出来ること
・キーに対するバリュー(値)のCRUD操作
・簡易なクエリやオーダー
・例えば、数万人以上が同時アクセスして処理が必要になる
アプリケーションのセッションデータ処理など
できないこと / 向いていないこと
・JOIN / TRANSACTION / COMMIT / ROLLBACKは不可
・詳細なクエリやオーダー(データの検索や結合処理などには向いていない)
・大量のデータ読み書きにはコストがかかる
ElastiCache
分散インメモリキャッシュサービスの構築、管理およびスケーリングを容易に実施することができるサービス。
・キャッシュクラスタを数クリックで起動
・フルマネージド型でモニタリング、自動障害検出、復旧、拡張、
パッチ適用、バックアップに対応し高可用性を実現
・広く利用されている2種類のエンジンmemcached / redisから選択可能
インメモリキャッシュ
ElastiCacheはメモリ+キャッシュというデータベース。
インメモリキャッシュとは
メモリを活用して高速にキャッシュへのアクセスを可能にしたデータベースの仕組み。
オープンソースのRedisとMemcachedを利用可能で汎用性あり。
Redis
・高速に値をRead / Writeできるインメモリキャッシュ型DB
・シングルスレッドで動作するインメモリキャッシュDBで
全てのデータ操作は排他的
・スナップショット機能がある
・データを永続化できる
・高速に値をRead / Writeできるインメモリキャッシュ型DB
・マルチスレッドで動作するインメモリキャッシュDB
・スナップショット機能がない
・データを永続化できない
・ファイルオーバーや還元ができない
Redshift
高速でスケーラブルな費用対効果の高いマネージド型のDWH / データレイク分析サービス。
・数百ギガバイトのデータから開始して、ペタバイト以上まで拡張
・1テラバイトあたり年間1,000USD以下で利用可能
・自動ワークロード管理など自動テーブルメンテナンスなど多くのメンテナンスタスクやデータ配置が自動化されているフルマネージド型
・PostgreSQL互換の列指向データモデル
・複数ノードをまとめたクラスター構成
単一AZで起動し、マルチAZ構成は不可
・RA3インスタンスで最大で他のクラウドデータウェアハウスの
3倍に達するパフォーマンス
・AQUAによる分散キャッシュで、Redshiftが他のクラウドデータウェアハウスに比べて最大10倍の速度で動作
データレイク
S3はデータレイクとしてデータ活用のハブとして利用できる。
アイデンティティ・セキュリティコンプライアンス
AWSでのセキュリティやコンプライアンスに寄与するサービス。
◾️AWS Identity & Access Management(IAM)
→AWSのサービスやリソースへのアクセスを安全に管理する
アクセス管理サービス
◾️Amazon GuardDuty
→悪意のある操作や不正な動作を継続的に
モニタリングする脅威検出サービス
◾️Amazon Inspector
→自動化されたセキュリティ評価サービスで、
AWSにデプロイしたアプリケーションのセキュリティと
コンプライアンスを向上させることができる
◾️AWS Key Management Service
→暗号化キーを簡単に作成して管理し、幅広いAWSのサービスや
アプリケーションでの使用を制御する
◾️AWS CloudHSM
→法令遵守のためのハードウェアベースキーストレージ
◾️AWS WAF
→一般的なウェブの脆弱性からウェブアプリケーションまたは
◾️AWS Shield
→マネージド型の分散サービス妨害(DDoS)保護サービス
◾️AWS Artifact
アクセスできる無料のセルフサービスポータル
AWSリソースの暗号化
通信・保存されるデータ、リソースの暗号化と接続の暗号化を実施可能。
◾️通信の暗号化
→SSL / TLSを使用してDBインスタンスへの接続を暗号化する
・AWS Certifacate Managerを利用してSSL / TLS証明書を発行、
管理することが可能
・ACMとCloudFrontやRoute53を連携してSSL / TLS通信を可能にする
◾️保管データの暗号化
→保管時のデータリソースを暗号化する
・AWSが所有するキーを使用して、デフォルトでデータを暗号化する
・AWS KMSを利用して作成したデータ暗号化と
キー管理プロセスを管理することも可能
・CloudHSMという世界中のセキュリティ基準に準拠するための
ハードウェア型キー管理サービスも利用可能
AWS KMS
AWS KMSは簡単にデータを暗号化するためのマネージド型暗号化サービス。
・暗号鍵の作成、管理、運用を実施するマネージドサービスで
AWSマネジメントコンソール、AWS SDKまたはCLIを使用して、
キーを作成、インポート、ローテーション、削除、管理する
・IAMと連携して鍵のアクセス管理を実施
・カスタマーマスターキー(CMK)の無効化、有効化、削除を実施し、
1年ごとの自動キーローテーションすることが可能
・CMKを外部から持ち込んで管理することも可能
・キーを保護するためにFIPS140-2の検証済みまたは
検証段階のハードウェアセキュリティモジュールを使用
・AWS CloudTrailと統合されており、全てのキーの使用ログを表示
・RDSやS3などの多数のAWSサービスに適用可能
・KMS SDKを利用することで、アプリケーションにおける暗号化も可能
RDSでは保存されるデータ・リソースの暗号化と接続の暗号化を実施可能。
◾️カスタマーマスターキー
・暗号化を実行する上で、最初に作成されるマスターキー
・暗号化キーを暗号化する
・ローテーションされる
◾️カスタマーデータキー(暗号キー)
・実際のデータの暗号化に利用するキー
・KMSで生成されてCMKで暗号化される
◾️エンベロープ暗号化
・マスターキーで暗号化をせずに、暗号化したデータキーを利用して
暗号化する暗号化方式
エンベロープ暗号化
AWS KMSは簡単にデータを暗号化するためのマネージド型暗号化サービス。
・データキーをマスターキーによる暗号化を実施
・カスタマーマスターキー(CMK)を利用してデータキーを暗号化する
データの保護:暗号化
CloudHSMは不正使用防止策が取られている専用HWモジュール(HSM)により暗号キーを保護するサービス。
厳しい暗号化要件に対応するために利用。
権限管理:AWS Directory Service
ディレクトリサービスとはユーザに関わる各種情報を保管してユーザー認証を実現する仕組み。
◾️管理するユーザー情報
ID、ユーザー名、名字氏名、部署、グループ、担当、電話番号
◾️実現する機能
・IDとアクセス管理
運用効率の向上、コンプライアンス向上、セキュリティの強化
・アプリのアクセス制御
ファイル共有、パッチ管理など
AWSに新しいディレクトリを作成するか、既存のActive Directory認証を利用した制御を実現。
権限管理:Security Token Service(STS)
STSは限定的で一時的なセキュリティ認証情報を提供するサービス。
IAMユーザー・認証済ユーザー
↓
STSの発行
↓
一時的な利用者
ユーザー認証機能:Cognito
アプリケーションにユーザー認証機能を付与したい場合はCognitoを利用する。
検出制御
監視やモニタリングを継続的に実施してセキュリティを高める。
・CloudTrail
→AWSユーザーの行動ログを取得し、ガバナンス、コンプライアンス、
及び運用とリスクの監査を行えるように支援する
・CloudWatch
→AWSリソースとAWSで実行するアプリケーションに対して、
様々なメトリクスやログを収集、追跡するモニタリングサービス
・AWS GuardDuty
→AWS上での悪意のある操作や不正な動作を
継続的にモニタリングする脅威検出サービス
・Amazon Inspector
→自動的にアプリケーションを検証し、その露出、脆弱性、
ベストプラクティスからの逸脱状況を確認し、
セキュリティ評価を実施するサービス
IAM Access Analyzer
監視やモニタリングを継続的に実施してセキュリティを高める。
AWS GuardDuty
機械学習などを利用してAWSインフラやアプリのセキュリティ上の脅威リスクを検知するサービス。
AWS Inspector
Amazon EC2にエージェントを導入し、プラットフォームの脆弱性を診断するホスト型診断サービス。
・AWSリソースに対して、オンデマンドで自動的にシステム設定や振る舞いを分析することが可能
・組み込みルールパッケージ
CVE(Common Vulnerabilities & Exposures)
CIS(Common for Internet Security)
ベストプラクティスに基づいたルール
実行時のふるまい分析
・推奨対応手順が含まれた詳細レポート
AWS Shield
L3 / L4におけるDDoS攻撃に対する自動緩和システムをCloudFrontとRoute53に対して自動適用する無料サービス。
・L3 / L4における自動緩和システムをエッジロケーションで適用する
・対象となるのはCloudFrontとRoute53のエッジロケーションの前に
インラインで配置され、全ての着信パケットを検査
・DDoS攻撃の96%を自動軽減
・Standard版は無料 / Advanced版は有料
Advanced版を利用することで、WAFと連携して大規模な攻撃から強力な防衛を実行可能。
◾️Standard
・L3 / L4のDDoS攻撃に対応
・無料で全ユーザーに適用される
・SYN / UDPフラッド、反射攻撃などから防衛
・自動検知と自動緩和を実行
・CloudFrontとRoute53などのサービスに組み込まれて自動で実行
◾️Advanced
・L3 / L4に加えてWAFと連携してL7のDDoS攻撃への防御を実施
・より大規模な攻撃から防御する
・AWS DDoSレスポンスチーム(DRT)に24時間365日アクセス
・リソースの使用量の急増からAWSの請求を保護する
スケーリングへのDDosコスト保護が可能
・レポーティング
AWS WAF
WEBアプリケーションのトラフィック通信を検査して脆弱性への攻撃や不正アクセスを遮断するファイアウォールサービス。
・SQLインジェクション、クロスサイトスクリプトなど
悪意のあるリクエストを遮断
・遮断方式でカスタムルールを設定
(Rate-basedルール / IPベースフィルター / 正規表現パターン /
サイズ制御 / アクション許可・拒否設定)
・CloudWatchと連携したモニタリング
AWS Artifact
重要なコンプライアンス関連情報の頼りになる一元管理型のリソース。
・AWS Artifact Reports
→世界各地にある監査期間の指定する基準や規制を遵守状況を
テスト及び確認したコンプライアンスレポートを提供
・AWS Artifact Agreements
→AWSアカウントとの契約の確認、受託、管理を実施
マネジメントとガバナンス
運用保守やサポートに関する支援ツールやサービス。
準備系サービス
◾️Amazon Control Tower
→ベストプラクティスに基づき安全性と適合性を備えた、
◾️AWS Organizations
→複数のAWSアカウント全体の一元管理と一括請求
◾️AWS Budgets
→予算のしきい値を超えた時にアラートを発信するカスタム予算を設定
◾️AWS License Manager
→ソフトウェアベンダーからのソフトウェアライセンスを
簡単に管理するサービス
◾️AWS Well-Architected
→AWSのアーキテクチャ設計原則の確認とワークロードの見直しと
改善を支援
AWS Control Tower
ベストプラクティスに基づき安全性と適合性を備えた、複数アカウントのAWS環境を設定及び管理するサービス。
AWS License Manager
ソフトウェアベンダーからのソフトウェアライセンスを簡単に管理するサービス。
・ライセンスの利用数やライセンスの利用条件を登録
・ライセンスの利用状況を追跡して管理することが可能
・コンプライアンス違反などのライセンスルールに反する
利用状況を可視化する
・既存ライセンスを自動検出するなどの一元的な管理を実現
・ダッシュボードを利用して可視化して、管理可能
展開系サービス
運用保守やサポートに関する支援ツールやサービス。
◾️AWS CloudFormation
テンプレート化して展開する環境自動設定サービス
◾️AWS Elastic Beanstalk
→WEBアプリケーションの定番構成の構築、デプロイの自動化サービス
◾️AWS OpsWorks
→OpsWorksはChefまたはPuppetを使用してアプリケーションを設定
及び運用するための設定管理サービス
◾️AWS Service Catalog
→AWS上でデプロイされているITサービスの一元的な管理を
実施するサービス
◾️AWS Maketplace
→EC2インスタンスの起動に使用できるAMIなど、
CloudFormation
AWSクラウド環境内の全インフラリソースを記述してテンプレート化して展開する環境自動設定サービス。
・プロビジョニングされたリソースの変更、削除が可能
・追加リソースへの通常課金のみで追加料金なし
・クロスリージョンとクロスアカウントで管理
・直接サポートされていないリソースや機能を利用する場合は
カスタムリソースでスタック作成の一部に
独自ロジックを組み込むことが可能
JSON / YAMLなどのコードでインフラ構築方式がポリシーとして定義されており、それに基づいて仮想化インフラが構築可能。
Elastic Beanstalk
WEBアプリケーションの定番構成の構築・デプロイの自動化サービス。
・早く簡単にアプリケーションをデプロイするサービス
・Java、PHP、Python、Node.js、.NET、Docker、Goに対応して
WEBアプリケーションを展開できる
・Apache、Nginx、Passenger、IISなど使い慣れたサーバーでデプロイ及びスケーリングが可能
・コードをアップロードすればキャパシティのプロビジョニング、
ロードバランシング、Auto Scalingからアプリケーションの
ヘルスモニタリングまでデプロイを自動化できる
Elastic Beanstalkのユースケース
WEBアプリケーションのデプロイを容易にすることや、タスク時間の長いロークロードの展開に利用する。
◾️ウェブサーバー環境
・ELB + Auto Scalingでスケーラブルな構成をコード化して
バージョンとすることで、スケーラブルなウェブアプリケーションを
実行できる
・単一コンテナのDockerコンテナを実行可能
・複数コンテナはECSを使用した環境実行が可能
◾️ワーカー環境
・SQS + Auto Scalingでスケーラブルなバッチ処理ワークを実現
・定期的なタスク実行基盤の作成
毎日深夜1時に動作するバックアップ処理
・ワーカーホスト内でWebアプリケーションを動作させ、
ワークロードの時間が係る処理を実行させる
OpsWorks
OpsWorksはChefまたはPuppetを使用してアプリケーションを設定及び運用するための設定管理サービス。
Chefは様々な形式のインフラへのサーバやアプリケーションの展開を容易にする環境自動化フレームワーク。
OpsWorksはこのChefやPuppetによるインフラ設定・運用の仕組みをAWS上でマネージド型サービスとして提供している。
Elastic Beanstalk VS OpsWorks
WEBアプリのデプロイに特化したElastic Beanstalkに対して、OpsWorksは様々なアプリケーションに対応する高度なインフラ環境構築が可能。
◾️Elastic Beanstalk
・アプリケーションのデプロイ自動化
ウェブアプリケーションやサービスを使い慣れたサーバーにおいて
デプロイとスケーリングするためのサービス
◾️OpsWorks
・インフラ設定自動化
ChefやPuppetのマネージド型インスタンスのサーバー設定、デプロイ、
管理を自動化できるようになるインフラの設定管理サービス
AWS Service Catalog
AWSで承認されたITサービスのカタログを作成及び管理する支援サービス。
◾️IT運用管理者
CloudFormationのテンプレートを利用して、
管理されるAWSリソース定義や、これらの利用権限をカタログとして
一元管理する機能を提供
◾️ユーザ部門
IT運用管理者が作成したカタログより、権限がなくとも求める機能に
応じたAWS環境を必要に応じて起動が可能になる
AWS Marketplace
AWSで利用できるソフトウェアなどが売り買いできるオンラインストア。
運用・操作系のサービス
運用保守やサポートに関する支援ツールやサービス。
◾️Amazon CloudWatch
アプリケーションを監視し、リソース使用率の最適化を行い、
運用上の健全性を統括的に把握するモニタリングサービス
◾️AWS CloudTrail
ユーザーアクティビティとAPI使用状況の追跡するログ取得サービス
◾️AWS Config
AWSリソースの設定を評価、監査、審査できるサービス
◾️AWS Systems Manager
AWSの様々なサービスの運用データを確認でき、AWSリソース全体に
関わる運用タスクを自動化する運用支援サービス
◾️AWS Personal Health Dashboard
AWSのサービス状態のパーソナライズされた表示
◾️AWSサポート
ベーシック / 開発者 / ビジネス / エンタープライズプランの4つ
AWS Config
AWSリソースのレポジトリ情報からリソース変更履歴や構成変更を管理するサービス。
・AWSリソースの構成変更をロギングして保存する
・履歴も定期的に構成情報スナップショットとして取得し、S3に保存
・構成情報に基づきシステム構成があるべき状態になっているかを評価
・評価基準にはAWSルールまたは独自ルールを適用
AWS Configには構成変更を管理するストリームと履歴管理するヒストリーと構成要素を保存するスナップショットがある。
◾️Configuration Stream
・リソースが作成、変更、削除に対して作成され構成ストリームに
追加される
・SNSトピック連携して通知設定が可能
◾️Configuration History
・任意の期間における各リソースタイプの構成要素を履歴として蓄積
・S3バケットに保存
◾️Configuration Snapshot
・ある時点での構成要素の集合
・自動で定期的あるいは変更トリガで作成
・S3バケットに保存
AWS System Manager
利用中のAWSサービスやリソースをモニタリングして、運用タスクを自動化する統合監視サービス。
◾️問題検出の時間短縮
EC2などをリソースグループごとに運用データを確認できるため、
アプリケーションに影響を与えうるリソースの問題を素早く特定可能
◾️運用の自動化
EC2パッチ、更新、設定変更・削除・停止及びデプロイなどを自動化
◾️可視化と制御
各リソースグループの最新状態を簡単に可視化して制御できる
◾️ハイブリッド管理
AWSサーバーとオンプレミスのサーバーとを
1つのインターフェイスで管理可能
AWS Personal Health Dashboard
運用保守やサポートに関する支援ツールやサービス。
AWSサポート
AWSによる人的なオペレーターによる問い合わせや不具合サポートプラン。
アプリケション統合
アプリケーション間の通信制御やフロー作成・データ連携などに利用するサービス。
◾️SNS
完全マネージド型 pub / sub メッセージング
◾️SQS
完全マネージド型のメッセージキューイングサービス
◾️SES
Eメール送受信サービス
Amazon Simple Notification Service(SNS)
Amazon SNSはフルマネージド型のプッシュ型通知サービスで他のサービスとの非同期通信を可能にする。
送信側がトピックを作成して受信側をポリシー指定することで制御された非同期通信を実現する。
SNSの特徴
AWSの様々なサービスと連携して通知可能で、疎結合アーキテクチャに利用できる。
・単一発行メッセージ
・メッセージ通信順番は保証されない
・取り消し不可
・配信ポリシーによる再試行を実施
・メッセージサイズは最大256KB
SQS
SQSはキューを溜め込んでポーリング処理を実施するサービス。
ポーリングとは
一旦中継所に通信内容を貯めておいて、受信側のタイミングがいいときに通信を行う。
SQSの特徴
フルマネージド型で提供され、高可用性・高スケーラビリティ・高スループット・低コストを実現。
・複数のサーバー / データセンターにメッセージを保持する高可用性構成
・多数の送信者と受信者に対応可能なスケーラビリティの確保
・メッセージが増加しても高スループットを維持できる
・無料枠と従量課金による低コスト
Amazon Simple Email Service(SES)
フルマネージド型 / サーバーレス型のコスト効率に優れたEメールサービス。
・スケーラブルな構成で信頼性が高いマネージド型
・メール送信:トランザクションメールなどの高品質なコンテンツを
顧客に送信可能
・メール受信:受信したメールをトリガーにS3やLambdaなどを起動可能
・バウンズ処理:メールが送れなかった場合の処理を規定
ユースケース分け
◾️SNS
AWS上でイベント通知やメッセージング処理 / プッシュ通知をするといった場合はSNS
◾️SQS
AWS上でキューイング処理 / タスク並列分散処理 /
ポーリング・Pull型の通知をする場合はSQS
◾️SES
Eメール送受信機能を利用する場合はSES
移行と移転
AWSクラウドへのインフラ移行やデータ移行に利用するサービス。
◾️AWS Application Discovery Service
サーバーの設定データ、使用状況データ、動作データが収集して
サーバーの使用率データや依存関係のマッピングなどの移行に
必要な情報を提供するサービス
◾️AWS Database Migration Service
データベースを短期間で安全にAWSに移行することが可能
データベース移行ツール
◾️AWS Server Migration Service
数千のオンプレミスワークロードを従来よりも簡単に、
かつ短時間でAWSに移行できるエージェントレスサービス
◾️AWS Snow ファミリー
エッジでデータを収集して処理し、AWSとの間でデータを移行する、
非常に安全なポータブルデバイス
AWS Application Discovery Service
サーバーの使用率データや依存関係のマッピングなどの移行に必要な情報を提供するサービス。
・クラウドに何を移行するのか
対象機器の情報把握(VMware / Windows / Linux環境の情報把握)
・現状の機器やソフトウェアの依存関係の把握
・手作業による手間を省く
AWS Database Migration Service
データベースを短期間で安全にAWSに移行することが可能なデータベース移行ツール。
AWS Server Migration Service
数千のオンプレミスワークロード・サーバーを従来よりも簡単にかつ短時間でAWSに移行できるエージェントレスサービス。
・簡単に大量のサーバーを移行できるサービスで、
1アカウントで同時に50VMまで移行可能
・エージェントレス型で移行を実施
・オンプレミスのVMwareに対して増分変更をキャプチャして、
・移行先のAWSでAMIを作成して、EC2インスタンスに移行することが可能
AWS Snowファミリー
物理ストレージデバイスを使用し、インターネットを迂回してAWSに直接大容量データを転送するサービス。
Snowball
ペタバイト規模のデータ移行の際に利用するアプライアンスで現在はSnowball Edgeに世代交代済。
・オンプレミスのデータストレージロケーションとAmazon S3との間でデータのインポートおよびエクスポートができる
・Snowballでは全てのリージョンで80TBモデルを使用可能
・暗号化が強制、保管中や輸送中のデータを保護
・AWS Snowballマネジメントコンソールを使用
・オンプレミスのデータセンターとSnowball間でローカルデータ転送を実行
・Snowballはそれ自体が配送コンテナ
SnowballとSnowball Edge
Snowball EdgeはSnowball + コンピューティングという高性能な機能を有し、現在AWSはSnowball Edge利用を推奨。
◾️Snowball
・クライアント側で暗号化を実施
・クライアント側にリッチなリソースが必要で
クライアント側のソフトウェアによるデータ移行を実施
・容量:80TB / アプライアンス
・用途:データ移行
・クラスタリング:不可
・ラックマウント:不可
・最大保持日数:90日
◾️Snowball Edge
・Edge側で暗号化を実施
・書込時にLambda関数を利用したデータ処理可能
アプライアンスに組み込まれたS3 Adapter For Snowballにより
データ転送を実施
・容量:100TB(80TB利用) / アプライアンス
・用途:データ移行 + ローカルプロセッシング・ストレージとして利用
・クラスタリング:可
・ラックマウント:可
・最大保持日数360日
・Snowball Edge Compute Optimizedの
Snow Edge Storage Optimizedの2タイプ
AWSコスト管理
運用保守やサポートに関する支援ツールやサービス。
AWSのコストと使用量や経済性を把握し、分析、管理するための
可視化ツール
◾️AWSのコストと使用状況レポート
AWSのコストと使用状況の詳細を確認するためのレポート
◾️AWS Budgets
予算のしきい値を超えた時にアラートを発信するカスタム予算を設定
◾️価格算定ツール
AWSのコスト計算を支援するツール
簡易見積もりツール / TCO計算ツール / Pricing Calculator
◾️AWS Cost Categories
自身の組織やプロジェクト構造に分けてコストを
カテゴライズすることが可能な機能
◾️Trusted Advisor
コスト最適化とセキュリティと耐障害性と
パフォーマンス向上についてアドバイスを提供するサービス
AWSを安く使う
もっともシンプルで一番最初にやるべきコスト最適化は無料利用枠の最大利用と最適な料金オプションの選択。
AWSの課金方式
AWSは利用量に応じた柔軟な価格設定となっている。
◾️従量課金
従量課金による利用料に応じた価格設定が基本
◾️予約による低価格
EC2などの特定のサービスには
リザーブド価格(予約による低価格販売)が実施されている
◾️使うほど安い
AWSではボリュームディスカウントを受けることができ、
使用量が増えるほど節約できる
EC2の購入オプション
EC2の購入オプションは利用形態や利用期間などに応じて多岐にわたるため、コスト最適な選択をすることが重要。
・オンデマンドインスタンス
・スポットインスタンス
・ハードウェア専有インスタンス
・Dedicated Host
・ベアメタル
EC2のリサーブドインスタンス
利用期間を長期間指定して利用する形式で、オンデマンドに比較して最大75%割安になる。
EC2のスポットインスタンス
予備のコンピューティング容量をオンデマンドインスタンスに比べて割引(最大90%引き)で利用できるEC2インスタンス。
・予備用を入札式で利用するためとても安い(最大90%引き)
・起動に通常よりも少し時間がかかる
・予備用のため途中で削除される可能性がある
→一時的な拡張などの用途で利用
物理的対応可能なインスタンス
物理サーバーにインスタンスを起動して制御が可能なタイプのインスタンス。
◾️ハードウェア専用インスタンス
・ホストHWのレベルで、他のAWSアカウントに属する
インスタンスから物理的に分離する
・同じAWSアカウントのインスタンスとはHWを共有する可能性がある
◾️Dedicated Host
・EC2インスタンス容量を完全にお客様専用として利用できる物理サーバー
・サーバーにバインドされた既存のソフトウェアライセンスを利用可能
◾️Bare Metal
・アプリケーションは基盤となるサーバーのプロセッサーと
・AWSの各種サービスとの連携が可能でOSが直接下層の
ハードウェアにアクセス可能
AWS Organizationsによる一括請求
AWS Organizationsの一括請求で、メンバーアカウント間でリザーブドインスタンスを共有化したり、S3などの利用量に応じた課金がお得になる。
Saving Plan
1〜3年の期間に一定の使用量を守ることによりコストを削減。
特定の量の処理能力(USD / 時間で測定)を使用する契約を結ぶことで
適用される割引契約
・AWSコンピューティング使用料金を最大72%節約できる
・Amazon EC2、AWS Fragate、AWS Lambdaに適用可能
価格算定ツールを利用する
AWS公式ツールを利用して見積もりや価格比較を実施する。
◾️簡易見積もりツール
利用するAWSサービスに対する月額料金を見積ることができる
◾️TCO計算ツール
AWS利用した場合とオンプレミス環境やコロケーション環境との
価格比較ができる
◾️Pricing Caluator
ビジネスや個人のニーズに沿った個別の予測コスト見積もりを
実施することができる
コストの可視化
CloudWatchのbilling機能により請求額通知を可能とし、Trusted Advisorからアドバイスをもらう。
Trusted Advisor
コスト最適化とセキュリティと耐障害性とパフォーマンス向上についてアドバイスを提供するサービス。
・コスト最適化
・セキュリティ
・耐障害性
・パフォーマンス向上
AWS Budgets
カスタム予算を設定して、コストまたは使用量が予算額や予算量を超えた場合に細かくアラームを設定することができる。
Cost Explorer
AWSのコストと使用量の経済的変化を可視化して、カスタムレポートを作成してコストと使用量のデータを分析する。
AWSのコストと使用状況レポート
AWSのコストと使用状況に関するもっとも包括的なデータを提供。
アカウント / IAMユーザーが使用した各サービスカテゴリのAWS使用状況が、時間単位または日単位の明細項目として一覧表示する。
AWS Cost Categories
自身の組織やプロジェクト構造に分けてコストをカテゴライズすることが可能な機能。
AWS Trusted Advisor
コスト最適化とセキュリティと耐障害性とパフォーマンス向上についてアドバイスを提供するサービス。
その他のサービス
Codeシリーズ
開発コードのGitベースのリポジトリ上でのコミット・実行・デプロイを自動化する一連のサービス。
◾️CodePipline
完全マネージド型の継続的デリバリーサービス
◾️CodeCommit
Gitベースのリポジトリをセキュアにホストするマネージド型の
ソース管理サービス
◾️CodeBuild
ソフトウェアパッケージを作成できる完全マネージド型のビルドサービス
◾️CodeDeploy
CodeDeployは開発・テスト・本番環境へのデプロイの自動化サービス
Kinesis
ストリームデータを収集・処理するためのフルマネージド型サービスで主に3つのサービスで構成される。
ストリームデータを処理するアプリケーションを構築
◾️Amazon Kinesis Data Firehose
ストリームデータをS3やRedshiftなどへ簡単に配信
◾️Amazon Kinesis Data Analytics
ストリームデータを標準的なSQLクエリでリアルタイムに可視化・分析
Amazon Kinesis Data Streams
ストリームデータ処理用の分析システムやアプリケーションを構築するサービス。
Amazon Athena
Amazon S3内のデータを直接、簡単に分析できるようにするインタラクティブなクエリサービス。
Amazon Rekognition
深層学習に基づいた画像認識および画像分析機能を提供するサービス。
Amazon Polly
高度なディープラーニング技術を使用したテキストから音声を合成するサービス。
Amazon Lex
音声やテキストを使用して、任意のアプリケーションにチャットボットを構築するサービス。
Amazon Transcribe
開発者が音声をテキストに変換する機能を提供するサービス。
Amazon SageMaker
機械学習(ML)モデルを迅速に構築、トレーニング、デプロイできるようにする完全マネージド型サービス。
Amazon QuickSight
QuickSightはデータを可視化・解析するためのBIツール。
RedShiftデータを可視化可能。
AWS Glue
データを抽出、変換、ロード(ETL)を行う完全マネージド型のサービス。
AWS Lake Formation
本来なら複雑な設定が必要なデータレイクの構成を簡単に素早く実現するサービス。
Amazon EMR
Apache Spark、Apache Hive、Prestoなどのビックデータフレームワークを使用して、大量データを処理、分析する。