S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ Cloud Storage๋กœ ์ „์†ก

Storage Transfer Service๋Š” Amazon S3 API์™€ ํ˜ธํ™˜๋˜๋Š” ํด๋ผ์šฐ๋“œ ๋˜๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ์—์„œ์˜ ์ „์†ก์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Storage Transfer Service๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๊ฐ€๊นŒ์šด VM์— ๋ฐฐํฌ๋œ ์ „์†ก ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—์ด์ „ํŠธ๋Š” Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์—์ด์ „ํŠธ ํ’€์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ํ’€์€ ๋™์ผํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ „์ฒด์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ด๋™์‹œํ‚ค๋Š” ์—์ด์ „ํŠธ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

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

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์ „์†ก์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

์†Œ์Šค ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์ „์†กํ•˜๋ ค๋ฉด ์•ก์„ธ์Šค ํ‚ค ID ๋ฐ ๋ณด์•ˆ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋‹จ๊ณ„๋Š” ์Šคํ† ๋ฆฌ์ง€ ์ œ๊ณต์—…์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ID์™€ ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณ„์ •์—๋Š” ๋‹ค์Œ ๊ถŒํ•œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์†Œ์Šค์—์„œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ ์†Œ์Šค ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ ๊ถŒํ•œ
  • ์ „์†ก ์ค‘์— ์†Œ์Šค์—์„œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์†Œ์Šค ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ

๊ณ„์ •์„ ๋งŒ๋“ค๊ณ , ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์•ก์„ธ์Šค ํ‚ค ID ๋ฐ ๋ณด์•ˆ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ–ˆ์œผ๋ฉด ID์™€ ํ‚ค๋ฅผ ์•ˆ์ „ํ•œ ๊ณณ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Google Cloud ๊ถŒํ•œ ๊ตฌ์„ฑ

์ „์†ก์„ ๋งŒ๋“ค๊ธฐ ์ „์— ๋‹ค์Œ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์†ก์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •. ์ด ๊ณ„์ •์€ Google Cloud ์ฝ˜์†”์— ๋กœ๊ทธ์ธ๋œ ๊ณ„์ •์ด๊ฑฐ๋‚˜ `gcloud` CLI์— ์ธ์ฆํ•  ๋•Œ ์ง€์ •๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณ„์ •์€ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ณ„์ •์ด๋‚˜ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค ๊ณ„์ •์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Google ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์€ ์„œ๋น„์Šค ์—์ด์ „ํŠธ๋ผ๊ณ ๋„ ํ•˜๋ฉฐ Storage Transfer Service์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณ„์ •์€ ์ผ๋ฐ˜์ ์œผ๋กœ project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค.
์ „์†ก ์—์ด์ „ํŠธ์— Google Cloud ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ์ „์†ก ์—์ด์ „ํŠธ ๊ณ„์ •. ์ „์†ก ์—์ด์ „ํŠธ ๊ณ„์ •์€ ์„ค์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋‚˜ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค ๊ณ„์ •์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜ ์ „์†ก ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ „์†ก ์˜ต์…˜

S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ Cloud Storage๋กœ ์ „์†กํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Storage Transfer Service ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํŒŒ์ผ ์ „์†ก
์ž‘์—…ํ•  Storage Transfer Service ํŒŒ์ผ์˜ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํŒŒ์ผ ๋˜๋Š” ๊ฐ์ฒด ์ „์†ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค ์ง€์ •
๋Œ€์ƒ ๋ฒ„ํ‚ท์˜ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉํ•  Cloud Storage ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. REST ์„ธ๋ถ€์ •๋ณด๋Š” StorageClass ์˜ต์…˜์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ Google Cloud CLI์—์„œ --custom-storage-class ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋Œ€์ƒ ๋ฒ„ํ‚ท์— ์ž๋™ ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜๋ฉด ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค ์„ค์ •์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์ฒ˜์Œ์—๋Š” ๋ฒ„ํ‚ท์œผ๋กœ ์ „์†ก๋œ ๊ฐ์ฒด๊ฐ€ Standard Storage๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด์กด

S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ Storage Transfer Service๋Š” ์„ ํƒ์ ์œผ๋กœ ํŠน์ • ์†์„ฑ์„ ์ปค์Šคํ…€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์กดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ „์†ก์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด์กด์˜ Amazon S3 ๋˜๋Š” S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ Cloud Storage๋กœ ์ „์†ก ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
Cloud Logging ๋ฐ Cloud Monitoring์—์„œ S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ์˜ ์ „์†ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Storage Transfer Service์šฉ Cloud Logging ๋ฐ ์ „์†ก ์ž‘์—… ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๋˜ํ•œ Pub/Sub ์•Œ๋ฆผ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ํ’€ ๋งŒ๋“ค๊ธฐ

์—์ด์ „ํŠธ ํ’€ ์ด๋ฆ„์ด๋‚˜ ์—์ด์ „ํŠธ ID ํ”„๋ฆฌํ”ฝ์Šค์— ๊ฐœ์ธ ์‹๋ณ„ ์ •๋ณด(PII) ๋˜๋Š” ๋ณด์•ˆ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”. ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์€ ๋‹ค๋ฅธ Google Cloud ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์œผ๋กœ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€์˜ Google ๋‚ด๋ถ€ ์‹œ์Šคํ…œ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ํ’€์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Google Cloud ์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์—์ด์ „ํŠธ ํ’€ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์—์ด์ „ํŠธ ํ’€๋กœ ์ด๋™

    ์—์ด์ „ํŠธ ํ’€ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๊ธฐ์กด ์—์ด์ „ํŠธ ํ’€์ด ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

  2. ๋‹ค๋ฅธ ํ’€ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ํ’€ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  4. ํ’€์— ์ „์ฒด ๋Œ€์—ญํญ ๋‹จ์œ„๋กœ ์ ์šฉํ•  ๋Œ€์—ญํญ ํ•œ๋„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •๋œ ๋Œ€์—ญํญ(MB/s)์ด ํ’€์— ์žˆ๋Š” ๋ชจ๋“  ์—์ด์ „ํŠธ๋กœ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  5. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

REST API

projects.agentPools.create๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

POST https://storagetransfer.googleapis.com/v1/projects/PROJECT_ID/agentPools?agent_pool_id=AGENT_POOL_ID

๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • PROJECT_ID: ์—์ด์ „ํŠธ ํ’€์„ ๋งŒ๋“ค๋ ค๋Š” ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • AGENT_POOL_ID: ๋งŒ๋“ค๋ ค๋Š” ์—์ด์ „ํŠธ ํ’€ ID์ž…๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ํ’€์ด Creating ์ƒํƒœ์—์„œ 30๋ถ„์ด ๋„˜๊ฒŒ ์ •์ฒด๋˜๋Š” ๊ฒฝ์šฐ ์—์ด์ „ํŠธ ํ’€์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ํ’€์ด Creating ์ƒํƒœ์ผ ๋•Œ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์ˆ˜ Storage Transfer Service ๊ถŒํ•œ์„ ์ทจ์†Œํ•˜๋ฉด ์ž˜๋ชป๋œ ์„œ๋น„์Šค ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

gcloud CLI

gcloud ๋ช…๋ น์ค„ ๋„๊ตฌ๋กœ ์—์ด์ „ํŠธ ํ’€์„ ๋งŒ๋“ค๋ ค๋ฉด [gcloud transfer agent-pools create][agent-pools-create]๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud transfer agent-pools create AGENT_POOL

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • AGENT_POOL์€ ์ด ํ’€์˜ ๊ณ ์œ ํ•œ ์˜๊ตฌ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

  • --no-async๋Š” ํ’€์ด ์ƒ์„ฑ๋  ๋•Œ๊นŒ์ง€ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค๋ฅธ ํƒœ์Šคํฌ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉด ํ’€ ์ƒ์„ฑ์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • --bandwidth-limit๋Š” ์ด ํ’€์˜ ์—์ด์ „ํŠธ์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์—ญํญ ์–‘์„ MB/์ดˆ ๋‹จ์œ„๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์—ญํญ ํ•œ๋„๋Š” ํ’€์˜ ๋ชจ๋“  ์—์ด์ „ํŠธ์— ์ ์šฉ๋˜๋ฉฐ ํ’€์˜ ์ „์†ก ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋Œ€์—ญํญ์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค๋ฅธ ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์—ญํญ ํ•œ๋„๋ฅผ 50MB/s๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด '50'์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ํ’€์˜ ์—์ด์ „ํŠธ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋Œ€์—ญํญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • --display-name์€ ์ด ํ’€์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ํ’€์˜ ๊ณ ์œ ํ•œ ์ „์ฒด ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์— ๋งž์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์„ธ๋ถ€์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์†ก ์—์ด์ „ํŠธ ์„ค์น˜

์ „์†ก ์—์ด์ „ํŠธ๋Š” Storage Transfer Service๋ฅผ ํ†ตํ•ด ์†Œ์Šค์˜ ์ „์†ก ํ™œ๋™์„ ์กฐ์ •ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gcloud CLI

gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ S3 ํ˜ธํ™˜ ์†Œ์Šค์— ์‚ฌ์šฉํ•  ์—์ด์ „ํŠธ๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด transfer agents install ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ AWS_ACCESS_KEY_ID ๋ฐ AWS_SECRET_ACCESS_KEY ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋กœ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME

์„œ๋น„์Šค ๊ณ„์ • ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด --creds-file ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud transfer agents install --pool=POOL_NAME \
  --creds-file=/relative/path/to/service-account-key.json

์ „์†ก ์ž‘์—… ๋งŒ๋“ค๊ธฐ

Google Cloud ์ฝ˜์†”

S3 ํ˜ธํ™˜ ์†Œ์Šค์—์„œ Cloud Storage ๋ฒ„ํ‚ท์œผ๋กœ์˜ ์ „์†ก์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Google Cloud ์ฝ˜์†”์—์„œ Storage Transfer Service ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Storage Transfer Service๋กœ ์ด๋™

  2. ์ „์†ก ์ž‘์—… ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก ์ž‘์—… ๋งŒ๋“ค๊ธฐ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ์†Œ์Šค ์œ ํ˜•์œผ๋กœ S3 ํ˜ธํ™˜ ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ์œ„์น˜๋Š” Google Cloud Storage์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ๊ตฌ์„ฑ

  1. ์ด ์ „์†ก์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    1. ์ด ์ „์†ก์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•œ ์—์ด์ „ํŠธ ํ’€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    2. ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒ„ํ‚ท ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์Œ ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ:

      https://example.com/bucket_a

      bucket_a ์ž…๋ ฅ

    3. ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ (http:// ๋˜๋Š” https://) ๋˜๋Š” ๋ฒ„ํ‚ท ์ด๋ฆ„์„ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      example.com

  2. ์ด ์ „์†ก์˜ ์„ ํƒ์  ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    1. ์š”์ฒญ ์„œ๋ช…์— ์‚ฌ์šฉํ•  ์„œ๋ช… ๋ฆฌ์ „์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    2. ์ด ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋ช… ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    3. ์ฃผ์†Œ ์ง€์ • ์Šคํƒ€์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ฒ„ํ‚ท ์ด๋ฆ„์ด ๊ฒฝ๋กœ ์Šคํƒ€์ผ๋กœ ์ œ๊ณต๋˜๋Š”์ง€ ์—ฌ๋ถ€(์˜ˆ: https://example.com/bucket-name/key-name) ๋˜๋Š” ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ… ์Šคํƒ€์ผ(์˜ˆ: https://bucket-name.example.com/key-name)์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Amazon ๋ฌธ์„œ์˜ Virtual hosting of buckets๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    4. ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    5. ์‚ฌ์šฉํ•  ๋ชฉ๋ก API ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ListObjectsV2 ๋ฐ ListObjects ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  3. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์‹ฑํฌ ๊ตฌ์„ฑ

  1. ๋ฒ„ํ‚ท ๋˜๋Š” ํด๋” ํ•„๋“œ์— ๋Œ€์ƒ ๋ฒ„ํ‚ท๊ณผ ํด๋” ์ด๋ฆ„(์„ ํƒ์‚ฌํ•ญ)์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ฐพ์•„๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ๋ชฉ๋ก์—์„œ ๋ฒ„ํ‚ท์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„ํ‚ท์„ ๋งŒ๋“ค๋ ค๋ฉด ์ƒˆ ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  2. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ „์†ก ์„ค์ • ์„ ํƒ

  1. ์„ค๋ช… ํ•„๋“œ์— ์ „์†ก ์„ค๋ช…์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜๋ฏธ ์žˆ๊ณ  ๊ณ ์œ ํ•œ ์„ค๋ช…์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  2. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜ต์…˜์—์„œ ๊ธฐ๋ณธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์˜ต์…˜ ๋ณด๊ธฐ ๋ฐ ์„ ํƒ์„ ํด๋ฆญํ•˜์—ฌ ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด์กด์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  3. ๋ฎ์–ด์“ธ ์‹œ์ ์—์„œ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    • ๋‹ค๋ฅธ ๊ฒฝ์šฐ: ์ด๋ฆ„์ด ๊ฐ™์€ ์†Œ์Šค ํŒŒ์ผ์— ๋‹ค๋ฅธ Etag ๋˜๋Š” ์ฒดํฌ์„ฌ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋Œ€์ƒ ํŒŒ์ผ์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

    • ํ•ญ์ƒ: ์†Œ์Šค ํŒŒ์ผ ์ด๋ฆ„์ด ๊ฐ™์œผ๋ฉด ๋™์ผํ•˜๋”๋ผ๋„ ํ•ญ์ƒ ๋Œ€์ƒ ํŒŒ์ผ์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

  4. ์‚ญ์ œ ์‹œ์ ์—์„œ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    • ์‚ญ์ œ ์•ˆํ•จ: ์†Œ์Šค ๋˜๋Š” ๋Œ€์ƒ ์œ„์น˜์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์ „์†ก ํ›„ ์†Œ์Šค์—์„œ ํŒŒ์ผ ์‚ญ์ œ: ํŒŒ์ผ์ด ๋Œ€์ƒ์œผ๋กœ ์ „์†ก๋œ ํ›„ ์†Œ์Šค์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์ƒ์— ์ด๋ฏธ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค ํŒŒ์ผ์ด ์ „์†ก๋˜์ง€ ์•Š์œผ๋ฉด ์†Œ์Šค ํŒŒ์ผ์ด ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์†Œ์Šค์—๋„ ์—†๋Š” ๊ฒฝ์šฐ ๋Œ€์ƒ ์œ„์น˜์—์„œ ํŒŒ์ผ ์‚ญ์ œ: ๋Œ€์ƒ Cloud Storage ๋ฒ„ํ‚ท์˜ ํŒŒ์ผ์ด ์†Œ์Šค์—๋„ ์—†๋Š” ๊ฒฝ์šฐ Cloud Storage ๋ฒ„ํ‚ท์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

      ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์ƒ Cloud Storage ๋ฒ„ํ‚ท์ด ์†Œ์Šค์™€ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  5. ์•Œ๋ฆผ ์˜ต์…˜์—์„œ Pub/Sub ์ฃผ์ œ ๋ฐ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ด๋ฒคํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Pub/Sub ์•Œ๋ฆผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  6. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ „์†ก ์˜ˆ์•ฝ

์ „์†ก์„ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋„๋ก ์˜ˆ์•ฝํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋ณต ์ „์†ก์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ „์†ก ์ž‘์—…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud CLI

gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก์„ ๋งŒ๋“ค๊ธฐ ์ „์— Cloud Storage ์‹ฑํฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ตฌ์„ฑ์˜ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ S3 ํ˜ธํ™˜ ์†Œ์Šค์—์„œ Cloud Storage ๋ฒ„ํ‚ท์œผ๋กœ์˜ ์ „์†ก์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud transfer jobs create s3://SOURCE_BUCKET_NAME gs://SINK_BUCKET_NAME \
  --source-agent-pool=POOL_NAME \
  --source-endpoint=ENDPOINT \
  --source-signing-region=REGION \
  --source-auth-method=AWS_SIGNATURE_V2 | AWS_SIGNATURE_V4 \
  --source-request-model=PATH_STYLE | VIRTUAL_HOSTED_STYLE \
  --source-network-protocol=HTTP | HTTPS \
  --source-list-api=LIST_OBJECTS | LIST_OBJECTS_V2

๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

  • --source-agent-pool์€ ์ด ์ „์†ก์— ์‚ฌ์šฉํ•  ์—์ด์ „ํŠธ ํ’€์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • --source-endpoint๋Š” ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด s3.us-east.example.com์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์„ ์ œ๊ณต์—…์ฒด์— ๋ฌธ์˜ํ•˜์„ธ์š”. ํ”„๋กœํ† ์ฝœ (์˜ˆ: https://) ๋˜๋Š” ๋ฒ„ํ‚ท ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ํ”Œ๋ž˜๊ทธ๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

  • --source-signing-region์€ ์š”์ฒญ์— ์„œ๋ช…ํ•  ๋ฆฌ์ „์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€ ์ œ๊ณต์—…์ฒด์— ์„œ๋ช… ๋ฆฌ์ „์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
  • --source-auth-method๋Š” ์‚ฌ์šฉํ•  ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ AWS_SIGNATURE_V2 ๋˜๋Š” AWS_SIGNATURE_V4์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Amazon์˜ SigV4 ๋ฐ SigV2 ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • --source-request-model์€ ์‚ฌ์šฉํ•  ์ฃผ์†Œ ์ง€์ • ์Šคํƒ€์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ PATH_STYLE ๋˜๋Š” VIRTUAL_HOSTED_STYLE์ž…๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ์Šคํƒ€์ผ์€ https://s3.REGION.example.com/BUCKET_NAME/KEY_NAME ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ… ์Šคํƒ€์ผ์€ 'https://BUCKET_NAME.s3.REGION.example.com/KEY_NAME ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • --source-network-protocol์€ ์—์ด์ „ํŠธ๊ฐ€ ์ด ์ž‘์—…์— ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ HTTP ๋˜๋Š” HTTPS์ž…๋‹ˆ๋‹ค.
  • --source-list-api๋Š” ๋ฒ„ํ‚ท์—์„œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ S3 Listing API ๋ฒ„์ „์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ LIST_OBJECTS ๋˜๋Š” LIST_OBJECTS_V2์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Amazon์˜ ListObjectsV2 ๋ฐ ListObjects ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์ „์†ก ์ž‘์—… ์˜ต์…˜์„ ๋ณด๋ ค๋ฉด gcloud transfer jobs create --help๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ gcloud ์ฐธ์กฐ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

REST API

REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก์„ ๋งŒ๋“ค๊ธฐ ์ „์— Cloud Storage ์‹ฑํฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ตฌ์„ฑ์˜ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ S3 ํ˜ธํ™˜ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ์˜ ์ „์†ก์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ์˜ˆ์‹œ์™€ ์œ ์‚ฌํ•œ JSON ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "awsS3CompatibleData": {
      "region":"us-east-1",
      "s3Metadata":{
        "protocol": "NETWORK_PROTOCOL_HTTPS",
        "requestModel": "REQUEST_MODEL_VIRTUAL_HOSTED_STYLE",
        "authMethod": "AUTH_METHOD_AWS_SIGNATURE_V4"
      },
      "endpoint": "example.com",
      "bucketName": "BUCKET_NAME",
      "path": "PATH",
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME",
      "path": "SINK_PATH"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

ํ•„๋“œ ์„ค๋ช…์€ AwsS3CompatibleData API ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก์„ ๋งŒ๋“ค๊ธฐ ์ „์— Cloud Storage ์‹ฑํฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ตฌ์„ฑ์˜ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Go

Storage Transfer Service์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Storage Transfer Service ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Storage Transfer Service Go API ์ฐธ๊ณ  ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Storage Transfer Service์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.


import (
	"context"
	"fmt"
	"io"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferFromS3CompatibleSource(w io.Writer, projectID string, sourceAgentPoolName string, sourceBucketName string, sourcePath string, gcsSinkBucket string, gcsPath string) (*storagetransferpb.TransferJob, error) {
	// Your project id.
	// projectId := "my-project-id"

	// The agent pool associated with the S3 compatible data source. If not provided, defaults to the default agent.
	// sourceAgentPoolName := "projects/my-project/agentPools/transfer_service_default"

	// The S3 compatible bucket name to transfer data from.
	//sourceBucketName = "my-bucket-name"

	// The S3 compatible path (object prefix) to transfer data from.
	//sourcePath = "path/to/data"

	// The ID of the GCS bucket to transfer data to.
	//gcsSinkBucket = "my-sink-bucket"

	// The GCS path (object prefix) to transfer data to.
	//gcsPath = "path/to/data"

	// The S3 region of the source bucket.
	region := "us-east-1"

	// The S3 compatible endpoint.
	endpoint := "us-east-1.example.com"

	// The S3 compatible network protocol.
	protocol := storagetransferpb.S3CompatibleMetadata_NETWORK_PROTOCOL_HTTPS

	// The S3 compatible request model.
	requestModel := storagetransferpb.S3CompatibleMetadata_REQUEST_MODEL_VIRTUAL_HOSTED_STYLE

	// The S3 Compatible auth method.
	authMethod := storagetransferpb.S3CompatibleMetadata_AUTH_METHOD_AWS_SIGNATURE_V4

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				SourceAgentPoolName: sourceAgentPoolName,
				DataSource: &storagetransferpb.TransferSpec_AwsS3CompatibleDataSource{
					AwsS3CompatibleDataSource: &storagetransferpb.AwsS3CompatibleData{
						BucketName: sourceBucketName,
						Path:       sourcePath,
						Endpoint:   endpoint,
						Region:     region,
						DataProvider: &storagetransferpb.AwsS3CompatibleData_S3Metadata{
							S3Metadata: &storagetransferpb.S3CompatibleMetadata{
								AuthMethod:   authMethod,
								RequestModel: requestModel,
								Protocol:     protocol,
							},
						},
					}},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{
						BucketName: gcsSinkBucket,
						Path:       gcsPath,
					},
				},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}

	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", sourceBucketName, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

Storage Transfer Service์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Storage Transfer Service ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Storage Transfer Service Java API ์ฐธ๊ณ  ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Storage Transfer Service์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.AuthMethod;
import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.NetworkProtocol;
import static com.google.storagetransfer.v1.proto.TransferTypes.S3CompatibleMetadata.RequestModel;

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferTypes;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import java.io.IOException;

public class TransferFromS3CompatibleSource {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.

    // Your project id
    String projectId = "my-project-id";

    // The agent pool associated with the S3 compatible data source. If not provided, defaults to
    // the default agent
    String sourceAgentPoolName = "projects/my-project-id/agentPools/transfer_service_default";

    // The S3 compatible bucket name to transfer data from
    String sourceBucketName = "my-bucket-name";

    // The S3 compatible path (object prefix) to transfer data from
    String sourcePath = "path/to/data";

    // The ID of the GCS bucket to transfer data to
    String gcsSinkBucket = "my-sink-bucket";

    // The GCS path (object prefix) to transfer data to
    String gcsPath = "path/to/data";

    // The S3 region of the source bucket
    String region = "us-east-1";

    // The S3 compatible endpoint
    String endpoint = "us-east-1.example.com";

    // The S3 compatible network protocol
    NetworkProtocol protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS;

    // The S3 compatible request model
    RequestModel requestModel = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE;

    // The S3 Compatible auth method
    AuthMethod authMethod = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4;

    transferFromS3CompatibleSource(
        projectId,
        sourceAgentPoolName,
        sourceBucketName,
        sourcePath,
        region,
        endpoint,
        protocol,
        requestModel,
        authMethod,
        gcsSinkBucket,
        gcsPath);
  }

  public static void transferFromS3CompatibleSource(
      String projectId,
      String sourceAgentPoolName,
      String sourceBucketName,
      String sourcePath,
      String region,
      String endpoint,
      NetworkProtocol protocol,
      RequestModel requestModel,
      AuthMethod authMethod,
      String gcsSinkBucket,
      String gcsPath)
      throws IOException {
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setSourceAgentPoolName(sourceAgentPoolName)
                    .setAwsS3CompatibleDataSource(
                        TransferTypes.AwsS3CompatibleData.newBuilder()
                            .setRegion(region)
                            .setEndpoint(endpoint)
                            .setBucketName(sourceBucketName)
                            .setPath(sourcePath)
                            .setS3Metadata(
                                TransferTypes.S3CompatibleMetadata.newBuilder()
                                    .setProtocol(protocol)
                                    .setRequestModel(requestModel)
                                    .setAuthMethod(authMethod)
                                    .build())
                            .build())
                    .setGcsDataSink(
                        GcsData.newBuilder().setBucketName(gcsSinkBucket).setPath(gcsPath).build()))
            .setStatus(TransferJob.Status.ENABLED)
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources,
    // or use "try-with-close" statement to do this automatically.
    try (StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create()) {

      // Create the transfer job
      TransferJob response =
          storageTransfer.createTransferJob(
              TransferProto.CreateTransferJobRequest.newBuilder()
                  .setTransferJob(transferJob)
                  .build());

      System.out.println(
          "Created a transfer job from "
              + sourceBucketName
              + " to "
              + gcsSinkBucket
              + " with "
              + "name "
              + response.getName());
    }
  }
}

Node.js

Storage Transfer Service์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Storage Transfer Service ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Storage Transfer Service Node.js API ์ฐธ๊ณ  ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Storage Transfer Service์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.


// Imports the Google Cloud client library
const storageTransfer = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// Useful enums for AWS S3-Compatible Transfers
// const {AuthMethod, NetworkProtocol, RequestModel} = storageTransfer.protos.google.storagetransfer.v1.S3CompatibleMetadata;

// Your project id
// const projectId = 'my-project';

// The agent pool associated with the S3-compatible data source. Defaults to the default agent
// const sourceAgentPoolName = 'projects/my-project/agentPools/transfer_service_default';

// The S3-compatible bucket name to transfer data from
// const sourceBucketName = "my-bucket-name";

// The S3-compatible path (object prefix) to transfer data from
// const sourcePath = "path/to/data/";

// The ID of the GCS bucket to transfer data to
// const gcsSinkBucket = "my-sink-bucket";

// The GCS path (object prefix) to transfer data to
// const gcsPath = "path/to/data/";

// The S3 region of the source bucket
// const region = 'us-east-1';

// The S3-compatible endpoint
// const endpoint = "us-east-1.example.com";

// The S3-compatible network protocol
// const protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS;

// The S3-compatible request model
// const requestModel = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE;

// The S3-compatible auth method
// const authMethod = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4;

// Creates a client
const client = new storageTransfer.StorageTransferServiceClient();

/**
 * Creates a transfer from an AWS S3-compatible source to GCS
 */
async function transferFromS3CompatibleSource() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      transferSpec: {
        sourceAgentPoolName,
        awsS3CompatibleDataSource: {
          region,
          s3Metadata: {
            authMethod,
            protocol,
            requestModel,
          },
          endpoint,
          bucketName: sourceBucketName,
          path: sourcePath,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
          path: gcsPath,
        },
      },
      status: 'ENABLED',
    },
  });

  await client.runTransferJob({
    jobName: transferJob.name,
    projectId,
  });

  console.log(
    `Created and ran a transfer job from '${sourceBucketName}' to '${gcsSinkBucket}' with name ${transferJob.name}`
  );
}

transferFromS3CompatibleSource();

Python

Storage Transfer Service์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Storage Transfer Service ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Storage Transfer Service Python API ์ฐธ๊ณ  ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Storage Transfer Service์— ์ธ์ฆํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ธ์ฆ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

from google.cloud import storage_transfer

AuthMethod = storage_transfer.S3CompatibleMetadata.AuthMethod
NetworkProtocol = storage_transfer.S3CompatibleMetadata.NetworkProtocol
RequestModel = storage_transfer.S3CompatibleMetadata.RequestModel


def transfer_from_S3_compat_to_gcs(
    project_id: str,
    description: str,
    source_agent_pool_name: str,
    source_bucket_name: str,
    source_path: str,
    gcs_sink_bucket: str,
    gcs_path: str,
    region: str,
    endpoint: str,
    protocol: NetworkProtocol,
    request_model: RequestModel,
    auth_method: AuthMethod,
) -> None:
    """Creates a transfer from an AWS S3-compatible source to GCS"""

    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # The agent pool associated with the S3-compatible data source.
    # Defaults to 'projects/{project_id}/agentPools/transfer_service_default'
    # source_agent_pool_name = 'projects/my-project/agentPools/my-agent'

    # The S3 compatible bucket name to transfer data from
    # source_bucket_name = "my-bucket-name"

    # The S3 compatible path (object prefix) to transfer data from
    # source_path = "path/to/data/"

    # The ID of the GCS bucket to transfer data to
    # gcs_sink_bucket = "my-sink-bucket"

    # The GCS path (object prefix) to transfer data to
    # gcs_path = "path/to/data/"

    # The S3 region of the source bucket
    # region = 'us-east-1'

    # The S3-compatible endpoint
    # endpoint = "us-east-1.example.com"

    # The S3-compatible network protocol
    # protocol = NetworkProtocol.NETWORK_PROTOCOL_HTTPS

    # The S3-compatible request model
    # request_model = RequestModel.REQUEST_MODEL_VIRTUAL_HOSTED_STYLE

    # The S3-compatible auth method
    # auth_method = AuthMethod.AUTH_METHOD_AWS_SIGNATURE_V4

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "transfer_spec": {
                    "source_agent_pool_name": source_agent_pool_name,
                    "aws_s3_compatible_data_source": {
                        "region": region,
                        "s3_metadata": {
                            "auth_method": auth_method,
                            "protocol": protocol,
                            "request_model": request_model,
                        },
                        "endpoint": endpoint,
                        "bucket_name": source_bucket_name,
                        "path": source_path,
                    },
                    "gcs_data_sink": {
                        "bucket_name": gcs_sink_bucket,
                        "path": gcs_path,
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ(FAQ)

S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์ „์†กํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋“œ๋‚˜์š”?

S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์˜ ์ „์†ก์€ 'Storage Transfer Service ์ „์†ก ํ•„์š” ์—์ด์ „ํŠธ' ์š”๊ธˆ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํƒ€ ์š”๊ธˆ์€ ๊ฐ€๊ฒฉ ์ฑ…์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์†Œ์Šค ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด์—์„œ ์•„์›ƒ๋ฐ”์šด๋“œ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ์ž‘์—… ๋น„์šฉ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud Logging์ด S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€ ์ „์†ก์— ์ง€์›๋˜๋‚˜์š”?

์˜ˆ, Storage Transfer Service์˜ Cloud Logging์˜ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์ „์†ก์— ๋Œ€ํ•ด Cloud Logging์„ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์ „์†ก์ด ์ง€์›๋˜๋‚˜์š”?

์˜ˆ, ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์€ S3 ํ˜ธํ™˜ ์ „์†ก์— ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ž‘์—…์ด ์‹œ์ž‘๋œ ํ›„ ์†Œ์Šค ๋ฒ„ํ‚ท์— ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์ „์†ก๋˜๋‚˜์š”?

Storage Transfer Service๋Š” ์†Œ์Šค ๋ฒ„ํ‚ท์—์„œ ๋ชฉ๋ก ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋Œ€์ƒ๊ณผ์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ๋ชฉ๋ก ์ž‘์—…์ด ์ด๋ฏธ ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ๋‹ค์Œ ์ „์†ก๊นŒ์ง€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

Storage Transfer Service๋Š” S3 ํ˜ธํ™˜ ์†Œ์Šค์—์„œ ์ฒดํฌ์„ฌ ์ผ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‚˜์š”?

Storage Transfer Service๋Š” ์†Œ์Šค์—์„œ ๋ฐ˜ํ™˜๋˜๋Š” ์ฒดํฌ์„ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์˜ ๊ฒฝ์šฐ Storage Transfer Service๋Š” ๊ฐ์ฒด์˜ Etag๊ฐ€ ๊ฐ์ฒด์˜ MD5 ํ•ด์‹œ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ S3 ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€๋กœ ์ „์†ก๋œ ๋ชจ๋“  ๊ฐ์ฒด์—๋Š” MD5 ETag๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Storage Transfer Service๋Š” ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก๋œ ๊ฐ์ฒด๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์ „์†กํ•  ๋•Œ ์–ด๋–ค ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์ „์†ก ์—์ด์ „ํŠธ๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜์—ฌ ์ „์†ก ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฒฐํ•จ์„ฑ์„ ์œ„ํ•ด 3๊ฐœ์˜ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  10Gbps ๋ฏธ๋งŒ์œผ๋กœ ํŒŒ์ดํ”„๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ™•์žฅํ•˜๋ ค๋ฉด ์—์ด์ „ํŠธ๋ฅผ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์—์ด์ „ํŠธ๋ฅผ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Amazon S3์—์„œ Cloud Storage๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ ค๋ฉด ์ „์†ก ์—์ด์ „ํŠธ๋ฅผ ์–ด๋””์— ๋ฐฐํฌํ•ด์•ผ ํ•˜๋‚˜์š”?

๋ฒ„ํ‚ท๊ณผ ๋™์ผํ•œ ๋ฆฌ์ „ ๋‚ด์—์„œ Amazon EC2 ๋˜๋Š” EKS์— ์—์ด์ „ํŠธ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฆฌ์ „์˜ Google Cloud ์—์„œ ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.