AWS Elastic Beanstalk Java SE νλ«νΌ νκ²½μΌλ‘ μ ν리μΌμ΄μ λ°°ν¬νκΈ°
μλ
νμΈμ Mambo μ
λλ€. μ΄λ² κΈμ AWS Elastic Beanstalkμ Java SE νλ«νΌ νκ²½
μ μ¬μ©νμ¬ κ°λ°λ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ
μ λ°°ν¬νλ κ³Όμ μ λν΄μ νμ΅ν©λλ€. AWSλ₯Ό μ¬μ©μ€μ΄λΌλ©΄ Elastic Beanstalk
μλΉμ€λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ
μ΄ μ€νλλ νκ²½μ λΉ λ₯΄κ³ μ½κ² ꡬμ±ν μ μμΌλ©° μ ν리μΌμ΄μ
μ λ°°ν¬νκ³ νκ²½ μ±λ₯ μ§νμ λ°λΌ νλ‘λΉμ λν μ μλ κΈ°λ₯μ μ μ©ν μ μμ΅λλ€.
μ μ κ°μ΄ Elastic Beanstalk κ²½νμ΄ λΆμ‘±ν μ΄λ³΄ κ°λ°μ λλ νμ¬μμ μλΉμ€ λ°°ν¬λ₯Ό λ΄λΉνμ§ μλ κ°λ°μλΆλ€μ μ΄ κΈμ ν΅ν΄ Elastic Beanstlakλ‘ μλ° μΉ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μλ νκ²½μ ꡬμ±νκ³ μ΄λ€ λ°©μμΌλ‘ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μλμ§λ₯Ό μ΄ν΄ν μ μμ κ² μ λλ€.
κ°λ° κ²½λ ₯μ 4λ μ΄ μ§λ¬μΌλ μ ν리μΌμ΄μ λ°°ν¬λ₯Ό λ΄λΉνλ κ²μ μΌλ§λμ§ μμμ΄μβ¦
AWS Elastic Beanstalk
AWSμμ μ 곡νλ Elastic BeanstalkμλΉμ€λ AWS ν΄λΌμ°λ νκ²½μμ λΉ λ₯΄κ² μ ν리μΌμ΄μ μ λ°°ν¬νκ³ μ ν리μΌμ΄μ μ΄ κ΅¬λλλ νκ²½μ μ½κ² κ΄λ¦¬ν μ μλ AWSμ μ£Όμ μλΉμ€μ λλ€. Beanstalkμ μ¬μ©νλ©΄ Go, Java, Node.js, Python λ± λ€μν μΈμ΄λ‘ κ°λ°λ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μμ΅λλ€.
μ΄ κΈμμ λ°°ν¬ν μ ν리μΌμ΄μ μμ€ μ½λλ κΉνλΈ beanstalk-deploy-sampleμ 곡μ λμ΄μμΌλ μ°Έκ³ νμκΈ°λ₯Ό λ°λλλ€.
μμ² κ°λ¨ν μ ν리μΌμ΄μ μ΄μμ!
Java SE νλ«νΌ
Elastic Beanstalkλ λ€μν μΈμ΄λ‘ μμ±λ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μκ² μ¬λ¬ νλ«νΌ νκ²½μ μ§μν©λλ€. μ΄ μ€μμ μ κ° μ€λΉν μ ν리μΌμ΄μ μ λ°°ν¬ν μ μλ νκ²½μ Java SE νλ«νΌμ λλ€.
λ³λλ‘ Tomcat νλ«νΌμ΄ μ‘΄μ¬νκΈ°λ νμ§λ§ μ΄ κΈμμμ μ£Όμ κ΄μ¬μ¬λ μλμμ.
Elastic Beanstalk Java SE νλ«νΌμ μ체μ μΌλ‘ μ€νκ°λ₯νλλ‘ μ»΄νμΌλ JAR νμΌμΌλ‘ μ ν리μΌμ΄μ μ μ€νν μ μλ νκ²½μΌλ‘ μ κ° μ€λΉν μ ν리μΌμ΄μ μ΄ μ€νλ§ λΆνΈ κΈ°λ°μΌλ‘ μμ±λμ΄μμΌλ―λ‘ μ΄ νκ²½μ΄ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μλ κ°μ₯ μ ν©ν νκ²½μ λλ€. μ€νλ§ λΆνΈμμ μ 곡νλ μ§μ μ€ νλλ μ€νκ°λ₯ν JAR λλ WAR νμΌμΌλ‘ ν¨ν€μ§ν μ μλ λΆλΆμ λλ€.
κΈ°λ³Έ λ°°ν¬ μ ν
Elastic Beanstalkμ Java SE νλ«νΌ νκ²½μ λκ°μ§ λ°©μμΌλ‘ νκ²½μ μ λ‘λλ μ ν리μΌμ΄μ νμΌμ λ°°ν¬ν μ μκ² μ§μν©λλ€. κΈ°λ³Έμ μΌλ‘ λ°°ν¬λλ λ°©μμ λ¨μΌ νμΌλ‘ μ체μ μΌλ‘ μ€νκ°λ₯νλλ‘ μ»΄νμΌλ JAR νμΌμ μ΄μ©νλ κ²μΌλ‘ λ€μμ λͺ λ Ήμ΄λ₯Ό μννμ¬ Java SE νλ«νΌ νκ²½μμ μ ν리μΌμ΄μ μ ꡬλν©λλ€.
java -jar application.jar
μ λͺ
λ Ήμμ μ ν리μΌμ΄μ
νμΌλͺ
μ΄ application.jar
μΈ μ΄μ λ μ°λ¦¬κ° νκ²½μ μ
λ‘λν μ ν리μΌμ΄μ
νμΌμ application.jarλΌλ μ΄λ¦μΌλ‘ λ³κ²½νκΈ° λλ¬Έμ΄λ©° μ¬λ¬λΆμ΄ μ΄λ€ νμΌμ μ΄λ¦μΌλ‘ μ 곡νλ μκ΄μ΄ μμ΅λλ€.
μ¬μ©μ μ μ λ°°ν¬
λλ²μ§Έλ λ€μμ μ»΄νμΌλ JAR λλ Procfile
μ΄λΌλ λͺ
λ Ήμ΄ νμΌμ ν΅ν΄ μ ν리μΌμ΄μ
μ μ€νν μ μλ λ°©μμ
λλ€. μ΄ λ°©μμ μ¬μ©νλ©΄ νλμ νκ²½μμ μ¬λ¬κ°μ μ ν리μΌμ΄μ
μ μ€νν μ μκ±°λ μ§μ μ€νν μ μλ λͺ
λ Ήμ΄λ₯Ό μ μνλ―λ‘ JVM μ΅μ
λλ 컀맨λ λΌμΈ νλΌλ―Έν°λ₯Ό μ€μ ν μ μμ΅λλ€.
web: java -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -Xmx1g -jar app.jar
μ΄λ κ² ν¨ν€μ§λ JAR νμΌκ³Ό Procfileμ λ¬Άμ΄μ μ 곡νλ νμΌμ Elastic Beanstalkμμλ μμ€ λ²λ€(Source Bundle)μ΄λΌκ³ λ§ν©λλ€. μμ€ λ²λ€ νμΌμ Java SE νλ«νΌ νκ²½μ μ λ‘λνμ¬ λ°°ν¬νλ λ°©μμ μλ§μ‘΄ μΉ μλΉμ€μμλ μΆμ²νλ λ°©μμ λλ€.
Linux νλ«νΌ νμ₯
μμ€ λ²λ€ νμΌλ‘ μ¬μ©μ μ μ λ°°ν¬ λ°©μμ μ¬μ©νλ κ²½μ° .ebextensions, .platformμ΄λΌλ ν΄λλ₯Ό ν¬ν¨μμΌ Java SE νλ«νΌ νκ²½μ λν νμ₯μ μνν μ μλλ‘ μ§μν©λλ€. νλ«νΌ νμ₯μ λν μμΈν λ΄μ©μ AWS Elastic Beanstalk κ°λ°μ κ°μ΄λμ Elastic Beanstalk Linux νλ«νΌ νμ₯λ₯Ό ν΅ν΄ νμΈν μ μμ΅λλ€.
μΈμ€ν΄μ€ λ°°ν¬ μν¬νλ‘μ°λ₯Ό μ°Έκ³ νλ©΄ μ λ‘λλ μμ€ λ²λ€ νμΌμ ν΅ν΄ Elastic Beanstalkμ΄ μ΄λ»κ² μ ν리μΌμ΄μ μ λ°°ν¬νλμ§ νμΈν μ μμ΅λλ€. νλ«νΌ νμ₯μ ν΅ν΄ λ€μμ μμ μ μνν μ μμ΅λλ€.
- μ ν리μΌμ΄μ μ€ννκΈ° μ λͺ λ Ήμ΄ μν
- μλ°©ν₯ νλ‘μ ꡬμ±
μ°μν νμ λ€ κΈ°μ λΈλ‘κ·Έμ Elastic Beanstalk Configuration files(.ebextensions)μμμ²λΌ νλ«νΌ νμ₯μ ν΅ν΄ λͺ¨λν°λ§ ν¨ν€μ§λ₯Ό μ€μΉνκ±°λ λ‘컬 νμμ λ³κ²½ν μ μμ΅λλ€.
λΉλλΆν° λ°°ν¬κΉμ§
Elastic Beanstalkμ Java SE νλ«νΌ νκ²½μ λν΄μ μκ²λμμΌλ μ΄μ λΆν° μ κ° μ€λΉν μ ν리μΌμ΄μ μ Java SE νλ«νΌ νκ²½μ λ°°ν¬νλ κ³Όμ μ νμΈνλ©΄μ λΉλλΆν° λ°°ν¬κΉμ§μ νλ‘μΈμ€λ₯Ό μμ§ν΄λ³΄λλ‘ νκ² μ΅λλ€.
μ¬λ¬λΆλ€λ λ°λΌνκ³ μΆλ€λ©΄ kdevkr/beanstalk-deploy-sampleμ μ°Έκ³ νμκΈ° λ°λλλ€.
μ€νκ°λ₯ν JAR νμΌ μ€λΉνκΈ°
μ€νλ§ λΆνΈλ κ·Έλλ€(Gradle) λλ λ©μ΄λΈ(Maven) λꡬλ₯Ό μ¬μ©νμ¬ μ€νκ°λ₯ν JAR λλ WAR νμΌμ ν¨ν€μ§ν μ μλ λ°©λ²μ μ 곡ν©λλ€. μ λ κ·Έλλ€μ λΉλ λκ΅¬λ‘ μ¬μ©νλ μ€νλ§ λΆνΈ νλ‘μ νΈλ₯Ό ꡬμ±νμ¬ λ€μκ³Ό κ°μ΄ λΉλ νμ€ν¬μ bootJar
μ bootWar
κ° ν¬ν¨λμ΄μμ΅λλ€.
μ€νκ°λ₯ν JAR νμΌλ‘λ§ λ°°ν¬ν μ μλ κ²μ΄ μλμ νμΈνκΈ° μν΄ μ λ bootWar νμ€ν¬λ‘ μ ν리μΌμ΄μ
μ μ€νκ°λ₯ν WAR νμΌλ‘ ν¨ν€μ§νκ² μ΅λλ€. μ΄ νμ€ν¬λ‘ ν¨ν€μ§λ WAR νμΌμ build/libs
ν΄λμ μμ±λ©λλ€.
μ΄λ κ² ν¨ν€μ§λ WAR νμΌμ νμΈν μ μμΌλ Java SE νλ«νΌμ μ ν리μΌμ΄μ
μ λ°°ν¬νλ λ°©μ μ€ μ¬μ©μ μ μ λ°°ν¬ λ°©μμ μν΄ μμ±λ WAR νμΌκ³Ό ν¨κ» μ΄ νμΌμ μ€ννλ λͺ
λ Ήμ΄λ₯Ό μ μν Procfile
μ λ§λ€μ΄ νλμ μμ€ λ²λ€λ‘ λ§λλ κ³Όμ μ μ§ννκ² μ΅λλ€.
μμ€ λ²λ€ νμΌμ λ§λ€κΈ° μν΄μ build/libs ν΄λμ μ§μ Procfileμ μμ±νμ¬ μ€ν λͺ λ Ήμ΄λ₯Ό μ μνλ©΄ μλ©λλ€. build ν΄λλ Gitμμ 무μλλ κ²½λ‘μ΄λ©° clean νμ€ν¬μ μν΄μ μ½κ² μμ λ μ μμ΅λλ€. κ°μ₯ μ½κ² λ μ€λ₯΄λ λ°©λ²μ νλ‘μ νΈ λ£¨νΈ κ²½λ‘μ Procfileμ λ§λ€μ΄μ build/libsμ ν¨ν€μ§λ WARνμΌκ³Ό μμΆνλ κ²μ λλ€.
λ€ννλ κ·Έλλ€ νμ€νΈ μ ν μ€μμ μμΉ΄μ΄λΈ(μμΆ νμΌ)μ λ§λ€ μ μλ Zip νμ€ν¬ μ νμ΄ μμΌλ―λ‘ μ΄ μ νμ λν νμ€ν¬λ₯Ό μμ±νμ¬ μμ€ λ²λ€μ λ§λλ νμ€ν¬λ₯Ό μννλλ‘ νκ² μ΅λλ€.
λ¨Όμ , νλ‘μ νΈ λ£¨νΈ κ²½λ‘μ Procfile
μ λ§λ€μ΄ μ ν리μΌμ΄μ
μ€ν λͺ
λ Ήμ΄λ₯Ό μμ±ν©λλ€.
web: java -Xmx1g -jar demo.war
κ·Έλ¦¬κ³ ν¨ν€μ§λ WAR νμΌκ³Ό Procfileμ μμΆν νμΌμ μμ±νλ νμ€ν¬λ₯Ό μμ±ν©λλ€.
task zipSourceBundle(type: Zip, dependsOn: 'bootWar') {
from ('Procfile') {
include('Procfile')
}
from ('build/libs') {
println bootWar.archiveName
include(bootWar.archiveName)
}
baseName = 'beanstalk'
}
μμ±λ zipSourceBundle νμ€ν¬λ₯Ό μννλ©΄ build/distributions
ν΄λμ beanstalk.zip
μ΄λΌλ μμ€ λ²λ€ νμΌμ΄ μμ±λ¨μ νμΈν μ μμ΅λλ€.
κ·Έλ°λ° λ§μ
λλ€. λ§μ½, bootWar νμ€ν¬μ μν΄ λ§λ€μ΄μ§λ νμΌλͺ
μ΄ demo.war
κ° μλλΌλ©΄ μ΄λ»κ² λ κΉμ? Procfileμ μ μν λͺ
λ Ήμ΄μ μΌμΉνμ§ μμ μ ν리μΌμ΄μ
μ λ°°ν¬νλ κ³Όμ μμ μ€λ₯κ° λ°μν κ²μ
λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ μ’μ λ°©λ²μ κ·Έλλ€ λΉλ κ³Όμ μμ Procfileμ μμ±νλ κ²μ
λλ€.
task procfile(dependsOn: 'bootWar') {
doFirst {
new File("build/libs", "Procfile").text = "web: java -Xmx1g -jar ${bootWar.archiveName}"
}
}
μμ±λ procfile νμ€ν¬λ bootWar νμ€ν¬μ μν΄ λ§λ€μ΄μ§λ WAR νμΌλͺ μ μ£Όμ νμ¬ Procfileμ build/libs μμΉμ μμ±ν©λλ€. κ·Έλ¦¬κ³ μμ μμ±ν zipSourceBundleλ₯Ό 보μν zipBeanstalk νμ€ν¬λ₯Ό μμ±ν©λλ€.
task zipBeanstalk(type: Zip, dependsOn: 'procfile') {
from ('build/libs') {
println bootWar.archiveName
include(bootWar.archiveName)
include("Procfile")
}
baseName = 'beanstalk'
}
μ΄μ zipBeanstalk νμ€ν¬λ₯Ό μννμλλ λ€μκ³Ό κ°μ΄ μ ν리μΌμ΄μ μμ€ λ²λ€ νμΌμ΄ μμ±λμμ΅λλ€.
κ·Έλλ€ λΉλ μ νλ‘μ νΈ λ²μ (project.version)μ΄ λͺ μλμ΄λ Procfileκ³Ό ν¨ν€μ§λ WAR νμΌλͺ μ΄ λ€λ₯Έ κ²½μ°κ° λ°μνμ§ μμ΅λλ€.
νλ‘μ νΈ λ²μ μ λͺ μνλ©΄ μμΉ΄μ΄λΈ νμΌλͺ μ νλ‘μ νΈ λ²μ μ΄ ν¬ν¨λμ!
μ€μ·! μ’μμ.
Java SE νλ«νΌ νκ²½ μμνκΈ°
μ ν리μΌμ΄μ
μμ€ λ²λ€ νμΌμ΄ μ€λΉλμμΌλ―λ‘ Elastic Beanstalk μλΉμ€μμ μλ° μ ν리μΌμ΄μ
μ λ°°ν¬ν μ μλ νκ²½μ μμ±ν©λλ€. νκ²½μ λν μ΄λ¦, λλ©μΈμ μ€μ ν ν μ°λ¦¬κ° μ€λΉν μ€νλ§ λΆνΈ μ ν리μΌμ΄μ
μ μ체μ μΌλ‘ μ€νλλ JARλ‘ μ»΄νμΌλ μ ν리μΌμ΄μ
μ΄λ―λ‘ Java SE νλ«νΌ νκ²½
μ μ νν©λλ€.
μμ μ€λΉν μ ν리μΌμ΄μ μμ€ λ²λ€νμΌμ μ ννμ¬ μ λ‘λν©λλ€.
μ£Όμ!
μ νλ©΄μμ νκ²½ μμ± λ²νΌμ λλ₯΄λ©΄ κΈ°λ³ΈμΌλ‘ μ μλμ΄μλ μΈμ€ν΄μ€ νλ‘νμΌμ΄ ꡬμ±λ Java SE νλ«νΌ νκ²½μ ꡬμ±νμ¬ μ ν리μΌμ΄μ μ λ°°ν¬ν μ μμ΅λλ€. κ·Έλ¬λ μ£Όμν΄μΌλ μ¬νμ λ€μ μ²λΌ νκ²½μ μμ±νκ³ λμ λ³κ²½ν μ μλ λΆλΆλ€μ΄ μλ€λ μ μ λλ€.
κΈ°λ³Έ Java SE νλ«νΌμ CLB(Classic Load Balancer) λ₯Ό λ‘λλ°Έλ°μλ‘ μ¬μ©νλλ° νκ²½μ΄ μμ±λ μ΄νμ λ‘λ λ°Έλ°μ μ νμ λ³κ²½νκ³ μ κ΅¬μ± νΈμ§μ μλνμμ§λ§ μ νμ λ³κ²½νλ κ²μ μ 곡νμ§ μμ΅λλ€. λ°λΌμ, L7 λ 벨μ λ‘λλ°Έλ°μμΈ ALB(Application Load Balancer) λλ L4 λ 벨μ NLB(Network Load Balancer) λ₯Ό νκ²½μ λν λ‘λλ°Έλ°μλ‘ μ¬μ©νκΈ° μν΄μλ μΆκ° μ΅μ κ΅¬μ± κΈ°λ₯μΌλ‘ μ¬μ©μ μ μ νκ²½μ μμ±ν΄μΌν©λλ€.
aws ec2 create-default-vpc λͺ λ ΉμΌλ‘ κΈ°λ³Έ VPCλ₯Ό λ€μ λ§λ€μλ μλ€β¦
Java SE νλ«νΌμμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ Nginx νλ‘μ ꡬμ±μ HTTP(80) νΈλν½μ λν΄ 5000 ν¬νΈλ₯Ό μ¬μ©νλ μ ν리μΌμ΄μ
μΌλ‘ λΌμ°ν
λλλ‘ μ€μ λμ΄μμ΅λλ€. Beanstalkμ μν΄ μμ±λ EC2 μΈμ€ν΄μ€μ μ μν΄μ Nginx μ€μ μ 보λ₯Ό μ°Ύμ보면 λ€μκ³Ό κ°μ΄ 00_application.conf
νμΌμ νλ‘μ ꡬμ±μ΄ μ μλμ΄ μμμ νμΈν μ μμ΅λλ€.
[root@ip-172-31-40-185 ~]# cat /etc/nginx/conf.d/elasticbeanstalk/00_application.conf
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
κ·Έλ°λ° μ κ° λ°°ν¬ν μ€νλ§ λΆνΈ μ ν리μΌμ΄μ μ λ³λλ‘ μ€νλλ ν¬νΈλ₯Ό μ§μ νμ§ μμ 8080 ν¬νΈλ₯Ό ν λΉν©λλ€.
[root@ip-172-31-40-185 ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8080 :::* LISTEN 3512/java
Elastic Beanstalkμ 5000 ν¬νΈμ λν μ ν리μΌμ΄μ μνλ₯Ό νμΈνλ―λ‘ Elastic Beanstalkμ νκ²½ μνλ₯Ό μ¬λ°λ₯΄μ§ μλ€κ³ νΌλλ°±νκ² λ©λλ€. λ°λΌμ, λ‘λλ°Έλ°μκ° νΈλν½μ μ ν리μΌμ΄μ μΌλ‘ λΌμ°ν ν μ μλλ‘ μ ν리μΌμ΄μ μ 5000 ν¬νΈλ‘ ν λΉνλλ‘ ν΄μΌν©λλ€. λ€λ§, μ ν리μΌμ΄μ μ΄ 5000 ν¬νΈλ₯Ό μ¬μ©νλλ‘ μ ν리μΌμ΄μ νλ‘νΌν° μ€ server.port λ₯Ό 5000μΌλ‘ μ§μ νκ³ λ€μ ν¨ν€μ§νμ¬ λ°°ν¬νλ κ²μ λΆνΈν μ μμ΅λλ€.
λ€μ ν¨ν€μ§νμ§ μλλΌλ μ ν리μΌμ΄μ μ΄ κ΅¬λλλ ν¬νΈλ₯Ό λ³κ²½ν μ μλ λ°©λ²μ κ³ λ €ν΄λ³΄λλ‘ νμ£ .
- κΈ°λ³Έ μλ°©ν₯ νλ‘μ κ΅¬μ± νμΌμ μ μλ ν¬νΈ λ³κ²½
- PORT νκ²½ μμ±μΌλ‘ κΈ°λ³Έ μ ν리μΌμ΄μ μ΄ μμ λκΈ°νλ ν¬νΈλ₯Ό μ¬μ μ
- JVM μ΅μ μ μ§μ νμ¬ μ ν리μΌμ΄μ μ€ν ν¬νΈ λ³κ²½
1λ² λ°©λ²μ κΈ°λ³ΈμΌλ‘ μ μλλ Nginx νλ‘μ ꡬμ±μ λ³κ²½νλ λ°©λ²μΌλ‘ PORT
λΌλ νκ²½ μμ±μ λ°λΌ 00_application.confμ λ΄μ©μ μ μν©λλ€.
[root@ip-172-31-40-185 ~]# cat /etc/nginx/conf.d/elasticbeanstalk/00_application.conf
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
PORT νκ²½ μμ±μ λ°λΌ μ ν리μΌμ΄μ νλ‘μ ν¬νΈκ° λ³κ²½λμμ΄μ!
μ€νλ§ λΆνΈ κΈ°λ°μ μ ν리μΌμ΄μ
μ κ°λ°νλ κ°λ°μλΌλ©΄ νκ²½ μμ±μ΄λΌλ μ΄λ¦μ λ³΄κ³ μ€νλ§ λΆνΈκ° μ§μνλ μΈλΆν ꡬμ±(Externalized Configuration)μ λ μ¬λμ μ μμ΅λλ€. μΈλΆν κ΅¬μ± μμ 5λ² νλͺ©μ OS νκ²½ λ³μ
κ° μλλ° μΈν
리μ μ΄λ‘ μ ν리μΌμ΄μ
μ ꡬλν λ νκ²½ λ³μλ₯Ό μ§μ νμ¬ νλ‘νΌν° κ°μ μ€μ ν μ μλ κ²μ΄ μ΄ λΆλΆμ
λλ€.
μ΄λ²μλ PORT νκ²½ μμ±μ΄ μλ SERVER_PORT
νκ²½ μμ±μ 5000μ μ€μ νμ¬ μ ν리μΌμ΄μ
μ΄ 5000 ν¬νΈλ‘ ꡬλλλμ§λ₯Ό νμΈν΄λ΄
μλ€.
[root@ip-172-31-40-185 ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::5000 :::* LISTEN 6244/java
SERVER_PORT νκ²½ μμ±μ μ μλ ν¬νΈλ‘ μ ν리μΌμ΄μ μ΄ μ€νλμμ΄μ!
JVM μ΅μ μ€μ
νκ²½ μμ±μ ν΅ν΄ SERVER_PORTλ₯Ό μ μνμ¬ μ ν리μΌμ΄μ
νλ‘νΌν°λ₯Ό λ³κ²½ν μ μμ§λ§ JVM μ΅μ
μΌλ‘ server.port
μ λν κ°μΌλ‘ 5000μ μ§μ νλ κ²μ μλν΄λ³΄κ² μ΅λλ€. μΌλ°μ μΌλ‘ JVM μ΅μ
μ μ§μ νκΈ° μν΄μλ -Dserver.portμ κ°μ΄ java λͺ
λ Ήμ΄λ₯Ό μνν λ μ§μ ν΄μΌν©λλ€. νμ§λ§ μ°λ¦¬λ Procfileμ μ€ν λͺ
λ Ήμ΄λ₯Ό μ μν΄λμμΌλ―λ‘ μΆκ°μ μΈ JVM μ΅μ
μ μ§μ ν μ μλ λ°©μμ΄ μμ΅λλ€.
Elastic Beanstalkμμ JVM μ΅μ
μ μ§μ νλ λ°©λ²μ κ²μν΄λ³΄λ©΄ JAVA_TOOL_OPTIONS νκ²½ λ³μλ‘ μ§μ ν μ μμμ μ°Ύμ μ μμ΅λλ€. JAVA_TOOL_OPTIONS νκ²½ λ³μ μΈμλ JVM λ§λ€ JAVA_OPTS λλ _JAVA_OPTIONSλ₯Ό μ¬μ©ν μ μμ΅λλ€λ§ JAVA_TOOL_OPTIONSμ΄ JVMTI
νμ€ μ€νμ΄λ―λ‘ JAVA_TOOL_OPTIONSμ μ¬μ©νμ¬ JVM μ΅μ
μ μ€μ νλ κ² μ¬λ°λ₯Έ λ°©λ²μ
λλ€.
Java SE νλ«νΌ νκ²½μ Correcto JDKλ _JAVA_OPTIONS νκ²½ μμ±λ μ μ©λμ!
λ€μμ Elastic Beanstalk Java SE νλ«νΌ νκ²½μμ JAVA_TOOL_OPTIONSμ _JAVA_OPTIONS νκ²½ μμ±μ μ§μ νμ λ μ μ© μμμ λλ€.
Mar 5 16:37:54 ip-172-31-40-185 web: Picked up JAVA_TOOL_OPTIONS: -Dserver.port=5000
Mar 5 16:37:54 ip-172-31-40-185 web: Picked up _JAVA_OPTIONS: -Dserver.port=5001
[root@ip-172-31-40-185 ~]# jps -v
3634 war -Dserver.port=5000 -Xmx1g -Dserver.port=5001
3740 Jps -Dapplication.home=/usr/lib/jvm/java-11-amazon-corretto.x86_64 -Xms8m -Djdk.module.main=jdk.jcmd
JAVA_TOOL_OPTIONS λ³΄λ€ _JAVA_OPTIONS νκ²½ μμ±μ΄ λμ€μ μ μ©λλ©° Procfileμ μ μλ JVM μ΅μ κ³Όμ μμλ λ€λ₯Έ κ²μ νμΈν μ μμ΅λλ€.
μΆκ° μ΅μ ꡬμ±
κΈ°λ³ΈμΌλ‘ μ μλ νκ²½μΌλ‘ μμν기보λ€λ μΆκ° μ΅μ
ꡬμ±
κΈ°λ₯μ ν΅ν΄ μ¬μ©μ μ μλ Java SE νλ«νΌ νκ²½μ ꡬμ±νλ κ²μ΄ μ’μ΅λλ€. μ¬μ μ€μ μ ν΅ν΄ μΈμ€ν΄μ€ κ·λͺ¨λ₯Ό μ νν μ μμΌλ μ§μ νκ²½ μ΅μ
μ μ μνκΈ° μν΄ μ¬μ©μ μ§μ κ΅¬μ± μ μ νν©λλ€.
μ¬μ©μ μ§μ κ΅¬μ± μ νμ μ 곡λλ κΈ°λ³Έ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€. λͺκ°μ§ μ΅μ μ λν΄μ μμ μ ν΄λ³΄λλ‘ νμ£ .
μννΈμ¨μ΄
κ°μ₯ λ¨Όμ , μννΈμ¨μ΄ μ΅μ μ νΈμ§νμ¬ κΈ°λ³ΈμΌλ‘ μ§μ λ μ ν리μΌμ΄μ νλ‘μ ν¬νΈμ λ§κ² μ€νλ μ μλλ‘ SERVER_PORT νκ²½λ³μλ₯Ό λ±λ‘ν©λλ€.
μ©λ
μ©λ μ΅μ μ νΈμ§νμ¬ Elastic Beanstalkμ΄ EC2 μΈμ€ν΄μ€λ₯Ό μ΄λ»κ² μ€ννκ³ κ΄λ¦¬ν μ§ μ€μ ν μ μμ΅λλ€. κΈ°λ³Έ λ¨μΌ μΈμ€ν΄μ€ νκ²½μ λ‘λλ°Έλ°μλ₯Ό μ¬μ©ν μ μμΌλ―λ‘ μ€ν μ€μΌμΌλ§ κΈ°λ₯μ νμ±ννκΈ° μνμ¬ λ‘λ λ°Έλ°μ± μν νκ²½μΌλ‘ λ³κ²½ν©λλ€. λ‘λ λ°Έλ°μ± μν νκ²½μ΄μ§λ§ μ²μμλ λ¨μΌ μΈμ€ν΄μ€ λ‘ μμνκΈ° μνμ¬ μΈμ€ν΄μ€μ μ΅λ ν¬κΈ°λ₯Ό 1λ‘ μ§μ ν©λλ€.
λ§μ½, μ¬λ¬λΆμ μ ν리μΌμ΄μ μ΄ μꡬνλ λ©λͺ¨λ¦¬ ν¬κΈ°μ CPU μ±λ₯μ΄ μλ€λ©΄ μΈμ€ν΄μ€ μ νμ λ³κ²½ν©λλ€. μ λ κ°λ¨ν μ ν리μΌμ΄μ μ λ°°ν¬νλ―λ‘ κΈ°λ³ΈμΌλ‘ μ€μ λ t2.microλ₯Ό μ¬μ©νκ² μ΅λλ€.
t2.microλ 1GBμ λ©λͺ¨λ¦¬ ν¬κΈ°λ₯Ό κ°μ§λλ€.
λ‘λλ°Έλ°μ
μ©λ μ΅μ μμ λ‘λ λ°Έλ°μ± νκ²½μ μ ννλ©΄ λ‘λλ°Έλ°μ μ΅μ μ μ€μ ν μ μκ² νμ±νλ©λλ€.
κΈ°λ³ΈμΌλ‘ μ§μ λ λ‘λλ°Έλ°μλ L7 λ 벨μ ALB(Application Load Balancer)μΌλ‘ λ³κ²½ν νμλ μμ§λ§ νμ¬μμλ λΉ λ₯Έ νΈλν½ μ²λ¦¬λ₯Ό μν΄ L4 λ 벨μ NLB(Network Load Balancer)λ₯Ό μ¬μ©νλ―λ‘ NLBλ‘ μ§μ νκ² μ΅λλ€.
κ° λ‘λλ°Έλ°μκ° μ§μνλ κΈ°λ₯μ΄ κΆκΈνλ€λ©΄ Elastic Load Balancing κΈ°λ₯μ μ°Έκ³ νμΈμ. λ‘λλ°Έλ°μκ° νΈλν½μ μ²λ¦¬νλ 리μ€λμ νλ‘μΈμ€λ₯Ό μ€μ ν μ μμ§λ§ μ¬κΈ°μλ λμ΄κ°λλ‘ νκ² μ΅λλ€.
보μ
보μ μ΅μ μ νΈμ§νμ¬ EC2 μΈμ€ν΄μ€μ μ κ·Όν μ μλ κΆνμ μ€μ ν μ μμ΅λλ€. ν€ νμ΄λ₯Ό μ§μ νλ©΄ EC2 μ½μμ ν΅ν΄ μ°κ²°ν μ μμ΅λλ€.
λ€νΈμν¬
λ€νΈμν¬ μ΅μ μ νΈμ§νμ¬ VPCλ₯Ό μ ννκ³ λ‘λλ°Έλ°μμ μΈμ€ν΄μ€κ° μ¬μ©ν μλΈλ· λμμ μ€μ ν μ μμ΅λλ€.
μ΄μ μ΅μ ꡬμ±μ΄ λλ¬μΌλ―λ‘ νκ²½ μμ± λ²νΌμ ν΄λ¦νμ¬ Elastic Beanstalkμ΄ νκ²½μ ꡬμ±νλ κ²μ κΈ°λ€λ¦½λλ€. Elastic Beanstalkκ° μμ±ν νκ²½μ μνλ₯Ό νμΈνκ³ μ ν리μΌμ΄μ μΌλ‘ νΈλν½μ΄ μ²λ¦¬λλμ§λ₯Ό νμΈνλ©΄ λ©λλ€.
Elastic Beanstalkμ΄ νκ²½μ μμ±νλ κ²μ κΈ°λ€λ ΈμΌλ μ κ° μ€μλ‘ μΈμ€ν΄μ€ μλΈλ·μ μλͺ» μ§μ νμ¬ μΈμ€ν΄μ€κ° μμ±λμ§ λͺ»νμμΌλ Elastic Beanstalkλ νκ²½ μμ±μ μν΄ μνλ₯Ό κ³μ νμΈνκ³ κΈ°λ€λ¦¬λ 무ν 루ν μ¦μμ λΉ μ Έλ²λ Έμ΅λλ€.
μΈμ€ν΄μ€ μλΈλ·μ μ¬λ°λ₯΄κ² μ§μ νκΈ° μν΄μ νκ²½ κ΅¬μ± νμ΄μ§λ‘ κ°λ³΄μμ§λ§ Elastic Beanstalkλ νκ²½μ λν μ΄λ²€νΈλ₯Ό μννκ³ μμ΄ μ΄λ ν μμ λ μ§νν μ μμ΅λλ€.
μ΄μ²λΌ νκ²½μ λν μμ μ΄ μνλκ³ μμλλ μ΄λ ν μμ²λ μνν μ μλ λ¨μ μ΄β¦
μ λλ‘ μμ±λμ§ μλ Beanstalk νκ²½ μμ νκΈ°
Elastic Beanstalk μλΉμ€μμλ μ νκ²½ μμ± μμ
μ μ€μ§ν μ μλ λ°©λ²μ΄ μμ΅λλ€. λ€λ§, AWS μλΉμ€ μ€ CloudFormationμ κ²μνμ¬ λ€μ΄κ°λ³΄λ©΄ Elastic Beanstalk νκ²½μ ꡬμ±νλ μ€νμ μ°Ύμ μ μκ³ CREATE_IN_PROGRESS
μνμ λ¨Έλ¬Όλ¬ μλ κ²μ νμΈν μ μμ΅λλ€. μ΄ μ€νμ μ ννμ¬ μμ νλ©΄ λ©λλ€.
Java SE νλ«νΌ νκ²½μ CloudFormationλ‘ μ μν΄μ ꡬμ±νλκ΅°μ?
Beanstalk νκ²½μ μμ±νλ μ€νμ΄ μμ λμ΄ Beanstalk μλΉμ€λ‘ λ€μ κ°λ³΄λ©΄ μμ±ν λ μ€λ₯κ° λ°μνλ νκ²½μ΄ μμ λκ³ μμμ νμΈν μ μμ΅λλ€. λ€νμ λλ€.
λ¨, μμ λ νκ²½ μ΄λ¦μ λ€μ μ¬μ©νκ³ μΆμ κ²½μ° 1μκ°λμ κΈ°λ€λ €μΌν΄μβ¦
νκ²½μ μ μμ μΌλ‘ ꡬμ±ν κ²½μ° λ€μκ³Ό κ°μ΄ λ°°ν¬κ° μλ£λμμμ νμΈν μ μμ΅λλ€.
ν΄β¦
νλ«νΌ νμ₯ ꡬμ±
Elastic Beanstalkμ μ ν리μΌμ΄μ μμ€ λ²λ€μ ν¬ν¨λ κ΅¬μ± λ° νλ«νΌ νμΌμ ν΅ν΄ νκ²½μ λν ꡬμ±μ νμ₯νλ κ²μ μ§μν©λλ€. κ΅¬μ± νμΌμ .ebextensions ν΄λ, νλ«νΌ νμΌμ .platform ν΄λμ μμΉνκ² λ©λλ€. μ λ μΈνλΌμ λν νλ λ°©λ²μ λν΄μλ μ λͺ¨λ₯΄κΈ° λλ¬Έμ μΈν°λ·μ 곡μ λ λ΄μ©μ μκ°νλλ‘ νκ² μ΅λλ€.
EC2 μΈμ€ν΄μ€ νμμ‘΄ λ³κ²½νκΈ°
AWSμ elastic-beanstalk-samples/configuration-filesμλ EC2 μΈμ€ν΄μ€μ νμμ‘΄μ λ³κ²½ν μ μλ κ΅¬μ± νμΌ μμ (timezone-linux.config)κ° μμ΅λλ€.
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: TZ
value: "Asia/Seoul"
files:
"/tmp/set_timezone.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
NEWTIMEZONE="$(/opt/elasticbeanstalk/bin/get-config environment -k TZ)"
if [ -z $NEWTIMEZONE ] ; then
echo "TZ" environment property not set
exit 1
fi
if [ ! -f /usr/share/zoneinfo/$NEWTIMEZONE ] ; then
echo /usr/share/zoneinfo/$NEWTIMEZONE does not exist
exit 1
fi
echo 'ZONE="'$NEWTIMEZONE'"' > /etc/sysconfig/clock
echo 'UTC=true' >> /etc/sysconfig/clock
ln -f -s /usr/share/zoneinfo/$NEWTIMEZONE /etc/localtime
commands:
00-custom-timezone:
command: /tmp/set_timezone.sh
κΈ°μ‘΄ μμ μ λ€λ₯΄κ² ntpdateλ‘ NTP μλ² λκΈ°ν λͺ λ Ήμ΄λ₯Ό μννμ§ μκ³ Linux μΈμ€ν΄μ€μ μκ° μ€μ μ λ°λΌ Amazon Time Sync Serviceμ λκΈ°νλλ μκ°μ κ·Έλλ‘ μ¬μ©νκ² μ΅λλ€.
[root@ip-10-1-0-52 ~]# date
Sun Mar 7 13:58:57 KST 2021
λͺ λ Ήμ΄κ° μνλμ΄ νκ΅ μκ°μΌλ‘ νμλλ€.
Node Exporter μμ΄μ νΈ μ€μΉ
OKKYμμ μ΄μνμμΌλ‘ νλμ€μ΄μ μ°½μ²ν₯λ‘λμ AWS Beanstalk μ±λ₯ νλ μ리μ¦μμμ²λΌ μ ν리μΌμ΄μ μ±λ₯ λͺ¨λν°λ§μ μν APM μμ΄μ νΈλ₯Ό μ€μΉν μλ μμ΅λλ€. μ λ νλ‘λ©ν μ°μ€λ‘ EC2 μΈμ€ν΄μ€μ λν 맀νΈλ¦μ μμ§ν μ μλλ‘ Beanstalkλ‘ μμ±λλ EC2 μΈμ€ν΄μ€μ Node Exporterλ₯Ό μ€μΉνκ³ μ€ννλλ‘ νμ₯ ꡬμ±μ μ§νν΄λ³΄κ² μ΅λλ€.
λ¨Όμ Nginx νλ‘μ ꡬμ±μ Node Exporterμ λν νλ‘μ κ΅¬μ± νμΌμ μΆκ°ν©λλ€.
location /metrics {
proxy_pass http://127.0.0.1:9100/metrics;
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;
}
μλ°©ν₯ νλ‘μ ꡬμ±μ ν΅ν΄ /metrics
μ λν νΈλν½μ Node Exporterλ‘ λΌμ°ν
ν μ μκ² λ©λλ€. κ·ΈλΌ μ΄μ Node Exporterλ₯Ό μ€μΉνκ³ μ€ννλ κ΅¬μ± νμΌμ λ§λλλ€.
commands:
command block:
cwd: /home/webapp
command: |
curl -L https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz | tar zxv
cd node_exporter-1.1.2.linux-amd64
nohup ./node_exporter > /dev/null 2>&1 &
μ¬λ¬κ°μ§ λͺ
λ Ήμ΄λ₯Ό νλλ‘ ν©μΉ μ μλ command block
μ μ¬μ©νμΌλ©° Node Exporterλ₯Ό λ°±κ·ΈλΌμ΄λλ‘ μ€ννλλ‘ νμμ΅λλ€. μ΄μ μ΄ νμΌλ€μ μμ€ λ²λ€μ ν¬ν¨νμ¬ νκ²½μ λ°°ν¬νλ©΄ λ€μκ³Ό κ°μ΄ EC2 μΈμ€ν΄μ€μ λν μ§νλ₯Ό μμ§ν μ μκ² λ©λλ€.
Beanstalk λ°°ν¬ νλ‘μΈμ€ νμΈ
Elastic Beanstalkλ‘ μ ν리μΌμ΄μ μ λ°°ν¬νκΈ°κΉμ§ λ¬Έμ κ° λ°μνμλ μ΄λ€ λΆλΆμ 체ν¬ν΄μΌνλμ§ μμ보λλ‘ νμ£ .
λ‘κ·Έ
κ°μ₯ λ¨Όμ νμΈν΄μΌλ λΆλΆμ λ‘κ·Έμ λλ€.
[root@ip-10-1-0-52 log]# ll -h
total 736K
drwx------ 3 root root 17 Mar 7 11:58 amazon
-rw------- 1 root root 8.3K Mar 7 11:58 boot.log
-rw------- 1 root utmp 15K Mar 7 13:36 btmp
-rw-r--r-- 1 root root 6.9K Mar 7 14:45 cfn-hup.log
-rw-r--r-- 1 root root 23K Mar 7 14:04 cfn-init-cmd.log
-rw-r--r-- 1 root root 14K Mar 7 14:04 cfn-init.log
-rw-r--r-- 1 root root 39K Mar 7 14:04 cfn-wire.log
drwxr-xr-x 2 chrony chrony 6 Mar 7 11:58 chrony
-rw-r--r-- 1 root root 93K Mar 7 11:58 cloud-init.log
-rw-r--r-- 1 root root 2.5K Mar 7 11:58 cloud-init-output.log
-rw------- 1 root root 9.4K Mar 7 14:40 cron
-rw-r--r-- 1 root root 27K Mar 7 11:58 dmesg
-rw-r--r-- 1 root root 0 Mar 7 11:58 eb-cfn-init-call.log
-rw-r--r-- 1 root root 41K Mar 7 11:58 eb-cfn-init.log
-rw-r--r-- 1 root root 137K Mar 7 14:04 eb-engine.log
-rw-r--r-- 1 root root 1.3K Mar 7 14:30 eb-publish.log
-rw-r--r-- 1 root root 455 Mar 7 12:30 eb-tools.log
drwxr-xr-x 3 healthd healthd 39 Mar 7 12:00 healthd
-rw------- 1 root root 204 Mar 7 11:58 maillog
-rw------- 1 root root 205K Mar 7 14:47 messages
drwxr-xr-x 4 nginx nginx 71 Mar 7 12:45 nginx
drwxr-xr-x 2 root root 6 Mar 7 11:58 rotated
drwxr-xr-x 2 root root 18 Mar 7 11:58 sa
-rw------- 1 root root 41K Mar 7 14:32 secure
-rw------- 1 root root 21K Mar 7 14:33 web.stdout.log
-rw-rw-r-- 1 root utmp 7.9K Mar 7 14:32 wtmp
drwxr-xr-x 2 xray xray 6 Feb 25 22:54 xray
λ‘κ·Έ νμΌλ€μ /var/log ν΄λμ μμΉνκ² λλλ° μ£Όλ‘ νμΈνλ λ‘κ·Έλ eb-engine.log μ web.stdout.log μ λλ€.
- eb-engine.log: Beanstalk νλ‘μΈμ€ λ‘κ·Έ
- web.stdout.log: νμ¬ μ€νλκ³ μλ μ ν리μΌμ΄μ μ λ‘κ·Έ
- cfn-init-cmd.log: .eb-extensions κ΅¬μ± νμΌμ μ μν λͺ λ Ήμ΄λ₯Ό μνν λ‘κ·Έ
μμ€ λ²λ€ νμΌ
μ λ‘λλ μμ€ λ²λ€μ ν¬ν¨λ νμΌλ€μ Elastic Beanstalkμ μν΄μ λ€μν μμΉλ‘ 볡μ¬λ©λλ€.
λ¨Όμ , νμ¬ λ°°ν¬λκ³ μλ μ ν리μΌμ΄μ μ λν μμ€ λ²λ€ νμΌκ³Ό νκ²½ μμ±μ΄ μ μλ νμΌμ /opt/elasticbeanstalk/deploymentμμ μ°Ύμ μ μμ΅λλ€.
[root@ip-10-1-0-52 deployment]# ll -h
total 18M
-rw-r--r-- 1 root root 18M Mar 7 14:04 app_source_bundle
-rw-r--r-- 1 root root 92 Mar 7 14:04 app_version_manifest.json
-rw-r--r-- 1 root root 4.0K Mar 7 14:04 cfn-metadata-cache.json
-r-------- 1 root root 211 Mar 7 14:04 env
κ·Έλ¦¬κ³ μμ€ λ²λ€(app_source_bundle)μ ν¬ν¨λ WAR νμΌκ³Ό Procfileμ /var/app/currentμ 볡μ¬λμ΄ μ€νν©λλ€. νμ¬ λ°°ν¬λκ³ μλ μ ν리μΌμ΄μ μ΄ μ λλ‘λ λ²μ μΌλ‘ μ€νλκ³ μλμ§ νμ ν μ μκ² μ΅λλ€.
[root@ip-10-1-0-52 current]# ll -h
total 20M
-rw-r--r-- 1 webapp webapp 20M Mar 7 14:02 demo-1.0.0.war
-rw-r--r-- 1 webapp webapp 36 Mar 7 14:02 Procfile
νλ«νΌ(.platform)μ μΆκ°λ νλ‘μ ꡬμ±νμΌμ ν΄λΉ νλ‘μ νμλ‘ λ³΅μ¬λ©λλ€. μλ₯Ό λ€μ΄, μμ μμ±ν΄λ³Έ 01_node_exporter.conf νλ‘μ κ΅¬μ± νμΌμ /etc/nginx/conf.d/elasticbeanstalkμ 볡μ¬λ©λλ€.
[root@ip-10-1-0-52 elasticbeanstalk]# ll -h
total 12K
-rw-r--r-- 1 root root 397 Mar 7 14:04 00_application.conf
-rw-r--r-- 1 webapp webapp 420 Mar 7 00:05 01_node_exporter.conf
-rw-r--r-- 1 root root 215 Mar 7 14:04 healthd.conf
/etc/nginx/conf.d/elasticbeanstalk ν΄λμλ κΈ°λ³ΈμΌλ‘ μ 곡λλ νλ‘μ κ΅¬μ± νμΌκ³Ό ν¨κ» μμ€ λ²λ€μ ν¬ν¨λ νλ‘μ κ΅¬μ± νμΌμ΄ μ‘΄μ¬νλ κ²μ νμΈν μ μμ΅λλ€.
λλ§μΉλ©°
μ€μ λ‘ μ€λ¬΄μμ Elastic Beanstalkλ‘ μ ν리μΌμ΄μ μ λ°°ν¬νλ κ²μ λ€μν λΆλΆμμ κ²ν λ₯Ό μ§νν΄μΌν©λλ€. κ°λ°λ μ ν리μΌμ΄μ μ΄ μꡬνλ μ΅μ νκ²½ μ¬μμ λ°λΌ μΈμ€ν΄μ€ μ νμ μ€μ ν΄μΌνλ©° μλΉμ€ ꡬ쑰μ λ°λΌ μ μ°νκ² νΈλν½μ μ²λ¦¬ν μ μλ ALBλ₯Ό μ μ©ν μ§ λΉ λ₯Έ νΈλν½ μ²λ¦¬λ₯Ό μν΄ NLBλ‘ λ‘λ λ°Έλ°μ±μ λ¨μν ν΄μΌν μ§λ₯Ό μ ν΄μΌν μ μμ΅λλ€.
Elastic Beanstalkλ‘ μ ν리μΌμ΄μ μ λ°°ν¬νλ κ²μ΄ μ½λ€λ μ₯μ μ μμ§λ§ λ¬Έμ κ° λ°μνμλ ν΄κ²°νλ κ²μ΄ μ½μ§ μλ€λ λ¨μ μ΄ λΆλͺ ν μ‘΄μ¬ν©λλ€. μ€μ λ‘ μ΅κ·Όμ μ ν리μΌμ΄μ μ λ°°ν¬νλ κ³Όμ μμ λ§μ λ³κ²½μ¬νλ€λ‘ μΈνμ¬ λ°°ν¬ μ νμ΄ μ©μ΄νμ§ μμ λ³λλ‘ νκ²½μ ꡬμ±νκ³ νΈλν½μ μ ννλ κ³Όμ μ μννκΈ°λ νμ΅λλ€. μ€λ¬΄μμ μκΈ°μΉ λͺ»νκ² λ°μνλ λ¬Έμ λ€λ‘ μΈνμ¬ μ½κ² λ°°ν¬λκ² μ§λΌλ μκ°κ³Ό λ¬λ¦¬ λ°°ν¬κ° μ½μ§ μμ μμ±ν΄λ³΄μμ΅λλ€. μ΄μμΌλ‘ AWS Elastic Beanstalk Java SE νλ«νΌ νκ²½μΌλ‘ μ ν리μΌμ΄μ λ°°ν¬νκΈ°λ₯Ό λ§μΉκ² μ΅λλ€.
κ°μ¬ν©λλ€.