IaCとは
Infrastructure as Code (IaC) とは、手動のプロセスや設定の代わりにコードを使用してコンピューティングインフラストラクチャをプロビジョニングおよびサポートできることをいいます。どのようなアプリケーション環境であっても、オペレーティングシステム、データベース接続、ストレージなどの多くのインフラストラクチャコンポーネントが必要です。デベロッパーは、アプリケーションを開発、テスト、デプロイするためのインフラストラクチャを定期的に設定、更新、メンテナンスする必要があります。
まとめると
- 今までやっていたポチポチが、コマンド実行するだけで済む
- 環境をコードで管理できる
- バージョン管理できる
- 同じ環境を再現できる
- CI/CDで自動デプロイもできる
IaCの種類
参考・画像引用元:https://tech-blog.jtp.co.jp/entry/2023/08/23/200750
- Terraform
- AWS CloudFormation
- AWS CDK
- Azure Resource Manager
- Puppet
- Ansible
- Pulumi
かなり種類があり、ここで紹介しきれていないものもあります。
📝 備考: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を作成するハンズオンを実施しました。