DynamoDBがローカルで実行できるらしいので開発用に試してみた。
ダウンロード・展開
wget http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest.zip #ダウンロード
unzip dynamodb_local_latest.zip #展開
起動
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb #デフォルトだとPort8000で起動
接続
# aws cliがインストールされていれば、endpointを指定するだけで使える
local$ aws dynamodb list-tables --endpoint-url http://localhost:8000
{
"TableNames": [
"test"
]
}
Railsから使う
runnerでやってみた。
※Rails 4.2.6
Gemfile
#SDKをGemで追加
gem 'aws-sdk'
lib/tasks/dynamo.rb
gem 'aws-sdk-core'
class Tasks::Dynamo
def self.execute
dynamo = Aws::DynamoDB::Client.new(
endpoint: 'http://localhost:8000' #ローカルに対して
)
options = {
table_name: "products",
attribute_definitions: [
{
attribute_name: "product_code",
attribute_type: "S"
}
],
key_schema: [
{
attribute_name: "product_code",
key_type: "HASH"
}
],
provisioned_throughput: {
read_capacity_units: 1,
write_capacity_units: 1
}
}
dynamo.create_table(options) #Table作成
p dynamo.describe_table({table_name: "products"}) #テーブル情報取得
end
end
local$ rails runner "Tasks::Dynamo.execute"
Running via Spring preloader in process 6438
#<struct Aws::DynamoDB::Types::DescribeTableOutput table=#<struct Aws::DynamoDB::Types::TableDescription attribute_definitions=[#<struct Aws::DynamoDB::Types::AttributeDefinition attribute_name="product_code", attribute_type="S">], table_name="products", key_schema=[#<struct Aws::DynamoDB::Types::KeySchemaElement attribute_name="product_code", key_type="HASH">], table_status="ACTIVE", creation_date_time=2016-10-31 08:20:37 +0000, provisioned_throughput=#<struct Aws::DynamoDB::Types::ProvisionedThroughputDescription last_increase_date_time=1970-01-01 00:00:00 +0000, last_decrease_date_time=1970-01-01 00:00:00 +0000, number_of_decreases_today=0, read_capacity_units=1, write_capacity_units=1>, table_size_bytes=0, item_count=0, table_arn="arn:aws:dynamodb:ddblocal:000000000000:table/products", local_secondary_indexes=nil, global_secondary_indexes=nil, stream_specification=nil, latest_stream_label=nil, latest_stream_arn=nil>>
無事表示された。