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

2025年09月29日 月曜日


【この記事を書いた人】
伊藤 綾夏

名古屋支社開発チームのスクラムマスターとして日々奮闘中。よいサービス、よいプロダクトは楽しく元気なチームから生まれると思っています!関わる人すべてが笑顔になるために、私は何ができるのだろうか・・・。

「インフラをコードで書いてみよう! ~お金がかからない安心・最小IaC体験~」のイメージ

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 コンソールを少しだけ操作して「バケットを空にする」手作業が必要になる場合があります。すべてをコードで完結できませんが、最小化のためですのでご容赦ください 。

    それではさっそく作ってみましょう!

    プロジェクト作成

    mkdir iac-sample && cd iac-sample
    cdk init app --language typescript

    フォルダ構成です。今から作るファイルの保存場所を合わせてください。
    先ほどのコマンドを実行した際にサンプルファイルやテストコードなどが含まれていますが、気にせずサンプルコードの2つを作成、上書きしてください。

    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

     

    削除

    1. AWS コンソールでバケットを開き「空にする」をクリック(ここで少しコンソール操作が入ります)
    2. その後に以下のコマンドを実行
    cdk destroy IacSampleStack --profile my-profile

    Are you sure you want to delete: IacSampleStack (y/n)?と表示された場合は y を入力して進んでください。

    DELETE_COMPLETEIacSampleStack (iac-sample-stack): destroyedと表示されていましたら削除完了です!
    コンソール画面からも消えていることが確認できます。
    これで作成したものがすべて消えました!お疲れ様でした!

    名古屋支社開発チームでの IaC 導入

    スクラムでは「短いサイクルで試す→学ぶ→直す」が基本です。IaC はこれを後押ししてくれます。
    名古屋支社開発チームでも IaC で環境構築をしています!

    冒頭にあるメリットをチーム目線で見てみるとこのようになります。

    • 再現性がある:誰が実行しても同じ環境を作ることができる → 誰でも構築と実装ができる
    • 履歴が残る:Gitで「誰がいつ何を変えたか」が追える → Pull Request などでコードレビューができる
    • 手作業のミスを減らせる:クリック間違いや押し忘れがなくなる → レビューと同一のものをそのままリリースできる
    • チームで共有できる:「このコードを使ってね」と渡すことができる → オンボーディングが速く属人化を防ぐことができる

    また、CI/CD パイプラインに組み込めばチーム全体で共通の方法でデプロイできるため、個人依存ではなく “チームの仕組み” として安定稼働もでき、一度整備すればチーム全体の効率や信頼性にも繋がります!

    チームの仕組みづくりや安定したリリースには欠かせない IaC、今回の最小 IaC 体験から少しでもメリットが伝わりましたら嬉しいです!

    伊藤 綾夏

    2025年09月29日 月曜日

    名古屋支社開発チームのスクラムマスターとして日々奮闘中。よいサービス、よいプロダクトは楽しく元気なチームから生まれると思っています!関わる人すべてが笑顔になるために、私は何ができるのだろうか・・・。

    Related
    関連記事