見出し画像

Terraform奮闘日記#4

こんにちは!分析屋の加成(かなり)です。
私はAWSを用いて社内の勤怠システムのAPIを開発する業務を行っています。
具体的には下図のようなAWSの構成をTerrafromを用いて構築します。

これまでにもTerraformについての記事を書いていますのでぜひチェックしてみてください!
・#1:Terraformのメリットや使い方
Terrafromのメリットや使い方について記載しましたので、Terraform未経験者の人は#1から読んでみてください!!

・#2:AWSのLambda関数をTerraformにて作成
実際にTerraformを使って、AWSのLambda関数を作成してみました!

・#3:Lambda関数を実行するEventBridge ScheduleをTerraformにて作成

#4ではTerraformによるIAMポリシーとIAMロールの作成方法を記載します!




■概要

まず、今回Terraformを用いて作成するIAMポリシーとIAMロールのイメージを記載します。
最終的にはIAMロールをLambda関数に付与します。


■IAMポリシーの作成方法

IAMポリシーはaws_iam_policy_documentとaws_iam_policyを用いて作成することができる。
コードは以下。
# ポリシードキュメントを作成
data "aws_iam_policy_document" "iam_policy_lambda_document" {
    statement {
        actions =  [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ]
        resources = ["*"]
        effect = "Allow"
    }
}

# 上記で作成したポリシードキュメントを用いてリソースを定義
resource "aws_iam_policy" "iam_policy_lambda" {
    name = "iam_policy_for_lambda_test"
    policy = data.aws_iam_policy_document.iam_policy_lambda_document.json
}

aws_iam_policy_documentに許可する内容を記載することでポリシーを柔軟に変更することができる。


■IAMロールの作成方法

IAMロールはaws_iam_policy_documentとaws_iam_roleを用いて作成する。
コードは以下。

# lambda用のポリシードキュメントを作成
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_test"
    assume_role_policy = data.aws_iam_policy_document.lambda_assume_role.json
}


■IAMロールへのポリシーのアタッチ

作成したIAMロールにIAMポリシーをアタッチします。
コードは以下。

# 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_lambda
}


■Lambda関数に付与する方法

最後にLambda関数に上で作成したIAMロールを付与します。
付与方法はLambda関数を作成した際にIAMロールを設定します。
コードは以下。

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

# デプロイ
resource "aws_lambda_function" "test_function" {
  function_name    = "test_function"
  filename         = data.archive_file.function_info.output_path
  source_code_hash = data.archive_file.function_info.output_base64sha256
  runtime          = "python3.12"
 # IAMロールを付与
  role             = aws_iam_role.iam_role_for_lambda.arn
  handler          = "test.handler"
}


■結果確認

では実際に上記のコードを用いてAWSに環境構築してみましょう!
コマンドプロンプトで順番にコマンドを実行します。
terraform init
main.tfにて設定したプロバイダーをインストール
terraform plan
applyした場合のシミュレーション。エラーが出力されたら、コードの見直し
terraform apply
実際にAWSに環境構築

実行した結果、、、、、

無事作成したLambda関数に上で作成したIAMロールとIAMポリシーが付与されました!IAM権限については今回作成している中で躓いたところではあるので、ぜひ参考にしてください!

次回の#5ではgithub actionを用いたTerraformの実行について記載しようと思いますので、お待ちください!




これまでの記事はこちら!


ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!
分析屋ではBIを使ったデータ可視化に関するサービスサイトもございます。Power BIやTableauに関するお困りごとがございましたらお気軽にお問い合わせください。

株式会社分析屋について

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

ホームページはこちら。

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

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。