【Golang+Lambda+CloudWatch】에서 Dynamodb에 데이터 삽입을 정기 실행
전제조건(환경)
2019년 12월 31일에 시도했습니다.
Go 1.12.9
절차
1.DynamoDB로 테이블 만들기
입력하는 항목은 3개!
품목
입력한 내용
테이블 이름
음악
파티션 키
Artist
정렬 키
송타이틀
파티션 키란?
우선 파티션이란, 하드 디스크내의 단락지어진 영역을 말한다.
그리고 Dynamodb의 데이터는 여러 파티션에 분산되어 저장되므로 어떤 파티션에 있는지 구별하기 위해 키가 필요합니다.
정렬 키란?
같은 파티션에서 데이터를 재배열하는 데 사용하는 키.
※테이블 작성은, 공식 튜토리얼 가 알기 쉬웠습니다.
2. Lambda에서 움직이는 함수를 Go로 작성
라이브러리 설치
크게 나누어 두 개의 라이브러리를 사용합니다.
· 공식 aws-sdk-go
· guregu/dynamo
※Dynamodb의 데이터 조작은, aws-sdk-go
하지만 할 수 있지만, guregu/dynamo
쪽이 사용하기 쉬운 것 같습니다.
소스 코드
hello.gopackage main
import (
"log"
"math/rand"
"strconv"
"time"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/guregu/dynamo"
)
type Music struct {
Artist string `dynamo:"Artist"` //パーティションキー
SongTitle string `dynamo:"SongTitle"` //ソートキー
}
func hello() {
// 大きな流れ:認証情報(IAMで取得)→セッション→dynamoDB
creds := credentials.NewStaticCredentials("AWS_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY", "") //第3引数はtoken
sess, _ := session.NewSession(&aws.Config{
Credentials: creds,
Region: aws.String("ap-northeast-1")},
)
db := dynamo.New(sess)
table := db.Table("Music") //テーブル名
// 入れるデータ
rand.Seed(time.Now().UnixNano())
songTitle := "バレない程度にパクったメロディ~パート" + strconv.Itoa(rand.Intn(1000))
music := Music{Artist: "イケメン風の人", SongTitle: songTitle}
log.Println(music)
// データ挿入
if err := table.Put(music).Run(); err != nil {
log.Println(err.Error())
} else {
log.Println("成功!")
}
}
func main() {
// ラムダ実行
lambda.Start(hello)
// ローカルでテストする用
// hello()
}
빌드 (크로스 컴파일)하여 zip 파일로 만듭니다.
Lambda에서 실행하려면 일반적으로 go build하는 대신 Linux에서도 작동하도록 크로스 컴파일 설정을 추가해야합니다.
$ GOOS=linux GOARCH=amd64 go build -o hello
$ zip handler.zip ./hello
3.Lambda 함수 만들기
Lambda 콘솔에서 "함수 만들기"
라이브러리 설치
크게 나누어 두 개의 라이브러리를 사용합니다.
· 공식
aws-sdk-go
· guregu/dynamo
※Dynamodb의 데이터 조작은,
aws-sdk-go
하지만 할 수 있지만, guregu/dynamo
쪽이 사용하기 쉬운 것 같습니다.소스 코드
hello.go
package main
import (
"log"
"math/rand"
"strconv"
"time"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/guregu/dynamo"
)
type Music struct {
Artist string `dynamo:"Artist"` //パーティションキー
SongTitle string `dynamo:"SongTitle"` //ソートキー
}
func hello() {
// 大きな流れ:認証情報(IAMで取得)→セッション→dynamoDB
creds := credentials.NewStaticCredentials("AWS_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY", "") //第3引数はtoken
sess, _ := session.NewSession(&aws.Config{
Credentials: creds,
Region: aws.String("ap-northeast-1")},
)
db := dynamo.New(sess)
table := db.Table("Music") //テーブル名
// 入れるデータ
rand.Seed(time.Now().UnixNano())
songTitle := "バレない程度にパクったメロディ~パート" + strconv.Itoa(rand.Intn(1000))
music := Music{Artist: "イケメン風の人", SongTitle: songTitle}
log.Println(music)
// データ挿入
if err := table.Put(music).Run(); err != nil {
log.Println(err.Error())
} else {
log.Println("成功!")
}
}
func main() {
// ラムダ実行
lambda.Start(hello)
// ローカルでテストする用
// hello()
}
빌드 (크로스 컴파일)하여 zip 파일로 만듭니다.
Lambda에서 실행하려면 일반적으로 go build하는 대신 Linux에서도 작동하도록 크로스 컴파일 설정을 추가해야합니다.
$ GOOS=linux GOARCH=amd64 go build -o hello
$ zip handler.zip ./hello
3.Lambda 함수 만들기
Lambda 콘솔에서 "함수 만들기"
4. Lambda 함수의 트리거로 CloudWatch Events 설정
Lambda 콘솔에서 "트리거 추가"
설정 항목
설정한 내용
트리거
CloudWatch 이벤트
규칙
새 규칙 만들기
규칙 유형
스케줄 표현
스케줄 표현
rate(5 minutes)
시험에 5 분마다 정기 실행하도록 설정
동작 결과
15분 후
참고로 한 기사
파티션(영어: partition)이란?
DynamoDB의 키 인덱스에 대해 정리해 보았습니다.
AWS Lambda에서 Go를 사용할 수 있기 때문에 시도했습니다.
편하게 DynamoDB를 사용합시다.
Reference
이 문제에 관하여(【Golang+Lambda+CloudWatch】에서 Dynamodb에 데이터 삽입을 정기 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masataka715/items/263635ebd2c8b5472627텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)