だらだら〜個人事業〜

HatenaDiaryから引っ越してきました。Githubもnyakagawanです。

ScalaでDynamoDBLocal

会社に行ってちょっと重要なプログラム修正をしようと思ってたけど気づいたらこんな時間。ウソ、面倒臭くなって引きこもり。まぁ休日出勤なんてやらんほうがええはずや。

ということで暇なのでScalaのお勉強でも。題材としてはDynamoDBLocalでDynamoDBの基本的な操作をScalaでやってみようかなーと。ちなみに自分は下記のような状態。

  • Javaのことほとんどよくわからない
  • AWS、DynamoDBは業務で使ってる。けどPHP
  • ScalaはFizzBazzぐらい書けるけど、もうほとんど覚えてないしWebのプログラムは組んだことない。

記事最後の参考サイトを読みながらやれば何とかできる感じ。途中よくわからなくなってニコ動でGTA5のおもしろ動画を見ながらたらたらやってたらできた!
自分はJavaが全然わからないので、まずどうやったらJavaScala)プログラムを実行できるのか分からなかった。あと、sbtって何?って状態。
まぁ結局はクラスメソッドさんの記事の通りのフォルダ構成、フォルダ内容にしてsbtでrunをしたら動いた。…とくに何かビルド設定したわけじゃないし、フォルダ構成とかが大事なのかな?

ソースコード

きったねーのはわかってる。クラスメソッドさんのDynamoDBサンプルでビルドエラーになったところ(KeyScheme近辺)をちょっと変えて、あとDynamoDBLocalようにEndpointの設定をやっている

import com.amazonaws._
import com.amazonaws.auth._
import scala.collection.JavaConversions._

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.model._;

object EC2Main extends App {
 
  val accessKey = "accesskey"
  val secretKey = "secretkey"
  val credentials = new BasicAWSCredentials(accessKey,secretKey)
 
  //クライアント作成
  val cli = new AmazonDynamoDBClient(credentials)
  //val usWest2 = Region.getRegion(Regions.US_WEST_2);
  //cli.setRegion(usWest2);
  cli.setEndpoint("http://localhost:18000")

  //テーブル定義
  val tableName = "MyUser"
  val createTableRequest = new CreateTableRequest()
    .withTableName(tableName)
    .withKeySchema(
      new KeySchemaElement().withAttributeName("id").withKeyType(KeyType.HASH)
    )
    .withAttributeDefinitions(
      new AttributeDefinition().withAttributeName("id").withAttributeType(ScalarAttributeType.S)
    )
    .withProvisionedThroughput(
      new ProvisionedThroughput().withReadCapacityUnits(10L).withWriteCapacityUnits(10L)
    )
   
  val createdTableDescription = cli.createTable(createTableRequest).getTableDescription()
  println("Created Table: " + createdTableDescription)


  val describeTableRequest = new DescribeTableRequest().withTableName(tableName)
  val tableDescription = cli.describeTable(describeTableRequest).getTable()
  println("Table Description: " + tableDescription)
}