【AWS2026 #8】IaC

IaCとは

💡
Infrastructure as Code の略。

Infrastructure as Code (IaC) とは、手動のプロセスや設定の代わりにコードを使用してコンピューティングインフラストラクチャをプロビジョニングおよびサポートできることをいいます。どのようなアプリケーション環境であっても、オペレーティングシステム、データベース接続、ストレージなどの多くのインフラストラクチャコンポーネントが必要です。デベロッパーは、アプリケーションを開発、テスト、デプロイするためのインフラストラクチャを定期的に設定、更新、メンテナンスする必要があります。

まとめると
  • 今までやっていたポチポチが、コマンド実行するだけで済む
  • 環境をコードで管理できる
    • バージョン管理できる
    • 同じ環境を再現できる
    • CI/CDで自動デプロイもできる

IaCの種類

参考・画像引用元:https://tech-blog.jtp.co.jp/entry/2023/08/23/200750

  1. Terraform
    Image in a image block
  2. AWS CloudFormation
    Image in a image block
  3. AWS CDK
    Image in a image block
  4. Azure Resource Manager
    Image in a image block
  5. Puppet
    Image in a image block
  6. Ansible
    Image in a image block
  7. Pulumi
    Image in a image block

かなり種類があり、ここで紹介しきれていないものもあります。

📝 備考:Google Cloud Deployment Manager は2026年3月31日にサポートが終了しました。後継としてGoogle Cloud Infrastructure Manager(Terraformベース)が提供されています。

今回は最もメジャーで分かりやすいTerraformを使っていきます。

📝 備考:2023年8月にHashiCorpはTerraformのライセンスをMPL 2.0からBSL (Business Source License) 1.1に変更しました。これに対抗してOSSコミュニティからOpenTofuというフォークが誕生しています。また、2024年にはIBMがHashiCorpを買収しました。Terraformは引き続き提供されていますが、ライセンスの違いには注意が必要です。

IaCを学ぶことの良さ

私自身ニフティに入ってから初めてAWSを触ったのですが、本当になにもわからない状態でした。

最初の配属先でIaCを使ってAWSリソースを構築する業務を行なったことで、AWSへの理解が一気に深まりました。

なんもわからんな人こそ、IaCで学ぶのが最適だと個人的には思います。

Terraformの書き方

TerraformはHCL(hashicorp language)という言語で記述します。jsonとかyamlみたいな見た目に近い。

実際のコードを見てみます。

# ----------------------------
# Provider
# ----------------------------
provider "aws" {
  profile = "terraform_sample"
  region  = "ap-northeast-1"
}

# ----------------------------
# Variables
# ----------------------------
variable "project" {
  type = string
}

variable "environment" {
  type = string
}

# ----------------------------
# EC2 instance
# ----------------------------
resource "aws_instance" "test_ec2" {
    ami = "ami-xx"
    instance_type = "t3.micro"

  tags = {
    Name    = "${var.project}-${var.environment}-ec2"
   }
}

Terraformコマンドを使ってみる

では早速、TerraformでHelloWorldしてみます。

以下のhello_world.tfを準備して、コマンドを使ってみます。

resource "local_file" "helloworld" {
    content  = "hello world!\n"
    filename = "hello.txt"
}

# 初期化処理
terraform init

# 実行結果を事前に確認
terraform plan

# 実行
terraform apply

# 確認が入るので、内容を確認して
yes

cat hello.txt

このような形で、定義した情報をもとに処理を実行してくれます。

この資料ではローカルにファイルを作成しただけですが、研修では実際にLambda、IAM、CloudWatchを作成するハンズオンを実施しました。