λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸŽ› Others.../- infra [linux, aws, docker, k8s]

Github Action κ³Ό Elastic Beanstalk 둜 μ„œλ²„ λ°°ν¬ν•˜κΈ° - EB μƒμ„±ν•˜κΈ°

by Wonit 2022. 1. 23.

ν•΄λ‹Ή μ‹œλ¦¬μ¦ˆλŠ” 3개의 κΈ€λ‘œ κ΅¬μ„±λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€. 각 λ‹¨κ³„μ˜ μžμ„Έν•œ 사항은 μ•„λž˜ 링크λ₯Ό μ°Έμ‘°ν•΄μ£Όμ„Έμš”

μ§€λ‚œ μ‹œκ°„...

μ§€λ‚œ μ‹œκ°„ μš°λ¦¬λŠ” Spring Boot λ₯Ό μ΄μš©ν•΄μ„œ Application μ„œλ²„λ₯Ό μƒμ„±ν–ˆκ³  github 에 push ν•˜λŠ” μž‘μ—…κΉŒμ§€ λ§ˆμ³€λ‹€.

 

이번 μ‹œκ°„μ—λŠ” Elastic Beanstalk 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³  μ‹€μ œλ‘œ 생성을 해보도둝 ν•˜μž.

 

Elastic Beanstalk 에 λŒ€ν•΄μ„œ 더 μžμ„Ένžˆ

 

Elastic Beanstalk 에 λŒ€ν•΄μ„œ λ‹€μ‹œ ν•œ 번 μ •μ˜ν•΄λ³΄μž.

 

Elastic Beanstalk λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” AWS 인프라에 λŒ€ν•΄μ„œ μžμ„Ένžˆ μ•Œμ§€ λͺ»ν•΄λ„ ν΄λΌμš°λ“œμ— λΉ λ₯΄κ²Œ λ°°ν¬ν•˜κ³  관리할 수 있게 ν•˜λŠ” 도ꡬ이닀.

 

μ΄λŸ¬ν•œ 도ꡬλ₯Ό ν†΅ν•΄μ„œ μš°λ¦¬λŠ” Auto Scaling, μš©λŸ‰μ— λŒ€ν•œ Provisining, Load Balancing, Monitoring 을 μ†μ‰½κ²Œ μˆ˜ν–‰ν•  수 있고, 그에 λ”°λ₯Έ 관리 λ³΅μž‘μ„±μ„ μ€„μ΄κ²Œ λœλ‹€.

 

EBλŠ” AWS CLIλ‚˜ EB CLI λ₯Ό ν†΅ν•΄μ„œ ꡬ성할 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λ“€κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ EB μ›Ή Console 이 μ‘΄μž¬ν•œλ‹€.

 

μžμ„Έν•œ 사항은 AWS Elastic Beanstalk Docs μ—μ„œ 확인할 수 μžˆλ‹€.

 

μΆ”κ°€μ μœΌλ‘œ EB에 λŒ€ν•œ μ‚¬μš©μ€ λͺ¨λ‘ 무료이며 EBλ₯Ό 톡해 μƒμ„±λ˜λŠ” μΈμŠ€ν„΄μŠ€μ— ν•œν•΄μ„œλ§Œ 과금이 λœλ‹€λŠ” μž₯점이 μžˆλ‹€.

 

Elastic Beanstalk κ°œλ…

 

μœ„μ˜ Docs μ—μ„œ λ‚˜μ˜¨ κ°œλ…λ“€μ„ λΉ λ₯΄κ²Œ μ •λ¦¬ν•˜μžλ©΄ λ‹€μŒκ³Ό κ°™λ‹€

 

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜, Application
    • ν™˜κ²½, 버전 및 ꡬ성을 ν¬ν•¨ν•œ Elastic Beanstalk ꡬ성 μš”μ†Œμ˜ 논리적 μ»¬λ ‰μ…˜
    • κ°œλ…μ μœΌλ‘œ 폴더와 μœ μ‚¬ν•¨
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 버전, Application version
    • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포 κ°€λŠ₯ν•œ μ½”λ“œμ˜ νŠΉμ • 버전
    • 버전은 배포 κ°€λŠ₯ν•œ μ½”λ“œκ°€ ν¬ν•¨λœ S3 객체λ₯Ό 가리킴
    • Uniqueness λ₯Ό 보μž₯
  • ν™˜κ²½, Environment
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 버전을 μ‹€ν–‰ 쀑인 AWS λ¦¬μ†ŒμŠ€μ˜ λͺ¨μŒ
    • ν™˜κ²½μ„ μƒμ„±ν•˜λ©΄ Elastic Beanstalk μ—μ„œ μ‚¬μš©μžκ°€ μ§€μ •ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 버전을 μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ AWS λ¦¬μ†ŒμŠ€λ₯Ό ν”„λ‘œλΉ„μ €λ‹
  • ν™˜κ²½ ν‹°μ–΄, Environment Tier
    • ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μœ ν˜•μ„ ν”„λ‘œλΉ„μ €λ‹ν•  λ¦¬μ†ŒμŠ€λ₯Ό κ²°μ •
      • HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ›Ή μ„œλ²„ ν™˜κ²½ ν‹°μ–΄μ—μ„œ 싀행됨
      • SQS λŒ€κΈ°μ—΄μ—μ„œ κ°€μ Έμ˜€λŠ” λ°±μ—”λ“œ ν™˜κ²½μ€ μž‘μ—…μž ν™˜κ²½ ν‹°μ–΄μ—μ„œ 결정됨
  • ν™˜κ²½ ꡬ성, Environment Configuration
    • λ¦¬μ†ŒμŠ€μ˜ μž‘λ™ 방법을 μ •μ˜ν•˜λŠ” νŒŒλΌλ―Έν„° 및 μ„€μ •μ˜ λͺ¨μŒ
  • μ €μž₯된 ꡬ성, Saved Configuration
    • κ³ μœ ν•œ ν™˜κ²½ ꡬ성을 μƒμ„±ν•˜κΈ° μœ„ν•œ μ‹œμž‘μ 
  • ν”Œλž«νΌ, Platform
    • OS, Runtime, Web Server, WAS λ“± Beanstalk ꡬ성 μš”μ†Œμ˜ μ‘°ν•©

 

주둜 μš°λ¦¬λŠ” Application κ³Ό Envorionment λ₯Ό λ‹€λ£¨κ²Œ 될 것인데, κ·Έλž˜λ„ μ•Œμ•„λ‘μž

 

EB μƒμ„±ν•˜κΈ°

 

Elastic Beanstalk Web Console 에 λ“€μ–΄κ°€μ„œ μƒμ„±ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ λ‹€μŒκ³Ό 같은 UI κ°€ λ‚˜μ˜€κ²Œ λœλ‹€.

 

 

첫번째둜 Application Name 을 μ§€μ •ν•΄μ€˜μ•Ό ν•˜λŠ”λ°, 좔후에 연동할 Github Actions μ—μ„œλŠ” 이 Application Name 을 ν† λŒ€λ‘œ EBλ₯Ό μ‹λ³„ν•˜κΈ° λ•Œλ¬Έμ— μ μ ˆν•œ μ΄λ¦„μœΌλ‘œ 잘 지어야 ν•œλ‹€.

 

 

μ›Œλ‚™ AWS Web Console 이 잘 κ΅¬μ„±λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— 어렀움은 없을 것이닀.

 

잠깐 μ‚΄νŽ΄λ³΄μžλ©΄,

 

  • 사전 섀정을 톡해 κ³ κ°€μš©μ„±μ„ μ„ νƒν•˜κ²Œ 되면 μƒˆλ‘­κ²Œ 배포될 μ‹œμ μ— Auto-Scaling 을 μˆ˜ν–‰ν•œλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œ λŠ” 무엇을 μ„ νƒν•˜λ”λΌλ„ 상관이 μ—†λ‹€. λ‹€λ§Œ μƒ˜ν”Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ΄μš©ν•˜λ©΄ AWS μ—μ„œ μ œκ³΅ν•˜λŠ” μ½”λ“œκ°€ μ΄ˆκΈ°μ— λŒμ•„κ°€λ―€λ‘œ μƒ˜ν”Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 선택해주도둝 ν•œλ‹€.

 

λ‹€μŒκ³Ό 같이 ꡬ성해주고 생성을 ν•˜μž.

 

 

초기 섀정을 μœ„ν•΄ 기닀리닀 보면 λ‹€μŒκ³Ό 같이 EBκ°€ μƒμ„±λœλ‹€.

 

생성할 λ•Œ λŒ€λž΅ 5λΆ„? 정도 κ±Έλ Έλ˜κ²ƒ κ°™λ‹€. λ§Œμ•½ κ³„μ†ν•΄μ„œ 생성이 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ EB ν™ˆμœΌλ‘œ λŒμ•„κ°€μ„œ μƒˆλ‘œκ³ μΉ¨μ„ ν•΄λ³΄μž!

 

 

 

EB Load Balancing 으둜 Spring Boot μ„œλ²„ ν¬μ›Œλ”© ν•˜κΈ°

이제 EB의 Load Balancing 섀정을 쑰금 μˆ˜μ •ν•  것이닀.

 

μ΄μœ λŠ” μš°λ¦¬κ°€ λ§Œλ“  Application Server λŠ” 기본적으둜 8080 포트둜 λŒμ•„κ°€μ§€λ§Œ EB의 default λŠ” 5000 port둜 λŒμ•„κ°€κΈ° λ•Œλ¬Έμ— 80 ν¬νŠΈμ™€ 8080 포트λ₯Ό 포트 ν¬μ›Œλ”© μ‹œμΌœμ€˜μ•Όν•œλ‹€.

 

κ·Έλž˜μ„œ EB의 ꡬ성 νƒ­μ—μ„œ λ‘œλ“œ λ°ΈλŸ°μ‹± μ„Ήμ…˜μ„ λ“€μ–΄κ°€λ³΄μž

 

 

그런 λ’€ λ‹€μŒκ³Ό 같이 νŽΈμ§‘ν•˜κ³  μ €μž₯ν•œλ‹€

 

 

그럼 이제 EBλ₯Ό μœ„ν•œ 섀정은 λͺ¨λ‘ λ§ˆμ³€λ‹€.

 

이제 Github Actions κ°€ μ ‘κ·Όν•  수 μžˆλ„λ‘ Programming Access 기반의 IAM 을 λ§Œλ“€μ–΄λ³΄μž

 

Github Actions λ₯Ό μœ„ν•œ IAM 생성

 

IAM 은 AWS λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό μ•ˆμ „ν•˜κ²Œ μ œμ–΄ν•˜λŠ” μ„œλΉ„μŠ€μ΄λ‹€.

 

μžμ„Έν•œ 사항은 AWS에 둜그인 ν•˜λŠ” 2가지 방식 (루트 μ‚¬μš©μžμ™€ IAM μ‚¬μš©μž) μ—μ„œ ν™•μΈν•˜λ„λ‘ ν•˜κ³  계속 이어 μ§„ν–‰ν•΄λ³΄λ €ν•œλ‹€.

 

 

IAM λŒ€μ‹œλ³΄λ“œμ˜ μ‚¬μš©μž νƒ­μœΌλ‘œ κ°€μ„œ μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•΄μ£Όμž.

 

λ§Œμ•½ 기쑴의 μ‚¬μš©μžκ°€ μ‘΄μž¬ν•˜κ³  ACCESS_KEY 와 SECRET_KEY λ₯Ό μ•Œκ³  μžˆλ‹€λ©΄ ν•΄λ‹Ή ν‚€λ₯Ό μ΄μš©ν•΄λ„ λ¬΄λ°©ν•˜λ‹€.

 

그리고 μ‚¬μš©μž μœ ν˜•μ—μ„œ Programming Access 방식을 μ„ νƒν•˜κ³  AdministratorAccess-AWSElasticBeanstalk κΆŒν•œμ„ λΆ€μ—¬ν•œλ‹€.

 

 

잘 생성이 λ˜μ—ˆλ‹€λ©΄ .csv νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν•  수 μžˆλŠ”λ°, Github Actions μ—μ„œ 인증을 μœ„ν•΄ ν•„μš”ν•˜λ‹ˆ κΌ­ 가지고 μžˆμ–΄μ•Ό ν•œλ‹€.

 

.csv νŒŒμΌμ„ μ™ λ§Œν•˜λ©΄ λ‹€μš΄λ°›κ³  μ•ˆμ „ν•œ 곳에 λ³΄κ΄€ν•˜μž!!

 

μ΄λ ‡κ²Œ ν•΄μ„œ EB의 생성을 λͺ¨λ‘ 마치게 λ˜μ—ˆλ‹€.

 

사싀 μœ„μ˜ κ³Όμ •λ“€μ—μ„œ μ•„μ£Ό λ§Žμ€ AWS Resource 듀이 μ‚¬μš©λ˜μ—ˆλ‹€.

 

μš°λ¦¬λŠ” 일일이 섀정을 ν•˜μ§€ μ•Šλ”λΌλ„ Elastic Beanstalk λ₯Ό μ΄μš©ν•˜μ—¬ μ†μ‰½κ²Œ ν™˜κ²½μ„ ꡬ성할 수 μžˆλ‹€.

 

λ‹€μŒ μ‹œκ°„μ—λŠ” 방금 μƒμ„±ν•œ EBλ₯Ό Github Actions κ³Ό 연동해보도둝 ν•˜μž

 

λŒ“κΈ€