[Cloud Storage] Use APIs to Work with Cloud Storage: Challenge Lab

yejin·2026년 4월 29일

Google Skills

목록 보기
35/46

Course

Use APIs to Work with Cloud Storage

Lab

목록


🌠 Use APIs to Work with Cloud Storage: Challenge Lab

Task1. Cloud Storage 버킷 2개 만들기

1. OAuth2 Token 발급 받기

(1) Google Developer 사이트 접속

🔗 https://developers.google.com/oauthplayground/

(2) Token 발급 받기

➡️ Cloud Storage API V1 선택 > https://www.googleapis.com/auth/devstorage.full_control 범위 선택 > Authorize APIs 버튼 클릭 > 실습 계정으로 로그인 진행 후 권한 승인

단계 설명

1) Exchange authorization code for tokens 버튼 클릭
2~3) Step 3 단계로 넘어갔을 경우, Step 2단계 클릭
4) Access Token의 값 복사

(3) 환경변수에 설정

# Token 입력
export OAUTH2_TOKEN=<Access Token>

# 확인 (Access Token과 동일한 값이 출력되면 정상!)
echo $OAUTH2_TOKEN

2. 프로젝트 아이디 환경변수 설정

export PROJECT_ID=$(gcloud config get-value project)

3. JSON 파일 생성

# 파일 생성
nano values.json

# 내용
{  
   "name": "filled in at lab start-bucket-1", # 실습용 계정마다 다름
   "location": "us",
   "storageClass": "multi_regional"
}

4. 버킷 만들기

# request
curl -X POST --data-binary @values.json \ #json 파일명 다르게 했으면 수정 필요
    -H "Authorization: Bearer $OAUTH2_TOKEN" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b?project=$PROJECT_ID"
    
# response
{
  "kind": "storage#bucket",
  "selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
  "id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
  "name": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
  "projectNumber": "279638863494",
  "generation": "1777435406727446572",
  "metageneration": "1",
  "location": "US",
  "storageClass": "MULTI_REGIONAL",
  "etag": "CAE=",
  "timeCreated": "2026-04-29T04:03:27.263Z",
  "updated": "2026-04-29T04:03:27.263Z",
  "softDeletePolicy": {
    "retentionDurationSeconds": "604800",
    "effectiveTime": "2026-04-29T04:03:27.263Z"
  },
  "iamConfiguration": {
    "bucketPolicyOnly": {
      "enabled": false
    },
    "uniformBucketLevelAccess": {
      "enabled": false
    },
    "publicAccessPrevention": "inherited"
  },
  "locationType": "multi-region",
  "rpo": "DEFAULT"
}

5. 버킷 하나 더 만들기

# 내용 수정
nano values.json

# 내용
{  
   "name": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2", # 기존 버킷명과 다른 버킷명 설정
   "location": "us",
   "storageClass": "multi_regional"
}

# 버킷 만들기 request
curl -X POST --data-binary @values.json \ #json 파일명 다르면 수정 필요
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: application/json"  \ 
"https://www.googleapis.com/storage/v1/b?project=$PROJECT_ID"

# 버킷 생성 완료 response
{
  "kind": "storage#bucket",
  "selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
  "id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
  "name": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
  "projectNumber": "279638863494",
  "generation": "1777435436896653145",
  "metageneration": "1",
  "location": "US",
  "storageClass": "MULTI_REGIONAL",
  "etag": "CAE=",
  "timeCreated": "2026-04-29T04:03:57.382Z",
  "updated": "2026-04-29T04:03:57.382Z",
  "softDeletePolicy": {
    "retentionDurationSeconds": "604800",
    "effectiveTime": "2026-04-29T04:03:57.382Z"
  },
  "iamConfiguration": {
    "bucketPolicyOnly": {
      "enabled": false
    },
    "uniformBucketLevelAccess": {
      "enabled": false
    },
    "publicAccessPrevention": "inherited"
  },
  "locationType": "multi-region",
  "rpo": "DEFAULT"
}

✅ 만들어진 버킷은 Cloud Storage > Buckets 에서 확인 가능


Task2. Cloud Storage 버킷에 이미지 파일 업로드하기

참고✨

이번 실습에서 이미지 파일명은 image로 하였다.

1. 디렉터리에 이미지 추가


➡️ Cloud Shell 세션의 우측 상단의 점 3개 아이콘 클릭 > Upload > Choose Files 클릭 > image.png 선택

2. 이미지 경로 확인

# request
realpath image.png

# response
/home/student_03_7fb59a769f17/image.png

3. 환경변수 설정

export OBJECT=/home/student_03_7fb59a769f17/image.png

4. 버킷에 이미지 업로드

#uploadType의 name은 업로드 시 저장될 파일명을 작성
curl -X POST --data-binary @$OBJECT \
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: image/png" \ 
"https://www.googleapis.com/upload/storage/v1/b/$BUCKET_NAME/o?uploadType=media&name=image" 

# response
{
  "kind": "storage#object",
  "id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1/image/1777435662425101",
  "selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image",
  "mediaLink": "https://www.googleapis.com/download/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image?generation=1777435662425101&alt=media",
  "name": "image", #파일명
  "bucket": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
  "generation": "1777435662425101",
  "metageneration": "1",
  "contentType": "image/png",
  "storageClass": "MULTI_REGIONAL",
  "size": "908993",
  "md5Hash": "VHwnW4PU6MHlHHwS8Vuuqg==",
  "crc32c": "uGXH4A==",
  "etag": "CI24lOqXkpQDEAE=",
  "timeCreated": "2026-04-29T04:07:42.491Z",
  "updated": "2026-04-29T04:07:42.491Z",
  "timeStorageClassUpdated": "2026-04-29T04:07:42.491Z",
  "timeFinalized": "2026-04-29T04:07:42.491Z"
}

Task3. 파일을 다른 버킷에 복사하기

#버킷 내 복사하려는 파일명이 url에 적혀 있으므로 자신의 파일명에 맞춰 변경 필요
curl -X POST \
  -H "Authorization: Bearer $OAUTH2_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Content-Length: 0" \
  "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image/rewriteTo/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2/o/image"

# response
{
  "kind": "storage#rewriteResponse",
  "totalBytesRewritten": "908993",
  "objectSize": "908993",
  "done": true,
  "resource": {
    "kind": "storage#object",
    "id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2/image/1777435834349555",
    "selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2/o/image",
    "mediaLink": "https://www.googleapis.com/download/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2/o/image?generation=1777435834349555&alt=media",
    "name": "image",
    "bucket": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
    "generation": "1777435834349555",
    "metageneration": "1",
    "contentType": "image/png",
    "storageClass": "MULTI_REGIONAL",
    "size": "908993",
    "md5Hash": "VHwnW4PU6MHlHHwS8Vuuqg==",
    "crc32c": "uGXH4A==",
    "etag": "CPPvkbyYkpQDEAE=",
    "timeCreated": "2026-04-29T04:10:34.421Z",
    "updated": "2026-04-29T04:10:34.421Z",
    "timeStorageClassUpdated": "2026-04-29T04:10:34.421Z",
    "timeFinalized": "2026-04-29T04:10:34.421Z",
    "owner": {
      "entity": "user-student-03-7fb59a769f17@qwiklabs.net"
    }
  }
}

Task4. 객체(파일)를 공개적으로 액세스할 수 있게 설정하기

1. JSON 파일 생성

# 파일 생성
nano acl.json

# 파일 내용
{
  "entity": "allUsers",
  "role": "READER"
}

2. 권한 설정

# url에 이미지 파일 경로가 있으므로 파일명 확인하여 수정하기!
 curl -X POST --data-binary @acl.json \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image/acl"
  
# response
{
  "kind": "storage#objectAccessControl",
  "object": "image",
  "generation": "1777435662425101",
  "id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1/image/1777435662425101/allUsers",
  "selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image/acl/allUsers",
  "bucket": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
  "entity": "allUsers",
  "role": "READER",
  "etag": "CI24lOqXkpQDEAM="
}

Task5. 객체 파일과 Cloud Storage 버킷(버킷 1) 삭제하기

1. 객체 파일 삭제

# 파일명 수정 필요
curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image"

2. 버킷1 삭제

# 버킷명 수정 필요
curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1"
profile
새싹 개발자

0개의 댓글