6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🌸 TerraformでAWS Lambda・S3を構築&構築削除してみた

6
Last updated at Posted at 2026-07-09

こんにちは!株式会社パレットリンクのやまりおです✨

いつも会社のブログ更新をしていますが、初めてQiita記事を書きます😎✨

私はこれまでAWS環境の構築では
「CloudFormation」を使うことが多かったのですが
現在の業務で「Terraform」を利用する機会があり
勉強を兼ねて、備忘録用にまとめてみました。

📖 今回実施したこと

  • TerraformコマンドでLambdaとS3を構築。
  • 作成したlambdaのテスト実行。
    • S3にjsonファイルをアップロードする処理。
  • Terraformコマンドで作成したインフラリソースの削除。

🛠️ 今回作る構成

今回構築する構成はこちらです。

Terraform
↓
AWS

📦 S3
⚡ Lambda
🔐 IAM Role

Terraformから以下のリソースを作成します。

  • S3バケット
  • Lambda関数
  • IAMロール(lambdaからS3へのアクセス権限)

🛠️ 環境

  • Terraform v1.15.7
  • AWS CLI 2.34.52
  • Windows 11
  • GitHub Copilot(無料枠)
C:\study\terraform>terraform --version
Terraform v1.15.7
on windows_amd64

C:\study\terraform>aws --version
aws-cli/2.34.52 Python/3.14.5 Windows/11 exe/AMD64

✅ 前提

・AWSアカウントの作成
・AWS CLIの設定
・Terraformのインストール

📝 Terraformとは

Terraform(テラフォーム)とは・・・
HashiCorp社が開発した「インフラをコードで管理・構築することができるIaCツール」のこと。

  • 特徴
    • CloudFormationはAWS専用ですが、TerraformはAWS以外のクラウドサービスにも反映可能。
    • 現在の状態との差分を見て、必要な個所のみインフラ更新。(Stateファイル(tfstate)で現在の状態を管理)

✏️ Terraform構築部品の概要

以下で部品ごとのコードを紹介します。

私は下記のまとめをmdファイルでGitHub Copilotに参考情報として渡して、ソースコードを作成してもらいました。
皆さんの構築にも、役立ててもらえたら嬉しいです✨

📦 S3バケット作成部分

  • S3バケットの作成。
  • バケット名は、自分のオリジナル名で作成してください。
resource "aws_s3_bucket" "sample" {
  bucket = "yamario-terraform-sample-bucket"
}

resource "aws_s3_bucket_public_access_block" "sample" {
  bucket = aws_s3_bucket.sample.id

  block_public_acls       = true
  ignore_public_acls      = true
  block_public_policy     = true
  restrict_public_buckets = true
}

🔐 IAMロール作成部分

  • Lambda用IAMロール
resource "aws_iam_role" "lambda_role" {
  name = "sample-lambda-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      }
    ]
  })
}
  • S3アクセス用ポリシー
resource "aws_iam_role_policy" "s3_access" {
  name = "lambda-s3-access"
  role = aws_iam_role.lambda_role.id

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Action = [
          "s3:GetObject",
          "s3:PutObject"
        ]
        Resource = [
          "${aws_s3_bucket.sample.arn}/*"
        ]
      }
    ]
  })
}
  • 作成したポリシーをロールへ付与する箇所
    • lambdaロールにS3とCloudwatchの権限を付与する。
resource "aws_iam_role_policy_attachment" "lambda_s3" {
  role       = aws_iam_role.lambda_role.name
  policy_arn = aws_iam_role_policy.s3_access.arn
}

resource "aws_iam_role_policy_attachment" "lambda_logs" {
role = aws_iam_role.lambda_role.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}

⚡ Lambda作成部分

  • lambda処理の中身

今回の内容と逸れるので、ソースコード省略。
AIに「lambdaのソースコードの中身を作ってほしい。S3のバケットに「test.json」を作成する処理がいいな。」と伝えて作ってもらいました🤖

  • lambdaの作成
resource "aws_lambda_function" "sample_lambda" {
  function_name = "sample-lambda"

  role    = aws_iam_role.lambda_role.arn
  handler = "index.handler"
  runtime = "nodejs22.x"

  filename = "sample-lambda.zip"
}

💪 動かしてみる

①まずはAWS環境へ反映✨

# 0.環境変数のセット
# ※profileは自身がaws configureで設定したprofileに置き換えてください。
$env:AWS_PROFILE = "dev"

# 1. Lambda を ZIP 化
powershell -File terraform/build-lambda.ps1

# 2. Terraform 初期化
cd terraform
terraform init

# 3. インフラ構築の差分確認
terraform plan -var-file="example.tfvars"

# 4. インフラ構築を適用
terraform apply -var-file="example.tfvars"

🔽applyが成功すると・・・

🛠️S3バケットが作成されている
image.png

🛠️lambda関数が作成されている
image.png


②lambdaの実行をしてみる💪

※profileは自身がaws configureで設定したprofileに置き換えてください。

aws lambda invoke --function-name sample-lambda --profile dev response.json

🔽lambda実行が成功すると・・・

✅lambda関数で作成したjsonファイル発見✨
image.png

✅CloudWatchにログ出力もされている。
image.png


③destroyコマンドでインフラ削除

terraform destroy -var-file="example.tfvars" -auto-approve

🔽destroyが成功すると・・・

🗑️バケットが削除される
image.png

🗑️lambdaが削除される
image.png

🌷 まとめ

今回はTerraformを使って
・AWSのLambdaとS3を構築
・lambdaの実行テスト
・インフラ削除
を実施してみました。

意外と簡単に構築出来て、便利なツールだな~と思いました😊
使っているうちに今よりも詳しくなれると思うので
もし共有したいことができたら、また記事にします!

🤖 おまけ

私は最近AIについても勉強中・・・で
今回はVScodeのチャット欄で
GitHub Copilotとおしゃべりしながら作ってもらいました。
このくらいの構築なら無料枠でいけました✨
image.png

現場で色んなAI使わせてもらえるので
もっと使いこなせるように頑張りたいなあと思います💭

以上、やまりおでした!

パレットリンクでは、日々のつながりや学びを大切にしながら、さまざまなお役立ち記事をお届けしています。よろしければ、ぜひ「Organization」のページもご覧ください。
また、私たちと一緒に未来をつくっていく仲間も募集中です。ご興味をお持ちの方は、ぜひお気軽にお問い合わせください。一緒に新しいご縁が生まれることを楽しみにしています。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?