main.tf 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # Minimal Amazon Bedrock Terraform configuration for Llama API deployment
  2. # This creates only the essential IAM resources needed to access Bedrock models
  3. terraform {
  4. required_version = ">= 1.0"
  5. required_providers {
  6. aws = {
  7. source = "hashicorp/aws"
  8. version = "~> 5.0"
  9. }
  10. }
  11. }
  12. provider "aws" {
  13. region = var.aws_region
  14. }
  15. # Data sources
  16. data "aws_caller_identity" "current" {}
  17. data "aws_region" "current" {}
  18. # Local values
  19. locals {
  20. account_id = data.aws_caller_identity.current.account_id
  21. region = data.aws_region.current.name
  22. }
  23. # IAM role for Bedrock access
  24. resource "aws_iam_role" "bedrock_role" {
  25. name = "${var.project_name}-bedrock-role"
  26. assume_role_policy = jsonencode({
  27. Version = "2012-10-17"
  28. Statement = [
  29. {
  30. Action = "sts:AssumeRole"
  31. Effect = "Allow"
  32. Principal = {
  33. Service = [
  34. "lambda.amazonaws.com",
  35. "ec2.amazonaws.com"
  36. ]
  37. }
  38. },
  39. {
  40. Action = "sts:AssumeRole"
  41. Effect = "Allow"
  42. Principal = {
  43. AWS = "arn:aws:iam::${local.account_id}:root"
  44. }
  45. }
  46. ]
  47. })
  48. tags = {
  49. Name = "${var.project_name}-bedrock-role"
  50. Environment = var.environment
  51. ManagedBy = "Terraform"
  52. }
  53. }
  54. # IAM policy for Bedrock model access
  55. resource "aws_iam_policy" "bedrock_access" {
  56. name = "${var.project_name}-bedrock-access"
  57. description = "Minimal policy for accessing Bedrock Llama models"
  58. policy = jsonencode({
  59. Version = "2012-10-17"
  60. Statement = [
  61. {
  62. Effect = "Allow"
  63. Action = [
  64. "bedrock:InvokeModel",
  65. "bedrock:InvokeModelWithResponseStream"
  66. ]
  67. Resource = [
  68. "arn:aws:bedrock:${local.region}::foundation-model/meta.llama4-scout-17b-instruct-v1:0"
  69. ]
  70. }
  71. ]
  72. })
  73. tags = {
  74. Name = "${var.project_name}-bedrock-access"
  75. Environment = var.environment
  76. ManagedBy = "Terraform"
  77. }
  78. }
  79. # Attach policy to role
  80. resource "aws_iam_role_policy_attachment" "bedrock_access" {
  81. role = aws_iam_role.bedrock_role.name
  82. policy_arn = aws_iam_policy.bedrock_access.arn
  83. }
  84. # Optional: Create access key for programmatic access
  85. resource "aws_iam_user" "bedrock_user" {
  86. count = var.create_user ? 1 : 0
  87. name = "${var.project_name}-bedrock-user"
  88. tags = {
  89. Name = "${var.project_name}-bedrock-user"
  90. Environment = var.environment
  91. ManagedBy = "Terraform"
  92. }
  93. }
  94. resource "aws_iam_user_policy_attachment" "user_bedrock_access" {
  95. count = var.create_user ? 1 : 0
  96. user = aws_iam_user.bedrock_user[0].name
  97. policy_arn = aws_iam_policy.bedrock_access.arn
  98. }
  99. resource "aws_iam_access_key" "bedrock_user" {
  100. count = var.create_user ? 1 : 0
  101. user = aws_iam_user.bedrock_user[0].name
  102. }