๊ตฌ๋ฆ„

AWS S3 ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ๋ณต์ œ (๊ณ„์ •๊ฐ„ EC2 AMI ๋ณต์ œ) ๋ณธ๋ฌธ

Cloud/์ผ๋ฐ˜

AWS S3 ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ๋ณต์ œ (๊ณ„์ •๊ฐ„ EC2 AMI ๋ณต์ œ)

Cloudest 2021. 5. 18. 13:16
๐Ÿ’ก
์ค€๋น„๋ฌผ

1. AWS CLI๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ
2. Source, Target ๊ณ„์ •์˜ IAM User
3. IAM User์˜ Access Key, Secret Key (์ฐธ๊ณ  ๋งํฌ)
4. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ Source ๊ณ„์ •์˜ EC2 Instance

 

์‹œ์ž‘ ์ „

  • ๊ฐ ๊ณ„์ •์— ์ ์ ˆํ•œ ๊ถŒํ•œ๊ณผ ์•ก์„ธ์Šค ์ •์ฑ…์ด ๋ถ€์—ฌ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ AWS ๊ณ„์ •์˜ S3 ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜„์žฌ๋Š” AWS CLI๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฒ„ํ‚ท ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒ„ํ‚ท๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ S3 ๊ฐ์ฒด๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ  ์ƒˆ๋กœ์šด S3 ๋ฒ„ํ‚ท์— ์˜ฌ๋ฆฌ๋Š” ๋น„์šฉ, ์‹œ๊ฐ„, ์ ˆ์ฐจ์  ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

S3 ๋ณต์ œํ•˜๊ธฐ

  • 1. AMI๋ฅผ S3 ๋ฒ„ํ‚ท์— ์ €์žฅ
    1. ๊ฐ ๊ณ„์ •์˜ IAM User์˜ Key๋กœ AWS Profile ์ƒ์„ฑ ( C:\Users\[์‚ฌ์šฉ์ž์ด๋ฆ„]\.aws\credentials ํŒŒ์ผ์— Source์™€ Target๊ณ„์ • ๋ชจ๋‘ ๋งŒ๋“ค๊ธฐ)
    1. Source ์„œ๋ฒ„ ์ƒ์„ฑํ›„ ๋ณต์‚ฌ ํ™•์ธ์„ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ
    1. Source ์„œ๋ฒ„์—์„œ EC2์˜ AMI ์ƒ์„ฑ
    1. Source ์„œ๋ฒ„ S3์— ์—…๋กœ๋“œ
      ### ์œˆ๋„์šฐ๊ธฐ์ค€
      aws ec2 create-store-image-task `
      --image-id [AMI ๋ฒˆํ˜ธ] `
      --bucket [S3 Bucket ์ด๋ฆ„] `
      --profile [Source ๊ณ„์ • Profile ์ด๋ฆ„]
      
      ### ๋ฆฌ๋ˆ…์Šค & ๋งฅ
      aws ec2 create-store-image-task \
      --image-id [AMI ๋ฒˆํ˜ธ] \
      --bucket [S3 Bucket ์ด๋ฆ„] \
      --profile [Source ๊ณ„์ • Profile ์ด๋ฆ„]
      
      ### ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ ๋‚˜์˜ค๋ฉด ๋ช…๋ น ์ •์ƒ
      {
          "ObjectKey": "ami-0b708227c90ac8a3e.bin"
      }
    1. ์—…๋กœ๋“œ ์ง„ํ–‰์ƒํ™ฉ ํ™•์ธ
      aws ec2 describe-store-image-tasks --profile [Source ๊ณ„์ • Profile ์ด๋ฆ„]
    1. ์—…๋กœ๋“œ ์„ฑ๊ณต
  • 2. Source S3์˜ AMI๋ฅผ → Target S3๋กœ ์ „์†ก
    1. Target ๊ณ„์ •์˜ S3 Object์ปจํŠธ๋กค์„ ์œ„ํ•œ IAM Policy (์ •์ฑ…) s3-copy-test ์ƒ์„ฑ
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:ListBucket",
      				"s3:GetObjectTagging", ## ๋งŒ์•ฝ S3 ๊ฐ์ฒด์— ํƒœ๊ทธ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด ๊ถŒํ•œ๋„ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค!
              "s3:GetObject"
            ],
            "Resource": [
              "arn:aws:s3:::[Source-Bucket]",
              "arn:aws:s3:::[Source-Bucket/*]"
            ]
          },
          {
            "Effect": "Allow",
            "Action": [
              "s3:ListBucket",
              "s3:PutObject",
              "s3:PutObjectAcl"
            ],
            "Resource": [
              "arn:aws:s3:::[Target-Bucket]",
              "arn:aws:s3:::[Target-Bucket/*]"
            ]
          }
        ]
      }
    1. Target ๊ณ„์ •์ด Target S3์—์„œ AMI๋ฅผ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•œ IAM Policy (์ •์ฑ…) ami-control-test ์ƒ์„ฑ
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:DeleteObject",
                      "s3:GetObject",
                      "s3:ListBucket",
                      "s3:PutObject",
                      "s3:AbortMultipartUpload",
                      "ebs:CompleteSnapshot",
                      "ebs:GetSnapshotBlock",
                      "ebs:ListChangedBlocks",
                      "ebs:ListSnapshotBlocks",
                      "ebs:PutSnapshotBlock",
                      "ebs:StartSnapshot",
                      "ec2:GetEbsEncryptionByDefault",
                      "ec2:DescribeTags"
                  ],
                  "Resource": "*"
              }
          ]
      }
    1. Target ๊ณ„์ • IAM User์— ํ•ด๋‹น ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
    1. Source ๋ฒ„ํ‚ท์˜ ๋ฒ„ํ‚ท์ •์ฑ… ์„ค์ •
      • Source ๊ณ„์ • → S3 → ๋ฒ„ํ‚ท → ๊ถŒํ•œ → ๋ฒ„ํ‚ท ์ •์ฑ…
      • Target ๊ณ„์ •์ด Source S3์˜ Object๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฒ„ํ‚ท ์ •์ฑ…์„ ์„ค์ •ํ•œ๋‹ค.
        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Sid": "DelegateS3Access",
              "Effect": "Allow",
              "Principal": {
                "AWS": "[Target's AccountID]"
              },
              "Action": [
                "s3:ListBucket",
                "s3:GetObject"
              ],
              "Resource": [
                "arn:aws:s3:::[Source-Bucket/*]",
                "arn:aws:s3:::[Source-Bucket]"
              ]
            }
          ]
        }
    1. Powershell์—์„œ ๊ถŒํ•œ ํ™•์ธ
      • Source → Source S3๋งŒ ์ ‘๊ทผ๊ฐ€๋Šฅ
      • Target → IAM ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์•„์„œ Target S3 + Source S3 ์ ‘๊ทผ๊ฐ€๋Šฅ
    1. ๋ฒ„ํ‚ท๋ณต์‚ฌ
      • Target ๊ณ„์ •์— ๋ณต์ œ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ
        aws s3 sync s3://[Source-Bucket-Name] s3://[Target-Bucket-Name] --profile [Target profile ์ด๋ฆ„]
        • ls ๋Œ€์‹  rm์œผ๋กœ ๊ฐ์ฒด ์‚ญ์ œ ๊ฐ€๋Šฅ
      • Target Bucket์— ํ•ด๋‹น ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ์ •์ƒ์ ์ธ ๊ถŒํ•œ์„ Target์ด ๊ฐ€์ง„๊ฒƒ์ด๋‹ค.
        • ๋ฒ„ํ‚ท→ ์ •์ฑ… → ACL์—์„œ ํ™•์ธ
  • 3. Target S3์—์„œ AMI ๋ณต์›
    1. Target ๊ณ„์ •์—์„œ AMI ๋ณต์›
      # ์œˆ๋„์šฐ ๊ธฐ์ค€
      aws ec2 create-restore-image-task `
      --object-key [AMI num.bin] `
      --bucket [Target ๋ฒ„ํ‚ท name] `
      --name "[์›ํ•˜๋Š” AMI ์ด๋ฆ„]" `
      --profile [profile ์ด๋ฆ„]
      
      # ๋ฆฌ๋ˆ…์Šค & ๋งฅ
      aws ec2 create-restore-image-task \
      --object-key [AMI num.bin] \
      --bucket [Target ๋ฒ„ํ‚ท name] \
      --name "[์›ํ•˜๋Š” AMI ์ด๋ฆ„]" \
      --profile [profile ์ด๋ฆ„]
    1. ๋ณต์› ๊ฒฐ๊ณผ ํ™•์ธ
    1. Target ๊ณ„์ •์— ๋ณต์›ํ•œ AMI๋กœ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•ด์„œ ์ž˜ ๋ณต์‚ฌ๋๋Š”์ง€ ํ™•์ธ
      • ์ดˆ๊ธฐ ์ƒ์„ฑํ•œ ์„œ๋ฒ„์— ๋งŒ๋“  ํŒŒ์ผ๋“ค์ด ์ž˜ ์˜ฎ๊ฒจ์กŒ๋‹ค.

     

 

๊ฒฐ๋ก 


  • AWS CLI๊ฐ€ ์ต์ˆ™ํ•˜๊ณ , IAM, Credential๊ณผ ๊ฐ™์€ ๊ฐœ๋…์— ์ดํ•ด๋„๊ฐ€ ๋†’์œผ๋ฉด ์•„์ฃผ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ AWS CLI, IAM, Credential๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด ์•„์ง ์ƒ์†Œํ•˜๋‹ค๋ฉด ๋งŽ์ด ๋ง‰๋ง‰ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ฝ˜์†”์— ์—†๊ณ  AWS CLI๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•œ ํ™๋ณด & ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์‹œ๊ฐ€ ๋” ๋งŽ์•„์กŒ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

 

 

 

Cloudest - ๋ธ”๋กœ๊ทธ ์ด์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

๋…ธ์…˜์œผ๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด ํฌ์ŠคํŒ…์ด ์˜ฌ๋ผ์˜ต๋‹ˆ๋‹ค!

cloudest.oopy.io

Comments