suvera-dev ๐Ÿฅฆ

AWS ๋ฐฐํฌ์ž๋™ํ™” ๊ตฌ์ถ• _ 5. ECS ๋ฐฐํฌ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

AWS ๋ฐฐํฌ์ž๋™ํ™” ๊ตฌ์ถ• _ 5. ECS ๋ฐฐํฌ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ

suvera 2023. 7. 14. 10:32

์•ž์„œ ๊ตฌ์ถ•ํ•œ ECS์—์„œ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๊ฐ€ ์ž๋™์ ์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ณผ์ •์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋ฏธ์ง€๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜์–ด์„œ ECR๋กœ pushํ•˜๊ณ , ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ tag๋ฅผ ์ง€์ •ํ•˜์—ฌ ์—…๋กœ๋“œ ํ•˜๋Š” ๊ฒƒ ๊นŒ์ง„ ์™„๋ฃŒํ–ˆ์—ˆ๋‹ค.

 

๊ทผ๋ฐ ์ด ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ECS์˜ Task Definition์— ์—…๋ฐ์ดํŠธํ•ด์•ผ ECS๊ฐ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์—ฌ EC2๋กœ ๋ฐฐํฌ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์˜ค๋Š˜์€ ์ด Task Definition์— ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

์ด์ „์— ์ž‘์„ฑํ–ˆ์—ˆ๋˜ deployment.yml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด๋ณด์ž.

 


 

1. ECS ์ฝ˜์†”์—์„œ ์•„๋ž˜์— ํ•ด๋‹นํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฐพ์•„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

env:
  ENV: development
  AWS_REGION: ap-northeast-2
  CONTAINER_NAME: container-test-demo
  ECS_CLUSTER_NAME: ecs-cluster-test
  ECS_SERVICE_NAME: ecs-service
  ECR_REPOSITORY_NAME: ecr-test

 

 

2. ECS Task Definition์— ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์•„์ด๋””๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๋„ฃ์–ด์ค€๋‹ค. 

      - name: Fill in the new image ID in the Amazon ECS task definition
        id: task-def
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
          task-definition: ./task-definition.json
          container-name: ${{ env.CONTAINER_NAME }}
          image: ${{ steps.build-image.outputs.image }}

      - name: Deploy Amazon ECS task definition
        uses: aws-actions/amazon-ecs-deploy-task-definition@v1
        with:
          task-definition: ${{ steps.task-def.outputs.task-definition }}
          service: ${{ env.ECS_SERVICE_NAME }}
          cluster: ${{ env.ECS_CLUSTER_NAME }}
          wait-for-service-stability: true

1) ECS td์— ์‹ ๊ทœ ECR ์ด๋ฏธ์ง€ ID ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

-  task-definition.json ํŒŒ์ผ ์ง€์ • -> ๋Œ€์ƒ ์ปจํ…Œ์ด๋„ˆ ์„ค์ • -> ์œ„์—์„œ buildํ•œ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

 

2) ECS td์— ์‹ค์ œ ๋ฐฐํฌ ๋ช…๋ น

- task-def id๋ฅผ ๊ฐ–๋Š” steps์™€ ๋™์ผํ•œ ํŒŒ์ผ ์ง€์ • -> ECS์„œ๋น„์Šค, ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • -> ์„œ๋น„์Šค ์•ˆ์ •๋‹จ๊ณ„ ์˜ต์…˜

 

3. Task-definition.json ํŒŒ์ผ ์„ธํŒ…

# task-definition.json

{
  "family": "ํƒœ์Šคํฌ ์ •์˜ ์ด๋ฆ„",
  "containerDefinitions": [
    {
      "cpu": 1,
      "image": "ECR ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URI",
      "memory": 512,
      "name": "์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„",
      "portMappings": [
        {
          "hostPort": 0,
          "protocol": "tcp",
          "containerPort": "80"
        }
      ]
    }
  ]
}

- family : ๊ธฐ์กด์— ํƒœ์Šคํฌ ์ •์˜๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ, ๋„ค์ด๋ฐํ•œ ์ด๋ฆ„ !

- containerDefinitions: ํƒœ์Šคํฌ ์ •์˜ ์‹œ, ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šค์˜ ๋„์ปค ๋ฐ๋ชฌ์œผ๋กœ ์ „๋‹ฌํ• ์ง€ ์ง€์ •

1) 1๊ฐœ์˜ CPU ๋‹จ์œ„

2) ECR ๋ ˆํฌ์ง€ํ† ๋ฆฌ URI ์ž…๋ ฅ

3) ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ 512

4) ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„

5) ํฌํŠธ ๋งคํ•‘ : ํ˜ธ์ŠคํŠธ ํฌํŠธ 0, ํ”„๋กœํ† ์ฝœ tcp, ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ 80 

 

4. IAM ๊ณ„์ •์— ECS Task Definition ๊ถŒํ•œ ์ถ”๊ฐ€

 

์ด์ „์— ์ƒ์„ฑํ–ˆ๋˜ deployer ์‚ฌ์šฉ์ž๋กœ ๋“ค์–ด๊ฐ€์„œ ๊ถŒํ•œ ์ถ”๊ฐ€๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

 

 

 

์ง์ ‘ ์ •์ฑ… ์—ฐ๊ฒฐ -> AmazonECS_FullAccess ๊ฒ€์ƒ‰ -> ๊ถŒํ•œ ์ถ”๊ฐ€

 

5. ๋ฐฐํฌ ํ™•์ธ

์—ฐ๋™ํ•œ ์Šฌ๋ž™ ๋ฉ”์„ธ์ง€๋กœ deploy workflow๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Œ์„ ํ™•์ธ

์ƒˆ๋กญ๊ฒŒ ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค ! ๊ตฟ !

Comments