
๐ฏ AWS CLI๋ฅผ ํ์ฉํด ์ด๋ฏธ์ง ๋ฐฐํฌ๋ถํฐ ์ธ์ฆ๊น์ง ์ค์ตํ๋ฉฐ ์๋ํ ๊ธฐ๋ฐ ๋ฐฐํฌ ํ๋ฆ์ ์ ๋ฆฌํฉ๋๋ค.
์ฅ์
์ ์ฐํ ์ด์ฉ, ์์ ์ ์๋น์ค, ๋ค์คํ์ ์ค์ผ์ผ๋ง
Pay-as-you-go, TCO (total cost of ownership) ์ ๊ฐ
๋ค์ํ ๋๊ตฌ ์ ๊ณต, ํ๋ถํ ๋ฌธ์ ๋ฐ ์ฐธ๊ณ ์๋ฃ
๋จ์
์๊ฐ๋ณด๋ค ๋น์ฉ์ด ๋ง๋งํ์ง ์์ ์ ์์
์ ๋๋ก ์ฌ์ฉํ์ง ๋ชปํด๋ ๋ฆฌ์์ค๊ฐ ์ด์ฉ๋๊ณ ์์ผ๋ฉด ๊ณผ๊ธ
์ต์ํด์ง์ง ์์ผ๋ฉด ๋ค์ ๋ณต์กํ๊ณ ์์ํ๊ฒ ๋๊ปด์ง ์ ์์
์ธ์คํด์ค ํ์
: t3.medium
์คํ ๋ฆฌ์ง: 16GiB gp2
๋ณด์ ๊ทธ๋ฃน: ์ด์์ง์ด ์ง์ ํ security group ์ฌ์ฉ
โ ํฌํธ ์ด๋ฆผ: 22(SSH), 80/443(HTTP/HTTPS), 3306(MySQL), 8443(Minikube)
Elastic IP: ๋๋ฉ์ธ๊ณผ ์ฐ๊ฒฐ๋ ๊ณ ์ IP ์ ๊ณต๋จ
ํ์: .pem
์ํธํ ๋ฐฉ์: RSA
โ ๏ธ ์์ฑํ key๋ ๊ผญ ๋ณด๊ด, ๋ ธ์ถ ์ ์ํ
ssh -i your-key.pem ubuntu@your-domain-name
Minikube๋ ๋ฏธ๋ฆฌ ์ค์ ๋์ง ์์ โ IP๊ฐ ๊ณ ์ ๋ ํ์ ์ง์ ํ์ฑํํด์ผ ํจ
๋ช ๋ น์ด
sudo systemctl enable minikube
sudo reboot
ํ์ ํ์ผ๋ค (์๋ฒ์์ ๋ก์ปฌ๋ก ๋ณต์ฌ):
~/.minikube/ca.crt
~/.minikube/profiles/minikube/client.crt
~/.minikube/profiles/minikube/client.key
kubeconfig ์ค์
clusters:
- name: <ํด๋ฌ์คํฐ ์ด๋ฆ>
cluster:
certificate-authority: ./ca.crt
server: https://<Elastic IP>:8443
users:
- name: <์ฌ์ฉ์ ์ด๋ฆ>
user:
client-certificate: ./client.crt
client-key: ./client.key
contexts:
- name: <์ปจํ
์คํธ ์ด๋ฆ>
context:
cluster: <ํด๋ฌ์คํฐ ์ด๋ฆ>
user: <์ฌ์ฉ์ ์ด๋ฆ>
kubectl config use-context <์ปจํ
์คํธ ์ด๋ฆ>
ํ๋ก ํธ์๋/๋ฐฑ์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋์ปค ์ด๋ฏธ์ง ์ ์ฅ์
IAM โ Users โ ๋ณธ์ธ ๊ณ์ โ Security credentials ํญ
โ "Access key" ์์ฑ (CLI ์ฉ๋ ์ ํ)
โ ๏ธ ํ ๋ฒ๋ง ํ์ธ ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ๋์ ๋ณต์ฌ/๋ณด๊ด
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
docker pull nginx # ์์
docker tag nginx:latest <repository-uri>:latest
docker push <repository-uri>:latest
docker rmi <repository-uri>:latest
docker pull <repository-uri>:latest
Terraform ์ํ ๋ฐ์ดํฐ ์ ์ฅ, ์ ์ ํ์ผ ์ ๋ก๋์ฉ ๋ฒํท ์ ๊ณต
aws s3 ls s3://<your-bucket-name>/
aws s3 cp localfile.txt s3://<your-bucket-name>/

๋ฐฐํฌ ๋์: EC2 ๋ด Minikube ํด๋ฌ์คํฐ
์ด๋ฏธ์ง: ๊ธฐ์กด ๋ ์ง์คํธ๋ฆฌ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด ์ปจํ ์ด๋ ํ๊ฒฝ ์ค์ ๋ง ์กฐ์ ํด ํ ์คํธ
๋ชฉํ: ์ค ์๋น์ค์ ์คํ๋ ํ๊ฒฝ์์์ ๋ฐฐํฌ ๊ฒ์ฆ
Private ์ด๋ฏธ์ง Pull์ ์ํ ์ธ์ฆ ํ์
ECR์ Private ๋ ์ง์คํธ๋ฆฌ์ด๋ฏ๋ก ์ธ์ฆ ํ์
ํด๊ฒฐ ๋ฐฉ๋ฒ: Kubernetes์ imagePullSecrets ์ฌ์ฉ
์ธ์ฆ ๋ฐฉ์
aws ecr get-login-password | docker login ...
kubectl create secret docker-registry aws-ecr-cred \
--docker-server=180993267331.dkr.ecr.ap-northeast-2.amazonaws.com \
--docker-username=AWS \
--docker-password=$(aws ecr get-login-password) \
--docker-email=your@email.com
imagePullSecrets:
- name: aws-ecr-cred
notes-be.yaml)apiVersion: v1
kind: ConfigMap
metadata:
name: notes-be-config
namespace: prgms-notes
data:
DB_HOST: notes-000.prgms-fullcycle.com
DB_USER: prgms
DB_PASSWD: prgms
DB_NAME: prgms_notes
CORS_ALLOWED_ORIGIN: https://notes-000.prgms-fullcycle.com
---
spec:
containers:
- name: notes-backend
image: 180993267331.dkr.ecr.ap-northeast-2.amazonaws.com/notes-be:dpy-test
imagePullPolicy: Always
envFrom:
- configMapRef:
name: notes-be-config
imagePullSecrets:
- name: aws-ecr-cred
notes-fe.yaml)spec:
containers:
- name: notes-frontend
image: 180993267331.dkr.ecr.ap-northeast-2.amazonaws.com/notes-fe:dpy-test
imagePullPolicy: Always
ports:
- containerPort: 3000
env:
- name: REACT_APP_API_BASE_URL
value: https://notes-000.prgms-fullcycle.com/api
imagePullSecrets:
- name: aws-ecr-cred
ARCH=amd64
IMG_REGISTRY=180993267331.dkr.ecr.ap-northeast-2.amazonaws.com
IMG_NAME=notes-fe
IMG_TAG=${IMG_REGISTRY}/${IMG_NAME}:dpy-test
image: Dockerfile
docker build --platform=linux/${ARCH} --tag ${IMG_TAG} .
push: image
aws ecr get-login-password | docker login --username AWS --password-stdin ${IMG_REGISTRY}
docker push ${IMG_TAG}
ECR ์ด๋ฏธ์ง ํธ์, S3 ์ ๊ทผ, Kubernetes์์ secret ์์ฑ๊น์ง ๊ฑฐ์ ๋ชจ๋ ์๋ํ๋ ์ธ์ฆ ๊ณผ์ ์ AWS CLI๊ฐ ๊ด์ฌํ๊ณ ์๋ค๋ ์ ์ด ๋๋ผ์ ๋ค.