task 정의하기

hyuckhoon.ko·2021년 1월 11일
0

What I learned in first year

목록 보기
53/146

1. variable.tf

AWS ECR 레포지토리 -- > Private -- >URI복사

  • variable.tf 파일 수정
(생략)
variable "ecr_image_api" {
  description = "ECR image for API"
  default = "URI 입력하기:latest"
}

variable "ecr_image_proxy" {
  description = "ECR image for proxy"
  default = "URI 입력하기:latest"
}

variable "django_secret_key" {
  description = "Secret key for Django app"
}

:latest 태그를 URI 바로 뒤에 입력했다.
초기 프로젝트 셋팅시, 가장 최신의 이미지에
latest태그가 입력될 수 있도록 설정했기 때문.

장고 settings.py의 시크릿 키 default는 입력하진 않을 것이다.
(description만 넣음)



2. sample.tfvars

로컬환경
다른 개발자가 로컬환경에서 서버를 run할 때,
django 시크릿 키 값을 입력해야 함을 인지할 수 있도록
sample.tfvars 하단에 내용을 추가한다.

db_username = "recipeapp"
db_password = "changeme"
django_secret_key = "changeme"



3. terraform.tfvars

로컬환경
마찬가지로 django 시크릿 키 내용을 추가한다.

db_username = "recipeapp"
db_password = "changeme"
django_secret_key = "changeme"



4. ECS.tf


data "template_file" "api_container_definitions" {
    template = file("./templates/ecs/container-definitions.json.tpl")

    vars = {
        app_image = var.ecr_image_api
        proxy_image = var.ecr_image_proxy
        django_secret_key = var.django_secret_key
        db_host = aws_db_instance.main.address
        db_name = aws_db_instance.main.name
        db_user = aws_db_instance.main.username
        db_pass = aws_db_instance.main.password
        log_group_name = aws_cloudwatch_log_group.ecs_task_logs.name
        log_group_region = data.aws_region.current.name
        allowed_hosts = "*"
    }
}

resource "aws_ecs_task_definition" "api" {
    family = "${local.prefix}-api"
    container_definitions = data.template_file.api_container_definitions.rendered
    requires_compatibilities = ["FARGATE"]
    network_mode = "awsvpc"
    cpu = 256
    memory = 512
    execution_role_arn = aws_iam_role.task_execution_role.arn
    task_role_arn = aws_iam_role.app_iam_role.arn
    
    volume = {
        name = "static"
    }
    tags = local.common_tags
}



family는 식별자로써, ecs의 유니크한 "작업 정의" 이름이다.

.rendered는 예를 들어, db_host = aws_db_instance.main.address 에서
우측 value값을 실제로 불러오는 것이다.

terraform 출처: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_task_definition



5. terraform init/fmt/validate/plan

docker-compose -f deploy/docker-compose.yml run --rm terraform init

templates 및 ecs 등 인프라의 변화가 생겼기 때문에
terraform으로 반영을 시켜준다.(초기화 진행)


docker-compose -f deploy/docker-compose.yml run --rm terraform fmt
docker-compose -f deploy/docker-compose.yml run --rm terraform validate
docker-compose -f deploy/docker-compose.yml run --rm terraform plan



6. 장고 시크릿키 셋팅(feat.gitlab)

Key에는 TF_VAR_django_secret_key를 추가해준다.


Value에는 문자 및 숫자를 포함한 무작위 문자열을 입력한다.

0개의 댓글