๐งโ๐คโ๐ง AWSKRUG ํ๋ซํผ์์ง๋์ด๋ง ๋ชจ์ Agentic MCP for EKS ํ๊ณ
AWS๊ฐ ์๋ vultr๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ณ๊ธฐ๋ ์ญ์ ์ด์๋น ๋ถ๋ถ์ด ๊ฐ์ฅ ์ปธ๋ค. ํ์ง๋ง, ์ด๋ฒ ์ธ๋ฏธ๋๋ฅผ ํตํด์ ๋ค์ AWS๋ก ์ด์ํ๋ซํผ์ ์ฎ๊ธธ๊น ๊ณ ๋ฏผ์ ํ๊ฒ ๋์๋ค. ๊ทธ๋งํผ ai์์ด์ ํธ ๊ธฐ๋ฐ ์ด์ ์๋ํ์ ์ฑ๋ฅ์ด ์๊ฐ๋ณด๋ค ๋ ๋ฐ์ด๋ฌ๋ค๋ ์๋ฆฌ๋ค.
AWSKRUG ํ๋ซํผ์์ง๋์ด๋ง ๋ชจ์์ ์ฐธ์ฌํ ํ์ตํ ๋ด์ฉ๊ณผ ์๊ฐ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
๊ฐ๊ฐ์ ๋จ์ด์ ๋ํด ์์๋ณด์.
Agentic
๋ ์์จ์ฑ์ ๊ดํ ์ ํ ์ค ํ๋์ด๋ค.Agent
๋ ์ฃผ๋ก ์์จ์ ์ผ๋ก ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ณ , ์ํฉ์ ์ธ์ํ๋ฉฐ, ์์ฌ๊ฒฐ์ ์ ์ํํ๋ ๋
๋ฆฝ ์คํ ๋จ์๋ฅผ ๋งํ๋ค.Agentic
๊ฐ๋
์ด ์ฐ์ธ๋ค.MCP
๋ ๋ณดํต Model Context Protocol์ ์ค์๋ง๋ก ์ฌ์ฉ๋๋ค.EKS
๋ Elastic Kubernetes Service์ ์ฝ์.Agentic for EKS
๋ Amazon Q Developer CLI์ MCP
์ ํ์ฉํ์ฌ Amazon EKS
ํ๊ฒฝ์์ ์์ด์ ํธ ๊ธฐ๋ฐ ์๋ํ์ ์ด์ ํจ์จํ๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค.์ ๊ณผ์ ์ Q CLI
๋ฅผ ์
ํ
ํ๋ ๊ฒ ๋ถํฐ ์์ํ๋ค.
curl --proto '=https' --tlsv1.2 -sSf \
"https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip" \
-o "q.zip"
โ Do you want q to modify your shell config? โ Yes
โ Select login method โ Use for Free with Builder ID
Confirm the following code in the browser:
Code: xxxx-xxxx
Open this URL: https://view.awsapps.com/start/#/device?user_code=xxxx-xxxx
To learn more about MCP safety, see https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-mcp-security.html
Welcome to
โโโโโโ โโโโ โโโโ โโโโโโ โโโโโโโโ โโโโโโโ โโโโ โโโ โโโโโโโ
โโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโ โโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโ โโโ โโโโโโโโโ โโโ โโโ โโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโ โโโ โโโโโโโโโโโโโ โโโโโ โโโ
โโโ โโโโโโ โโโ โโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโ โโโโโโโโโ
โโโ โโโโโโ โโโโโโ โโโโโโโโโโโ โโโโโโโ โโโ โโโโโ โโโโโโโ
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ๋ ๊ฐ๋ฅํ๋ค.
โEKS ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ฌด์์ธ๊ฐ์?โ
---
EKS ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ๋คํธ์ํฌ ๋ณด์
โข ํ๋ผ์ด๋น ์๋ธ๋ท์ ์์ปค ๋
ธ๋ ๋ฐฐ์น
โข ๋ณด์ ๊ทธ๋ฃน์ ์ฌ์ฉํ์ฌ ํธ๋ํฝ ์ ํ
โข AWS PrivateLink ๋๋ VPC ์๋ํฌ์ธํธ ์ฌ์ฉ
2. IAM ๋ฐ RBAC ๊ตฌ์ฑ
โข ์ต์ ๊ถํ ์์น ์ ์ฉ
โข IAM ์ญํ ๊ณผ Kubernetes RBAC ํตํฉ
โข ์๋น์ค ๊ณ์ ์ IAM ์ญํ ์ฌ์ฉ (IRSA)
3. ์ํธํ ๋ฐ ๋ณด์ ์ค์
โข EKS ํด๋ฌ์คํฐ ๋ฐ EBS ๋ณผ๋ฅจ์ ๋ํ ์ํธํ ํ์ฑํ
โข Secrets ์ํธํ ๊ตฌํ
โข AWS KMS ํค ์ฌ์ฉ
4. ์ปจํ
์ด๋ ๋ณด์
โข ์ ๋ขฐํ ์ ์๋ ์ด๋ฏธ์ง๋ง ์ฌ์ฉ
โข ์ด๋ฏธ์ง ์ค์บ๋ ๊ตฌํ (ECR ์ค์บ๋ ๋๋ ์๋ํํฐ ๋๊ตฌ)
โข ์ปจํ
์ด๋ ์คํ ์ ๋ฃจํธ ๊ถํ ์ ํ
... ์๋ต
์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ตฌํํ๋ฉด EKS ํด๋ฌ์คํฐ์ ๋ณด์ ํ์ธ๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
~/environment/myeks ๋๋ ํ ๋ฆฌ์ nginx-deployment.yaml์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ธฐ๋ณธ Kubernetes nginx ๋ฐฐํฌ๋ฅผ ์ํ YAML ํ์ผ์ ์์ฑํด์ฃผ์ธ์.
---
Kubernetes nginx ๋ฐฐํฌ๋ฅผ ์ํ ๊ธฐ๋ณธ YAML ํ์ผ์ ์์ฑํ๊ฒ ์ต๋๋ค.
๐ ๏ธ Using tool: fs_write
โฎ
โ Path: /home/ec2-user/nginx-deployment.yaml
+ 1: apiVersion: apps/v1
+ 2: kind: Deployment
+ 3: metadata:
+ 4: name: nginx-deployment
+ 5: labels:
+ 6: app: nginx
+ 7: spec:
+ 8: replicas: 3
+ 9: selector:
+ 10: matchLabels:
+ 11: app: nginx
... ์ค๋ต
+ 35: selector:
+ 36: app: nginx
+ 37: ports:
+ 38: - port: 80
+ 39: targetPort: 80
+ 40: type: ClusterIP
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
> t
Creating: /home/ec2-user/nginx-deployment.yaml
โฎ
โ Completed in 0.0s
nginx-deployment.yaml ํ์ผ์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ์ต๋๋ค. ์ด ํ์ผ์๋ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋์ด ์์ต๋๋ค:
1. Deployment ๋ฆฌ์์ค:
โข 3๊ฐ์ ๋ณต์ ๋ณธ(replicas)
โข nginx:1.14.2 ์ด๋ฏธ์ง ์ฌ์ฉ
โข ํฌํธ 80 ๋
ธ์ถ
โข ๋ฆฌ์์ค ์ ํ ์ค์ :
โข CPU ์ ํ: 0.5 ์ฝ์ด, ์์ฒญ: 0.2 ์ฝ์ด
โข ๋ฉ๋ชจ๋ฆฌ ์ ํ: 512Mi, ์์ฒญ: 256Mi
2. Service ๋ฆฌ์์ค:
โข ClusterIP ํ์
์๋น์ค
โข ํฌํธ 80์ ํตํด Deployment์ ์ฐ๊ฒฐ
๋ํ, ์ ๊ณผ์ ์ ์์ฃผ ๋จํธ์ ์ธ ๊ธฐ๋ฅ์ผ ๋ฟ ํ์ฉ๋๋ ๋ฌด๊ถ๋ฌด์ง ํ๋ฉฐ ์บ์๋ฐ์ดํฐ๋ก ํ์ต์ด ์ง์์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ ๋๋ ์ฑ๋ฅ์ด ๋์ฑ ๋์์ง ์ฌ์ง๊ฐ ์ถฉ๋ถํ๋ค.
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ
โ ํฐ๋ฏธ๋ ์
๋ ฅโ โโถ โ Q CLI โโโถ โ MCP Client โ
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ
โ
JSON-RPC over stdio/stdout
โ
โโโโโโโโโโโโโโ
โ MCP Server โ
โโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโ
โ ๋ก์ปฌ Tools โ
โโโโโโโโโโโโโโ
์ง๋ฌธ์์ ์ญ๋์ ๋ฐ๋ผ์, ๋ถํ์ํ ๋ฐ๋ณต ์ญ์ง๋ฌธ๊ณผ ๊ฐ์ด ํ ํฐ์ ์๋ชจํ๊ฑฐ๋, ๋ณด์/์ด์์์ ํฐ ์ํ์์๋ฅผ ๋จ๊ธธ ์ ์๋ค.
์ด๋ฅผ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๊ณ , ์ต์ ํ ํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ํ๋กํ์ผ๊ณผ ์ปจํ ์คํธ์ด๋ค.
์ปจํ ์คํธ๋ฅผ ํ์ฉํ์ฌ Amazon Q๊ฐ ๋ค์ํ ์์ ์ ๋ ํจ๊ณผ์ ์ผ๋ก ๋์์ค ์ ์๋ค.
ex)
# shell ์์ ์คํํฉ๋๋ค.
cat > ~/environment/myeks/kubernetes_standards.md << 'EOF'
# Kubernetes ๋ฐฐํฌ ํ์ค
## ์ผ๋ฐ ๊ฐ์ด๋๋ผ์ธ
- ๋ชจ๋ Kubernetes ๋ฆฌ์์ค๋ ๋ค์๊ณผ ๊ฐ์ ๋ผ๋ฒจ์ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค:
- app: {์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ}
- environment: {dev|staging|prod}
- team: platform-engineering
- cost-center: cc-12345
## ๋ฐฐํฌ ๊ตฌ์ฑ
- ๋ฆฌ์์ค ์์ฒญ(requests) ๋ฐ ์ ํ(limits)์ ๋ฐ๋์ ๋ช
์ํด์ผ ํฉ๋๋ค
- CPU ์์ฒญ: ์ต์ 100m, ์ต๋ 1000m
- ๋ฉ๋ชจ๋ฆฌ ์์ฒญ: ์ต์ 128Mi, ์ต๋ 1Gi
- ๋ฐฐํฌ ์ ๋ต์ ๋กค๋ง ์
๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ, maxSurge๋ 25%, maxUnavailable๋ 25%๋ก ์ค์
- ๋ชจ๋ ์ปจํ
์ด๋์ readiness ๋ฐ liveness probe๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค
- ์ด๋ฏธ์ง ํ ์ ์ฑ
์ "IfNotPresent"๋ก ์ค์ ํ ๊ฒ
## ์ปจํ
์ด๋ ๋ณด์
- ์ปจํ
์ด๋๋ root๊ฐ ์๋ ์ฌ์ฉ์๋ก ์คํํด์ผ ํจ (runAsNonRoot: true)
- ๊ฐ๋ฅํ๋ฉด ์ฝ๊ธฐ ์ ์ฉ ๋ฃจํธ ํ์ผ ์์คํ
์ ์ฌ์ฉํ ๊ฒ (readOnlyRootFilesystem: true)
- ๊ถํ ์์น ํ์ฉ์ false๋ก ์ค์ (allowPrivilegeEscalation: false)
- ๋ชจ๋ capabilities๋ ์ ๊ฑฐํ๊ณ ํ์ํ ํญ๋ชฉ๋ง ๋ช
์์ ์ผ๋ก ์ถ๊ฐ
## ๋คํธ์ํน
- ์๋น์ค ํฌํธ๋ ํ๋กํ ์ฝ์ ๋ฐ๋ผ ๋ช
ํํ ์ด๋ฆ ์ง์ (์: http, https, grpc)
- Ingress ๋ฆฌ์์ค๋ TLS๋ฅผ ์ฌ์ฉํ๊ณ , HTTP ์์ฒญ์ HTTPS๋ก ๋ฆฌ๋๋ ์
ํด์ผ ํจ
- ๋ค์์คํ์ด์ค ๊ฐ ํธ๋ํฝ ์ ํ์ ์ํด NetworkPolicy ์ฌ์ฉ
## ์์: ์ปจํ
์ด๋ ํฌํธ ์ค์
yaml
ports:
โข name: http
containerPort: 8080
protocol: TCP
EOF
์ผ๋ จ์ ๊ณผ์ ์ ํตํด์ ๊ฐ ์๋น์ค ๋ง๋ค์ ํ๋กํ์ผ์ ์ต์ ์ผ๋ก ๊ตฌ์ฑํ๋ค๋ฉด,
์ ๋ฌด ํจ์จ์ ์ด๋ง์ด๋ง ํ ๊ฒ ๊ฐ๋ค.
์ด์ , claude ๋ฅผ ์ฌ์ฉํด fileSystem, git, obsidian MCP๋ฅผ ์ฐ๊ฒฐํ์ฌ ํฌ์คํ ์๋ํ ์์คํ ์ ๊ตฌ์ถํ ๊ฒฝํ์ด ์๋ค.
์ด๋์๋ ๋จ์ํ ์์ ํ๋ก์ฐ๋ฅผ ์ค์ด๋๋ฐ์ ๋ชฉ์ ์ด ์๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง, ์ด๋ฒ ์ธ๋ฏธ๋๋ฅผ ํตํด์ ๋ฐฐ์ด ์ง์์ ๊ทธ๊ฒ์ ํจ์ฌ ๋ฐ์ด๋์๋ค.
๋ณดํต์ ๊ฒฝ์ฐ์ ์ปจํธ๋กคํ์ง ๋ชปํ๋ ์์ญ๊น์ง ai์ ๋ฒ์๊ฐ ๋์ด์ก๊ณ , ์์ง์ ์ ๋ณด๋ง์ ์ ํ์ ์ผ๋ก ํ์ตํ ์ ๋ฌธ์ ์ธ ai์๋ฃจ์ ์ด ๋์ด์ ๋ฐ๋ผ
์ฌ์ฉ ๊ฒฝํ์ด ์ด์ ๊ณผ๋ ํ์ฐํ๊ฒ ๋ฌ๋ผ์ง์ ๋๊ผ๋ค. ์์ผ๋ก๋ AI๋ก ์ธํ์ฌ, ์ ๋ฌด ํ์ต๋ฐฉ๋ฒ์ด ์ด์ ๊ณผ๋ ํฌ๊ฒ ๋ฌ๋ผ์ง ๊ฒ์ผ๋ก ์๊ฐ๋๋ค.
์ฝ๋ฉ(ํ์)์ด ์๋ ๊ฐ๋ ๊ณผ ์ํคํ ์ฒ๋ก?
์ด๋ ๋น๋จ, AWS์ Q CLI๋ฟ ์๋๋ผ ๋ชจ๋ AI ์์ด์ ํธ์ ํด๋น๋๋ ์ฌํญ์ผ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ AI๋ ์ฌ์ ํ ์์ฐ์ฑ์ ๋์ฌ์ฃผ๋ ๋ณด์กฐ๋๊ตฌ์ผ ๋ฟ, ์ ์ฒด์ ์ธ ์์คํ ๊ณผ ์ธ๋ถ ๋ด์ฉ๋ค์ ์ดํดํ์ง ๋ชปํ๊ณ ์ฌ์ฉํ๋ค๋ฉด ์ํํ ๋ฌด๊ธฐ๊ฐ ๋ ์ ๋์๋ค๊ณ ์๊ฐํ๋ค. ๋๋ฌธ์ ๋ค๋ฐฉ๋ฉด์ผ๋ก ๋์ ์ง์์ ์์ ํ์๊ฐ ์๊ฒผ๋ค.