IaCは怖くない! Terraformを使って再利用可能なインフラストラクチャを学んでいこう
本書はAWSの初心者~若干触ったことのある方向けの本です。Terraformとは、HashiCorp社により開発しているオープンソースのインフラ自動構成ツールです。AWSだけでなく、Google CloudやAzure、Discordなどのインフラを構築可能です。Terraformでは、インフラのデプロイ設定や手順をコードとして記載する「Infrastructure as Code(IaC)」の一種です。IaCを使うことで、デプロイの作業手順を再利用できるようになり、統一化や状態変更に対して頑強なシステムを作ることができます。
以前はTerraformといえば、「ブラウザから操作はできるけどIaCはちょっと…、せめてCDKにしてほしい」のように敷居が高いものでした。しかし、昨今の生成AIの進化(特にGPT-4oやo1シリーズ)により、コードの生成能力が急速に良くなりました。GPTはAWSのドキュメントはかなり多く学習しているため、Terraformのコード生成能力は非常に高いです。そのため、一気にハードルが低くなりました。著者も1年弱前ぐらいまでTerraform全然書けなかったのですが、GPTのおかげで書けるようになりました。本書はポスト生成AIのための、TerraformによるAWSの入門です。
私が認識している範囲だと、Terraformの本はEC2やVPCの作成から入っていることが多く、VPCの理解にかなりのハードルが高く最初の段階で挫折してしまいました。Lambdaのようなマネージドサービスから入ってほしくて、そこから次第にVPCのようなアンマネージドな世界に入っていく本がなかったので書きました。結局はページ数の関係で、1巻の段階ではVPCまでいかずにサーバーレスの世界で終わってしまうかもしれません。本当は、ECSあたりまで書きたかったのですが、続編にご期待ください。
「サーバーレスならSAMを使えばいいのではないか?」と思うかもしれませんが、SAMだとアカウントの運用ができずに、結局運用はTerraformで、アプリケーションはSAM(から生成されたCloudFormation)がちゃんぽんするという違法建築状態が出来上がります。この状態で開発やデプロイするのは結構大変で、最終的に全部Terraformに書き換える(ただ結構大変だった)という経験があったので、「サーバーレスだろうがなんだろうが全部Terraformで書く」前提で本を書いています。Terraformは少しコード長いですが、コードは生成AIに書かせればいいのです。
本書は各トピックごとにサービス別のサンプルケースで、50個程度のケースを用意するオムニバス形式です。ただ、だんだん扱える内容を増やしていくように段階的に説明するように心がけています。私が機械学習のバックグラウンドなので、想定例やコードが機械学習で、機械学習エンジニアがTerraformやインフラを学習するときの学習リソースを想定して書いています。
自分がそうであったように、Terraformの学習のお供に生成AIを使うのは全然ありだと思いますし、むしろ本書の演習問題に「ChatGPTを使って調べてください」のような問題も入れています。また「はじめに」の部分では、Terraformを作る上で便利な生成AIのモデル選択や、プロンプトエンジニアリングの話を書いています。
本書では、Terraformの書き方そのものだけではなく、「なぜこうするといいのか」というAWSの考え方や背景の部分も説明として取り入れています。特にシークレットの管理の話やところどころに入れているセキュリティの内容は、少し発展的ではあるのですが、大事なので入れました。本書が「AWSちょっとやってみようや」「Terraformとっつきにくいと思ってたんだけどやってみよう」と思ってる方の役に立つことを祈ります。
本書のサンプルコードは以下のGitHubリポジトリにあり、サンプルコード自体はMITライセンスで利用できます。
https://github.com/koshian2/terraform-aws-book
1・2巻のセット購入で500円OFF!
・Terraformの基本構文
・tfenvによるTerraformのインストール
・バイナリでのTerraformのインストール
・Hello, Terraform
・ローカル変数(locals)
・入力変数(variable)
・terraform.tfvarsの活用
・コレクション(list)
・コレクション(Map)
・コレクション(Set)
・ファイル作成とプロバイダー
・for_eachメタ引数
・Zipファイルとdepends_on
・AWSアカウントと認証情報のセットアップ
・AWSのアカウントIDとリージョンの取得
・ステートファイルとローカルバックエンド
・リモートバックエンド(S3)
・AWS Lambda (1):基本編
・はじめてのAWS Lambda
・Lambdaの設定値変更(メモリ、タイムアウト)
・Lambdaの環境変数
・Lambdaのレイヤー
・複数のLambdaをデプロイ
・Lambdaの定期実行
・Amazon S3
・S3バケットの作成
・S3へのファイルアップロード
・S3のバージョニングの有効化
・S3のライフサイクルルール(1):バージョニングの管理
・S3のライフサイクルルール(2):ストレージクラスの移動
・S3のライフサイクルルール(3):オブジェクトの定期削除
・S3 Express One Zone
・S3でウェブサイトをホスト
・AWS IAM (1):ロール作成の基本
・IAMロールを作る
・IAMポリシーの作り方
・インラインポリシー
・AWS Lambda (2):サービス連携の応用
・LambdaとS3の連携
・LambdaとAmazon Translateの連携
・S3トリガーによるLambdaの実行
・S3トリガーによるTranslate
・Amazon SQS
・予約済み同時実行数
・LambdaとSQSの連携
・デッドレターキュー
・Amazon SNSを活用したメール通知
・Elastic Container Registry
・DockerベースのLambda
・シークレットの安全な管理
・シークレットの管理:SSM パラメーターストア
・シークレットの管理:Secrets Manager
・AWS App Runner
・App Runnerを活用した画像分類ブラウザアプリ
・AWS Step Functions
・テンプレート構文への代入(templatefile)
・Step Functions : 2つのLambdaをつなぐ
・Step Functions : 入出力の受け渡し
・Step Functions : 条件分岐
・Step Functions : リトライ
・Step Functions : 遅延処理
・Step Functions : 並列処理