Skip to content

๐ŸŒˆ CI/CD๋ฅผ ์ด์šฉํ•œ ECS ๋ฐฐํฌ

Notifications You must be signed in to change notification settings

jihoon55/ECS_CICD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โœจ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

  • ECS๋ฅผ ์ด์šฉํ•œ CI/CD ํ™˜๊ฒฝ ๊ตฌ์ถ•

    • ECS๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • CI/CD ํ™˜๊ฒฝ์„ ํ†ตํ•ด ์ž๋™ํ™”๋œ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ

AWS ECS ์„œ๋น„์Šค์˜ CI/CD

KakaoTalk_20230405_231227539

์ •์  ์›น ํ˜ธ์ŠคํŒ… CI/CD image

๐Ÿ“Œ ์„œ๋น„์Šค ๊ตฌ์„ฑ

Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ECR์— PUSH ์ž๋™ํ™” ๊ตฌํ˜„
  • fastify ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์ด์šฉํ•œ WAS ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • WAS ๋ฐ MongoDB๋ฅผ Dockerfile ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • Github Action์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ AWS ECR ์ด๋ฏธ์ง€ ๋นŒ๋“œ Workflow yaml ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • push๋ฅผ ํ†ตํ•ด ECR์— ์ƒˆ๋กœ์šด ํƒœ๊ทธ๋กœ ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ์ค€๋น„
    • AWS ํ‚คํŽ˜์–ด๋ฅผ ์ƒ์„ฑ ํ›„ Github ๋ ˆํฌ์ง€ํ† ๋ฆฌ Setting ํด๋ฆฝ Secrets and variables ํ•ญ๋ชฉ์— ์ €์žฅ
    • Configure AWS credentials์˜ ํ‚ค ํŽ˜์–ด ๊ฐ’์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •
  • Private ECR ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

    • Docker ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ์œ„ํ•ด AWS CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ„ฐ๋ฏธ๋„์— ์ธ์ฆ ํ† ํฐ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค.
    • ํƒœ๊ทธ๋ฅผ ์ง€์ • ํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— PUSHํ•ฉ๋‹ˆ๋‹ค.
ECS ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ๋ฐ ์„œ๋น„์Šค ๋ฐฐํฌ ์ž๋™ํ™” ๊ตฌํ˜„
  • ECR์— ์ €์žฅ๋œ ์„œ๋ฒ„ ์ด๋ฏธ์ง€๋ฅผ ECS๋กœ ๋ฐฐํฌ
    • Task Definition ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • ECR์— ์˜ฌ๋ฆฐ ์ด๋ฏธ์ง€์— URL์„ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก
      • ์‚ฌ์šฉํ•  ํฌํŠธ ์„ค์ •
    • MongoDB ์ด๋ฏธ์ง€ ๋ฐฐํฌ ์‹œ AWS Secrets Manager๋ฅผ ์ด์šฉํ•œ ํ‚ค ๊ฐ’ ํŽ˜์–ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ECS์—์„œ AWS Secrets Manager๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•จ.
  • ECS ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ๋ฐ WAS์™€ MongoDB ์„œ๋น„์Šค ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ์‹œ ๋ณด์•ˆ๊ทธ๋ฃน, ์„œ๋ธŒ๋„ท, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ, ๋ฆฌ์Šค๋„ˆ, ํƒ€๊ฒŸ ๊ทธ๋ฃน ์„ค์ •
  • ๋ฐฐํฌ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™” ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • Json ํ˜•์‹์˜ Task Definition์„ Git repository์— ์ถ”๊ฐ€ํ•จ
    • ๊ธฐ์กด์˜ ECR yaml ํŒŒ์ผ์€ ์ค‘๋ณต๋˜๋ฏ€๋กœ ์‚ญ์ œํ•จ.
    • ์ž‘์—… ์ •์˜ ํŒŒ์ผ์— ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•จ.
์ •์  ์›น ํ˜ธ์ŠคํŒ… ๋ฐฐํฌ ์ž๋™ํ™” ๊ตฌํ˜„
  • aws Codebuild๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ์ž‘์—… ์ˆ˜ํ–‰.
    • buildspecํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ , GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ๋ฐฐํฌ ๊ณต๊ธ‰์ž, ๋นŒ๋“œ ๊ณต๊ธ‰์ž ์„ค์ •ํ•จ.
    • CodeDeploy๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , AWS CodeBuild์™€ S3๋งŒ์œผ๋กœ๋„ ์ •์  ์›น ํ˜ธ์ŠคํŒ…์„ ๊ตฌํ˜„ํ•จ.
HTTPS ์„ค์ •
  • Route53, Cloudfront, ELB, ๋ฆฌ์Šค๋„ˆ, ํƒ€๊ฒŸ ๊ทธ๋ฃน ๋“ฑ์„ ์„ค์ •ํ•˜์—ฌ HTTPS ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ช ๋ฌด์—‡์„ ๋ฐฐ์› ๋Š”๊ฐ€?

  • fastiy ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋์Šต๋‹ˆ๋‹ค.
    • fastify ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋กœ์ปฌํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ AWS์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›Œ๋„ ์ ‘์†ํ•  ์ˆ˜ ์—†์Œ.
    • ๋”ฐ๋ผ์„œ, package.json์—์„œ -a ์˜ต์…˜์œผ๋กœ 0.0.0.0 ์ฃผ์†Œ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•จ.
  • GitHub Action์„ ์ด์šฉํ•œ ECS ์ž๋™ํ™” ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์•Œ๊ณ  workflow ํŒŒ์ผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • Task Definition์— JsonํŒŒ์ผ์„ ์ด์šฉํ•œ ECS CI/CD๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • ECR, ECS WorkflowํŒŒ์ผ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Œ.
  • AWS Secrets Manager๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Task Definition์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • AWS Secrets Manager๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ECS์—ญํ• ์— Secrets Manager ReadWrite์ •์ฑ…์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ •์  ์›น ํ˜ธ์ŠคํŒ…์„ CI/CD๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ํ”„๋กœํŠผ์—”๋“œ ์„œ๋ฒ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • codebuild ํ›„ ๊ฒฐ๊ณผ๋ฌผ์„ S3์— ์—…๋กœ๋“œํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  AWS CodeDeploy์™€ ๊ฐ™์€ ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„, S3์˜ ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์›น์— ๋ฐ”๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿšจ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

๋ฌธ์ œ ์ƒํ™ฉ

ECS ๋ฐฐํฌ์‹œ GitHub Action์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋ฐฐํฌ๋˜์—ˆ๋‹ค๋Š” ์•Œ๋ฆผ์ด ์ƒ๊ธฐ์ง€๋งŒ ์‹คํ–‰ ์‹œ๊ฐ„์ด 26๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋œ ์ด๋ฏธ์ง€๋Š” ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹Œ ๊ธฐ์กด์— ์ด๋ฏธ์ง€๊ฐ€ ๋ฐฐํฌ๋œ ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค.

์›์ธ ํŒŒ์•…

  • ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋„์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊นƒํ—ˆ๋ธŒ ์•ก์…˜
    • ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค ์„ค์ •
    • task definition
  • ๋จผ์ € ๋ฐฐํฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋๊ธฐ ๋•Œ๋ฌธ์— GitHub Action Workflow์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค์™€ Task Definition๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€๋งŒ ๋˜‘๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ๋ถ€ํ„ฐ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ์ฐพ์•˜๊ณ , ECS์—์„œ ECR๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์–ด ์ƒ๊ธด ๋ฌธ์ œ๋กœ worlkfolwํŒŒ์ผ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ฆ‰ workflow ํŒŒ์ผ์— ์„ค์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐฐํฌ๊ฐ€ ์ •์‚ญ์ ์œผ๋กœ ๋๋‹ค๊ณ  ๊ทธ ๋ถ€๋ถ„์„ ๋ฐฐ์žฌํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์ฐพ์€๊ฒŒ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์— ์ค‘์š”ํ•œ ๋ฌธ์ œ์˜€์Œ.
    • ๋‹จ๋ฉด์ ์ธ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๋ณด๊ณ  ํŒ๋‹จํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์ˆœ์ฐจ์ ์œผ๋กœ ํ๋ฆ„์— ๋”ฐ๋ผ ๋ฌธ์ œ๋ฅผ ์ฐพ๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ๋˜๋Š”๊ฒƒ์„ ์•Œ๊ฒŒ๋จ.

๋ฌธ์ œ ํ•ด๊ฒฐ

WorkflowํŒŒ์ผ์— ECR_Registr๋กœ ์ ํ˜€ ์žˆ์–ด์•ผ ํ–ˆ์ง€๋งŒ ์ œ ํŒŒ์ผ์—๋Š” Registry๋งŒ ์ ํ˜€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Workflow ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ง์ ‘ ์ž‘์„ฑํ–ˆ๋˜๊ฒƒ์ด ์—๋Ÿฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋˜ ์›์ธ์ด์—ˆ๊ณ  ECR_Registry๋กœ ์ˆ˜์ • ํ›„ 3๋ถ„ ์ด๋‚ด๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๊ฐ€ ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‹ ๋ธ”๋กœ๊น… & ๋ ˆํผ๋Ÿฐ์Šค

About

๐ŸŒˆ CI/CD๋ฅผ ์ด์šฉํ•œ ECS ๋ฐฐํฌ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published