-
Notifications
You must be signed in to change notification settings - Fork 0
Infra
์ด๊ธฐ์๋ ์ปจํ ์ด๋์ ๋ํ ๊ฐ๋ ๋ ๋ถ์กฑํ๊ณ , AWS๋ฅผ ํ์ฉํ์ฌ flask ์๋ฒ๋ฅผ ๋๋ ค๋ณธ ๊ฒ ์ ๋ถ์์ผ๋ฉฐ, CI/CD ๊ตฌ์ถ ์์ฒด์ ๋ํ ๊ฒฝํ์ด ์์ด์ CI/CD ๊ตฌ์ถ ์ดํ AWS์ ์์ ์ ์ผ๋ก ๋ฐฐํฌํ๋ ๊ฒ์ด ๋ชฉํ๊ฐ ๋์๋ค.
- vpc, ์๋ธ๋ท ์ค์ - default vpc ๋ฐ๋ผ๊ฐ
- github actions๋ก front build
- github actions๋ก back build
- ์ด๊ธฐ public subnet์ RDS private subnet์ผ๋ก ์ด๋ ํ์
- ELK ์คํ์ฉ ์ธ์คํด์ค ์์ฑ
- HTTP ์์ฒญ์ ์ฝ์ด์ ์๋ต์ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ
- ์์ฉ์ผ๋ก ๋ง์ด ์ฐ์ด๋ ์น ์๋ฒ ํ๋ก๊ทธ๋จ์ ํฌ๊ฒ apache์ nginx ์์.
-
๊ธฐ๋ณธ์ ์ผ๋ก 2๊ฐ์ง ๋ฐฉ์์ด ์์.
- Prefork MPM(Multi Processing Module)
- HTTP ์์ฒญ์ด ์ฌ ๋๋ง๋ค ํ๋ก์ธ์ค ๋ณต์ ํด์ ๊ฐ๊ฐ ๋ณ๋ ํ๋ก์ธ์ค์์ ํด๋น HTTP ์์ฒญ ์ฒ๋ฆฌ
- Worker MPM
- ํ๋์ HTTP ์ฐ๊ฒฐ ํ, ์ฌ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ณต์ ๋ ํ๋ก์ธ์ค ๋ด์์ ์ฌ๋ฌ ์ฐ๋ ๋๋ฅผ ์์ฑํด์ ์ฌ๋ฌ HTTP ์์ฒญ
- Prefork MPM(Multi Processing Module)
-
์๋ฌด๋๋ ์ด๋ฐ ๋ฐฉ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ ์์ฒญ์ ๋ฐ๋ผ ๋ญ๊ฐ๋ฅผ ์์ฑํด์ผํ๋ค. ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์๊น?
- Event Driven ๋ฐฉ์์ผ๋ก ๊ตฌ๋
- ํ๋์ ํ๋ก์ธ์ค๋ก ๋์ํ๋ฉฐ, HTTP ์์ฒญ์ event๋ก ๋น๋๊ธฐ์์ผ๋ก ์ฒ๋ฆฌํจ.
- ๋๋ถ๋ถ์ HTTP ์๋ต์ ๊ฒฐ๊ตญ html ํ์ผ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ฏ๋ก, IO ์์ . IO ์์ ์ผ๋ก event๋ฅผ ํฌ์๋ฉํ๊ณ , ์์ฒญ ์์ด ์๋, ์์ฒญ์ด ๋๋ ์์ผ๋ก ์ฒ๋ฆฌํจ.
- HTTP ์์ฒญ๋ง๋ค ํ๋ก์ธ์ค๋ ์ฐ๋ ๋๋ฑ ์์ฑ์ด ํ์์์ผ๋ฏ๋ก, ์์คํ ์์ ๊ด๋ฆฌ์ ์ฅ์ ์ด ์์.
- ํ๋์ ํ๋ก์ธ์ค๋ก ๋์ํ๋ฉฐ, HTTP ์์ฒญ์ event๋ก ๋น๋๊ธฐ์์ผ๋ก ์ฒ๋ฆฌํจ.
Apache์ nginx ์ค HTML ํ์ผ ์ฌ์ด์ฆ, ์ด๋ค ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ฐ๋๋ ๋ฑ ๋ค์ํ ์กฐ๊ฑด ๋๋ฌธ์ ๋ฌด์์ด ๋ ๋ฌด์กฐ๊ฑด ์ฑ๋ฅ์ด ์ข๋ค๊ณ ๋ ์ด์ผ๊ธฐ ํ ์ ์์. ํ์ง๋ง ๋ง์ ์ ์์๊ฐ ์์ ๊ฒฝ์ฐ, ์์คํ ์์ ๊ด๋ฆฌ ํจ์จ์ฑ ๋๋ฌธ์ Nginx๊ฐ ์ผ๋ฐ์ ์ผ๋ก๋ ์ฑ๋ฅ์ด ๋ ์ข์ ์ ์์ผ๋ฏ๋ก ํด๋น ํ๋ก์ ํธ์์๋ Nginx๋ฅผ ์ฌ์ฉํจ.
์ฐธ๊ณ
์ฌ์ค๋์ด ์๋ ค์ฃผ์ - ์ข์ ๊ณต์๋ฌธ์
์ด๋ ์ ๋ aws ๊ธฐ๋ฐ ์ํคํ ์ฒ ๊ตฌ์ถ์ ๋ํ ๊ธฐ๋ณธ๊ธฐ๊ฐ ๋ค์ง๊ณ , ์ปจํ ์ด๋ ๊ฐ๋ ์ ํ์ตํ ์ดํ, ํด๋น ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์ฉํ์ฌ ์๋ก์ด ์ํคํ ์ฒ ๊ตฌ์ถ์ ๋์ ํ์๋ค.
-
(front) ๋์ปคํ์ผ ๋ง๋ค๊ธฐ
-
(front) ECR์ ํธ์
-
(front) ECR ์ด๋ฏธ์ง ํ ๋ฐ์์ ์ ๋์ํ๋ ์ง ํ์ธ
-
Fargate ์์ ์ ์ ์์ฑ
-
Fargate ALB ์์ฑ
-
Fargate ํด๋ฌ์คํฐ ์์ฑ -
Fargate ์๋น์ค ์์ฑ ๋ฐ ์์ ์ ์ ์ฐ๊ฒฐ -
EC2 ํด๋ฌ์คํฐ ์์ฑ
-
Fargate ์๋น์ค ์์ฑ ๋ฐ ์์ ์ ์ ์ฐ๊ฒฐ -
(back) ๋์ปคํ์ผ ๋ง๋ค๊ธฐ
-
(back) ECR์ ํธ์
-
(back) ECR์ ํธ์
-
ECSํด๋ฌ์คํฐ ์์ฑ
-
(back) private RDS ์ฐ๊ฒฐ (SSH ํฐ๋๋ง ํ์)
-
[x]
๋ค์ํ ์ด์์ฒด์ ์ ์์คํ ํ๊ฒฝ์์ ์๋ฒ ์ ์ ์ ์ํ ์์ ์ด ๋ชจ๋ ๋ค๋ฅด๊ณ ๋ณต์ก.
๋์ปค๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ๊ฐ์ํ ํ๋ซํผ์ด๋ผ์, ์ปจํ ์ด๋ ์์ ์๋ฒ๋ฅผ ์ ์ ํด๋์ ์ ์์.
๊ทธ๋์ ์ปจํ ์ด๋๋ฅผ ์คํ๋ง ํ๋ฉด, ์๋ฒ ์ด์ ์ด๋ ์๋ฒ ํจํค์ง ๋ฒ์ ๋ฑ๋ฑ์ผ๋ก ์ผ์ผ์ด ์๋ฒ ์ค์ ํ ํ์์์ด, ๋์ผํ ์๋ฒ ์ ์ ๊ฐ๋ฅ.
- ๊ฐ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ
๋์ปค
๋ก ๊ฐ๋ฐ - ์ด๋์ฉ๋ ์๋น์ค ์ ์ง๋ณด์๋ฅผ ์ํ ์๋ฒ ํธ๋ค๋ง (ex. ๋คํธ์ํฌ ํธ๋ํฝ ๊ด๋ฆฌ) => ์ฟ ๋ฒ๋คํฐ์ค
- docker ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ช ๋ น๋ค์ ๊ฐ์ง ํ ํ๋ฆฟ
- docker ์ปจํ ์ด๋๊ฐ ๋ฆฌ๋ ์ค ์ปจํ ์ด๋ ํํ๋ก ์คํํ ์ํ (instance)
sudo yum update -y
sudo yum install docker -y
sudo service docker start
sudo usermod -aG docker ec2-user
์ฒ์์๋ ๊ณต์ ๋ฌธ์๋ง์ ์ฐธ๊ณ ํ๋๋ฐ, ์ด ๋ฐฉ์์ผ๋ก ํ๋ฉด ๊ณ์ --update๋ฅผ ๋ถ์ฌ๋ 1๋ฒ์ ๋์์ ๋ฉ์ถฐ์์๋ค. ๊ฒ์์ ํตํด ๊ธฐ์กด aws-cli๋ฅผ ์ญ์ ํ๊ณ ์ค์นํ ์ดํ, ์ธ์คํด์ค๋ฅผ ๋๊ฐ๋ค๊ฐ ๋ค์ ๋ค์ด์๋ณด๋ ์ค์น๊ฐ ์๋ฃ๋์๋ค.
์ฐธ๊ณ
# AWS CLI v1 ์์ v2๋ก ์ ๊ทธ๋ ์ด๋ ํด๋ด ์๋ค
# aws ์ ์์น๋ฅผ ํ์ธํฉ๋๋ค.
$ which aws
/usr/bin/aws
# `ls` ๋ช
๋ น์ ์ฌ์ฉํ์ฌ symlink๊ฐ ๊ฐ๋ฆฌํค๋ ๋๋ ํฐ๋ฆฌ ๊ฒ์
$ ls -l /usr/bin/aws
-rwxr-xr-x 1 root root 818 9์ 28 2020 /usr/bin/aws
# aws ์ ์ญ์ ๋ฅผ ์ํด ํ์ผ์ ์ญ์ ํฉ๋๋ค.
$ sudo rm /usr/bin/aws
$ sudo rm /usr/bin/aws_completer
$ sudo rm -rf /usr/local/aws-cli
# AWS CLI v2 ์ค์น ํ์ผ์ ๋ค์ด๋ก๋
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 44.8M 100 44.8M 0 0 59.8M 0 --:--:-- --:--:-- --:--:-- 59.8M
# ํจํค์ง์ ์์ถ์ ํ๊ณ ํ์ฌ ๋๋ ํฐ๋ฆฌ ์๋์ `aws`๋ผ๋ ๋๋ ํฐ๋ฆฌ ์์ฑ
$ unzip awscliv2.zip
inflating: aws/dist/awscli/examples/ec2/delete-key-pair.rst
inflating: aws/dist/awscli/examples/ec2/authorize-client-vpn-ingress.rst
inflating: aws/dist/awscli/examples/ec2/delete-network-interface.rst
...
# ์ค์น ํ๋ก๊ทธ๋จ์ ์คํ
$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
# ์ค์น ์์น๋ฅผ ์ง์
$ ./aws/install -i /usr/local/aws-cli -b /usr/local/bin
Found preexisting AWS CLI installation: /usr/local/aws-cli/v2/current. Please rerun install script with --update flag.
์ง์์ ์ผ๋ก yarn install/build ๊ณผ์ ์์ ์ฌ๋ฌ ๋ชจ๋์์ npm Err๊ฐ ๋ฌ๋ค. ์ด์ ๋ node alpine ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด์ ์๋๋ฐ, alpine์ ๊ฒฝ๋ํ ๋ ์ด๋ฏธ์ง๋ผ์ python ๋ฑ์ด ์ค์น๋์ด ์์ง ์๊ณ , ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋์ ์ค์น๊ฐ ์คํจ๋์๋ค.
์ฐ์ FROM node:16
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ค. ํ์ง๋ง ์ด๋ฏธ์ง๊ฐ ๊ฑฐ๋ํด์ ธ์ ์ข์ ํด๊ฒฐ๋ฐฉ์์ ์๋ ๊ฒ ๊ฐ๋ค. ์ถํ์ ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ณผ ์์ ์ด๋ค.
์ฐธ๊ณ # [CICD / ECS] CodePipeline์ผ๋ก ECS Fargate ๋ฐฐํฌ ์๋ํ #1 - ๊ฐ์, ์ํคํ ์ฒ
p.s ์ถํ์ ์ด ๋ธ๋ก๊ทธ ๊ทธ๋ฆผ์ฒ๋ผ vpc/subnet ๋ด์ฉ ์ ๋ฆฌํ๊ธฐ
https://www.44bits.io/ko/post/getting-started-with-ecs-fargate
AWS ECS fargate๋ฅผ ์ฌ์ฉํ Appilication ๋ฐฐํฌ - 1
์ฐธ๊ณ
- ECR ๋ ํฌ์งํ ๋ฆฌ ์์ฑ ECR ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ privateํ๊ฒ ๋ง๋ค์ด์ฃผ์๋ค.
github actions๋ฅผ ํตํด ECR์ ๋ก๊ทธ์ธํ์ฌ ECR๋ก ํธ์ํ๋ yaml ํ์ผ์ ์์ฑํ์๋๋ฐ, ๊ณ์ ์์ธ๋ชจ๋ฅผ EOF ์๋ฌ๊ฐ ๋ฌ๋ค. ์์ธ์ permissions๋ฅผ ์ค์ ํด์ฃผ์ง ์์์ ์๋ค.
๋ ํฌ์งํ ๋ฆฌ์ permissions์ ๋ค์ด๊ฐ์ ์ ์ฑ ์ ํธ์งํ์ฌ, deployํด์ผํ๋ IAM ๊ณ์ ์ push ๊ถํ์ ๋ถ์ฌํ๋ค.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPushAndPull",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::[์ซ์]:user/[IAM User๋ช
]"
]
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
-
์ด๋ฏธ์ง๋ฅผ pull ๋ฐ๊ธฐ ์ํด AmazonEC2ContainerRegistryFullAccess ๊ถํ ๊ฐ์ง๋ IAM ์ฌ์ฉ์ ์์ฑ
-
aws configure ํด์ ํด๋น ์ก์ธ์คํค, ๋น๋ฐ๋ฒํธ, ๋ฆฌ์ ์ ๋ ฅ
-
aws ecr get-login --no-include-email --region ap-northeast-2 ํ๋ฉด ๋ก๊ทธ์ธ ํ ์ ์๋ ๋ช ๋ น์ด๋ค ์ถ๋ ฅ ์ด๊ฑธ ๋ณต์ฌํด์ ๋ก๊ทธ์ธ ํ๋ฉด ๋๋ค.
์๊พธ ๋์ปคํ์ผ ์์ฑ์์ hibernate ์๋ฌ๋์ ์์ธ ์ฐพ์ผ๋ ค ํ๋ํ๋ ๊ณผ์ ์ ์ ์ด๋ณด๋ ค ํ๋ค.
- ์ฐ๋ถํฌ jdk8 ์ด๋ฏธ์ง ๋ฐ์์ค๊ณ ์ปจํ ์ด๋ํ
$ docker pull rtfpessoa/ubuntu-jdk8
$ docker run -t -d --name my_temp rtfpessoa/ubuntu-jdk8:latest
๋์ปคํ์ผ ์์ฑ์ ์ํด ์ฐ๋ถํฌ์์ ์ง์ ๋น๋ํด๋ณด๋ ค๋ ์์ค์ ๋จ.
$ readlink -f $(which java)
๊ฒฝ๋ก
$ export JAVA_HOME="์ ๊ฒฝ๋ก์์ bin/java ๋บ ๊ฒฝ๋ก"
- ํ์ธ
$JAVA_HOME/bin/java -version
ํ์ ๋ ์ ๋์ค๋ฉด ๋จ.
-
appication.yaml์ DB ์ฃผ์ ๋ฃ๊ณ
-
๊ทธ๋๋ค ๋น๋
$ chmod +x gradlew
$ ./gradlew build
> Task :test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///home/izero/uplus.com/backend/project/build/reports/tests/test/index.html * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 15m 5s
test์์ ๊ณ์ ์๋ฌ๊ฐ๋ฌ๋ค.
๊ณ์ ๋๋ฅผ ๊ดด๋กญํ๋ ์์ธ..!
ํ ์คํธ ์ ์ธํ๊ณ ๋น๋ํ๋ฉด ๋๋ค!
$ ./gradlew build -x test
- ls๋ก build ์ jar ํ์ผ์ด๋ฆ ํ์ธ
$ /build/libs# ls
project-0.0.1-SNAPSHOT.jar
$ java -jar build/libs/project-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _ /\ / ' __ _ () __ __ _ \ \ \ \ ( ( )__ | '_ | '| | ' / ` | \ \ \ \ \/ )| |)| | | | | || (| | ) ) ) ) ' || .__|| ||| |_, | / / / / =========||==============|/=//// :: Spring Boot :: (v2.7.3) 2022-08-30 11:31:43.102 INFO 23088 --- [ main] com.lguplus.project.ProjectApplication : Starting ProjectApplication using Java 1.8.0_342 on ip-172-31-34-43 with PID 23088 (/home/ubuntu/uplus.com/backend/project/build/libs/project-0.0.1-SNAPSHOT.jar started by root in /home/ubuntu/uplus.com/backend/project) 2022-08-30 11:31:43.108 INFO 23088 --- [ main] com.lguplus.project.ProjectApplication : No active profile set, falling back to 1 default profile: "default"
๊ทผ๋ฐ ์ค๋จ์ด ๋๋ค...
- jar ํ์ผ my_temp ์ปจํ ์ด๋์ home ๊ฒฝ๋ก์ ๋ณต์ฌ
$ docker cp *.jar my_temp:home/
- my_temp bash๋ก ๋ค์ด๊ฐ์ ๊ฒฝ๋ก ํ์ธ
$ docker exec -it my_temp bash
$ /home# ls
project-0.0.1-SNAPSHOT.jar
$ /home# java -jar *.jar
๊ทธ๋๋ ๊ณ์ ๋๋ ์๋ฌ...
#11 75.45 Starting a Gradle Daemon (subsequent builds will be faster) #11 171.6 #11 171.8 FAILURE: Build failed with an exception. #11 171.9 #11 171.9 * What went wrong: #11 171.9 Task 'test' not found in root project 'project'. #11 171.9 #11 171.9 * Try: #11 171.9 > Run gradlew tasks to get a list of available tasks.
- ๋์ปคํ์ผ ๋ง๋ค์ด๋ด
FROM adoptopenjdk/openjdk8:ubi AS builder
WORKDIR /home/ec2-user/app
COPY gradlew . =
COPY gradle gradle
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew build bootJar
FROM adoptopenjdk/openjdk8:ubi
COPY --from=builder . .
#EXPOSE 8080
#ENTRYPOINT ["java", "-jar", "app.jar"]
FROM openjdk:8-jdk-alpine AS builder
WORKDIR /home/ec2-user/app
COPY gradlew .
COPY gradle gradle
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew build bootJar
FROM openjdk:8-jdk-alpine
COPY --from=builder build/libs /builds
#EXPOSE 8080
#ENTRYPOINT ["java", "-jar", "app.jar"]
์ฌ๊ธฐ๊น์ง ํ์ ๋ ๊ฒฝ๋ก๊ฐ /home/ec2-user/app/build/libs # ls project-0.0.1-SNAPSHOT.jar
- ์์ ํด์ ์ฑ๊ณตํ ๋์ปคํ์ผ
FROM openjdk:8-jdk-alpine AS builder
WORKDIR /home/ec2-user/app
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew build -x test
FROM openjdk:8-jdk-alpine
COPY --from=builder /home/ec2-user/app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
swagger ์ ๋์ด.
์ฐธ๊ณ
[AWS] Spring Boot, Nginx, Docker ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ธฐ - 1ํ
[AWS ECS] ECR ์ด๋ฏธ์ง๋ฅผ ECS๋ก ์คํ (์ปจํ ์ด๋ ์คํ ๋ฐ ๊ด๋ฆฌ)
-
์์ ์ ์ ์์ฑ
-
BE์ฉ ALB ์์ฑ
- ECS with EC2
AWS ์์ฒด ๊ฐ๋ฐํ์ฌ ์ ๊ณตํ๋ ์ปจํ
์ด๋ ์๋น์ค
- ์ฅ์
EC2 ์ธ์คํด์ค์ ๋ํ full ์ปจํธ๋กค, GPU ์ธ์คํด์ค ํ์ฉ ์ฉ์ด
spot ์ธ์คํด์ค ํ์ฉ ๊ฐ๋ฅํ์ฌ ์ต๋ 90% ๋น์ฉ ์ ๊ฐ
- ๋จ์
EC2 ์ธ์คํด์ค๋ฅผ ์ง์ ๊ด๋ฆฌํด์ผํจ, ์: ์ธ์คํด์ค์ ๋ํ ๋ณด์ ํจ์น ๋ฑ์ ์ง์ ์ฒ๋ฆฌํด์ผํจ
- ECS with Fargate
AWS ๋๋ค์ EC2 ๊ธฐ๋ฐ์ ECS ์ปจํ
์ด๋์ ์ค๊ฐ ์ฏค์ ์์นํ ์๋น์ค, EC2 ์ธ์คํด์ค ๊ด๋ฆฌ์ ๋ํด ๊ฑฑ์ ์ํด๋ ๋จ
- ์ฅ์
๊ด๋ฆฌํ ์๋ฒ๊ฐ ์์
CPU/Memory ์ ํ์ด ์๋์ ์ผ๋ก ์ข ๋ ์ฉ์ดํจ
Fargate Spot์ ์ฌ์ฉํ์ฌ 70% ์ ๊ฐ๋ ๊ธ์ก์ผ๋ก ์ด์ฉํ ๊ฐ๋ฅ์ฑ ์์
- ๋จ์
awsvpc๋ก ๋คํธ์ํฌ ์ต์
์ด ์ ํ๋จ
-
๋น์ฉ ์ธก๋ฉด
ec2๋ t3.micro ์๊ฐ๋น 0.013 USD 2vcpu 1GiBt2.micro ์๊ฐ๋น 0.0144 USD 1vcpu 1GiB
fargate๋ vcpu๋น 0.04656 USDGB๋น 0.00511 USD
fargate๋ฅผ 1vcpu 1GB ์ฌ์ฉํ๋ค๋ฉด ๊ทธ ํฉ์ด 0.05167 USD ์ ๋๊ฐ ๋๋๋ฐ
๋๊ธ์ ec2์ ๋นํด์ ๋ง๊ฒ๋ 3๋ฐฐ๊น์ง ๋น์ฉ์ด ๋น์ธ๋ค.
๋น๋ก ๋น์ฉ์ ์ธก๋ฉด์์ ํฐ ๋จ์ ์ด ์์ง๋ง, ์ด์ ์ EC2๋ฅผ ํตํด์๋ง ๊ตฌ์ถํด๋ดค๊ธฐ์ ์ง์ ๊ด๋ฆฌํ ๋ถ๋ถ์ด ์ ๋ค๋ ์ฅ์ ์ ๊ฐ์ง fargate๋ฅผ ๊ฒฝํ ๋ฐ ํ์ต์ ์ธก๋ฉด์์ ์ ํํด ๋ดค๋ค. fargate๋ฅผ ์ ํํ๋ ค๊ณ ํ์ผ๋ statelessํ fargate์์๋ ์นดํ์นด ๊ตฌ์ฑ์ด ์ ํฉํ์ง ์๋ค๊ณ ํ์ฌ์, ๋น์ฉ์ธก๋ฉด์์ ์ ๋ ดํ EC2๋ฅผ ์ ํํ๋ค.
ECS์์ ์์ฒด์ ์ผ๋ก 2๊ฐ์ง์ ๋ฐฐํฌ์ ๋ต์ ์ ํํ ์ ์์๋ค.
- ์ธ์คํด์ค๋ฅผ ์ ํด๋์ ๋จ์๋ก ๊ต์ฒดํ๋ ๋ฐฉ์์ด๋ค. ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ด ์๋ฒ์ ๋์๊ฐ 10๋๋ผ๋ฉด 2๋์ฉ ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๊ฒ ๋ค๊ณ ํ๋ค๋ฉด, ์๋ก์ด ๋ฒ์ 2๋๊ฐ ์์ฑ๋๊ณ , ์ ์์ ์ผ๋ก ์๋น์ค๊ฐ ๊ฐ๋ฅํ ์ํ์ผ๋ ํธ๋ํฝ์ด 2๋๋ก ์ ํ๋๊ณ , ๊ตฌ๋ฒ์ 2๋๋ ์๋น์ค์์ ์ ์ธํ๋ค. ( draining ) ์ด ๋ฐฉ์์ผ๋ก 2๋์ฉ ์์ฐจ์ ์ผ๋ก ์๋ก์ด ๋ฒ์ ์ผ๋ก ๊ต์ฒด๋๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ๊ฐ์ฉ ๋ฆฌ์์ค๊ฐ ์ ์ ์ํ์์๋ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์ ๋ฐ์ดํธ ํ๋ก์ธ์ค ๋์ ๋ ๊ฐ์ง ๋ฒ์ ์ ์ปจํ ์ด๋๊ฐ ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฒ์ ํธํ์ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๊ตฌ ๋ฒ์ ์ ๋ธ๋ฃจ ์ ๋ฒ์ ์ ๊ทธ๋ฆฐ์ด๋ผ๊ณ ํด์ ๋ถ์ฌ์ง ์ด๋ฆ์ผ๋ก, ๋์ผํ ์๋ฒ๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌ์ถํ๋ค์ ๋ผ์ฐํ ์ ์๊ฐ์ ์ผ๋ก ์ ํํ์ฌ ์๋ก์ด ๋ฒ์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ์์ด๋ค. ๋น ๋ฅธ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ ์ฅ์ ์ด ์๊ณ , ์ด์ ํ๊ฒฝ์ ์ ์งํ์ฑ๋ก ์๋กญ๊ฒ ๋ฐฐํฌ๋ ๋ฒ์ ์ ํ ์คํธ๋ ๊ฐ๋ฅํ ๊ตฌ์ฑ์ด ๋๋, ์์์ด ๋๋ฐฐ๋ก ํ์ํ๊ฒ ๋์ด ๋น์ฉ์ด ๋ง์ด ๋ฐฉ์ํ๋ ๋จ์ ๋ ์กด์ฌํ๋ค.
์ฐธ๊ณ
# 9 steps to SSH into an AWS Fargate managed container
์ฐธ๊ณ
https://dev.classmethod.jp/articles/lets-make-aws-fargate-first/
์ฐธ๊ณ
- ์ ์ฒด ํด๋์์ ํด๋ ์ฐพ๊ธฐ
find / -name ํด๋๋ช
-type d
๋ฃจํธ๊ณ์ ์ Access Key๋ฅผ ํ์ทจํ์ฌ ๊ณ ๋น์ฉ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ณ ๋น์ฉ์ ์๋น์ค๋ฅผ ์ ์ฒญํ์ฌ ๋จ๊ธฐ๊ฐ์ ์๋ง ๋ฌ๋ฌ์ ๋ฌํ๋ ๋น์ฉ์ ๋ฐ์์ํค๋ ํผํด๊ฐ ๋ฐ์ํ๋ฏ๋ก, ๊ผญ ์ถ๊ฐ ๋ณด์ ์ค์ ์ด ํ์ํจ.
- ๋ฃจํธ ์ฌ์ฉ์ MFA ์ค์
AWS ์ฝ์์ ๋ก๊ทธ์ธํ ๋ ์์ด๋/ํจ์ค์๋ ์ธ ์ถ๊ฐ ์ธ์ฆ์ ๋ํ๋ ๊ฒ
- ๋ฃจํธ ์ฌ์ฉ์ Access Key ์ญ์
์ก์ธ์ค ํค๋ ์์ด๋/ํจ์ค์๋ ์ธ์ฆ๊ณผ ๋์ผํ ๊ถํ์ ๊ฐ์ง๋ง AWS CLI, PowerShell์ฉ ๋๊ตฌ, AWS SDK ๋๋ ์ง์ AWS API ํธ์ถ์ ํตํด AWS๋ฅผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ํธ์ถํ ์ ์๋๋ก ํด์ฃผ๋ ๋ฐ๋์ ํ์ํ ์กด์ฌ์ด์ง๋ง ์ก์ธ์ค ํค๊ฐ ๋ฃจํธ ์ฌ์ฉ์ ๊ถํ์ผ๋ก ์ฌ์ฉ๋ ๋๋ ๊ทธ ์ฉ๋ ๋งํผ์ด๋ ๋งค์ฐ ๊ฐ๋ ฅํด์ ํ์ทจ๋์ด ์ ์ฉํ๋ฉด ๊ด๋ฒ์ํ ์์ญ์์ ํผํด๋ฅผ ์ค ์ ์์. ๋ฐ๋ผ์, ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ๋ฃจํธ ์ฌ์ฉ์ ๊ณ์ ์๋ ๋ฐ๋์ ์ก์ธ์ค ํค๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๋นํ์ฑํ๋์ด ์์ด์ผ ํจ.
- IAM ์ฌ์ฉ์ ์ค์
admin
์ฌ์ฉ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด AdministratorAccess ๊ถํ๋ง ๋ถ์ฌ. ์ด๋ ๊ฒ ๋น๋ง ๊ถํ์ ๊ฐ์ง์ง ์์ ์ฌ์ฉ์๋ฅผ ์ด์ฉํ์ฌ, AWS ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ ํ๊ฒ ์ ์ด.
Apache์ nginx ์ค HTML ํ์ผ ์ฌ์ด์ฆ, ์ด๋ค ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ฐ๋๋ ๋ฑ ๋ค์ํ ์กฐ๊ฑด ๋๋ฌธ์ ๋ฌด์์ด ๋ ๋ฌด์กฐ๊ฑด ์ฑ๋ฅ์ด ์ข๋ค๊ณ ๋ ์ด์ผ๊ธฐ ํ ์ ์์. ํ์ง๋ง ๋ง์ ์ ์์๊ฐ ์์ ๊ฒฝ์ฐ, ์์คํ ์์ ๊ด๋ฆฌ ํจ์จ์ฑ ๋๋ฌธ์ Nginx๊ฐ ์ผ๋ฐ์ ์ผ๋ก๋ ์ฑ๋ฅ์ด ๋ ์ข์ ์ ์์ผ๋ฏ๋ก ํด๋น ํ๋ก์ ํธ์์๋ Nginx๋ฅผ ์ฌ์ฉํจ.
์ถํ ์๋ฒ ๊ด๋ฆฌ์ ํธ์๋ฅผ ์ํด ๋์ปค๋ผ์ด์ง ํ๊ธฐ๋ก ๊ฒฐ์ ํจ.