インフラをコードで書いてみよう! ~お金がかからない安心・最小IaC体験~
2025年09月29日 月曜日

CONTENTS
IaC とは
IaC(Infrastructure as Code)は、インフラ環境をコードで管理する仕組みです。
手作業でのインフラ設定はコンソールをポチポチ操作しますが、IaC ではコードに「こんな環境が欲しい」と書いて実行するとリソースを構築できます。
最近ではデジタル庁のデジタル社会推進標準ガイドライン 『DS-202 CI/CDパイプラインにおけるセキュリティの留意点に関する技術レポート』に、『別添. CI/CDパイプラインによるInfrastructure as Code実装例』が 2025/06/30 に公開され、IIJ も「IIJ IaC導入支援ソリューション」を 2025/09/03 に提供開始しました!
「何から始めれば良いか分からない」の壁を越えやすく、IaC に踏み出せる環境が整ってきました!
メリットはいろいろとありますが、特に分かりやすいのはこのあたりでしょうか。
- 再現性がある:誰が実行しても同じ環境を作ることができる
- 履歴が残る:Gitで「誰がいつ何を変えたか」が追える
- 手作業のミスを減らせる:クリック間違いや押し忘れがなくなる
- チームで共有できる:「このコードを使ってね」と渡すことができる、コードレビューができる
最小 IaC 体験
「ちょっとやってみたいけど、間違えて設定して高額な請求が届いたらこわい……」と不安になる方もご安心ください。
今回紹介するのは AWS で S3 バケットを 1 つ作るだけの最小 IaC 体験です!
- バケット自体には料金はかからない
- 空のままならストレージ費用もゼロ
- 外部からアクセスできない設定(
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL
)をするので、意図しない通信費用もゼロ - 削除も簡単(バケットを空にしてから
cdk destroy
するだけ!)
つまり、誰でもコストの心配なしに IaC を試せます。
ブートストラップとは?そして今回は使いません!
AWS CDK にはブートストラップという仕組みがあります。
これは「CDK 自身が利用する基盤リソース」を AWS アカウント内に準備するものです。
S3 のバージョニングを有効化して安全に削除・運用したり、GitHub Actions や CodePipeline から IaC を自動デプロイする際に成果物を置く場所(S3)や実行権限(IAM)を使えるようになりますが、今回は
- 新しい概念が出てきて「CDKToolkit って何?」と混乱しやすい
- 削除時に「ツールキットごと消すかどうか」で迷うことがある
といったハードルを下げるため、今回はブートストラップを使わず、S3 バケットを1個作るだけにしました!
まずは IaC の本質である「コードでインフラ環境を作れる・消せる」 を最小で体験していただきたいです!
※ 削除の際には AWS コンソールを少しだけ操作して「バケットを空にする」手作業が必要になる場合があります。すべてをコードで完結できませんが、最小化のためですのでご容赦ください 。
それではさっそく作ってみましょう!
プロジェクト作成
iac-sample/ ├─ bin/ │ └─ iac-sample.ts ├─ lib/ │ └─ frontend-stack.ts ├─ package.json ├─ cdk.json └─ tsconfig.json
サンプルコード
bin/iac-sample.ts
#!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import { FrontendStack } from '../lib/frontend-stack'; const app = new cdk.App(); new FrontendStack(app, 'IacSampleStack', { env: { region: 'ap-northeast-1' }, stackName: 'iac-sample-stack', }); app.synth();
lib/frontend-stack.ts
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class FrontendStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'IacSampleBucket', { // グローバル一意の制約があるため、念のためアカウントIDとリージョンを付けています bucketName: `iac-sample-bucket-${this.account}-${this.region}`, versioned: false, // 削除を簡単にするためバージョニングはオフ blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, // 外部アクセス禁止 removalPolicy: cdk.RemovalPolicy.DESTROY, // スタック削除時にバケットも削除 }); } }
デプロイ & 削除
デプロイ
作成した CDK アプリに定義したスタックを、指定の AWS 認証情報(プロファイル)で作成します。
プロファイルの作り方は、AWS 公式のガイド(AWS CDK の開始方法、AWS CLI コマンドラインオプション)等からご自身の環境にあった設定をお願いします。
アクセスキー方式や SSO 方式がありますが、シンプルに試したい方はAWS CLI コマンドラインオプションの --profile <string>
の欄をご覧ください。サンプルコードと同一にしたい場合は aws configure --profile my-profile
でアクセスキー方式のプロファイルを作成します。
作成した環境で以下を実行してデプロイします。
cdk ls --profile my-profile # デプロイ対象になるスタック名(IacSampleStack)が表示される cdk synth --profile my-profile # 生成される CloudFormation テンプレートを出力(作成はされない) cdk diff --profile my-profile # 「何が作られるか/変更されるか」をプレビュー。ここで "account/region" の表示も確認できる npm install cdk deploy --profile my-profile
作られるリソースはこちらです。
- S3 バケット:
iac-sample-bucket-<アカウントID>-<リージョン>
- CloudFormation スタック:
iac-sample-stack
削除
cdk destroy IacSampleStack --profile my-profile
Are you sure you want to delete: IacSampleStack (y/n)?
と表示された場合は y
を入力して進んでください。
DELETE_COMPLETE
や IacSampleStack (iac-sample-stack): destroyed
と表示されていましたら削除完了です!
コンソール画面からも消えていることが確認できます。
これで作成したものがすべて消えました!お疲れ様でした!
名古屋支社開発チームでの IaC 導入
スクラムでは「短いサイクルで試す→学ぶ→直す」が基本です。IaC はこれを後押ししてくれます。
名古屋支社開発チームでも IaC で環境構築をしています!
冒頭にあるメリットをチーム目線で見てみるとこのようになります。
- 再現性がある:誰が実行しても同じ環境を作ることができる → 誰でも構築と実装ができる
- 履歴が残る:Gitで「誰がいつ何を変えたか」が追える → Pull Request などでコードレビューができる
- 手作業のミスを減らせる:クリック間違いや押し忘れがなくなる → レビューと同一のものをそのままリリースできる
- チームで共有できる:「このコードを使ってね」と渡すことができる → オンボーディングが速く属人化を防ぐことができる
また、CI/CD パイプラインに組み込めばチーム全体で共通の方法でデプロイできるため、個人依存ではなく “チームの仕組み” として安定稼働もでき、一度整備すればチーム全体の効率や信頼性にも繋がります!
チームの仕組みづくりや安定したリリースには欠かせない IaC、今回の最小 IaC 体験から少しでもメリットが伝わりましたら嬉しいです!