見出し画像

Terraform奮闘日記#1

■自己紹介

こんにちは!分析屋の加成(かなり)です。
私はAWSを用いて社内の勤怠システムのAPIを開発する業務を行っています。
具体的には下図のようなAWSの構成をTerrafromを用いて構築します。
本業務のゴールは現状"人"が実施している勤怠管理の業務を容易化することです。

Terraform奮闘日記ではTerraformを使用した経験が無い私がTerraformを使って、本業務のゴールを達成するまでの道のりを記録として残していきます!!!




■Terraformとは何?

概要

まず、Terraformについて無知のため、簡単にTerraformとは何かを調べました。
TerraformはIaC(Infrastructure as Code)と呼ばれるツール(IaCとはAWSなどのITインフラをコードで構築・管理すること。)
したがって、Terraformを用いることでコーディングによるAWSなどの環境構築を実施可能となります!

メリット

Terraformとはなにかということがわかったところで次に、
「なぜわざわざコードで環境構築する必要があるのだ」
と疑問に思いました。
調べてみるとTerrafromを用いるメリットは3つあります。

  • Gitと組み合わせることで変更履歴を管理可能であり、以前の環境に戻すことが可能

  • コードによる管理のため、インフラ構成の複製や使い回しが可能

  • 細かい設定を毎回実施する必要が無いため、環境構築時の設定の抜け漏れを削減可能

つまり、UI操作での環境構築は追加や変更があった際に手間がかかりますが、Terraformを用いた環境構築は抜け漏れなく、簡単に追加や変更を実施できるメリットがあります!


■Terraformを使ってみる。

Terraformを使う理由も理解したところで、早速使用していきましょう!
まずはTerraformを用いてどのようにITインフラの環境が構築されるかのイメージです。
大まかな流れとしては2つのステップを踏みます。

  1. .tfファイルの作成

  2. コマンドプロンプトでのコマンド実行

今回は例としてLambdaの関数をデプロイしてみます。

.tfファイルの作成

.tfファイルの作成ではコーディングを行うことで構築したい環境の構成を記載します。
実際に記載したコードは以下。

# terraformの環境設定
terraform {
   required_providers {
        aws = {
            source = "hashicorp/aws"
            version = "~> 4.16"
        }
        archive = {
            source  = "hashicorp/archive"
            version = "2.4.0"
        }
    }
    required_version = ">= 1.2.0"
}

# awsの設定
provider "aws" {
    region = "us-west-1"   
}


# lambda用のIAMロールの設定
data "aws_iam_policy_document" "lambda_assume_role" {
    statement {
        effect = "Allow"
        principals {
            type        = "Service"
            identifiers = ["lambda.amazonaws.com"]
        }
        actions = ["sts:AssumeRole"]
    } 
}

resource "aws_iam_role" "iam_role_for_lambda" {
    name = "iam_role_for_lambda"

    assume_role_policy = data.aws_iam_policy_document.lambda_assume_role.json
}


# lambda用のIAMポリシーの定義
data "aws_iam_policy" "iam_policy_AWSLambda_FullAccess" {
    arn = "arn:aws:iam::aws:policy/AWSLambda_FullAccess"
}

resource "aws_iam_policy" "iam_policy_AWSLambda_FullAccess" {
    name = "iam_policy_for_lambda"
    policy = data.aws_iam_policy.iam_policy_AWSLambda_FullAccess.policy
}

# IAMロールへポリシーをアタッチ
resource "aws_iam_role_policy_attachment" "lambda_policy" {
    role = aws_iam_role.iam_role_for_lambda.name
    policy_arn = aws_iam_policy.iam_policy_AWSLambda_FullAccess.arn

Terraformはブロックに分けてコードを記載します。
terraformブロックではTerraformの設定。今回はAWSに環境構築するため、AWSのプロバイダーをインストールしています。
providerブロックでは環境を構築するAWSの設定。主にアクセスキーやシークレットキーなどのAWSの設定項目を記載します。
resourceブロックでは実際に構築する構成を設定する。今回はデプロイするlambdaに付与するIAM権限を設定しています。

# lambdaのソースコード
data "archive_file" "test_source" {
  type        = "zip"
  source_file = "test.py"
  output_path = "test.zip"
}

# デプロイ
resource "aws_lambda_function" "test_lambda" {
  function_name    = "test_lambda"
  filename         = data.archive_file.test_source.output_path
  source_code_hash = data.archive_file.test_source.output_base64sha256
  runtime          = "python3.9"
  role             = aws_iam_role.iam_role_for_lambda.arn
  handler          = "test.handler"
}

lambda.tfでは実際にデプロイする関数を指定します。※次回に詳細を記載します!

コマンドプロンプトでのコマンド実行

.tfファイルの作成が完了し、実際にAWS環境への構築をします。
環境構築するにはコマンドプロンプトで以下のコマンドを実行します。

  1. terraform init : ディレクトリの初期化とAWSに環境構築するためのプロバイダのインストール

  2. terraform plan : 構築される環境を模擬で構築

  3. terraform apply : 実際にAWSに環境を構築


■環境構築完了

最後に本当にlambdaにデプロイできたのか確認してみましょう!

出来ています!
#1では例としてlambdaのデプロイを実施しましたが、今後も業務のゴールを達成するまで定期的に投稿していきます!!




ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!

株式会社分析屋について

弊社が作成を行いました分析レポートを、鎌倉市観光協会様HPに掲載いただきました。

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!

【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。

【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。

【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。

【SES】
SESサービスも行っております。


この記事が参加している募集