티스토리 뷰

Google Cloud client library 사용하여 토이 프로젝트 하다가 처음 문서찾으며 헤메던 부분이 있어서 정리.

 

API 테스트

Google Cloud는 서비스 종류가 많은 만큼 API도 방대하다. 

Google Cloud API documentation 사이트에서 직접 API를 호출 테스트를 해볼 수 있다.

아래는 Compute Engine API 중 instance list를 가져오는 API의 documentation과 테스트 화면.

Google Cloud compute engine API documentation

 

Try This API 창 우측 상단의 확대 버튼을 누르면 아래와 같이 사용 예제 코드도 볼 수 있다.

API 사용 예시 (Javascript)

 

 

Google Cloud Client Library 

Google Cloud는 개발 편의와 효율성을 위해서 각 언어별 Client Library를 제공한다.

GCP의 모든 API는 HTTP, JSON 기반으로 전통적 방식의 HTTP request 방식으로 호출하고 응답을 받아 parsing 하는 방법으로도 사용 가능하다.

하지만 Client Library를 사용하면 자신이 익숙한 프로그래밍 언어로 라이브러리 호출 방식으로 쉽게 API를 호출할 수 있고

작성해야 하는 코드양도 줄고 훨씬 직관적인 코드를 작성할 수 있다.

Authentication 같은 작업도 Client Library를 사용하면 훨씬 더 간편하게 처리 할 수 있다.

현재 Client Library가 제공되는 언어는 다음과 같다. 많이 쓰이는 언어는 대부분 지원한다.

더 자세한 내용은 다음 링크를 참고. Google Cloud Client Library

 

Install Google Cloud Client Library for Go

Google Cloud Client Library for Go의 repo는 다음과 같다. Github Repo

이 포스팅에서는 Storage Client Library를 사용할 예정인데 다음의 명령어로 손쉽게 설치가 가능하다.

go get -u cloud.google.com/go/storage

설치된 패키지를 사용하려면 아래와 같이 import 한다.

import "cloud.google.com/go/storage"

 

Authentication

내 Google Cloud 계정의 리소스를 아무나 API를 호출해서 생성하고 삭제하면 안되기 때문에

Client library 를 통해 API 호출을 하기 위해선 그 API를 호출할 수 있는 권한이 있다고 입증을 해야한다.

Authentication 방법은 크게 3가지인데

해당 API 호출 권한이 있는 role으로 service account를 생성하여 이용하거나

직접 secret key를 읽는 방법, 또는 oauth2 서비스를 사용하는 방법으로 가능 하다.

개인적으로 service account를 생성하고 Application Default Credential 기능을 이용하는 방법이 제일 간편한 것 같다. 

공식 Document에서 해당 방법을 권장한다.

Google cloud client library를 사용하는 어플리케이션 코드가 instance 위에서 실행 될경우 따로 authentication 부분을 구현하지 않아도 해당 compute engine instance의 service account 의 credential을 default로 사용한다.

만약 클라우드 리소스 위에서가 아니라 내 로컬 머신에서 구동하는 코드라면 환경변수 GOOGLE_APPLICATION_CREDENTIALS 에 service account secret key의 path를 지정해주면 된다.

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"

위와 같이 환경변수에 secret key path를 지정해주면 따로 코드에서 key를 읽는 부분이나 

oauth2 서비스 사용부분을 구현하지 않고도 client library를 통해 api 호출이 가능하다.

 

Example: Client Library로 cloud storage bucket 생성하기

다음과 같이 main.go 파일 생성

package main

import (
	"context"
	"fmt"
	"log"

	"cloud.google.com/go/storage"
)

func main() {
	ctx := context.Background()

	// Sets your Google Cloud Platform project ID.
	projectID := "terraform-reo"

	// Creates a client.
	client, err := storage.NewClient(ctx)
	if err != nil {
		log.Fatalf("Failed to create client: %v", err)
	}

	// Sets the name for the new bucket.
	bucketName := "terraform-reo-new-bucket-20190903"

	// Creates a Bucket instance.
	bucket := client.Bucket(bucketName)

	// Creates the new bucket.
	if err := bucket.Create(ctx, projectID, nil); err != nil {
		log.Fatalf("Failed to create bucket: %v", err)
	}

	fmt.Printf("Bucket %v created.\n", bucketName)
}

 

go run 명령어로 바로 실행 해보자.

 

Bucket 이 생성되었는지 GCP 콘솔로 확인해보자.

 

이처럼 Client library를 사용하여 코드를 통해 Cloud service api를 호출할 수 있다.

 

 

References

https://cloud.google.com/storage/docs/reference/libraries

https://cloud.google.com/docs/authentication/production#auth-cloud-explicit-go

댓글