Go로 구현하여 Google Cloud Functions에서 Firestore로 데이터 추가
본 기사의 내용
Google Cloud Functions를 Go로 구현하여 HTTP 요청을 받고 Firestore에 데이터를 추가하는 방법을 알아보세요.
개발 환경
$ sudo gcloud components update && gcloud components install beta
사전 준비
네이티브 모드 선택
GCP에서는 Firestore를 사용할 때 동일한 프로젝트 내에서 Datastore 모드와 네이티브 모드를 선택할 수 있습니다.
Datastore와 호환성을 제공하는 형태의 Firestore 또는 새로운 형태의 Firestore 중 하나입니다.
자세한 내용은 여기을 확인하십시오.
본 기사에서는 네이티브 모드를 선택한 경우의 해설을 해 나갈 것입니다.
구현 및 배포
Function 프로그램 구현
Functions로 동작시키는 프로그램을 작성해 갑니다.
POST 요청이 전송되었을 때 "name"매개 변수를 검색하여 Firestore로 출력합니다.
GCP에서 제공하는 "cloud.google.com/go/firestore"
라이브러리를 사용하여 Firestore로 출력합니다. 요청 매개 변수 외에도 현재 시간을 부여합니다.
FunctionsToFirestore.gopackage functions
import (
"context"
"fmt"
"log"
"net/http"
"os"
"time"
//Firestoreの操作に必要なライブ
"cloud.google.com/go/firestore"
)
//Firestoreにデータを追加するための構造体、タグで変数とキーを紐づける
type Data struct {
Name string `firestore:"NAME"`
Datetime time.Time `firestore:"DATETIME"`
}
//HTTPトリガーで実行される
func FunctionsToFirestore(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodPost: //POSTの場合
//パラメータの"name"から値を取り出す
name := r.PostFormValue("name")
//取り出せない場合はエラーとして処理を終了する
if name == "" {
fmt.Fprint(w, "パラメータに\"name\"がありません。\r\n")
return
}
//Firestoreへ出力する関数を呼び出す
CreateFirestore(name)
default: //POST以外の場合はエラー
http.Error(w, "405 - Method Not Allowed", http.StatusMethodNotAllowed)
}
}
func CreateFirestore(name string) {
//流し込むデータを構造へ格納する
data := Data{}
data.Name = name
data.Datetime = time.Now()
//コンテキストを取得する
ctx := context.Background()
//プロジェクトIDを取得する
projectID := os.Getenv("GCP_PROJECT")
//Firestoreを操作するクライアントを作成する、エラーの場合はLoggingへ出力する
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
log.Printf("Firestore接続エラー Error:%T message: %v", err, err)
return
}
//確実にクライアントを閉じるようにする
defer client.Close()
//現在時刻を構造体へ格納する
data.Datetime = time.Now()
//Firestoreの追加を行う、エラーの場合はLoggingへ出力する
_, _, err = client.Collection("NAMES").Add(ctx, data)
if err != nil {
log.Printf("データ書き込みエラー Error:%T message: %v", err, err)
return
}
}
모듈 준비
그런 다음 go.mod를 준비합니다. "cloud.google.com/go/firestore"
를 사용하고 있으므로 필요한 라이브러리에 추가합니다. 버전은 0.36.0 1을 지정합니다.
go.modmodule functions
go 1.11
require cloud.google.com/go v0.36.0
배포
프로그램 준비가 되면 배포를 합니다.gcloud functions deploy
명령을 실행하면 약 3분 내에 배포가 완료됩니다.
$ gcloud functions deploy FunctionsToFirestore --runtime go111 --trigger-http
(略)
status: ACTIVE
timeout: 60s
(略)
테스트
curl
에서 실제로 GET 요청을 보냅니다. 요청을 보내는 엔드포인트는 배포했을 때의 로그에 나와 있으므로 찾습니다.
$ curl https://us-central1-YOUR_PROJECT.cloudfunctions.net/FunctionsToFirestore -X POST -d "name=aaaa"
그런 다음 웹 콘솔에서 데이터가 추가되었는지 확인합니다. WEB 콘솔 메뉴에서 Firestore를 선택합니다. 최상위의 "NAMES"
라는 컬렉션이 완성되고 있어 그 안에 독특한 ID로 컬렉션이 만들어지고 있습니다. 안의 필드에 POST로 보낸 파라미터와 실행 시간이 들어 있으면 테스트 완료입니다.
마지막으로
쉽게 Firestore에 쓸 REST API를 만들 수있었습니다. Firestore는 비교적 새로운 기능이기 때문인가 gcloud
커멘드로 스토어 되고 있는 내용을 확인할 수 없습니다. 향후의 기능의 충실에 기대입니다.
2019/4/14의 기술 서전 6에 "Goで学ぶGoogleCloudFunctions"
라는 책을 배포합니다. 흥미있는 사람은 꼭 부디 일어 주세요. 서클 사이트는 여기입니다.
2019/4/1 현재 0.37.1이 최신입니다. Go1.12가 필요하기 때문에 Google Cloud Functions에서는 작동하지 않습니다. ↩
Reference
이 문제에 관하여(Go로 구현하여 Google Cloud Functions에서 Firestore로 데이터 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shuichiro/items/ba9d6989cffcddf4b8b9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Function 프로그램 구현
Functions로 동작시키는 프로그램을 작성해 갑니다.
POST 요청이 전송되었을 때 "name"매개 변수를 검색하여 Firestore로 출력합니다.
GCP에서 제공하는
"cloud.google.com/go/firestore"
라이브러리를 사용하여 Firestore로 출력합니다. 요청 매개 변수 외에도 현재 시간을 부여합니다.FunctionsToFirestore.go
package functions
import (
"context"
"fmt"
"log"
"net/http"
"os"
"time"
//Firestoreの操作に必要なライブ
"cloud.google.com/go/firestore"
)
//Firestoreにデータを追加するための構造体、タグで変数とキーを紐づける
type Data struct {
Name string `firestore:"NAME"`
Datetime time.Time `firestore:"DATETIME"`
}
//HTTPトリガーで実行される
func FunctionsToFirestore(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodPost: //POSTの場合
//パラメータの"name"から値を取り出す
name := r.PostFormValue("name")
//取り出せない場合はエラーとして処理を終了する
if name == "" {
fmt.Fprint(w, "パラメータに\"name\"がありません。\r\n")
return
}
//Firestoreへ出力する関数を呼び出す
CreateFirestore(name)
default: //POST以外の場合はエラー
http.Error(w, "405 - Method Not Allowed", http.StatusMethodNotAllowed)
}
}
func CreateFirestore(name string) {
//流し込むデータを構造へ格納する
data := Data{}
data.Name = name
data.Datetime = time.Now()
//コンテキストを取得する
ctx := context.Background()
//プロジェクトIDを取得する
projectID := os.Getenv("GCP_PROJECT")
//Firestoreを操作するクライアントを作成する、エラーの場合はLoggingへ出力する
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
log.Printf("Firestore接続エラー Error:%T message: %v", err, err)
return
}
//確実にクライアントを閉じるようにする
defer client.Close()
//現在時刻を構造体へ格納する
data.Datetime = time.Now()
//Firestoreの追加を行う、エラーの場合はLoggingへ出力する
_, _, err = client.Collection("NAMES").Add(ctx, data)
if err != nil {
log.Printf("データ書き込みエラー Error:%T message: %v", err, err)
return
}
}
모듈 준비
그런 다음 go.mod를 준비합니다.
"cloud.google.com/go/firestore"
를 사용하고 있으므로 필요한 라이브러리에 추가합니다. 버전은 0.36.0 1을 지정합니다.go.mod
module functions
go 1.11
require cloud.google.com/go v0.36.0
배포
프로그램 준비가 되면 배포를 합니다.
gcloud functions deploy
명령을 실행하면 약 3분 내에 배포가 완료됩니다.$ gcloud functions deploy FunctionsToFirestore --runtime go111 --trigger-http
(略)
status: ACTIVE
timeout: 60s
(略)
테스트
curl
에서 실제로 GET 요청을 보냅니다. 요청을 보내는 엔드포인트는 배포했을 때의 로그에 나와 있으므로 찾습니다.
$ curl https://us-central1-YOUR_PROJECT.cloudfunctions.net/FunctionsToFirestore -X POST -d "name=aaaa"
그런 다음 웹 콘솔에서 데이터가 추가되었는지 확인합니다. WEB 콘솔 메뉴에서 Firestore를 선택합니다. 최상위의 "NAMES"
라는 컬렉션이 완성되고 있어 그 안에 독특한 ID로 컬렉션이 만들어지고 있습니다. 안의 필드에 POST로 보낸 파라미터와 실행 시간이 들어 있으면 테스트 완료입니다.
마지막으로
쉽게 Firestore에 쓸 REST API를 만들 수있었습니다. Firestore는 비교적 새로운 기능이기 때문인가 gcloud
커멘드로 스토어 되고 있는 내용을 확인할 수 없습니다. 향후의 기능의 충실에 기대입니다.
2019/4/14의 기술 서전 6에 "Goで学ぶGoogleCloudFunctions"
라는 책을 배포합니다. 흥미있는 사람은 꼭 부디 일어 주세요. 서클 사이트는 여기입니다.
2019/4/1 현재 0.37.1이 최신입니다. Go1.12가 필요하기 때문에 Google Cloud Functions에서는 작동하지 않습니다. ↩
Reference
이 문제에 관하여(Go로 구현하여 Google Cloud Functions에서 Firestore로 데이터 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shuichiro/items/ba9d6989cffcddf4b8b9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ curl https://us-central1-YOUR_PROJECT.cloudfunctions.net/FunctionsToFirestore -X POST -d "name=aaaa"
쉽게 Firestore에 쓸 REST API를 만들 수있었습니다. Firestore는 비교적 새로운 기능이기 때문인가
gcloud
커멘드로 스토어 되고 있는 내용을 확인할 수 없습니다. 향후의 기능의 충실에 기대입니다.2019/4/14의 기술 서전 6에
"Goで学ぶGoogleCloudFunctions"
라는 책을 배포합니다. 흥미있는 사람은 꼭 부디 일어 주세요. 서클 사이트는 여기입니다.2019/4/1 현재 0.37.1이 최신입니다. Go1.12가 필요하기 때문에 Google Cloud Functions에서는 작동하지 않습니다. ↩
Reference
이 문제에 관하여(Go로 구현하여 Google Cloud Functions에서 Firestore로 데이터 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shuichiro/items/ba9d6989cffcddf4b8b9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)