0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【メモ】実践Terraform AWSにおけるシステム設計とベストプラクティス

Posted at

メモです

実践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
  • 公式ドキュメントを読むコツ
  • 構成ドリフト
  • 未知の未知
    • ドキュメント化
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?