LoginSignup
7
3

More than 5 years have passed since last update.

MacにAWS DynamoDB localを入れてRails runnerからアクセスしてみる

Posted at

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>>

無事表示された。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3