Header Ads Widget

Ticker

6/recent/ticker-posts

Hướng dẫn di chuyển các storage cloud qua lại với nhau, khác account

Keywords: How to transfer gs to s3 and from s3 of account a to s3 of account b

Chào các anh em đồng chí, bài viết hôm nay của mình sẻ nói về cloud nhé, với mình hiện tại thì đang đụng chạm với GCP và AWS nên mình sẻ hướng dẫn các bạn qua những vấn đề mình làm, trước đây công ty mình sử dụng GCP nhưng sau một thời gian thì chuyển đổi qua AWS vì vậy việc move dữ liệu data từ nơi này sang nơi khác cũng là điều dễ hiểu mà đúng không

Ok, ở bài viết này chúng ta sẻ có 2 phần đó là di chuyển data từ gs đến s3 và từ s3 của tài khoản aws a đến s3 của tài khoản aws b, mình sẻ thực hiện đi vào vấn đề thứ 1 trước

Phần 1: Di chuyển gs của GCP đến s3 của aws

Trước khi thực hiện được điều này thì các bạn cần làm là gì, tạo một VM của GCP với tốc độ băng thông cao, vì sao phải làm như vậy, vì việc move data từ GCP đến AWS nếu sử dụng mạng cá nhân sẻ rất chậm và đặc biệt với với các data tương đối là lớn sẻ cảm giác rất khó chịu, còn dễ gây ra lỗi nếu nó gặp data lớn thì thằng gsutil sẻ báo lỗi ngay ở giá trị cp hoặc rsync, khi tạo VM ta sẻ tận dụng lợi thế của nó là mạng của Google

Tiếp đến ta cần cài đặt 2 file sau

Ok sau khi đã cài đặt xong 2 cái trên tại phía VM rồi thì chúng ta thực hiện đăng nhập account cho 2 Cloud GCP và AWS, việc đăng nhập thế nào thì mình sẻ không hướng dẫn thêm ở đây, vì các bạn đã làm những vấn đề này rồi thì mình nghĩ chắc rằng các bạn cũng biết cách đăng nhập, sau khi đã đăng nhập thành công rồi thì chúng ta thực hiện tiếp kiểm tra xem mọi thứ đã hoạt động ok chưa bằng cách chạy 2 lệnh sau mình ví dụ mình có 2 bucket như sau:

  • gs://bucket-a
  • s3://bucket-b

Example:

gsutil ls gs://bucket-a

gsutil ls s3://bucket-b

Sau khi đã xác nhận rằng nó hoạt động ok rồi và không bị kẹt gì ở 2 tài khoản thì chúng ta thực hiện tiếp việc copy data, nên chú ý về network vì network chậm thì 2 option của gsutil sẻ báo lỗi liền, ở đây ta sẻ có 2 câu lệnh có thể sử dụng cho việc copy data thường thì mọi người chỉ sử dụng là rsync, nhưng cũng tùy người

OPTION:

gsutil -m cp -r "gs://bucket-a/*" s3://bucket-b/

gsutil -m rsync -rd "gs://bucket-a/" "s3://bucket-b/"

Với "-d" trong rsync sẻ là cho phép delete những file trong bucket-b nếu nó không trùng khớp với phía bucket-a, còn -r chỉ là copy các cây thư mục thôi, -m thì là copy nhiều dữ liệu đại loại mình nghĩ là chữ multi haha, không biết đúng không, ok với thằng rsync thì hơi khó chịu 1 chút, nghĩa là phía data quá khổng lồ và có dữ liệu cực lớn, lên đến mấy TB cộng với network kém thì nó sẻ báo lỗi như hình

Mình là mình bực quá nên mình ngắt ngang nó cho rồi, lúc này nên tăng network lên là ok, đó là lý do mình giới thiệu cho các bạn 2 option để gặp trường hợp không dùng được thằng rsync thì cũng có cp mà xài, ok như vậy là xong phần 1 tiếp đến aws nhưng 2 account khác nhau nào, khổ cho bản thân mình là công ty nhiều account cloud quá nên move qua move lại nhức cả đầu haha

Phần 2: Di chuyển s3 từ account aws a sang s3 của account aws b

Trước tiên để làm điều này thì mình cũng khuyên các bạn nên tạo riêng một con EC2 để thực hiện vấn đề này, ở trên cũng như vậy và ở dưới này cũng thế, dựa vào tốc độ mạng của tụi nó mà mình move nhanh hơn, move xong thì xóa đi thôi chứ có gì đâu nên đừng ngại mà tạo đi haha, hảy tin tưởng 1 người đi trước là mình hehe, chúng ta sẻ có 2 bucket như sau:
  • Account A: s3://bucket-a
  • Account B: s3://bucket-b
Tại phía account b chúng ta thực hiện tạo 1 user với full quyền access s3 nhé, tại đây mình sẻ tạo ra một user với tên là s3-data-sync, sau đó tạo tiếp một policy và attach đến user đó
Đi qua tạo tiếp s3-data-sync-plc nào
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}
Tạo plc với những quyền sau, thật ra không cần tạo cũng được bởi lẻ mình đã cho phép nó là FullS3Acess rồi mà, nhưng tại tạo cho giống với hướng dẫn của aws thôi haha, chứ thật ra không cần thiết đâu, mình upload lên đây để các bạn hiểu rằng tệ lắm thì user account của các bạn cũng phải có những quyền này.

Chuyển đến account a để làm các bước khác nào, tại account a chúng ta truy cập đến s3 service và tìm đến s3://bucket-a
Truy cập đến Permission sau đó edit Bucket Policy, chú ý tắt Block cho mình nhé
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789123:user/s3-data-sync"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::site-selection-dev/*"
        }
    ]
}
Tiếp đến kéo xuống dưới tìm đến mục ACL
Tại đây ta cần thêm một "Access for other AWS accounts" với full quyền, thực hiện chọn "Add Grantee" 
Với Grantee thì chúng ta quay về account b tìm đến s3 service trong phần ACL s3 account b chúng ta sẻ thấy được Grantee ID chính là Canonical ID
Copy nó và dán vào phía s3 bucket của account a như hình
Ok giờ chúng ta quay lại EC2 và thực hiện check bằng lệnh ls giữa 2 s3 của account a và account b nhé
aws s3 ls s3://bucket-a
aws s3 ls s3://bucket-b
Mặc dù đã là 2 tài khoản khác nhau nhưng như bạn thấy đấy tài khoản của phía account b đã tạo có thể xem được giá trị bucket của account b và a, tại sao mình phải làm phức tạp như vậy mà không sử dụng hướng dẫn của aws để move luôn ?
Tại phía AWS cũng có 1 bài viết hướng dẫn như vậy nhưng vì lý do khi mình sử dụng cách của aws thì mình bị vấn đề không thể cấp policy tại Bucket Policy của account b vì nó khác account copy nghĩa là những file mình copy từ account a này được tạo ra bằng user của account a nên khi copy đến account b thì account b không thể phân quyền cho phía account a được, các bạn có thể hiểu theo nghĩa thực tế là các bạn giao đồ cho thằng bạn của bạn, nhưng chỉ giao cho nó giữ chứ không cho nó quyền làm gì với món đồ mình cả, còn khi thằng bạn mình qua nhà mình, nó thấy món đồ đó đẹp quá, nó xin mình nó lấy về hoặc nó ăn cắp về thì nó lại là thuộc quyền của nó, nó muốn làm gì làm, đại loại vậy, giờ đây các bạn có thể thực hiện chạy lệnh cp hoặc sync điều được giữa 2 s3 nhé, với s3 và s3 thì không lỗi gì xảy ra khi data có lớn đâu vì điều là của AWS mà.
aws s3 cp s3://bucket-a s3://bucket-b --recursive
aws s3 sync s3://bucket-a s3://bucket-b
Ok như các bạn đã thấy thì mình đã hướng dẫn xong cho các bạn cách di chuyển file data từ gs đến s3 và từ s3 đến s3 giữa 2 tài khoản khác nhau, chúc các bạn thành công, đừng quên share bài viết của mình nhé, cảm ơn các bạn nhiều.

Post a Comment

0 Comments