DynamoDBlocal에서 DynamoDB를 일단 만지기

12915 단어 5DynamoDBAWS


개요



DynamoDB는 AWS의 관리형 서비스 중 하나입니다.
DynamoDB는 개발을 위해 손 PC에서 작동할 수 있습니다.
이 기사에서는 다음 방법을 소개합니다.
  • DynamoDBLocal을 PC에 넣으십시오
  • aws-cli에서 DynamoDB로 작업하기
  • Go 언어로 DynamoDB 작업하기

  • DynamoDBLocal을 손 PC에 넣기



    다음 URL에서 DynamoDBLocal을 다운로드합니다.
    htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마 젠 dy 나도 db / ㅁ st / ゔ ぇぺぺ ぐ い / Dy 이나 DB ㄉ인가 l. HTML

    아카이브를 압축 해제한 후 다음 명령을 사용하여 DynamoDB 로컬을 시작합니다.
    $ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
    
    http://localhost:8000/shell/ 에 접속하면 Javascript로 조작할 수도 있습니다.

    aws-cli로 작업하기



    aws-cli로 조작할 때의 포인트는 다음과 같습니다.
  • --endpoint-urlhttp://localhost:8000 를 지정한다
  • 로컬에서도 --profile 또는 AWS_PROFILE 설정이 필요합니다

  • 테이블 만들기


    $ aws dynamodb create-table --table-name Persons \
       --attribute-definitions AttributeName=Id,AttributeType=N \
      --key-schema AttributeName=Id,KeyType=HASH \
      --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
      --endpoint-url http://localhost:8000
    

    테이블 목록 보기


    $ aws dynamodb list-tables --endpoint-url http://localhost:8000
    

    테이블에 데이터 삽입


    $ aws dynamodb put-item --table-name Persons --item '{"Id":{"N":"1"},"Name":{"S":"Jack"}}' --endpoint-url http://localhost:8000
    

    데이터 얻기


    $ aws dynamodb get-item --table-name Persons --key '{"Id":{"N":"1"}}' --endpoint-url http://localhost:8000
    

    데이터 스캔


    $ aws dynamodb scan --table-name Persons --endpoint-url http://localhost:8000
    

    Go 언어로 조작하기



    더미 Credentials를 준비하십시오.



    로컬 DynamoDB에 연결할 때도 Credential을 설정해야 하므로 다음과 같이 더미를 설정해 둡니다.
    # ~/.aws/credentials
    [dummy]
    aws_access_key_id = dummy
    aws_secret_access_key = dummy
    

    SDK 도입


    go get -u github.com/aws/aws-sdk-go
    

    일단 참조하는 코드



    aws-cli로 작성한 Persons 테이블로부터 데이터를 취득하는 코드입니다.
    // main.go
    package main
    
    import (
        "github.com/aws/aws-sdk-go/aws/session"
        "github.com/aws/aws-sdk-go/aws"
        "github.com/aws/aws-sdk-go/service/dynamodb"
        "fmt"
        "github.com/aws/aws-sdk-go/aws/credentials"
    )
    
    func main() {
        dynamoSession, err := session.NewSession(&aws.Config{
            Region: aws.String("ap-northeast-1"),
            Endpoint: aws.String("http://localhost:8000"),
            Credentials: credentials.NewStaticCredentials("dummy", "dummy", "dummy"),
        })
        if err != nil {
            panic(err)
        }
    
        db := dynamodb.New(dynamoSession)
    
        res, err := db.GetItem(&dynamodb.GetItemInput{
            TableName: aws.String("Persons"),
            Key: map[string]*dynamodb.AttributeValue{
                "Id": {
                    N: aws.String("1"),
                },
            },
            AttributesToGet: []*string{
                aws.String("Name"),
            },
            ConsistentRead: aws.Bool(true),
            ReturnConsumedCapacity: aws.String("NONE"),
        })
    
        if err != nil {
            panic(err)
        }
    
        fmt.Println(*res.Item["Name"])
    }
    

    guregu/dynamo 사용



    ORM과 같습니다.
    json 모듈처럼 구조체에 매핑합니다.
    $ go get github.com/guregu/dynamo
    
    // main.go
    package main
    
    import (
        "github.com/aws/aws-sdk-go/aws/session"
        "github.com/aws/aws-sdk-go/aws"
        "github.com/aws/aws-sdk-go/aws/credentials"
        "github.com/guregu/dynamo"
    )
    
    type Person struct {
        ID int `dynamo:"Id"`
        Name string `dynamo:"Name"`
    }
    
    func main() {
        dynamoSession, err := session.NewSession(&aws.Config{
            Region: aws.String("ap-northeast-1"),
            Endpoint: aws.String("http://localhost:8000"),
            Credentials: credentials.NewStaticCredentials("dummy", "dummy", "dummy"),
        })
        if err != nil {
            panic(err)
        }
    
        db := dynamo.New(dynamoSession)
        table := db.Table("Persons")
    
        var ret Person
        err = table.Get("Id", 1).One(&ret)
        if err != nil {
            panic(err)
        }
    
        println(ret.Name)
    }
    

    좋은 웹페이지 즐겨찾기