🚀 ニフティ’s Notion

☁️ 【AWS2024 #7】IaC

🆕
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 block
  2. AWS CloudFormation
    image block
  3. AWS CDK
    image block
  4. Azure Resource Manager
    image block
  5. Google Cloud Deployment Manager
    image block
  6. Puppet
    image block
  7. Ansible
    image block
  8. Pulumi
    image block

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

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

IaCを学ぶことの良さ

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

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

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

Terraformの書き方

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

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

# ----------------------------
# Provider
# ----------------------------
provider "aws" {f
  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

このような感じで、定義した情報をもとに処理を実行してくれます。今回はローカルにファイルを作成しただけでしたが、次のハンズオンでは実際にAWS上にリソースを作成するハンズオンを実施しました。