main.tf 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. terraform {
  2. required_version = ">= 1.5"
  3. required_providers {
  4. aws = { source = "hashicorp/aws", version = "~> 5.0" }
  5. }
  6. }
  7. provider "aws" {
  8. region = var.aws_region
  9. }
  10. # ============================================================
  11. # Variables
  12. # ============================================================
  13. variable "aws_region" {
  14. default = "ap-northeast-1"
  15. }
  16. variable "project" {
  17. default = "sp-transcribe"
  18. }
  19. variable "smtp_host" { type = string }
  20. variable "smtp_port" {
  21. type = number
  22. default = 587
  23. }
  24. variable "smtp_user" { type = string }
  25. variable "smtp_pass" {
  26. type = string
  27. sensitive = true
  28. }
  29. variable "smtp_from" { type = string }
  30. variable "llm_api_url" { type = string }
  31. variable "llm_api_key" {
  32. type = string
  33. sensitive = true
  34. }
  35. variable "llm_model" {
  36. type = string
  37. default = "gpt-4o-mini"
  38. }
  39. locals {
  40. prefix = var.project
  41. }
  42. # ============================================================
  43. # S3 Bucket
  44. # ============================================================
  45. resource "aws_s3_bucket" "media" {
  46. bucket_prefix = "${local.prefix}-media-"
  47. force_destroy = true
  48. }
  49. resource "aws_s3_bucket_lifecycle_configuration" "media" {
  50. bucket = aws_s3_bucket.media.id
  51. rule {
  52. id = "cleanup"
  53. status = "Enabled"
  54. filter {}
  55. expiration { days = 7 }
  56. }
  57. }
  58. # ============================================================
  59. # DynamoDB
  60. # ============================================================
  61. resource "aws_dynamodb_table" "users" {
  62. name = "${local.prefix}-users"
  63. billing_mode = "PAY_PER_REQUEST"
  64. hash_key = "api_key"
  65. attribute {
  66. name = "api_key"
  67. type = "S"
  68. }
  69. }
  70. resource "aws_dynamodb_table" "jobs" {
  71. name = "${local.prefix}-jobs"
  72. billing_mode = "PAY_PER_REQUEST"
  73. hash_key = "job_id"
  74. attribute {
  75. name = "job_id"
  76. type = "S"
  77. }
  78. ttl {
  79. attribute_name = "ttl"
  80. enabled = true
  81. }
  82. }
  83. # ============================================================
  84. # SSM Parameters (secrets)
  85. # ============================================================
  86. resource "aws_ssm_parameter" "smtp_host" {
  87. name = "/${local.prefix}/smtp/host"
  88. type = "String"
  89. value = var.smtp_host
  90. }
  91. resource "aws_ssm_parameter" "smtp_port" {
  92. name = "/${local.prefix}/smtp/port"
  93. type = "String"
  94. value = tostring(var.smtp_port)
  95. }
  96. resource "aws_ssm_parameter" "smtp_user" {
  97. name = "/${local.prefix}/smtp/user"
  98. type = "String"
  99. value = var.smtp_user
  100. }
  101. resource "aws_ssm_parameter" "smtp_pass" {
  102. name = "/${local.prefix}/smtp/pass"
  103. type = "SecureString"
  104. value = var.smtp_pass
  105. }
  106. resource "aws_ssm_parameter" "smtp_from" {
  107. name = "/${local.prefix}/smtp/from"
  108. type = "String"
  109. value = var.smtp_from
  110. }
  111. resource "aws_ssm_parameter" "llm_api_url" {
  112. name = "/${local.prefix}/llm/api_url"
  113. type = "String"
  114. value = var.llm_api_url
  115. }
  116. resource "aws_ssm_parameter" "llm_api_key" {
  117. name = "/${local.prefix}/llm/api_key"
  118. type = "SecureString"
  119. value = var.llm_api_key
  120. }
  121. resource "aws_ssm_parameter" "llm_model" {
  122. name = "/${local.prefix}/llm/model"
  123. type = "String"
  124. value = var.llm_model
  125. }