ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • github actions, ecs, ecr을 이용한 CI/CD - 3
    infra 2023. 2. 26. 16:27

    ecs 설정 

     

    클러스터를 먼저 생성 해준다

    이것을 테라폼으로 표현 해볼예정이다 

     

    ecs 클러스터 생성이다

    resource "aws_ecs_cluster_capacity_providers" "aws_ecs_cluster_cps" {
      cluster_name = aws_ecs_cluster.jhc_cluster.name
    
      capacity_providers = [aws_ecs_capacity_provider.jhc-ecs-cp.name]
    
      default_capacity_provider_strategy {
        base              = 1
        weight            = 100
        capacity_provider = aws_ecs_capacity_provider.jhc-ecs-cp.name
      }
    }
    
    resource "aws_ecs_capacity_provider" "jhc-ecs-cp" {
      name = "${var.app_name}-${var.app_environment}-ecs-cp"
    
      auto_scaling_group_provider {
        auto_scaling_group_arn = aws_autoscaling_group.asg.arn
      }
    }
    
    resource "aws_ecs_cluster" "jhc_cluster" {
      name = "${var.app_name}-${var.app_environment}-ecs-cluster"
    
      configuration {
        execute_command_configuration {
          kms_key_id = aws_kms_key.ecs_cluster_kms_key.arn
          logging    = "OVERRIDE"
    
          log_configuration {
            cloud_watch_encryption_enabled = true
            cloud_watch_log_group_name     = aws_cloudwatch_log_group.ecs_cluster_log.name
            s3_bucket_name = ""
          }
        }
      }
    }

     

    아래는 보안그룹 및 위에서 연결한 autoscaling group, ec2 instance profile에 관한 내용이다 

    여기서 좀 헤멘 부분이 ami인데 이것을 ecs가 설치 된 ami를 선택한다 

    - terraform script

    
    resource "aws_iam_instance_profile" "ecs_agent" {
      name = "ecs-agent"
      role = aws_iam_role.ecs_agent.name
    }
    
    
    resource "aws_security_group" "ec2-sg" {
      vpc_id = aws_vpc.jhc_vpc.id
    
      ingress {
        from_port        = 443
        to_port          = 443
        protocol         = "tcp"
        cidr_blocks      = ["0.0.0.0/0"]
        ipv6_cidr_blocks = ["::/0"]
      }
    
      ingress {
        from_port        = 8080
        to_port          = 8080
        protocol         = "tcp"
        cidr_blocks      = ["0.0.0.0/0"]
        ipv6_cidr_blocks = ["::/0"]
      }
    
      ingress {
        from_port        = 22
        to_port          = 22
        protocol         = "tcp"
        cidr_blocks      = ["0.0.0.0/0"]
        ipv6_cidr_blocks = ["::/0"]
      }
    
      egress {
        from_port        = 0
        to_port          = 0
        protocol         = "-1"
        cidr_blocks      = ["0.0.0.0/0"]
        ipv6_cidr_blocks = ["::/0"]
      }
      tags = {
        Name        = "${var.app_name}-sg"
        Environment = var.app_environment
      }
    }
    
    
    resource "aws_launch_configuration" "ecs_launch_config" {
      image_id      = "ami-0b6d6fc5fe3f750f1" #amazon ec2
      iam_instance_profile = aws_iam_instance_profile.ecs_agent.name
      security_groups      = [aws_security_group.ec2-sg.id]
      user_data = <<EOF
            #!/bin/bash
            echo ECS_CLUSTER=${aws_ecs_cluster.jhc_cluster.name} >> /etc/ecs/ecs.config
            EOF
      instance_type        = "t3.small"
      name_prefix = "${var.app_name}-${var.app_environment}"
      key_name = "test_key"
    }
    
    resource "aws_autoscaling_group" "asg" {
      vpc_zone_identifier       = aws_subnet.public.*.id
      name                      = "${var.app_name}-${var.app_environment}-asg"
      max_size                  = 2
      min_size                  = 1
      health_check_grace_period = 300
      health_check_type         = "EC2"
      desired_capacity          = 2
      force_delete              = true #운영단에서는 false 취급한다
      target_group_arns = [aws_lb_target_group.target_group.arn]
      launch_configuration = aws_launch_configuration.ecs_launch_config.name
    }

     

     

     

     

Designed by Tistory.