diff --git a/codepipeline-demo/codebuild.tf b/codepipeline-demo/codebuild.tf new file mode 100644 index 0000000..b4b4fa2 --- /dev/null +++ b/codepipeline-demo/codebuild.tf @@ -0,0 +1,47 @@ +# code build +resource "aws_codebuild_project" "demo" { + name = "demo-docker-build" + description = "demo docker build" + build_timeout = "30" + service_role = aws_iam_role.demo-codebuild.arn + encryption_key = aws_kms_alias.demo-artifacts.arn + + artifacts { + type = "CODEPIPELINE" + } + + cache { + type = "S3" + location = aws_s3_bucket.codebuild-cache.bucket + } + + environment { + compute_type = "BUILD_GENERAL1_SMALL" + image = "aws/codebuild/docker:18.09.0" + type = "LINUX_CONTAINER" + privileged_mode = true + + environment_variable { + name = "AWS_DEFAULT_REGION" + value = var.AWS_REGION + } + environment_variable { + name = "AWS_ACCOUNT_ID" + value = data.aws_caller_identity.current.account_id + } + environment_variable { + name = "IMAGE_REPO_NAME" + value = aws_ecr_repository.demo.name + } + environment_variable { + name = "IMAGE_TAG" + value = "latest" + } + } + + source { + type = "CODEPIPELINE" + buildspec = "buildspec.yml" + } +} + diff --git a/codepipeline-demo/codecommit.tf b/codepipeline-demo/codecommit.tf new file mode 100644 index 0000000..b50f1eb --- /dev/null +++ b/codepipeline-demo/codecommit.tf @@ -0,0 +1,4 @@ +resource "aws_codecommit_repository" "demo" { + repository_name = "demo" + description = "This is the demo repository" +} diff --git a/codepipeline-demo/codepipeline.tf b/codepipeline-demo/codepipeline.tf new file mode 100644 index 0000000..872c335 --- /dev/null +++ b/codepipeline-demo/codepipeline.tf @@ -0,0 +1,74 @@ +# +# codepipeline - demo +# +resource "aws_codepipeline" "demo" { + name = "demo-docker-pipeline" + role_arn = aws_iam_role.demo-codepipeline.arn + + artifact_store { + location = aws_s3_bucket.demo-artifacts.bucket + type = "S3" + encryption_key { + id = aws_kms_alias.demo-artifacts.arn + type = "KMS" + } + } + + stage { + name = "Source" + + action { + name = "Source" + category = "Source" + owner = "AWS" + provider = "CodeCommit" + version = "1" + output_artifacts = ["demo-docker-source"] + + configuration = { + RepositoryName = aws_codecommit_repository.demo.repository_name + BranchName = "master" + } + } + } + + stage { + name = "Build" + + action { + name = "Build" + category = "Build" + owner = "AWS" + provider = "CodeBuild" + input_artifacts = ["demo-docker-source"] + output_artifacts = ["demo-docker-build"] + version = "1" + + configuration = { + ProjectName = aws_codebuild_project.demo.name + } + } + } + + stage { + name = "Deploy" + + action { + name = "Deploy" + category = "Deploy" + owner = "AWS" + provider = "ECS" + input_artifacts = ["demo-docker-build"] + version = "1" + + configuration = { + ClusterName = "demo" # name of cluster + ServiceName = "demo" # name of service + } + + role_arn = aws_iam_role.demo-codepipeline.arn + } + } +} + + diff --git a/codepipeline-demo/ecr.tf b/codepipeline-demo/ecr.tf new file mode 100644 index 0000000..4b53fe0 --- /dev/null +++ b/codepipeline-demo/ecr.tf @@ -0,0 +1,4 @@ +resource "aws_ecr_repository" "demo" { + name = "demo" +} + diff --git a/codepipeline-demo/ecs.tf b/codepipeline-demo/ecs.tf new file mode 100644 index 0000000..be16e15 --- /dev/null +++ b/codepipeline-demo/ecs.tf @@ -0,0 +1,4 @@ +resource "aws_ecs_cluster" "demo" { + name = "demo" +} + diff --git a/codepipeline-demo/fargate-service.tf b/codepipeline-demo/fargate-service.tf new file mode 100644 index 0000000..38eb16a --- /dev/null +++ b/codepipeline-demo/fargate-service.tf @@ -0,0 +1,80 @@ +resource "aws_ecs_task_definition" "demo" { + family = "demo" + execution_role_arn = aws_iam_role.ecs-task-execution-role.arn + task_role_arn = aws_iam_role.ecs-demo-task-role.arn + cpu = 256 + memory = 512 + network_mode = "awsvpc" + requires_compatibilities = [ + "FARGATE" + ] + + container_definitions = <