こんにちは。インフラの深淵を覗き込み、混沌としたクラウド環境を「コード」という名の秩序で支配するエンジニアです。
今日は、多くの開発現場で「コピペの罠」に陥りがちなインフラ構築を、「CloudFormation Modules」という強力な武器を使って、美しく、かつ強固なガバナンスのもとで標準化する術を伝授します。
「コピペでいいじゃん」と思ったあなた。その考えが、半年後の大規模障害の引き金になることを知ってください。さあ、安全で再利用可能な「インフラの部品」を作りに行きましょう。
—
1. なぜ「モジュール」なのか?:コピペの呪縛からの解放
これまで、私たちは「ネストされたスタック(Nested Stacks)」や「テンプレートのコピー」でインフラを使い回してきました。しかし、それらは管理が煩雑になりがちで、パラメータの不整合や、セキュリティ設定の漏れという「人間特有のミス」を排除しきれませんでした。
CloudFormation Modulesは、AWSが提供する「リソースの断片化・パッケージ化」の仕組みです。
- ネストされたスタックとの違い: モジュールはスタックではなく、テンプレートの一部(リソース定義)として展開されます。つまり、親スタックの一部として統合されるため、複雑な依存関係の管理から解放されます。
- ガバナンスの強制: セキュリティ設定が組み込まれたモジュールを配布することで、開発チームは「ただ使うだけで、セキュアな構成が強制される」という理想的な環境が整います。
—
2. 開発環境のセットアップ:戦うための準備
まずは、モジュールを管理するためのツールを整えましょう。特別なインストールは不要ですが、AWS CLIとJSON/YAMLの知識があれば十分です。
必要なもの
- AWS CLI: `aws-cli/2.x` 以上が推奨。
- 権限: `cloudformation:RegisterType` などの権限を持つIAMユーザー。
—
3. 実践:HelloWorld的な「セキュアなS3バケット」を作ろう
ただのS3バケットを作るのは簡単ですが、今回は「暗号化が強制され、パブリックアクセスが遮断された標準S3モジュール」を作成します。
ステップ1: モジュールの定義ファイルを作成 (`module.json`)
モジュールはJSON形式で定義します。
{
“AWSTemplateFormatVersion”: “2010-09-09”,
“Description”: “社内標準のセキュアなS3バケット”,
“Resources”: {
“SecureBucket”: {
“Type”: “AWS::S3::Bucket”,
“Properties”: {
“BucketEncryption”: {
“ServerSideEncryptionConfiguration”: [
{ “ServerSideEncryptionByDefault”: { “SSEAlgorithm”: “AES256” } }
]
},
“PublicAccessBlockConfiguration”: {
“BlockPublicAcls”: true,
“BlockPublicPolicy”: true,
“IgnorePublicAcls”: true,
“RestrictPublicBuckets”: true
}
}
}
}
}
ステップ2: モジュールをレジストリに登録
作成した定義を、自身のAWSアカウントのプライベートレジストリに登録します。
モジュールを登録(タイプ名は「会社名::部署名::リソース名」の形式が望ましい)
aws cloudformation register-type \
–type MODULE \
–type-name “MyCorp::Storage::SecureS3” \
–schema-handler-package “s3://my-deployment-bucket/module.zip”
※ `module.zip` には `module.json` を含めておきます。
—
4. 現場で「使う」:開発チームの視点
開発チームがこのモジュールを使うときは、テンプレート内で以下のように記述するだけです。
Resources:
MyTeamBucket:
Type: MyCorp::Storage::SecureS3::MODULE
Properties:
# モジュール内のプロパティを上書き可能
BucketName: “my-production-data-bucket”
これだけで、開発者は暗号化やパブリックアクセス制限の複雑な設定を一切気にすることなく、自動的に「合格点」のインフラを構築できます。
—
5. 伝説のエンジニアからのアドバイス:運用を極めるために
モジュールは一度作って終わりではありません。
1. バージョン管理を徹底せよ: `register-type` を行うたびにバージョンが上がります。破壊的な変更を行う際は必ずマイナー/メジャーバージョンを意識してください。
2. CI/CDパイプラインへの統合: モジュールの更新をトリガーに、全スタックを再デプロイする仕組みを構築しましょう。これができれば、全社レベルのセキュリティアップデートを数分で適用できます。
3. 「ガードレール」として活用せよ: 開発者に自由を与えつつ、インフラの品質だけはモジュールで担保する。これが、大規模組織におけるSREの真髄です。
最後に
インフラ管理は「面倒な作業」ではありません。「コードに意志を込めて、自動的に正しい状態を維持させる」という知的で創造的なエンジニアリングです。
今回紹介したモジュール化技術をマスターすれば、あなたのチームから「設定漏れによる事故」は確実に消滅します。さあ、次のスプリントからは、一歩進んだ「再利用可能なインフラ設計」を始めてみてください。
何か詰まったら、いつでも聞いてください。インフラの深淵から、いつでもアドバイスを送ります。