๐Ÿš€ AWS ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹ค์ „ ๊ฐ€์ด๋“œ: ์‹ค์ˆ˜ ์—†์ด ์˜ˆ์‚ฐ ์ดˆ๊ณผ, ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์™„๋ฒฝํ•˜๊ฒŒ ์„ฑ๊ณตํ•˜๋Š” 5๊ฐ€์ง€ ํ•ต์‹ฌ ์ „๋žต

:rocket: AWS ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹ค์ „ ๊ฐ€์ด๋“œ: ์‹ค์ˆ˜ ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ์„ฑ๊ณตํ•˜๋Š” 5๊ฐ€์ง€ ํ•ต์‹ฌ ์ „๋žต

AWS๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ๋‹ค๋Š” ๊ฑด, ๋ฒˆ์žกํ•œ ๋„์‹œ๋ฅผ ์ƒˆ๋กœ์šด ํ–‰์„ฑ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๋งŒํผ ํฅ๋ฏธ์ง„์ง„ํ•˜์ง€๋งŒ ์œ„ํ—˜๋„ ๋งŽ์Šต๋‹ˆ๋‹ค! ํ•œ ๋ฒˆ์˜ ์‹ค์ˆ˜๊ฐ€ ๋‹ค์šดํƒ€์ž„, ์˜ˆ์‚ฐ ์ดˆ๊ณผ, ๋ณด์•ˆ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์ฃ . Fortune 500 ๊ธฐ์—…์˜ ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜์„ 16๋…„ ๋„˜๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด์„œ ์ง์ ‘ ๊ฒช์€ ๋ผˆ์•„ํ”ˆ ๊ฒฝํ—˜๊ณผ ์‹ค์ „ ๋…ธํ•˜์šฐ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ 5๊ฐ€์ง€ ์น˜๋ช…์  ์‹ค์ˆ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋ณต๋ถ™์ด ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ, ์ถ”์ฒœ ํˆด, ์ „๋žต๊นŒ์ง€ ๋ชจ๋‘ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ํŒ€์˜ ์˜์›…์ด ๋˜๋Š” ์—ฌ์ •, ์ง€๊ธˆ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค! :superhero::male_sign:


:index_pointing_up: ์‹ค์ˆ˜ 1: AWS ๋น„์šฉ์„ ๊ณผ์†Œํ‰๊ฐ€ (์˜ˆ์‚ฐ ํญํƒ„ ๋ง‰๊ธฐ)

  • ํ•จ์ •: "AWS๋Š” ๋” ์ €๋ ดํ•˜๋‹ค"๋Š” ์ฐฉ๊ฐ! ํŠธ๋ž˜ํ”ฝ, ์Šคํ† ๋ฆฌ์ง€, EC2 ์ธ์Šคํ„ด์Šค ๋“ฑ ์ˆจ์€ ๋น„์šฉ์ด ์—„์ฒญ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๊ฒฐ๋ฒ•: ์‚ฌ์ „ ๋น„์šฉ ์‚ฐ์ • + ์‹ค์‹œ๊ฐ„ ๋น„์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์‹ค์ „ ์˜ˆ์‹œ:

bash

aws pricing get-products --service-code AmazonEC2 --filters "Type=TERM_MATCH,Field=instanceType,Value=t3.micro" --region us-east-1

EC2 t3.micro ์ธ์Šคํ„ด์Šค ๋น„์šฉ์„ ์‚ฐ์ถœํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.์˜ˆ์‚ฐ ์•Œ๋ฆผ ์„ค์ • ์˜ˆ์‹œ:

bash

aws budgets create-budget \
--account-id 123456789012 \
--budget '{"BudgetName": "MigrationBudget", "BudgetLimit": {"Amount": 1000, "Unit": "USD"}, "TimeUnit": "MONTHLY"}' \
--notifications-with-subscribers '[{"Notification": {"NotificationType": "ACTUAL", "ComparisonOperator": "GREATER_THAN", "Threshold": 80}, "Subscribers": [{"SubscriptionType": "EMAIL", "Address": "your-email@example.com"}]}]'
  • ์ถ”์ฒœ ํˆด: AWS Pricing Calculator, AWS Cost Explorer, AWS Budgets

:shield: ์‹ค์ˆ˜ 2: IAM ๋ณด์•ˆ ๊ตฌ์„ฑ ๋ฌด์‹œ (๊ณ„์ • ๋…ธ์ถœ ๋ฐฉ์ง€)

  • ํ•จ์ •: ๊ธ‰ํ•˜๊ฒŒ IAM ์„ธํŒ…ํ•˜๋ฉด ๋„ˆ๋ฌด ๋„“์€ ๊ถŒํ•œ, MFA ๋ฏธ์ ์šฉ ๋“ฑ ๋ณด์•ˆ ํ—ˆ์ ์ด ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ๋ฒ•: ๊ถŒํ•œ ์ตœ์†Œํ™” ์›์น™(Least Privilege) ์ ์šฉ + MFA ๊ฐ•์ œ + IAM Access Analyzer ํ™œ์šฉ + ์ž๋™ํ™”
  • ์‹ค์ „ ์˜ˆ์‹œ: EC2์šฉ ์ตœ์†Œ ๊ถŒํ•œ IAM Role Terraform ์˜ˆ์ œ

text

resource "aws_iam_role" "ec2_role" {
  name = "secure-ec2-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Action = "sts:AssumeRole",
      Effect = "Allow",
      Principal = { Service = "ec2.amazonaws.com" }
    }]
  })
}
resource "aws_iam_role_policy" "ec2_policy" {
  name = "ec2-s3-access"
  role = aws_iam_role.ec2_role.id
  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Action = ["s3:GetObject", "s3:ListBucket"],
      Effect = "Allow",
      Resource = ["arn:aws:s3:::my-bucket/*", "arn:aws:s3:::my-bucket"]
    }]
  })
}

Access Analyzer ํ™œ์šฉ ์˜ˆ์‹œ:

bash

aws accessanalyzer list-analyzed-resources --analyzer-arn arn:aws:accessanalyzer:us-east-1:123456789012:analyzer/MyAnalyzer
  • ์ถ”์ฒœ ํˆด: AWS IAM Access Analyzer, Terraform, AWS CLI

:chart_increasing: ์‹ค์ˆ˜ 3: ์˜คํ† ์Šค์ผ€์ผ๋ง๊ณผ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋ฏธ์ ์šฉ (์„ฑ๋Šฅ/๋น„์šฉ ์ตœ์ ํ™” ์‹คํŒจ)

  • ํ•จ์ •: EC2๋งŒ ๊ณ ์ •์œผ๋กœ ๋ฐฐํฌ ์‹œ, ํŠธ๋ž˜ํ”ฝ ํญ์ฆ/์ž์› ๊ณผ๋‹ค ํ• ๋‹น ๋ฌธ์ œ ๋ฐœ์ƒ.
  • ํ•ด๊ฒฐ๋ฒ•: Auto Scaling Group + Elastic Load Balancer(ELB)๋กœ ๋™์  ํŠธ๋ž˜ํ”ฝ ์ œ์–ด
  • ์‹ค์ „ ์˜ˆ์‹œ:

bash

aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --launch-template LaunchTemplateName=my-template,Version=1 \
  --min-size 2 \
  --max-size 5 \
  --desired-capacity 3 \
  --vpc-zone-identifier "subnet-12345678,subnet-87654321" \
  --load-balancer-names "my-load-balancer"

CloudWatch ์•Œ๋žŒ ์˜ˆ์‹œ:

bash

aws cloudwatch put-metric-alarm \
  --alarm-name HighCPUAlarm \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --threshold 70 \
  --comparison-operator GreaterThanThreshold \
  --evaluation-periods 2 \
  --period 300 \
  --statistic Average \
  --alarm-actions arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroupName/my-asg:policyName/scale-out
  • ์ถ”์ฒœ ํˆด: AWS Auto Scaling, Elastic Load Balancer, Amazon CloudWatch

:test_tube: ์‹ค์ˆ˜ 4: ์‚ฌ์ „ ํ…Œ์ŠคํŠธยท๊ฒ€์ฆ ๋ˆ„๋ฝ (๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ›„ ์žฅ์•  ๋ฐฉ์ง€)

  • ํ•จ์ •: ๊ณผ๊ฑฐ ์•ฑ DB๋ฒ„์ „, ๋„คํŠธ์›Œํฌ ํ˜ธํ™˜์„ฑ ๋“ฑ ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์œผ๋ฉด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ•ด๊ฒฐ๋ฒ•: ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ PoC ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ + AWS Migration EvaluatorยทSCT ๋“ฑ์œผ๋กœ ํ˜ธํ™˜์„ฑ/์„ฑ๋Šฅ ์ ๊ฒ€
  • ์‹ค์ „ ์˜ˆ์‹œ: AWS SCT๋กœ DB ํ˜ธํ™˜์„ฑ ๋ถ„์„

bash

aws-sct --source "mysql://onprem-db:3306" --target "rds-mysql://aws-rds:3306" --report

Application Discovery Service ํ™œ์šฉ:

bash

aws discovery start-data-collection-by-agent-ids --agent-ids agent-12345678
  • ์ถ”์ฒœ ํˆด: AWS Schema Conversion Tool, AWS Migration Evaluator, AWS Application Discovery Service

:floppy_disk: ์‹ค์ˆ˜ 5: ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ยท๋ฐฑ์—… ์ „๋žต ๋ฏธํก (๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ™•๋ณด)

  • ํ•จ์ •: ๋ฐฑ์—… ๊ฒ€์ฆ ์‹คํŒจ/๋ณต๊ตฌ ํ…Œ์ŠคํŠธ ๋ฏธ๋น„๋กœ ๋ฐ์ดํ„ฐ ์†์‹ค์ด๋‚˜ ์žฅ์‹œ๊ฐ„ ๋‹ค์šดํƒ€์ž„ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ๋ฒ•: AWS DMS๋กœ ๋ฐ์ดํ„ฐ ์ด์ „ + AWS Backup์œผ๋กœ ์ž๋™ํ™” ๋ฐฑ์—…/๋ณต์› ํ…Œ์ŠคํŠธ ํ•„์ˆ˜
  • ์‹ค์ „ ์˜ˆ์‹œ: DMS๋กœ MySQL DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

bash

aws dms create-replication-task \
  --replication-task-identifier my-migration-task \
  --source-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:SOURCE \
  --target-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:TARGET \
  --replication-instance-arn arn:aws:dms:us-east-1:123456789012:rep:INSTANCE \
  --migration-type full-load \
  --table-mappings file://table-mappings.json

text

{
  "rules": [{
    "rule-type": "selection",
    "rule-id": "1",
    "rule-name": "migrate-all",
    "object-locator": { "schema-name": "%", "table-name": "%" },
    "rule-action": "include"
  }]
}

AWS Backup ์ž๋™ํ™” ์˜ˆ์‹œ:

bash

aws backup start-backup-job \
  --backup-vault-name MyVault \
  --resource-arn arn:aws:rds:us-east-1:123456789012:db:my-rds \
  --iam-role-arn arn:aws:iam::123456789012:role/backup-role
  • ์ถ”์ฒœ ํˆด: AWS Database Migration Service, AWS Backup, Amazon S3

:crown: ์‹ค์ „ ์„ฑ๊ณต๋‹ด & ์•ก์…˜ ํ”Œ๋žœ

์ง€๋‚œํ•ด 50TB ๋ฐ์ดํ„ฐ๋ฅผ AWS๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ, ๋น„์šฉ ํญํƒ„์„ ์‚ฌ์ „์— ์ฐจ๋‹จํ•˜๊ณ , ๊ถŒํ•œ ๋ฌธ์ œยทDB ํ˜ธํ™˜์„ฑ ์ด์Šˆ๋ฅผ ์‚ฌ์ „ PoC์—์„œ ๋ฐœ๊ฒฌยทํ•ด๊ฒฐํ•˜๋ฉฐ ๋ฌด์ค‘๋‹จ, 30% ๋น„์šฉ ์ ˆ๊ฐ์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋„ ์•„๋ž˜์™€ ๊ฐ™์ด ์‹ค์ฒœํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

:glowing_star: AWS ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์˜์›…์ด ๋˜๋Š” ์•ก์…˜ ํ”Œ๋žœ

  • ๋น„์šฉ ์‚ฐ์ •: Pricing Calculator + CLI ์Šค๋‹ˆํŽซ
  • IAM ๋ณด์•ˆ ๊ฐ•ํ™”: Terraform IAM Role + Access Analyzer
  • Auto Scaling ์ ์šฉ: Auto Scaling Group CLI
  • ํ…Œ์ŠคํŠธ/๊ฒ€์ฆ: PoC + SCT/Migration Evaluator
  • ๋ฐ์ดํ„ฐ ์•ˆ์ „ํ•˜๊ฒŒ ์ด์ „: DMS + AWS Backup

[์ถฎ์ฒ˜] 5 Critical Mistakes to Avoid When Migrating to AWS Cloud: A Senior DevOps Engineerโ€™s Playbook | by Mohamed ElEmam | Aug, 2025 | Towards AWS

1 Like