orenoblog

エンジニアになりたいExcel方眼紙erの物語

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

たいしてドキュメント読まずに使ってみた。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を作ります。

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

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