diff --git a/getting-started/cicd/codebuild/.terraform.lock.hcl b/getting-started/cicd/codebuild/.terraform.lock.hcl new file mode 100644 index 0000000..3d43cb0 --- /dev/null +++ b/getting-started/cicd/codebuild/.terraform.lock.hcl @@ -0,0 +1,43 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/archive" { + version = "2.4.0" + hashes = [ + "h1:EtN1lnoHoov3rASpgGmh6zZ/W6aRCTgKC7iMwvFY1yc=", + "zh:18e408596dd53048f7fc8229098d0e3ad940b92036a24287eff63e2caec72594", + "zh:392d4216ecd1a1fd933d23f4486b642a8480f934c13e2cae3c13b6b6a7e34a7b", + "zh:655dd1fa5ca753a4ace21d0de3792d96fff429445717f2ce31c125d19c38f3ff", + "zh:70dae36c176aa2b258331ad366a471176417a94dd3b4985a911b8be9ff842b00", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:7d8c8e3925f1e21daf73f85983894fbe8868e326910e6df3720265bc657b9c9c", + "zh:a032ec0f0aee27a789726e348e8ad20778c3a1c9190ef25e7cff602c8d175f44", + "zh:b8e50de62ba185745b0fe9713755079ad0e9f7ac8638d204de6762cc36870410", + "zh:c8ad0c7697a3d444df21ff97f3473a8604c8639be64afe3f31b8ec7ad7571e18", + "zh:df736c5a2a7c3a82c5493665f659437a22f0baf8c2d157e45f4dd7ca40e739fc", + "zh:e8ffbf578a0977074f6d08aa8734e36c726e53dc79894cfc4f25fadc4f45f1df", + "zh:efea57ff23b141551f92b2699024d356c7ffd1a4ad62931da7ed7a386aef7f1f", + ] +} + +provider "registry.terraform.io/hashicorp/aws" { + version = "5.29.0" + hashes = [ + "h1:SyiKAX/D3ZE9My7P03DrRMf65pNnfSDQXPb0g11lCS0=", + "zh:0453c1c64e51cd7050ce46d9280a0195b9073592508077ebf1a1c45f7026f3f5", + "zh:3ee87d1a2870b61fdcc80f3f96b669dbcc8171aadb821bec0e1fa0e6fb9595b6", + "zh:423c0304eba345167cc37dcd300712f24f03fe4de8eecc15edb0d4f88b29ec79", + "zh:6816ce0ed702263297a8e02467bb712c509a9f6e4f132a152a10f1cc19191a81", + "zh:6feb8a0aedabd778216238e72273f5c2ee86d8841acc3fb3dc9d8014a2bbdc51", + "zh:709ccdc8b37f975d422e7955814671548887613931e234e06249da629b0f2f95", + "zh:76c55744020dbdafea25be634f8ac37c1e371f8c397f73bd89bc270d00ee0834", + "zh:7e48d6fc488b9dbe2fd4bebefa1b485d04da38b11a6799f8cba178173b7f8782", + "zh:951d7ef2adbfb96b1d3e9c4780b2ab4375caf9c6b522a2d023c02ff0698d8e2a", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:b0bf5974bc1a7d2ce3f3a9a31a8238ad15ad02211f1e84c54832541ec4bd5d10", + "zh:cc56d4ab9bcbee95f73dbe90f11d4ff7299b835dddf2b30cfda526a2cccd0f9f", + "zh:cfe3a4394f2f7044e03bb63f4fb9c691926607c6784417ac9c0724943da60d09", + "zh:d6f82e13f33f70de8df480287b5a961ced5606f041d1c589f706b112f68db890", + "zh:fb7be5bcff62d0ca9edd4a1bee4d2ed16e9428e3f9eff3ea4d898ecb234505a3", + ] +} diff --git a/getting-started/cicd/codebuild/main.tf b/getting-started/cicd/codebuild/main.tf new file mode 100644 index 0000000..f5039b7 --- /dev/null +++ b/getting-started/cicd/codebuild/main.tf @@ -0,0 +1,115 @@ +provider "aws" { + region = "us-east-1" # Replace with your desired region +} + +# Create S3 buckets +resource "aws_s3_bucket" "demo_aws_codebuild_bucket_output" { + bucket = "tungbq-demo-aws-codebuild-bucket-output" + + tags = { + Name = "S3 bucket to store output code" + Environment = "Dev" + } + + force_destroy = true +} + + + +data "aws_iam_policy_document" "assume_role" { + statement { + effect = "Allow" + + principals { + type = "Service" + identifiers = ["codebuild.amazonaws.com"] + } + + actions = ["sts:AssumeRole"] + } +} + +resource "aws_iam_role" "demo_codebuild" { + name = "demo_codebuild" + assume_role_policy = data.aws_iam_policy_document.assume_role.json +} + +data "aws_iam_policy_document" "demo_codebuild" { + statement { + effect = "Allow" + + actions = [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents", + ] + + resources = ["*"] + } + + statement { + effect = "Allow" + + actions = [ + "ec2:CreateNetworkInterface", + "ec2:DescribeDhcpOptions", + "ec2:DescribeNetworkInterfaces", + "ec2:DeleteNetworkInterface", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:DescribeVpcs", + ] + + resources = ["*"] + } + + + statement { + effect = "Allow" + actions = ["s3:*"] + resources = [ + aws_s3_bucket.demo_aws_codebuild_bucket_output.arn, + "${aws_s3_bucket.demo_aws_codebuild_bucket_output.arn}/*", + ] + } +} + +resource "aws_iam_role_policy" "demo_codebuild" { + role = aws_iam_role.demo_codebuild.name + policy = data.aws_iam_policy_document.demo_codebuild.json +} + + +### CODE BUILD PROJECT +resource "aws_codebuild_project" "demo_project" { + name = "demo_project" + description = "Demo project" + build_timeout = 5 + queued_timeout = 5 + + service_role = aws_iam_role.demo_codebuild.arn + + artifacts { + type = "S3" + location = aws_s3_bucket.demo_aws_codebuild_bucket_output.id + } + + environment { + compute_type = "BUILD_GENERAL1_SMALL" + image = "aws/codebuild/amazonlinux2-x86_64-standard:4.0" + type = "LINUX_CONTAINER" + image_pull_credentials_type = "CODEBUILD" + } + + source { + type = "GITHUB" + location = "https://github.com/tungbq/aws-cicd-source-example.git" + git_clone_depth = 1 + } + + source_version = "main" + + tags = { + Environment = "Test" + } +}