AWS (EC2,RDS,S3,IAM) Setting - showMeTheMoneyPrac/BE_Repo GitHub Wiki
EC2 ๊ตฌ๋งคํ๊ธฐ
[์ฝ๋์ค๋ํซ] EC2 ๊ตฌ๋งค ์ฃผ์
[https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2](https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2#Instances:sort=instanceId)
๊ตฌ๋งค ํ๋ฉด๋ค ๋ฐ๋ผํ๊ธฐ
EC2์ ์ ์ํ๊ธฐ
- SSH(Secure Shell Protocol)
- ๋ค๋ฅธ ์ปดํจํฐ์ ์ ์ํ ๋ ์ฐ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. ๋ค๋ฅธ ๊ฒ๋ค ๋ณด๋ค ๋ณด์์ด ์๋์ ์ผ๋ก ๋ฐ์ด๋ฉ๋๋ค.
- ์ ์ํ ์ปดํจํฐ๊ฐ 22๋ฒ ํฌํธ๊ฐ ์ด๋ ค์์ด์ผ ์ ์ ๊ฐ๋ฅํฉ๋๋ค. AWS EC2์ ๊ฒฝ์ฐ, ์ด๋ฏธ 22๋ฒ ํฌํธ๊ฐ ์ด๋ ค์์ต๋๋ค. ํ์ธํด๋ณผ๊น์?
AWS EC2์ ์ ์ํ๊ธฐ
-
ํฐ๋ฏธ๋์ ์ด๊ธฐ (spotlight์ terminal ์ ๋ ฅ)
-
๋ฐฉ๊ธ ๋ฐ์ ๋ด Keypair์ ์ ๊ทผ ๊ถํ์ ๋ฐ๊ฟ์ฃผ๊ธฐ
sudo chmod 400 ๋ฐ์ํคํ์ด๋ฅผ๋์ด๋ค๋๊ธฐ
-
SSH๋ก ์ ์ํ๊ธฐ
ssh -i ๋ฐ์ํคํ์ด๋ฅผ๋์ด๋ค๋๊ธฐ ubuntu@AWS์์ ํ๋ด์์ดํผ
์) ์๋์ ๋น์ทํ ์๊น์!
ssh -i /path/my-key-pair.pem [email protected]
EC2 ์ค๋นํ๊ณ ๋ฐฐํฌํ๊ธฐ
๋ฐฐํฌ ํ์ผ ๋น๋ํ๊ธฐ
- ์ฐ์ธก ํญ ์ค์์ Gradle ์ ์ ํํฉ๋๋ค.
- Tasks > build > build ๋ฅผ ๋๋ธ ํด๋ฆญํฉ๋๋ค.
- ์ข์ธก build ํด๋ > libs ์๋์ .jar ํ์ฅ์๋ก ๋๋๋ ํ์ผ์ด ์๊ฒผ์ ๊ฑฐ์์! ๋น๋์ ์ฑ๊ณตํ์์ต๋๋ค.
02-83ce-e690547aa5e2/Untitled.png)
OpenJDK ์ค์นํ๊ธฐ
sudo apt-get update
sudo apt-get install openjdk-8-jdk
java -version
Filezilla๋ฅผ ์ด์ฉํด์ ๋ฐฐํฌ ํ์ผ์ ์ ๋ก๋ํ๊ธฐ
- ํ์ผ์ง๋ผ ์คํ, ๋ค์๊ณผ ๊ฐ์ด ์ค์
- ์ ๋ณด๋ค์ ์ ๋ ฅํ๊ณ , ok ๋๋ฅด๋ฉด ์๋ฒ์ ํ์ผ๋ค์ ๋ณผ ์ ์์ (Host: ๋ด EC2์๋ฒ์ ip // User: ubuntu ๋ก ์ ๋ ฅ)
- ๋ง์ฐ์ค๋ก ๋๋๊ทธ ํด์ ํ์ผ์ ์ ๋ก๋/๋ค์ด๋ก๋ํ๋ฉด ๋ฉ๋๋ค!
์คํ๋ง ๋ถํธ ์๋์ํค๊ธฐ
java -jar JARํ์ผ๋ช
.jar
AWS์์ 80, 8080 ํฌํธ๋ฅผ ์ด์ด์ฃผ๊ธฐ
-
EC2 ์๋ฒ(=๊ฐ์์ ๋ด ์ปดํจํฐ)์์ ํฌํธ๋ฅผ ๋ฐ๋ก ์ค์ ํ๋ ๊ฒ ์ธ์๋, AWS EC2์์๋ ์์ฒด์ ์ผ๋ก ํฌํธ๋ฅผ ์ด๊ณ /๋ซ์ ์ ์๊ฒ ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์์ต๋๋ค.
โ ๊ทธ๋์ AWS EC2 Security Group์์ ์ธ๋ฐ์ด๋ ์์ฒญ ํฌํธ๋ฅผ ์ด์ด์ค์ผ ํฉ๋๋ค.
-
์ผ๋จ, EC2 ๊ด๋ฆฌ ์ฝ์๋ก ๋ค์ด๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณด์๊ทธ๋ฃน(์๋ฌธ: Security Group)์ ๋๋ฌ ๋ค์ด๊ฐ๋๋ค. ์ฌ๊ธฐ์ launch-wizard-1 ์ด๋ผ๊ณ ์ฐ์ฌ ์๋ค์
- ํด๋น ๋ณด์๊ทธ๋ฃน์ ํด๋ฆญํฉ๋๋ค.
- Edit inbound rules๋ฅผ ์ ํํฉ๋๋ค.
- ๋ ๊ฐ์ง ํฌํธ๋ฅผ ์ถ๊ฐํด๋ด ๋๋ค.
โ 80ํฌํธ: HTTP ์ ์์ ์ํ ๊ธฐ๋ณธํฌํธ
โ 8080ํฌํธ: ์คํ๋ง ๋ถํธ ๊ธฐ๋ณธํฌํธ
์ ์ํด๋ณด๊ธฐ
http://๋ดAWS์์ดํผ:8080
RDS ๊ตฌ๋งคํ๊ณ MySQL ์ธํ ํ๊ธฐ
-
๋ฏธ๋ฆฌ ๊ฐ์ ํ AWS์ ๋ก๊ทธ์ธํฉ๋๋ค.
-
(๋งํฌ)์ ์ ์ํฉ๋๋ค.
-
[์ฝ๋์ค๋ํซ] AWS ๋์๋ณด๋ ๋งํฌ
https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#
-
-
๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํฉ๋๋ค.
- DB ์ธ์คํด์ค ์๋ณ์์ "springboot-database" ๋ผ๊ณ ์ ๋ ฅํฉ๋๋ค. (์ํ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ ๋ ๋ผ์!)
- ๋ง์คํฐ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ํธ์ ๋ง๋ค๊ณ ์ถ์ ๊ณ์ ์ ์์ด๋, ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค. DB ์ ์์ฉ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ผญ ๊ธฐ์ตํด์ฃผ์ธ์!
- DB ์ธ์คํด์ค ํฌ๊ธฐ์ ์คํ ๋ฆฌ์ง๋ ์ค์ ๊ทธ๋๋ก ๋๊ณ ๋์ด๊ฐ๋๋ค.
- [์ค์] ์ฐ๊ฑธ > ์ถ๊ฐ ์ฐ๊ฒฐ ๊ตฌ์ฑ ํญ์ ํด๋ฆญํฉ๋๋ค.
- ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
-
ํผ๋ธ๋ฆญ ์ก์ธ์ค ๊ธฐ๋ฅ: "์" ์ ํ
โ ์ด ์ค์ ์ด ๋์ด์์ด์ผ ์ฐ๋ฆฌ ์ปดํจํฐ์์ AWS RDS ์ MySQL๊ณผ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ผญ ํผ๋ธ๋ฆญ ์ก์ธ์ค ์ค์ ์ ํ์ธํด์ฃผ์ธ์!
-
VPC ๋ณด์ ๊ทธ๋ฃน: "์๋ก ์์ฑ" ์ ํ
-
์ VPC ๋ณด์ ๊ทธ๋ฃน ์ด๋ฆ: springboot-db-security
-
๊ฐ์ฉ ์์ญ: ์ต์ ์ค ์๋ฌด๊ฑฐ๋ ์ ํํ์ ๋ ๊ด์ฐฎ์์.
-
- ์ถ๊ฐ ๊ตฌ์ฑ > ์ด๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ ์ "myselectshop" ์ ์ ๋ ฅํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ ํด๋ฆญ
RDS ํฌํธ ์ด์ด์ฃผ๊ธฐ
-
springboot-database ํด๋ฆญ
-
์ฐ๊ฒฐ & ๋ณด์ > ๋ณด์ > VPC ๋ณด์ ๊ทธ๋ฃน ์ springboot-db-security ํด๋ฆญ
- ๋ณด์ ๊ทธ๋ฃน ID ํด๋ฆญ
- ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง ํด๋ฆญ
- ์์ค > ์์น ๋ฌด๊ด ํด๋ฆญํด์ 0.0.0.0/0, ::/0 ์์ฑ ํ์ธ ํ "๊ท์น ์ ์ฅ" ํด๋ฆญ
- ์๋ํฌ์ธํธ ํ์ธ ํ ๋๋๊ทธํ์ฌ ๋ณต์ฌ
- ์ฐ์ธก Database ํญ์ ํด๋ฆญํฉ๋๋ค.
- Data Source > MySQL ์ ํด๋ฆญํฉ๋๋ค. (์ ์ผ ์๋จ์ด ์๋๋ผ๋ฉด ์ค๊ฐ ์ฆ์ ์์ ๊ฑฐ์์!)
- ๋ค์๊ณผ ๊ฐ์ด ์
๋ ฅํฉ๋๋ค.
- Name: springboot-database
- Host: ๋์ ์๋ํฌ์ธํธ
- User: ๋์ Username
- Password: ๋์ ๋น๋ฐ๋ฒํธ
- Database: myselectshop
- Test Connection ์ ํด๋ฆญํ๊ณ , ์๋์ ๊ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ฉด OK ๋ฅผ ํด๋ฆญํฉ๋๋ค.
IntelliJ์์ ํ์ธํ๊ธฐ
์คํ๋ง ๋ถํธ๋ฅผ MySQL๊ณผ ์ฐ๊ฒฐํ๊ธฐ
- ์คํ๋ง ๋ถํธ ์ค์ ์ ๋๋ถ๋ถ์ application.properties ์์ ๊ด๋ฆฌํฉ๋๋ค.
spring.datasource.url=jdbc:mysql://๋์์๋ํฌ์ธํธ:3306/myselectshop
spring.datasource.username=๋์USERNAME
spring.datasource.password=๋์ํจ์ค์๋
spring.jpa.hibernate.ddl-auto=update
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:(MySQL์ ํฌํธ๋ฒํธ)/(DB์ด๋ฆ)?serverTimezone=Asia/Seoul
username: (user๋ช
)
password: (password)
Spring Boot S3 File Upload ํ๋ ๋ฒ
์ด๋ฒ ๊ธ์์๋ Spring Boot๋ก AWS S3๋ก File Upload ํ๋ ๋ฒ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ AWS S3 Bucket ์์ฑ์ ํ๊ฒ ์ต๋๋ค.
AWS S3 Bucket ์์ฑ
๊ทธ๋ฆฌ๊ณ ๊ถํ ํญ์ ๋ค์ด๊ฐ๊ฒ ์ต๋๋ค.
ARN
์ ๋ณต์ฌํ๊ณ ์ ์ฑ
์์ฑ๊ธฐ
๋ฅผ ๋๋ฅด๊ฒ ์ต๋๋ค.
principal
: * ๋ฅผ ์ ๋ ฅํด์ค๋๋ค.Actions
:GetObject
,PutObject
๋ฅผ ์ ํํด์ค๋๋ค.ARN
: ์์ ์๋ ARN ๋ณต์ฌ +/*
๋ฅผ ํด์ค๋๋ค.
๊ทธ๋ฌ๋ฉด ์์์ ์
๋ ฅํ๋ ๋๋ก ์ ์
๋ ฅ๋๋์ง ํ์ธํ๊ณ Generate Policy
๋ฅผ ๋๋ฅด๊ฒ ์ต๋๋ค.
์์ ์ ์ฑ ๋ด์ฉ์ ๋ณต์ฌํ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ์ฌํญ ์ ์ฅ์ ๋๋ฅด๊ฒ ์ต๋๋ค.
IAM ์ฌ์ฉ์ ๊ถํ ์ถ๊ฐ
S3์ ์ ๊ทผํ๊ธฐ ์ํด์๋ IAM ์ฌ์ฉ์์๊ฒ S3 ์ ๊ทผ ๊ถํ์ ์ฃผ๊ณ , ๊ทธ ์ฌ์ฉ์์ ์ก์ธ์ค ํค, ๋น๋ฐ ์์ธ์ค ํค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋จผ์ IAM ์ฌ์ฉ์๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉ์์๊ฒ S3 ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๊ฒ ์ต๋๋ค. (์ฌ์ฉ์, ๊ถํ, ์ญํ ์ ๊ฐ๋ ์ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์ฌ๊ธฐ ์์ ์ฐธ๊ณ ํ์๋ฉด ๋ฉ๋๋ค.)
์ฌ๊ธฐ์ ์ฌ์ฉ์์๊ฒ S3FullAccess ๊ถํ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. (์ด๊ฒ์ด ์์ด์ผ S3์ ํ์ผ ์ ๋ก๋๋ฅผ ํ ์ ์์ต๋๋ค.)
์์ ์ก์ธ์ค ํค, ๋น๋ฐ ์์ธ์ค ํค๋ ํ์ฌ ํ๋ฉด์์ ๋ฐ์ ๋ณผ ์ ์์ต๋๋ค. ์ฆ, .csv ํ์ผ์ ๋ค์ด๋ฐ์ ๋ก์ปฌ์ ๊ผญ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
Spring Boot๋ก ํ์ผ ์ ๋ก๋
compile 'org.springframework.cloud:spring-cloud-starter-aws:2.0.1.RELEASE'
Spring Boot๋ gradle ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์๊ณ ์์ ์์กด์ฑ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์ต์ข ํด๋ ๊ตฌ์กฐ๋ ์์ ๊ฐ์ต๋๋ค. ํ๋์ฉ ์์ฑํ๋ฉด์ ํ์ผ ์ ๋ก๋๋ฅผ ์งํํด๋ณด๊ฒ ์ต๋๋ค. (S3Uploader๋ service ๋ณด๋ค๋ commons์ ๊ฐ์ ๊ณณ์ ๋ฃ์ด๋๋๊ฒ ๋ ๋์ ๊บผ ๊ฐ๊ธฐ๋ํฉ๋๋ค!)
aws.yml ์์ฑ
cloud:
aws:
credentials:
accessKey: IAM ์ฌ์ฉ์ ์์ธ์ค ํค
secretKey: IAM ์ฌ์ฉ์ ๋น๋ฐ ์์ธ์ค ํค
s3:
bucket: ๋ฒํท ์ด๋ฆ
region:
static: ap-northeast-2
stack:
auto: false
application.yml์ ์์ฑํด๋ ๋์ง๋ง, ์ ๋ aws ์ค์ ๋ค๋ง ๋ฐ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์ aws.yml ํ์ผ์ ๋ฐ๋ก ๋ง๋ค์์ต๋๋ค. ์์ ํ์๋๋ก ์์ ์ IAM ํค, ๋ฒํท ์ด๋ฆ, ๋ฆฌ์ ๋ฑ๋ฑ์ ์ ๋ ฅํด์ค๋๋ค.