こんにちは!株式会社パレットリンクのやまりおです✨
いつも会社のブログ更新をしていますが、初めて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が成功すると・・・
②lambdaの実行をしてみる💪
※profileは自身がaws configureで設定したprofileに置き換えてください。
aws lambda invoke --function-name sample-lambda --profile dev response.json
🔽lambda実行が成功すると・・・
③destroyコマンドでインフラ削除
terraform destroy -var-file="example.tfvars" -auto-approve
🔽destroyが成功すると・・・
🌷 まとめ
今回はTerraformを使って
・AWSのLambdaとS3を構築
・lambdaの実行テスト
・インフラ削除
を実施してみました。
意外と簡単に構築出来て、便利なツールだな~と思いました😊
使っているうちに今よりも詳しくなれると思うので
もし共有したいことができたら、また記事にします!
🤖 おまけ
私は最近AIについても勉強中・・・で
今回はVScodeのチャット欄で
GitHub Copilotとおしゃべりしながら作ってもらいました。
このくらいの構築なら無料枠でいけました✨

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





