Go - Chancho - 2によるダイナモ
今日、我々はあなたがダイナモと想像できる最も簡単なことをするつもりです.まず何かを入れて、それを取り出します.それはあまりにも簡単で、読む価値がないようですが、しばらくの間私と耐えてください.
シリーズの最初のエピソードでは、我々は正常に我々はDynamoDBと遊ぶつもりです環境を作成しました.あなたはこのエピソードのコードを見つけることができますepisode2 ディレクトリ.
データベースレイアウト
環境に行く準備ができて我々は問題解決を開始することができます.今日の私たちの問題は、順序に関する基本的な情報を保存して取得することです.orderには3つのプロパティがあります. データベースレイアウトを定義するために、私はCloudFormationを使用しています- AWSインフラストラクチャのためのアセンブリ言語.AWS CLIまたはAWSコンソールを使用して、異なるチャネルを介してDynamoDBテーブルを作成できます.私は、AWS曇り形成を選びました
Serverless Application Model(Sam)またはServerless Frameworkを使用してサーバーレスアプリケーションで動作する場合は、どのようにしてテーブルを定義するかがわかります.
見てみましょう.
項目はキーによって一意に識別されます.キー
なぜ
DynamoDBでは、キーの一部である属性のみを定義する必要があります.これはNOSQL世界です、そして、我々はアイテムの各々とすべての属性を指定する必要はありません.
いくつかのコードを既に見ましょう!
そこに行く.これが注文定義です.通知
ここで、DynamoDBに挿入する前にデータを準備する必要があります.
気づくべき一つは
SDK呼び出しからの最初の戻り値が無視されていることに注意してください.我々は、本当にそれをここで必要としません.我々がこの点で知りたいことだけは、我々がどんなエラーも得なかったということです.
DynamoDBから順番を得る
我々はアイテムを取得したいので、キーを提供する必要があります.これはSDKの面倒を見る場所です.キーを構築するのは少しオフに見えるが、それは何です.キーがここにあるものより複雑でありえるので、それは地図です.どのように定義
実行する必要がある最後のステップは、DynamoDBから得たものを何かに対して逆シリアル化していることです.
概要
今日行ったことを要約しましょう データベースレイアウトを定義しました. 私たちはStructをDynamoDB項目にマーシャリングしました. 私たちはアイテムをダイナモに入れました. 我々はダイナモからアイテムを得た. 私たちはアイテムをstructに戻しました. クローンを確認してくださいrepository そして、コードで遊ぶ.このエピソードに関連するコードはepisode2 倉庫のディレクトリ.
シリーズの最初のエピソードでは、我々は正常に我々はDynamoDBと遊ぶつもりです環境を作成しました.あなたはこのエピソードのコードを見つけることができますepisode2 ディレクトリ.
データベースレイアウト
環境に行く準備ができて我々は問題解決を開始することができます.今日の私たちの問題は、順序に関する基本的な情報を保存して取得することです.orderには3つのプロパティがあります.
id
- 文字列price
- 数is_shipped
- ブーリアンServerless Application Model(Sam)またはServerless Frameworkを使用してサーバーレスアプリケーションで動作する場合は、どのようにしてテーブルを定義するかがわかります.
見てみましょう.
AWSTemplateFormatVersion: "2010-09-09"
Resources:
OrdersTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
TableName: OrdersTable
まず最初に、テーブルはOrderstableと呼ばれます.次に、属性定義に注目しましょう.DynamoDBの属性は、項目内に格納されるフィールドまたはプロパティです.テンプレートでid
型文字列の属性.項目はキーによって一意に識別されます.キー
id
はハッシュキーで、パーティションキーとも呼ばれます.私はこの時点でキーの種類に飛び込むことはありません.今のところ、ハッシュキーは一意にDynamODBテーブルの項目を識別します.なぜ
price
and is_shipped
属性が定義されていません.DynamoDBでは、キーの一部である属性のみを定義する必要があります.これはNOSQL世界です、そして、我々はアイテムの各々とすべての属性を指定する必要はありません.
いくつかのコードを既に見ましょう!
そこに行く.これが注文定義です.通知
dynamodbav
struct tag指定した構造体フィールドをシリアル化する方法を指定します.ところで、DynamicBavのAVは属性値を表します.type Order struct {
ID string `dynamodbav:"id"`
Price int `dynamodbav:"price"`
IsShipped bool `dynamodbav:"is_shipped"`
}
ダイナモ接続接続の設定から始めましょう.func TestPutGet(t *testing.T) {
ctx := context.Background()
tableName := "OrdersTable"
db, cleanup := dynamo.SetupTable(t, ctx, tableName, "./template.yml")
defer cleanup()
呼び出しを延期することに注意してくださいcleanup
関数.このメソッドは、SetupTable
.ここで、DynamoDBに挿入する前にデータを準備する必要があります.
order := Order{ID: "12-34", Price: 22, IsShipped: false}
avs, err := dynamodbattribute.MarshalMap(order)
assert.NoError(t, err)
ありがとうdynamodbav
構造体タグOrder
, MarshalMap
関数は、構造体をDynamodbが理解する構造体にマーシャリングする方法を知っている.最後にDBに挿入する準備ができました._, err = db.PutItemWithContext(ctx, &dynamodb.PutItemInput{
TableName: aws.String(table),
Item: avs,
})
assert.NoError(t, err)
新しい項目を作成したり、古いキーを同じキーで置き換えるDynamoDB putitem操作を使用しています.最初のパラメータはcontext
を使用します.AWSへのすべての呼び出しのために、SDKはあなたに2つの機能を与えます.離れてPutItemWithContext
, またPutItem
関数.私がこれが生産でものをする方法であると感じるので、私は各々の呼び出しで文脈を使います、そして、それはSDKで働くとき、あなたのデフォルト選択でなければなりません.2番目の引数はdynamodb.PutItemInput
. SDKがサポートするAWSへのすべての呼び出しに対して、このパターンを期待することができます.APICallWithContext
- 呼び出す関数APICallInput
- 関数の引数APICallOutput
- 関数の戻り値table
を呼び出すaws.String
関数.これは多くの場所でSDKがタイプを受け入れるからですpointer to type
代わりにtype
そして、このラッパーはその転換を作ります.SDK呼び出しからの最初の戻り値が無視されていることに注意してください.我々は、本当にそれをここで必要としません.我々がこの点で知りたいことだけは、我々がどんなエラーも得なかったということです.
DynamoDBから順番を得る
out, err := db.GetItemWithContext(ctx, &dynamodb.GetItemInput{
Key: map[string]*dynamodb.AttributeValue{
"id": {
S: aws.String("12-34"),
},
},
TableName: aws.String(table),
})
assert.NoError(t, err)
ここの多くの部分は、同様です.があるAPICallWithContext
, and APICallInput
パターンIにマッチする要素は、前にあなたを示しました.TableName
入力のパラメータはまったく同じです.我々はアイテムを取得したいので、キーを提供する必要があります.これはSDKの面倒を見る場所です.キーを構築するのは少しオフに見えるが、それは何です.キーがここにあるものより複雑でありえるので、それは地図です.どのように定義
id
にtemplate.yml
? S字型の「S」.私たちは、DynamoDBと話すとき、キーでそれを指定する必要があります.実行する必要がある最後のステップは、DynamoDBから得たものを何かに対して逆シリアル化していることです.
var queried Order
err = dynamodbattribute.UnmarshalMap(out.Item, &queried)
assert.NoError(t, err)
assert.Equal(t, Order{ID: "12-34", Price: 22, IsShipped: false}, queried)
概要
今日行ったことを要約しましょう
Reference
この問題について(Go - Chancho - 2によるダイナモ), 我々は、より多くの情報をここで見つけました https://dev.to/jbszczepaniak/dynamodb-with-go-2-put-get-2gkdテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol