์˜ค๋ž˜ ์ „ 2017๋…„์— ์ž‘์„ฑํ•œ AWS Elastic Beanstalk Java SE ํ”Œ๋žซํผ ํ™˜๊ฒฝ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌํ•˜๊ธฐ ๊ธ€์ด ์ง€๊ธˆ์—์„œ๋Š” ์ฐธ๊ณ ํ•  ๋งŒํ•œ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋œ ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ 2023๋…„ ๊ธฐ์ค€์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์ •๋ณด๋“ค์„ ์ •๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์•„๋งˆ์กด ์›น ์„œ๋น„์Šค์˜ Elastic Beanstalk ์—์„œ ์ œ๊ณตํ•˜๋Š” Java SE ํ”Œ๋žซํผ์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ํŒจํ‚ค์ง•๋˜๋Š” Jar์™€ War ํŒŒ์ผ์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ™˜๊ฒฝ์ด๋‹ค. AWS ์ธํ”„๋ผ ํ™˜๊ฒฝ์—์„œ Elastic Beanstalk ์„œ๋น„์Šค๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ ๋‚œ ํ›„ ์„ฑ๋Šฅ ์ง€ํ‘œ์— ๋”ฐ๋ผ ์˜คํ† ์Šค์ผ€์ผ๋ง ๋˜๋Š” ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณธ ๊ธ€์„ ํ† ๋Œ€๋กœ Elastic Beanstalk ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ๋˜๋Š” ํšŒ์‚ฌ์—์„œ ์„œ๋น„์Šค๋ฅผ ๋‹ด๋‹นํ•˜์ง€ ์•Š์•˜๋˜ ๊ฐœ๋ฐœ์ž๋“ค์€ Elastic Beanstalk ํ™˜๊ฒฝ์œผ๋กœ ์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์–ด๋–ค ๊ณผ์ •์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Elastic Beanstalk UI Console

EB CLI๋Š” Elastic Beanstalk ์ฝ˜์†” ๋Œ€์‹ ์— ๋กœ์ปฌ์—์„œ CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ Beanstalk ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›ํ•œ๋‹ค. ํ•˜์ง€๋งŒ Elastic Beanstalk์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์šฉ์–ด๋“ค์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผํ•˜๋ฏ€๋กœ ์ฒ˜์Œ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๋“ค์€ UI ์ฝ˜์†”์— ์˜์กดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. UI ์ฝ˜์†”์„ ์ด์šฉํ•ด๋„ ์ฒ˜์Œ์—๋Š” ์ˆ˜ ๋งŽ์€ ์˜ค๋ฅ˜๋“ค์„ ๊ฒฝํ—˜ํ•˜๊ณ  ํ™˜๊ฒฝ์„ ์ข…๋ฃŒํ•œ ๋’ค ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ๋ช‡ ๋ถ„ ๋งŒ์— ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ ์ฃผ๋œ ์ด์œ ์—๋Š” ์„ ํƒํ•˜๋Š” ์˜ต์…˜์— ๋”ฐ๋ฅธ ์ œํ•œ๊ณผ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์‚ฌ์ „ ์„ค์ •์œผ๋กœ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ ๋Š” ๋˜์–ด์žˆ์ง€๋งŒ ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์ด ์œ„์น˜ํ•˜๋Š” AZ์— ๋”ฐ๋ผ ํ”„๋ฆฌํ‹ฐ์–ด ๋Œ€์ƒ์ธ t2.micro ์„ ํƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋ฆฌํ‹ฐ์–ด ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ t3.micro๋ฅผ ์„ ํƒํ•ด๋ฒ„๋ฆฌ๋ฉด ํ”„๋ฆฌํ‹ฐ์–ด ํ™˜๊ฒฝ์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ •์˜ ํ™˜๊ฒฝ์œผ๋กœ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€ ์—†์ด ์ „ํ™˜๋œ๋‹ค.

์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์›น ์„œ๋ฒ„ ํ™˜๊ฒฝ๊ณผ Java ํ”Œ๋žซํผ ์œ ํ˜•์„ ์„ ํƒํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ์ž๋ฐ” ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ Amazon Linux 2023 ๊ทธ๋ฆฌ๊ณ  ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. Elastic Beanstalk ์— ๋Œ€ํ•ด์„œ ๊ฒฝํ—˜์ด ์žˆ์–ด๋„ CloudFormation์— ์˜์กดํ•˜๋Š” Beanstalk ๊ตฌ์„ฑ์˜ ํŠน์„ฑ ์ƒ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ Amazon Linux 2์€ 2025๋…„ ์ง€์› ์ข…๋ฃŒ(EOL) ์˜ˆ์ • ์ด๋ฏ€๋กœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ํ™•์žฅ ์‹œ ํŒจํ‚ค์ง€ ์„ค์น˜๊ฐ€ ์–ด๋ ต๋‹ค๋ฉด Amazon Linux 2๋ฅผ ์„ ํƒํ•ด๋„ ์•„์ง๊นŒ์ง€๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Elastic Beanstalk ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ์™„๋ฃŒํ–ˆ์–ด๋„ ์—ฌ๋Ÿฌ๋ฒˆ ํ™˜๊ฒฝ์„ ์žฌ ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‹จ์ผ Jar ํŒŒ์ผ ๋ณด๋‹ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์„ ๊ตฌ์„ฑํ•˜์—ฌ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ JVM Option ์„ ์ ์šฉํ•  ํ•„์š”๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ Procfile์— ๊ธฐ๋ณธ์ ์ธ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•ด๋†“๊ณ  ํ™˜๊ฒฝ ์†์„ฑ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๋Š” ๊ตฌ์„ฑ์„ ์ถ”์ฒœํ•œ๋‹ค.

Procfile
web: java -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -Xmx1g -jar app.jar

๊ณต์‹ ๋ฌธ์„œ์— ํฌํ•จ๋˜์–ด์žˆ๋Š” ๋‚ด์šฉ์€ ์•„๋‹ˆ์ง€๋งŒ ์ž๋ฐ” ์˜ต์…˜์€ _JAVA_OPTIONS ๋˜๋Š” JAVA_TOOL_OPTIONS ํ™˜๊ฒฝ ์†์„ฑ์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ตณ์ด ์ž๋ฐ” ์˜ต์…˜์„ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์˜ Procfile์„ ์ˆ˜์ •ํ•  ํ•„์š”๋Š” ์—†๋‹ต๋‹ˆ๋‹ค. Elastic Beanstalk Configuration files(.ebextensions)์—์„œ๋„ ๋‰ด๋ ๋ฆญ ์ž๋ฐ” ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ Procfile์— ์ •์˜ํ•˜์ง€๋งŒ JAVA_TOOL_OPTIONS ํ™˜๊ฒฝ ์†์„ฑ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ์—ฐํ•œ ๊ตฌ์„ฑ์ด ๋  ๊ฒ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์•ก์„ธ์Šค ๊ตฌ์„ฑ

Elastic Beanstalk ์ด ๊ฐœ๋ฐœ์ž ๋Œ€์‹ ์— EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์˜คํ† ์Šค์ผ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•œ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋น„์Šค ์—ญํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ E2 ์ธ์Šคํ„ด์Šค ํ”„๋กœํŒŒ์ผ์— ๋Œ€ํ•œ IAM ์ด ํ•„์š”ํ•˜๋‹ค. ์˜ˆ์ „์—๋Š” EC2 ์ธ์Šคํ„ด์Šค ํ”„๋กœํŒŒ์ผ์— ์‚ฌ์šฉ๋  ์—ญํ• ๋„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์œผ๋‚˜ AWS ๋ณด์•ˆ ์ •์ฑ… ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด aws-elasticbeanstalk-ec2-role์„ ๋งŒ๋“ค์–ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. (์ฐธ๊ณ  - https://stackoverflow.com/a/76620598)

aws-elasticbeanstalk-service-role

์„œ๋น„์Šค ์—ญํ• ์„ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์œ„ ์ด๋ฏธ์ง€์™€ ๋‹ค๋ฅด๊ฒŒ AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy ๊ฐ€ ์ •์ฑ…์œผ๋กœ ํฌํ•จ๋˜๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”. AWSElasticBeanstalkService ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค๋ฉด ์˜ค๋ž˜์ „์— ์ด๋ฏธ ์ƒ์„ฑํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

aws-elasticbeanstalk-ec2-role

EC2 ์ธ์Šคํ„ด์Šค ํ”„๋กœํŒŒ์ผ๋กœ ์ง€์ •ํ•˜๋Š” IAM ์—ญํ• ์—๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์—”ํ„ฐํ‹ฐ๋กœ ec2.amazonaws.com ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•˜๋ฉฐ ๊ตฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์•„๋ž˜์˜ ์„ธ๊ฐ€์ง€ ์ •์ฑ…์„ ๊ถŒํ•œ์œผ๋กœ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋Š” Elastic Beanstalk ์ธ์Šคํ„ด์Šค ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ์— ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.

  • AWSElasticBeanstalkWebTier
  • AWSElasticBeanstalkWorkerTier
  • AWSElasticBeanstalkMulticontainerDocker

๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” aws-elasticbeanstalk-service-role ๊ณผ aws-elasticbeanstalk-ec2-role ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์—ญํ• ์„ ์ฐพ์•„ ์„ ํƒํ•ด์ฃผ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ณ„๋„์˜ ์ด๋ฆ„์„ ๊ฐ€์ง„ IAM ์—ญํ• ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž˜๋ชป ์„ ํƒํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์›น UI ์ฝ˜์†”์—์„œ๋Š” ์ž˜๋ชป๋œ IAM ์—ญํ• ์„ ์„ ํƒํ•˜๋Š” ๊ฑธ ๊ฒ€์ฆํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท

๋‹จ์ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์˜คํ† ์Šค์ผ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. UI ์ฝ˜์†”๋„ ๋ชจ๋“  ๊ฒƒ์— ์นœ์ ˆํ•˜์ง€๋Š” ์•Š์•„์„œ ๊ฐ€์‹œ์„ฑ์„ ํผ๋ธ”๋ฆญ์œผ๋กœ ์„ ํƒํ•˜๋”๋ผ๋„ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท๋„ ์„ ํƒ ์˜ต์…˜์œผ๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์ด ์•„๋‹Œ ๊ฒƒ์„ ์„ ํƒํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

  • ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์ด๋ฉด์„œ ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์ด ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์œผ๋กœ ์ง€์ •๋˜๋Š” ๊ฒฝ์šฐ - ํ™˜๊ฒฝ ์ƒ์„ฑ ๋ถˆ๊ฐ€
  • ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ •์ด๋ฉด์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„œ๋ธŒ๋„ท์ด ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์œผ๋กœ ์ง€์ •๋˜๋Š” ๊ฒฝ์šฐ - ํ™˜๊ฒฝ ์ƒ์„ฑ ๊ฐ€๋Šฅ

์˜ฌ๋ฐ”๋ฅธ ๊ฐ€์šฉ ์˜์—ญ์˜ ์„œ๋ธŒ๋„ท์œผ๋กœ ๊ตฌ์„ฑํ–ˆ๋Š”์ง€ VPC ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜์…”์•ผํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท๊ณผ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„œ๋ธŒ๋„ท ๋ชจ๋‘ ์ž˜๋ชป๋œ ์„œ๋ธŒ๋„ท์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ UI ์›น ์ฝ˜์†”์—์„œ๋Š” ๊ฒ€์ฆํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์ด ๋งŒ๋“ค์–ด์ง€๋”๋ผ๋„ Elastic Beanstalk ์—์„œ๋„ ์˜ฌ๋ฐ”๋ฅธ ์ „ํ™˜์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์–ด ์ฃผ์˜ํ•ด์•ผํ•  ์„ ํƒ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ฃจํŠธ ๋ณผ๋ฅจ

์ธ์Šคํ„ด์Šค ํŠธ๋ž˜ํ”ฝ ๋ฐ ํฌ๊ธฐ ์กฐ์ • ๊ตฌ์„ฑ ๋ฉ”๋‰ด์—์„œ ์„ ํƒ์‚ฌํ•ญ์ด๊ธด ํ•˜๋‚˜ ๋ฃจํŠธ ๋ณผ๋ฅจ์˜ ํฌ๊ธฐ๊ฐ€ 8GB ์ธ ๊ฒƒ์— ์ฃผ์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 8GB ์ด์–ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์ง€๋งŒ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฒ”์šฉ 3(SSD) ๋ฐ 30GB ์ด์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค(IMDS)๋Š” IMDSv2๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก IMDSv1 ๋น„ํ™œ์„ฑํ™” ์„ ํƒ ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฑธ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค๋Š” ํ”Œ๋žซํผ ํ™•์žฅ ์‹œ ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด Beanstalk Linux ํ”Œ๋žซํผ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ ๊ธ€์„ ์ฐธ์กฐํ•˜์„ธ์š”.

EC2 ์ธ์Šคํ„ด์Šค ํ™•์ธ

Elastic Beanstalk ํ™˜๊ฒฝ์˜ ์ด๋ฒคํŠธ์— ํ™˜๊ฒฝ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ–ˆ๋‹ค๋ฉด ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•œ Congratulations ํ™”๋ฉด์ด ๋…ธ์ถœ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค. ํ™˜๊ฒฝ์ด ์ƒ์„ฑ๋˜์—ˆ์–ด๋„ ๊ตฌ์„ฑ ์ƒ ์ด์ƒํ•œ ์„ค์ •์ด ์žˆ๋‹ค๋ฉด EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•˜์—ฌ eb-engine(/var/log/eb-engine.log)๋ฅผ ์‚ดํŽด๋ณด์•„์•ผ ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด /opt/elasticbeanstalk/bin/get-config ๋„๊ตฌ๋กœ EC2 ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ดํŽด๋ณด์•„์•ผํ•  ๋กœ๊ทธ ํŒŒ์ผ ๋ชฉ๋ก์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

/opt/elasticbeanstalk/bin/get-config
[root@ip-10-0-2-119 ~]# /opt/elasticbeanstalk/bin/get-config --output YAML container common_log_list: - /var/log/eb-engine.log - /var/log/eb-hooks.log default_log_list: - /var/log/nginx/access.log - /var/log/nginx/error.log - /var/log/web.stdout.log environment_name: Ss-env instance_port: "80" log_group_name_prefix: /aws/elasticbeanstalk proxy_server: nginx static_files: - "" xray_enabled: "false"

ํ™˜๊ฒฝ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ์„๋•Œ๋„ eb-engine ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์–ด๋–ป๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. Java SE ํ”Œ๋žซํผ ํ™˜๊ฒฝ์—์„œ๋Š” Nginx๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด 5000 ํฌํŠธ๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฐ€์ •์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ EC2 ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋นŒ๋“œ๋˜์–ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ

์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•ด์•ผํ•œ๋‹ค. ์•„์ง๊นŒ์ง€๋Š” ํ”Œ๋žซํผ ํ™•์žฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง•ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์„ ์••์ถ• ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์•Œ์•„๋ณด์ž. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์—๋Š” Procfile๊ณผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ํŒจํ‚ค์ง•๋œ Jar ๋˜๋Š” War ํŒŒ์ผ์„ ํฌํ•จํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

  • Procfile
  • application.jar

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์€ ์••์ถ• ๋ช…๋ น์–ด๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋‚˜ Gradle ์„ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด Zip ํƒœ์Šคํฌ๋ฅผ ์ด์šฉํ•ด์„œ Beanstalk ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋นŒ๋“œ ํƒœ์Šคํฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ์€ gradle-8.5 ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•œ ํƒœ์Šคํฌ ์˜ˆ์‹œ์ด๋‹ค.

build.gradle
tasks.register('procfile') { bootJar.archiveFileName.set('application.jar') dependsOn 'bootJar' doFirst { new File("build/libs", "Procfile").text = "web: java -jar ${bootJar.archiveFileName.get()}" } } tasks.register('zipSourceBundle', Zip) { dependsOn 'clean' dependsOn 'procfile' from('build/libs') { include('application.jar') include('Procfile') } archiveBaseName = 'beanstalk' }
Terminal
./gradlew zipSourceBundle

๋‹ค๋ฅธ Elastic Beanstalk ๊ด€๋ จ ๊ธ€๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ Procfile์— JVM ์˜ต์…˜์„ ์ •์˜ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ Java SE ํ”Œ๋žซํผ์˜ JVM ํŠน์„ฑ ์ƒ ์ž๋ฐ” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ณ„๋„๋กœ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Elastic Beanstalk ๋ฌธ์„œ์—๋Š” ๋ณ„๋„๋กœ ๊ธฐ์žฌ๋˜์–ด์žˆ์ง€๋Š” ์•Š์ง€๋งŒ JVMTI ํ‘œ์ค€ ์ŠคํŽ™์ธ JAVA_TOOL_OPTIONS ๋˜๋Š” _JAVA_OPTIONS ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ ์†์„ฑ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์„ ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์— ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ์ค‘์ธ ์ƒํƒœ์—์„œ ํ™˜๊ฒฝ ์†์„ฑ์„ ๋จผ์ € ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ์•ž์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์—๋Š” ํ”„๋กœํŒŒ์ผ ์ง€์ •์ด๋‚˜ JVM ์˜ต์…˜์„ ์ •์˜ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค. ๊ตฌ์„ฑ โ†’ ์—…๋ฐ์ดํŠธ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… โ†’ ํ”Œ๋žซํผ ์†Œํ”„ํŠธ์›จ์–ด โ†’ ํ™˜๊ฒฝ ์†์„ฑ์— JAVA_TOOL_OPTIONS๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. ํ™˜๊ฒฝ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๊ณผ์ •๋งŒ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

[root@ip-10-0-2-119 ~]# jps -v
6226 Jps -Dapplication.home=/usr/lib/jvm/java-17-amazon-corretto.x86_64 -Xms8m -Djdk.module.main=jdk.jcmd
6148 sample-app-1.0-jar-with-dependencies.jar -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -Xms250m -Xmx250m

์œ„ ์ด๋ฏธ์ง€ ์ƒ์—๋Š” JAVA_TOOL_OPTIONS ์™€ _JAVA_OPTIONS๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ JAVA_TOOL_OPTIONS์ด ๋จผ์ € ๋‚˜์—ด๋˜๊ณ  ๊ทธ ๋‹ค์Œ์— _JAVA_OPTIONS ์ด ์ ์šฉ๋˜๋ฏ€๋กœ ์ˆœ์„œ์— ์ฃผ์˜ํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ๋Š” JAVA_TOOL_OPTIONS ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ํ™•์žฅ - ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ตฌ์„ฑ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด 5000 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด PORT ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ตฌ์„ฑ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ Nginx ์„ค์ •์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. Beanstalk Linux ํ”Œ๋žซํผ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ ์ฒ˜๋Ÿผ ์•„๋ž˜์˜ ๋‘๊ฐœ์˜ ํŒŒ์ผ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์— ํฌํ•จ์‹œ์ผœ๋„ ๋œ๋‹ค.

.platform/nginx/conf.d/upstream.conf
upstream web { server 127.0.0.1:5000; keepalive 1024; }
.platform/nginx/conf.d/elasticbeanstalk/00_application.conf
location / { proxy_pass http://web; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
build.gradle
tasks.register('zipSourceBundle', Zip) { dependsOn 'clean' dependsOn 'procfile' from('build/libs') { include('application.jar') include('Procfile') } from('beanstalk') { include('.platform/nginx/conf.d/upstream.conf') include('.platform/nginx/conf.d/elasticbeanstalk/00_application.conf') } archiveBaseName = 'beanstalk' }

๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” nginx.conf ์— ์˜์กดํ•˜๋˜ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด์žˆ๋Š” 00_application.conf ํŒŒ์ผ์ด ๋Œ€์ฒด๋˜๋„๋ก zipSourceBundle ํƒœ์Šคํฌ๋ฅผ ์ˆ˜์ •ํ•˜์˜€๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ์„ฑ๊ณตํ•˜์˜€๋‹ค๋ฉด ๋„๋ฉ”์ธ ์ฃผ์†Œ ๋˜๋Š” EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•ด๋ณด๋ฉด ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์šฐ๋ฆฌ๊ฐ€ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์ „๋‹ฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

[root@ip-10-0-2-119 ~]# jps -v
6964 application.jar -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -Xms250m -Xmx250m
7109 Jps -Dapplication.home=/usr/lib/jvm/java-17-amazon-corretto.x86_64 -Xms8m -Djdk.module.main=jdk.jcmd

์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด Beanstalk Linux ํ”Œ๋žซํผ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋” ์ ํ•ฉํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Elastic Beanstalk ์‹œ์ž‘ํ•˜๊ธฐ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์˜ ๊ฐ€์šฉ ์˜์—ญ์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” EC2 ์œ ํ˜• ๋ฌธ์ œ

Elastic Beanstalk ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์‹œ ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์œผ๋กœ ์„ ํƒํ•œ ๊ฐ€์šฉ ์˜์—ญ ๋ชฉ๋ก์— ๋”ฐ๋ผ์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” EC2 ์œ ํ˜•์€ ์„ ํƒํ•  ์ˆ˜ ์—†๋‹ค. ๋‹ค๋งŒ, x86_64 ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ ํƒํ•ด๋‘์–ด๋„ arm ์•„ํ‚คํ…์ฒ˜์— ํ•ด๋‹นํ•˜๋Š” XXg ์ธ์Šคํ„ด์Šค ์œ ํ˜•์ด ๋ชฉ๋ก์— ํ‘œ์‹œ๋˜์–ด ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ™˜๊ฒฝ ์ƒ์„ฑ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ™•์ธ์„ ์š”๊ตฌํ•œ๋‹ค. ๋˜ํ•œ, ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค(ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ) ์‚ฌ์ „ ์„ค์ •์„ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์ด ap-northeast-2a ๋งŒ ์„ ํƒ๋˜์–ด์žˆ์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ”„๋ฆฌํ‹ฐ์–ด ๋Œ€์ƒ์ธ t2.micro ์œ ํ˜•์„ ์„ ํƒํ•  ์ˆ˜ ์—†๋‹ค.

ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋กœ ์„ ํƒํ•˜๊ณ ๋‚˜์„œ ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์„ ์ž˜๋ชป ์ง€์ •ํ•˜๋”๋ผ๋„ t3.micro ์™€ t3.small ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ ํƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ƒ ap-northest-2a ๋ฅผ ์„ ํƒํ•˜๋”๋ผ๋„ t2.micro๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๋ถ€์—ฌํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผํ•  ์„ ํƒ ํ•ญ๋ชฉ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ์ƒ์„ฑ ์ดํ›„์—๋Š” ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์ด ์ œํ•œ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•  ๋‹น์‹œ์—๋Š” ์„ ํƒ๋œ ์•„ํ‚คํ…์ฒ˜ ์ด์™ธ์— ์ง€์›ํ•˜์ง€ ์•Š๋Š” EC2 ์ธ์Šคํ„ด์Šค ์œ ํ˜•๋„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชฉ๋ก์—๋Š” ํ‘œ์‹œ๋˜๊ณ  ์žˆ์–ด ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜๋ฅผ arm64 ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์„ ํƒ๋œ AZ์— ap-northeast-2d ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค๋ฉด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์œ ํ˜•์— t4g๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— t4g.micro๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์„ ํƒํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.

์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท๊ณผ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„œ๋ธŒ๋„ท์˜ ํผ๋ธ”๋ฆญ ์—ฌ๋ถ€ ๋ฌธ์ œ

์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท๊ณผ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„œ๋ธŒ๋„ท ๋ชจ๋‘ ํผ๋ธ”๋ฆญ์œผ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ธํ„ฐ๋„ท ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฏ€๋กœ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์„ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค. ์›น UI ์ฝ˜์†” ์ƒ ์„ ํƒํ•˜๋Š” ์„œ๋ธŒ๋„ท์ด ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€๊นŒ์ง€๋Š” ํ™•์ธํ•ด์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ตฌ์„ฑ์œผ๋กœ ํ™˜๊ฒฝ ์ƒ์„ฑ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์ผ, ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋กœ ํผ๋ธ”๋ฆญ ์ฒดํฌ๋ฅผ ํ•œ ํ›„ ์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท์„ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์œผ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ Elastic Beanstalk ์ด ํ™˜๊ฒฝ ์ƒ์„ฑ์„ ์‹œ๋„ํ•˜๋‹ค๊ฐ€ ๋ฉˆ์ถ”๋Š” ์ƒํ™ฉ์„ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋‹ค.

The EC2 instances failed to communicate with AWS Elastic Beanstalk, either because of configuration problems with the VPC or a failed EC2 instance. Check your VPC configuration and try launching the environment again.

Elastic Beanstalk ์ด ํ™˜๊ฒฝ ์ƒ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ CloudFormation ์—์„œ ํ•ด๋‹น ์Šคํƒ์„ ์ฐพ์•„ ์‚ญ์ œ๋ฅผ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. Elastic Beanstalk ์„œ๋น„์Šค๊ฐ€ CloudFormation ์— ์˜ํ•œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๊ตฌ์„ฑ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ Elastic Beanstalk ์ด ํ™˜๊ฒฝ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋„์ค‘์—๋Š” ์›น UI ์ฝ˜์†” ๊ธฐ๋Šฅ์ด ์ œํ•œํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ƒํƒœ ๋ณด๊ณ  ๊ธฐ๋ณธ ์„ ํƒ ์‹œ ๊ด€๋ฆฌํ˜• ์—…๋ฐ์ดํŠธ ์„ค์ • ๋ถˆ๊ฐ€

์ƒํƒœ ๋ณด๊ณ  ์˜ต์…˜์„ ์‹œ์Šคํ…œ ๊ฐ•ํ™”๋จ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์„ ํƒํ•˜๊ณ ๋‚˜์„œ ๊ด€๋ฆฌํ˜• ์—…๋ฐ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ UI ์ฝ˜์†” ์ƒ ์„ค๋ช…์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•„๋„ ํ™˜๊ฒฝ ์ƒ์„ฑ ์‹œ๋„ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ด€๋ฆฌํ˜• ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ ์ƒํƒœ ๋ณด๊ณ ๋ฅผ ์‹œ์Šคํ…œ ๊ฐ•ํ™”๋จ์œผ๋กœ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.

์ƒํƒœ ๋ณด๊ณ  ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ์„ ํƒ ์‹œ ๊ด€๋ฆฌํ˜• ์—…๋ฐ์ดํŠธ ๋ถˆ๊ฐ€
Invalid option specification (Namespace: 'aws:elasticbeanstalk:managedactions', OptionName: 'ManagedActionsEnabled'): Managed platform updates require enhanced health reporting (option SystemType in namespace aws:elasticbeanstalk:healthreporting:system).

Elastic Beanstalk ํ™˜๊ฒฝ ๊ตฌ์„ฑ์— ๋Œ€ํ•˜์—ฌ

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด Elastic Beanstalk ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ฉฐ ๋”ฐ๋ผํ•˜๊ฒ ์ง€๋งŒ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ํŠœ๋‹์ด๋‚˜ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹จ์ˆœํžˆ ๋”ฐ๋ผํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ทธ๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ์ง€๋ฅผ ๊ณ ๋ฏผํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์˜ค๋ž˜๋œ ๊ธ€์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์„ค์ •๋˜์–ด์žˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์šด์˜์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์„ ์ตœ์ ํ™”ํ•œ๋‹ค๊ณ  ์‹œ๋„ํ•ด๋†“์œผ๋ฉด ์™œ ๊ทธ ์„ค์ •์ด ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ, ์–ธ์ œ๋‚˜ Elastic Beanstalk ์— ์˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์šด์˜ ์‹œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์›์ธ์„ ์ฐพ์•„๊ฐ€๊ธฐ ์‰ฝ๋„๋ก ์–ด๋–ค ์ •๋ณด๋“ค์„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ฏธ๋ฆฌ ์ธ์ง€ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” Elastic Beanstalk ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ด๋ฒคํŠธ ์ •๋ณด๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๊ณ  ๋” ๋‚˜์•„๊ฐ€์„œ๋Š” ์ง์ ‘ EC2 ์ธ์Šคํ„ด์Šค๊นŒ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์„ ๋งˆ๋ จํ•ด๋‘๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. Elastic Beanstalk ํ™˜๊ฒฝ์—์„œ Amazon EC2 ์ธ์Šคํ„ด์Šค ๋กœ๊ทธ ๋ณด๊ธฐ๋Š” ์ง์ ‘ EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜์ง€ ์•Š์•„๋„ ์ผ๋ จ์˜ ๋กœ๊ทธ๋“ค์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ ํ•ด์„œ ๋™์ผํ•œ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ฏ€๋กœ ์ง€์†์ ์ธ ํ•™์Šต์€ ์ค‘์š”ํ•œ ๋“ฏ ์‹ถ๋‹ค.