メモです
実践Terraform AWSにおけるシステム設計とベストプラクティス | 電子書籍とプリントオンデマンド(POD) | NextPublishing(ネクストパブリッシング)
第1章 セットアップ
- AWS
- IAMユーザー
- AWS CLI
- クレデンシャル
- Terraform
- Homebrew
- tfenv
- Docernized Terraform
- git-secrets
第2章 基本操作
- リソースの作成
- HCL
- terraform init
- terraform plan
- terraform apply
- リソースの更新
- リソースの設定変更
- リソースに再作成
- tfstateファイル
- リソースの削除
- terraform destroy
第3章 基本構文
- 変数
- valiable
- ローカル変数
- locals
- 出力値
- output
- データソース
- プロバイダ
- 参照
- 組み込み関数
- モジュール
- モジュールの定義
- モジュールの利用
第4章 全体設計
- システム要件
- アーキテクチャ設計
- テクノロジースタック
- ファイルレイアウト
第5章 権限管理
- ポリシー
- ポリシードキュメント
- IAM ポリシー
- ロール
- 信頼ポリシー
- IAM ロール
- IAM ポリシーのアタッチ
- IAM ロールのモジュール化
第6章 ストレージ
- プライベートバケット
- S3 バケット
- ブロックパブリックアクセス
- パブリックバケット
- ログバケット
- ログローテーションバケット
- バケットポリシー
第7章 ネットワーク
- パブリックネットワーク
- VPC
- パブリックサブネット
- インターネットゲートウェイ
- ルートテーブル
- プライベートネットワーク
- プライベートサブネット
- NATゲートウェイ
- 暗黒的な依存関係
- マルチAZ
- パブリックネットワークのマルチAZ化
- プライベートネットワークのマルチAZ化
- ファイアウォール
- セキュリティグループ
- セキュリティグループのモジュール化
第8章 ロードバランサーとDNS
- ALBの構成要素
- HTTP用ロードバランサー
- アプリケーションロードバランサー
- リスナー
- HTTPアクセス
- Route 53
- ドメインの登録
- ホストゾーン
- DNSレコード
- 独自
- ACM(AWS Certificate Manager)
- SSL証明書の作成
- SSL証明書の検証
- HTTPS用ロードバランサー
- HTTPSリスナー
- HTTPのリダイレクト
- HTTPSアクセス
- リクエストフォワーディング
- ターゲットグループ
- リスナールール
第9章 コンテナオーケストレーション
- ECSの構成要素
- ECSクラスタ
- タスク
- ECSサービス
- ECSの起動タイプ
- EC2起動タイプ
- Fargate起動タイプ
- WEbサーバーの構築
- ECSクラスタ
- タスク定義
- ECSサービス
- コンテナの動作確認
- Fargateにおけるロギング
- CloudWatch Logs
- ECSタスク実行IAMロール
- Dockerコンテナのロギング
第10章 バッチ
- バッチ設計
- バッチ設計の基本原則
- じょぶ管理
- エラーハンドリング
- リトライ
- 依存関係制御
- ジョブ管理
- バッチ設計の基本原則
- ECS Scheduled Tasks
- バッチ用タスク定義
- CloudWatch イベントIAMロール
- CloudWatchイベントルール
- CloudWatchイベントターゲット
第11章 鍵管理
- KMS(Key Management Service)
- カスタマーマスターキー
- エイリアス
第12章 設定管理
- コンテナの設定管理
- SSMパラメータストア
- AWS CLIによる操作
- Terraformによるコード化
- SSMパラメータストアとECSの統合
第13章 データストア
-
RDS(Relational Database Service)
- DBパラメータグループ
- DBオプショングループ
- DBサブネットグループ
- DBインスタンス
- マスターパスワードの変更
-
ElastiCache
- ElastiCache パラメータグループ
- ElastiCache サブネットグループ
- ElastiCache レプリケーショングループ
第14章 デプロイメントパイプライン
- デプロイメントパイプラインの設計
- コンテナレジストリ
- ECRレポジトリ
- ECRライフサイクルポリシー
- Dockerイメージのプッシュ
- 継続的インテグレーション
- CodeBuildサービスロール
- CodeBuildプロジェクト
- ビルド仕様
- 継続的デリバリー
- CodePipelineサービスロール
- アーティファクトストア
- GitHubトークン
第15章 SSHレスオペレーション
- オペレーションサーバーの設計
- 運用
- セキュリティ
- トレーサビリティ
- Session Manager
- インスタンスプロファイル
- EC2インスタンス
- オペレーションログ
- ローカル環境
- Session Manager Plugin
- シェルアクセス
第16章 ロギング
- ロギングの種類
- S3へのロギング
- CloudWatch Logsheへのロギング
- ログ検索
- Athena
- CloudWatch Logs Insights
- ログ永続化
- ログ永続かバケット
- Kinesis Data Firehose IAM ロール
- Kinesis Data Firehose配信ストリーム
- CloudWatch Logs IAMロール
- CloudWatch Logs サブスクリプションフィルタ
第17章 Terraform ベストプラクティス
- Terraformバージョンを固定する
- プロバイダバージョンを固定する
- 削除操作を抑止する
- コードフォーマットをかける
- terraform fmt
- バリデーションをかける
- terraform validate
- オートコンプリートを有効にする
- プラグインキャッシュを有効にする
- .terraformrc
- TFLintで不正なコードを検出する
第18章 AWSベストプラクティス
- ネットワーク系デフォルトリソースの使用を避ける
- データストア系デフォルトリソースの使用を避ける
- APIの削除保護機能を活用する
- 暗黙的な依存関係を把握する
- 暗黙的に作られるリソースに注意する
第19章 高度な構文
- 三項演算子
- 複数リソース作成
- count
- リソース作成制御
- 主要なデータソース
- AWS アカウンtのID
- リージョン
- アベイラビリティゾーン
- サービスアカウント
- 主要な組み込み関数
- Numeric Functions
- String Functions
- Collection Functions
- Filesystem Functions
- ランダム文字列
- Multiple プロバイダ
- リソースのマルチリージョン定義
- モジュールのマルチリージョン定義
- Dynamic blocks
- シンプルなDynamic blocks
- 複雑なDynamic blocks
- Dynamic blocksの注意点
第20章 tfstateファイルの管理
- ステートバケット
- ステートバケットの作成
- ステートバケットの利用
- Terraform Cloud
- アカウント登録
- Organizationの作成
第21章 構造化
- モノリス
- モジュールの分離
- 別ディレクトリへの分離
- 別リポジトリへの分離
- 独立した環境
- ディレクトリ分割
- Workspaces
- コンポーネント分離
- 安定度
- ステートフル
- 影響範囲
- 組織のライフサイクル
- 関心ごとの分離
- 依存関係の制御
第22章 モジュールの設計
- モジュールの設計原則
- Small is beautiful
- 疎結合
- 高凝集
- 認知的負荷
- 優れたモジュールの構成要素
- Standard Module Structure
- ドキュメンテーション
- バージョニング
- バージョン制約
- 公開モジュール
- GitHub
- Terraform Module Registry
- バージョンアップ
- 公開モジュールの利用
第23章 リソース参照パターン
- リテラル
- 参照対象のリソースの定義
- リテラルによる参照
- リモートステート
- バックエンドの定義
- リモートステートによる参照
- SSMパラメータストア連携
- SSMパラメータストアの定義
- SSMパラメータストアによる参照
- データソースと依存関係の分離
- 参照対象リソースへタグを追加
- データソースによる参照
- Data-only Modules
- Data-only Modules の定義
- Data-only Modules による参照
第24章 リファクタリング
- testateファイルのバックアップ
- ステートの参照
- terraform state list
- terraform state show
- terraform state pull
- ステートの上書き
- tfstateファイルの書き換え
- terraform state push
- ステートからリソースを削除
- terraform state rm
- リソースの存在確認
- リネーム
- terraform state mv によるリソースのリネーム
- terraform state mv によるモジュールのリネーム
- tfstateファイル間の移動
- リソースをローカルへ移動
- 移動先のtfstate ファイルをローカルへコピー
- tfstateファイル間のリソース移動
- 移動先のtfstateファイルを上書き
- コードの修正
第25章 既存リソースのインポート
- terraform import
- 単一リソースのインポート
- 関連リソースのインポート
- terraformer
- terraformerのインストール
- 指定したリソースのインポート
- 全てのリソースのインポート
第26章 チーム開発
- ソースコード管理
- tfstateファイルはバージョン管理システムで管理してはいけない
- ブランチ戦略
- どのブランチでapplyするか
- レビュー
- アーキテクチャレビュー
- コードレビュー
- パラメータの設定を省略して良いか
- 実行計画レビュー
- プルリクエストテンプレート
- Apply戦略
- 手動Apply
- 自動Apply
- コンテキストの理解
- ビジネス目標
- ステークホルダー
- アプリケーション
- システムアーキテクチャ
第27章 継続的Apply
- ワークフロー
- apply実行環境
- CodeBuildサービスロールの作成
- Githubトークンの保存
- CodeBuildプロジェクトの作成
- CodeBuild Webhookの作成
- ビルドリポジトリ
- builds-spec.yml
- buildスクリプト
- planスクリプト
- applyスクリプト
- tfnotify
- installスクリプト
- tfnotifyの設定
- tfnotifyの組み込み
-
Branch protection rules
第28章 落ち穂拾い
- 高速化
- -parallelismオプション
- デバッグログ
- 環境変数TF_LOG
- JSONコメント
- jsonencode関数とyamldecode関数の組み合わせ
- Terraformのアップグレード
- AWSプロバイダのアップグレード
- 周辺ツールの探し方
- awesome-terraform
- 公式ドキュメントを読むコツ
- 構成ドリフト
- 未知の未知
- ドキュメント化