0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS SAMでサーバーレスアプリケーション!その2(DynamoDB)

Posted at

#前回の続き
前回の記事(https://qiita.com/futo_creid/items/82a4c25ccb7a55f6c514)で
SAMを使用して、ローカルで簡単なWEBAPIを作成しました。
ただこれだと、決まった結果しか返すことしかできないので、DBからデータを持ってきたいと思います。
なので今回はDB構築したいと思います。
構築するDBはサーバーレスアプリケーションでよくセットで使われるDynamoDBです。


#1:実施環境
・Windows10 Home
・Docker Toolbox OR Docker for Windows
・Python
・AWS SAM CLI


#2:構成
DynamoDB local


#3:環境準備

##1.APIGATEWAY&Lambda
前回の記事(https://qiita.com/futo_creid/items/82a4c25ccb7a55f6c514)
参照です。

以下の作業は

C:\Users\ユーザ名\samtest

フォルダ内で実施します。(ユーザ名はログインユーザ名で)

##2.AWS設定
以下を実施し、AWSの初期設定を行います。
ローカルでの実施なので適当な値です。(東京リージョンにはしていますが)

aws configure
AWS Access Key ID [None]: ZipID
AWS Secret Access Key [None]: ZipSecret
Default region name [None]: ap-northeast-1
Default output format [None]: json

#4:実装
DynamoDBを構築していきます!

##1.コンテナ作成

PowerShellを開きます。
以下を実行して、DynamoDBを落としてきます。

docker pull amazon/dynamodb-local

以下を実行して、ネットワークを作成します。

docker network create api-network

以下を実行して、Dockerのコンテナを作成します。

docker run --network api-network --name dynamodb -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
docker run --network api-network --name dynamodb -d -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -inMemory -sharedDb

実行して以下の表示が出たら作成が終わっているので、ctrl+cで実行から離脱します。
image.png

###・DynamoDBを起動する
再起動など、一度コンテナを停止した場合は以下でDynamoDBを起動します。

docker start dynamodb

##2.テーブル作成
http://192.168.99.100:8000/shell/
にアクセスするとDynamoDBを操作できる画面が表示されます。
image.png

そこで1行目から以下を入力します。

var params = {
    TableName: 'ZipData',
    KeySchema: [ // The type of of schema.  Must start with a HASH type, with an optional second RANGE.
        { // Required HASH type attribute
            AttributeName: 'Zip',
            KeyType: 'HASH',
        }
    ],
    AttributeDefinitions: [ // The names and types of all primary and index key attributes only
        {
            AttributeName: 'Zip',
            AttributeType: 'S', // (S | N | B) for string, number, binary
        }
    ],
    ProvisionedThroughput: { // required provisioned throughput for the table
        ReadCapacityUnits: 1, 
        WriteCapacityUnits: 1, 
    },
};
dynamodb.createTable(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});

入力したら画面内の以下の▶のボタンを押下します。
image.png

すると画面右側にこんな画面が表示され、テーブルの作成が完了します!
image.png

##3.データ追加
次は以下のコマンドを入力してデータを作成します。

var params = {
    TableName: 'ZipData',
    Item: {
        Zip: '1000006',
        Data: '東京都千代田区有楽町',
    },
	ReturnValues: 'NONE', // optional (NONE | ALL_OLD)
    ReturnConsumedCapacity: 'NONE', // optional (NONE | TOTAL | INDEXES)
    ReturnItemCollectionMetrics: 'NONE', // optional (NONE | SIZE)
};
docClient.put(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});

##4.データ参照
データが追加されているはずなので、以下のコマンドで確認します。

var params = {
    TableName: 'ZipData',
};
docClient.scan(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});

以下のような結果が返ってくるはずです。
image.png

また、これだとデータすべてが返ってきてしまうので、
単体を指定する場合は以下を実行します。

var params = {
    TableName: 'ZipData',
    Key:{
         Zip: '1000006'
    }
};
docClient.get(params, function(err, data){
    if(err){
        console.log(err);
    }else{
        console.log(data.Item.Data);
    }
});

以下の結果が返ってきます。
image.png

##終わりに
今回でDynamoDBがローカルに構築でき、また、データが操作できるようになりました。
次回はAPIからこのデータを操作したいと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?