share facebook facebook2 twitter menu hatena pocket slack

2014.04.10 THU

読まずに食べるSQSとDynamoDB 作成編

岸上 健太郎

WRITTEN BY岸上 健太郎

cloudpack の がみさんです。

たいしてドキュメント読まずに使ってみた。LANG=ja坊にはつらい。

CLI縛りしたら思った以上に時間がかかった。訓練なので早く慣れてドヤ顔したいです。

VPC内のEC2を使ってSQSとDynamoDBを操作するのが目的です。

SQS作成

まず何も考えずキュー名だけ指定して作成します


orenomac$ aws sqs create-queue --queue-name myque
{
"QueueUrl": "https://ap-northeast-1.queue.amazonaws.com/075069182505/myque"
}

キューにデータ送信のテスト


orenomac$ aws sqs send-message --queue-url https://ap-northeast-1.queue.amazonaws.com/075069182505/myque --message-body "hello"
{
"MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592",
"MessageId": "9b75a443-9634-44b3-b256-61fecd9b5b95"
}

受信テスト


orenomac$ aws sqs receive-message --queue-url https://ap-northeast-1.queue.amazonaws.com/075069182505/myque
{
"Messages": [
{
"Body": "hello",
"ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xZcjweCMUMv59bttg4XRtlIsl9M5ZYp/nYOcfC58iNk2MMznJT7H9EQmrLllzyQfgmma8jvyDOjbU0rni/x/6spEg+SgsYeQXRbbyVTo/Q1jvZiEthtihOcf78S+i5Ww1oMRYu3qSynS0lgTUvqGM+apOBrYWftrdOxOc09XT96JvcGh6jTO1OwywUprvYpLR8bBXGxXvBdx0i03TskBNoa6XEe4XPPql8iwCgyi4udrjtjvY9pWnYiR3HSc4MtBJp6tEwVjc/Bc++lvngkb9qh/0uwAmNbeHQ==",
"MD5OfBody": "5d41402abc4b2a76b9719d911017c592",
"MessageId": "9b75a443-9634-44b3-b256-61fecd9b5b95"
}
]
}

DynamoDB作成

カラム名 KeySchema
DataA String HASH
DataB String RANGE

orenomac$ aws dynamodb create-table --table-name test
--attribute-definitions AttributeName=DataA,AttributeType=S AttributeName=DataB,AttributeType=S
--key-schema AttributeName=DataA,KeyType=HASH AttributeName=DataB,KeyType=RANGE
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "DataA",
"AttributeType": "S"
},
{
"AttributeName": "DataB",
"AttributeType": "S"
}
],
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"WriteCapacityUnits": 1,
"ReadCapacityUnits": 1
},
"TableSizeBytes": 0,
"TableName": "test",
"TableStatus": "CREATING",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "DataA"
},
{
"KeyType": "RANGE",
"AttributeName": "DataB"
}
],
"ItemCount": 0,
"CreationDateTime": 1396884278.079
}
}

テストデータのPut


orenomac$ aws dynamodb put-item --table-name test --item
> '{
quote> "DataA": {"S": "hello"},
quote> "DataB": {"S": "Dynamo"}
quote> }'

テストデータのget


orenomac$ aws dynamodb get-item --table-name test --key '{"DataA": {"S":"hello"},"DataB": {"S": "Dynamo"}}'
{
"Item": {
"DataA": {
"S": "hello"
},
"DataB": {
"S": "Dynamo"
}
}
}

VPC作成

サブネット一つのVPCを作ります。


orenomac$ aws cloudformation create-stack --stack-name MyVPC --template-body file://01_vpc.json
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:075069182505:stack/MyVPC/45267420-be61-11e3-8444-5088487ec896"
}

IAM Roleの作成

複数のIAM Roleを一つのEC2へ割り当てることはできません。

DynamoDBとSQSのリソースを全て利用できるIAM Roleを作成します。

dynamo_sqs-role.json


{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:*",
"sqs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}

エラーが出た。プリンシパルが必要?…(‘A`)


orenomac$ aws iam create-role --role-name dynamo_sqs-role --assume-role-policy-document file://dynamo_sqs-role.json

A client error (MalformedPolicyDocument) occurred when calling the CreateRole operation: AssumeRole policy must contain principals.

諦めてコンソールから上記IAM Roleを作成しました。

EC2起動

EC2の異名を持ちSQSとDynamoDBを自在に操る高貴なるCentOSを起動します。

まだ

今度も続く。

*以下調べなきゃいけない所

AWSサービス やること
SQS SQS操作するときのIAMアクセス権限
SQS SQS Permission
SQS Dead Letter Queue機能
SQS CloudWatchで取得できるメトリクス
DynamoDB DynamoるときのIAMアクセス権限
DynamoDB アクセス権限
DynamoDB バックアップ・リストア
DynamoDB CloudWatch

(続く続くと書いてるが続き書けてないネタが多い…)

こちらの記事はなかの人(がみさん)監修のもと掲載しています。
元記事は、こちら

岸上 健太郎

岸上 健太郎

頑張るぞ!