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

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

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

岸上 健太郎

岸上 健太郎

頑張るぞ!

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。