main.tf 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. terraform {
  2. required_providers {
  3. aws = {
  4. source = "hashicorp/aws"
  5. version = "~> 4.16"
  6. }
  7. }
  8. required_version = ">= 1.2.0"
  9. }
  10. provider "aws" {
  11. profile = "weseek"
  12. region = "ap-northeast-1"
  13. }
  14. resource "aws_s3_bucket" "s3_bucket" {
  15. bucket = "growi-official-image-builder-cache"
  16. }
  17. resource "aws_s3_bucket_acl" "s3_bucket_acl" {
  18. bucket = aws_s3_bucket.s3_bucket.id
  19. acl = "private"
  20. }
  21. resource "aws_iam_role" "iam_role" {
  22. name = "growi-official-image-builder"
  23. assume_role_policy = <<EOF
  24. {
  25. "Version": "2012-10-17",
  26. "Statement": [
  27. {
  28. "Effect": "Allow",
  29. "Principal": {
  30. "Service": "codebuild.amazonaws.com"
  31. },
  32. "Action": "sts:AssumeRole"
  33. }
  34. ]
  35. }
  36. EOF
  37. }
  38. resource "aws_secretsmanager_secret" "secret" {
  39. name = "growi/official-image-builder"
  40. }
  41. resource "aws_secretsmanager_secret_version" "main" {
  42. secret_id = aws_secretsmanager_secret.secret.id
  43. secret_string = "CHANGE THIS"
  44. lifecycle {
  45. ignore_changes = [secret_string, version_stages]
  46. }
  47. }
  48. resource "aws_iam_role_policy" "growi-official-image-builder" {
  49. role = aws_iam_role.iam_role.name
  50. policy = <<POLICY
  51. {
  52. "Version": "2012-10-17",
  53. "Statement": [
  54. {
  55. "Effect": "Allow",
  56. "Resource": [
  57. "*"
  58. ],
  59. "Action": [
  60. "logs:CreateLogGroup",
  61. "logs:CreateLogStream",
  62. "logs:PutLogEvents"
  63. ]
  64. },
  65. {
  66. "Effect": "Allow",
  67. "Action": [
  68. "s3:*"
  69. ],
  70. "Resource": [
  71. "${aws_s3_bucket.s3_bucket.arn}",
  72. "${aws_s3_bucket.s3_bucket.arn}/*"
  73. ]
  74. },
  75. {
  76. "Effect": "Allow",
  77. "Action": [
  78. "secretsmanager:GetResourcePolicy",
  79. "secretsmanager:GetSecretValue",
  80. "secretsmanager:DescribeSecret",
  81. "secretsmanager:ListSecretVersionIds"
  82. ],
  83. "Resource": [
  84. "${aws_secretsmanager_secret.secret.arn}"
  85. ]
  86. },
  87. {
  88. "Effect": "Allow",
  89. "Action": [
  90. "codebuild:StartBuild",
  91. "codebuild:StopBuild",
  92. "codebuild:RetryBuild",
  93. "codebuild:CreateReportGroup",
  94. "codebuild:CreateReport",
  95. "codebuild:UpdateReport",
  96. "codebuild:BatchPutTestCases",
  97. "codebuild:BatchPutCodeCoverages"
  98. ],
  99. "Resource": [
  100. "*"
  101. ]
  102. }
  103. ]
  104. }
  105. POLICY
  106. }
  107. resource "aws_codebuild_project" "codebuild" {
  108. name = "growi-official-image-builder"
  109. description = "The CodeBuild Project for GROWI official docker image"
  110. service_role = aws_iam_role.iam_role.arn
  111. build_batch_config {
  112. service_role = aws_iam_role.iam_role.arn
  113. }
  114. artifacts {
  115. type = "NO_ARTIFACTS"
  116. }
  117. environment {
  118. compute_type = "BUILD_GENERAL1_LARGE"
  119. image = "aws/codebuild/standard:6.0"
  120. type = "LINUX_CONTAINER"
  121. privileged_mode = true
  122. }
  123. source {
  124. # type = "NO_SOURCE"
  125. type = "GITHUB"
  126. location = "https://github.com/weseek/growi.git"
  127. git_clone_depth = 1
  128. buildspec = "packages/app/docker/codebuild/buildspec.yml"
  129. }
  130. source_version = "refs/heads/support/build-with-codebuild"
  131. }