Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード Twitter

2017-06-25

AWS Simple Notification Service (SNS) を使ってみる

  • トピックを作成する
$ aws sns create-topic --name topic1
{
    "TopicArn": "arn:aws:sns:ap-northeast-1:<ユーザーID>:topic1"
}
  • トピックをリスト表示する
$ aws sns list-topics
{
    "Topics": [
 (中略)
       {
            "TopicArn": "arn:aws:sns:ap-northeast-1:<ユーザーID>:topic1"
        }
    ]
}
  • S3にファイルアップロードされたらメール通知されるよう設定する
$ aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-1:<ユーザーID>:topic1 --protocol email --notification-endpoint ******@gmail.com
{
    "SubscriptionArn": "pending confirmation"
}
  • トピックにメッセージを送る。
$ aws sns publish --topic-arn arn:aws:sns:ap-northeast-1:<ユーザーID>:topic1 --message "hello" 
{
    "MessageId": "76ef3606-809d-5182-b684-67cfe594e762"
}

参考

Amazon Simple Queue Service (SQS) を使ってみる (2)

  • Dead Letter キューを作成する
$ cat sqs-dlq.json
{
  "DelaySeconds":"10",
  "MessageRetentionPeriod":"1209600",
  "ReceiveMessageWaitTimeSeconds":"20",
  "VisibilityTimeout":"30"
}
$ aws sqs create-queue --queue-name DeadLetterQueue1 --attributes file://sqs-dlq.json 
{
    "QueueUrl": "https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/DeadLetterQueue1"
}
  • Dead Letter キューの ARN を確認する
$ aws sqs get-queue-attributes --attribute-names QueueArn --queue-url https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/DeadLetterQueue1
{
    "Attributes": {
        "QueueArn": "arn:aws:sqs:ap-northeast-1:<ユーザーID>:DeadLetterQueue1"
    }
}
  • キューを作成する
$ cat sqs-queue.json
{
  "DelaySeconds":"10",
  "MessageRetentionPeriod":"1209600",
  "ReceiveMessageWaitTimeSeconds":"20",
  "VisibilityTimeout":"30",
  "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:ap-northeast-1:<ユーザーID>:DeadLetterQueue1\",\"maxReceiveCount\":\"1000\"}"
}
$ aws sqs create-queue --queue-name Queue1 --attributes file://sqs-queue.json
{
    "QueueUrl": "https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/Queue1"
}
  • メッセージを 1000 件登録する。
$ for i in {1..1000}
do
aws sqs send-message --queue-url "https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/Queue1"  --message-body "Test Message $i"
done > sqs_send1000.log
  • メッセージ数を確認する。
$ aws sqs  get-queue-attributes --attribute-names ApproximateNumberOfMessages --queue-url https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/Queue1
{
    "Attributes": {
        "ApproximateNumberOfMessages": "1000"
    }
}
  • メッセージを受信する。
$ aws sqs receive-message --max-number-of-messages 10 --queue-url https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/Queue1 --visibility-timeout 60 --wait-time-seconds 20

{
    "Messages": [
        {
            "Body": "Test Message 33",
            "ReceiptHandle": "AQEBtIprTOVjUxOU06ebxCxVW3eWJ1QLlhAcptnne1OfyiH0Oh7dikEJ0cJgRAoFg1MrUUMGGbD93AZHozrW6lW5kLUfb83VT82u/kBL5aEyxVPTee/m5Y58a+4fgsd2b2igXTGCoGJGqsROODKB7hKwmza4s9jmrlMRCZqBdrlMywVO4WYkHuyiiKT4myvYkLaztx1vszRl/YtEejb0ZzVq96045zpGojTMF7UvGlpXdm4WbCbFdgAoCXi8zw2b/e/SkAjxB/iZyXzP2PSrlMoMDFQ2pEaW5f0HL2yvUGxJTrH2fbqcceRqE6O65UHHnwZOavVZHQimDj2osu1Loom043JLNNYXCTsPL/vfdPkhilpQRXRaSUnAHquzk1vL5RlI4Zr8+Da4kBHIcUHmpOZyjQ==",
            "MD5OfBody": "5ba0f9d4c06aeabf176b026ea0bd2301",
            "MessageId": "2572874c-2459-47b8-b81e-1c79211563b4"
        },

(中略)

        {
            "Body": "Test Message 96",
            "ReceiptHandle": "AQEBHWroUeQWg5Sm7Civr7YB3/jl1JYtF+AXIaUSVqJd8wWfkOgeBbzYNOl7rU+RbtTYqejVRdRvvmtN8WFF2pSw+c7khfG1v4uJCXsx30nRYv5eQ6n1vtWzXV62G93phCXH6IrIPOYRkbqSgVDjO3ReGfCcaskPn9roXwyevwg3Uq0sUYTeJBFhQJoLV8jKZWBR3VVGFBT+1WUlL0k2BfA8slfQCcb7tjsnEbITdMORgAf1UT80pUAaEpsKXgG2Y1kNtOigKB4Rzynwe6IIiT1Eu+efUHNLZQSHXkxywIYvAccBbMZ84p6G5WxKDZAdZZk1bh41ngXapfsrDeKxQ0JxVSroL0qrIf5QYvtSCFWemDA1vCyUBfrzV15BAce3EVeEZA5oUM4HbbV7kvOkkYXqOw==",
            "MD5OfBody": "405d70b218eabb65c9e3c31cfe98d66c",
            "MessageId": "9ed2afb9-552f-499d-8ebd-9df904e7e202"
        }
    ]
}
  • メッセージをパージ(全て削除)する
$ aws sqs purge-queue --queue-url "https://ap-northeast-1.queue.amazonaws.com/<ユーザーID>/Queue1"

参考


関連

2017-06-24

DynamoDB にテーブルを作ってデータを入れて scan、query してみる

DynamoDB に AWS CLIテーブルを作成してデータを入れて、scan したり query したりしてみたメモ。


$ aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
 {
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:ap-northeast-1:<ユーザーID>:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 1,
            "ReadCapacityUnits": 1
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1498300891.892
    }
}

$ aws dynamodb put-item \
--table-name Music  \
--item \
    '{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}}' \
--return-consumed-capacity TOTAL 
{
    "ConsumedCapacity": {
        "CapacityUnits": 1.0,
        "TableName": "Music"
    }
}

$ aws dynamodb put-item \
--table-name Music  \
--item \
    '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}, "AlbumTitle": {"S": "Songs About Life"}}' \
--return-consumed-capacity TOTAL
{
    "ConsumedCapacity": {
        "CapacityUnits": 1.0,
        "TableName": "Music"
    }
}

  • scan する
$ aws dynamodb scan --table-name Music
 {
    "Count": 2,
    "Items": [
        {
            "AlbumTitle": {
                "S": "Somewhat Famous"
            },
            "SongTitle": {
                "S": "Call Me Today"
            },
            "Artist": {
                "S": "No One You Know"
            }
        },
        {
            "AlbumTitle": {
                "S": "Songs About Life"
            },
            "SongTitle": {
                "S": "Happy Day"
            },
            "Artist": {
                "S": "Acme Band"
            }
        }
    ],
    "ScannedCount": 2,
    "ConsumedCapacity": null
}
  • 条件を指定して query する
$ aws dynamodb query --table-name Music --key-conditions '{"Artist": { "AttributeValueList": [ { "S" : "No One You Know" } ] , "ComparisonOperator": "EQ" } }' 
{
    "Count": 1,
    "Items": [
        {
            "AlbumTitle": {
                "S": "Somewhat Famous"
            },
            "SongTitle": {
                "S": "Call Me Today"
            },
            "Artist": {
                "S": "No One You Know"
            }
        }
    ],
    "ScannedCount": 1,
    "ConsumedCapacity": null
}

参考

AWS CLIで boolean 値を引数に取るオプションの指定方法について

AWS CLI で boolean 値を引数に取るオプションの指定は ture や false を指定するのでななくオプションを指定する。

例えば DynamoDB で整合性レベルの指定はドキュメントに ”--consistent-read | --no-consistent-read (boolean)” と記載されているが、"--consistent-read=ture" ではなく "--consistent-read" と指定する。


  • ture
$ aws dynamodb scan --table-name Music --consistent-read
  • false
$ aws dynamodb scan --table-name Music --no-consistent-read

ドキュメント

--consistent-read | --no-consistent-read (boolean)

A Boolean value that determines the read consistency model during the scan:

  • If consistent-read is false , then the data returned from scan might not contain the results from other recently completed write operations (PutItem, update-item or DeleteItem).
  • If consistent-read is true , then all of the write operations that completed before the scan began are guaranteed to be contained in the scan response.

The default setting for consistent-read is false .

The consistent-read parameter is not supported on global secondary indexes. If you scan a global secondary index with consistent-read set to true, you will receive a ValidationException .

scan — AWS CLI 1.11.112 Command Reference

参考

2017-06-14

AWS クラウドアーキテクチャのベストプラクティス

AWSにおけるシステム構築の10個のベストプラクティス

  • 性能/可用性/コスト(運用含む)に集約される


Well Architected Framework

優れたアーキテクチャの五本柱

一般的な設計原則


運用性のための設計原則


チェック項目(EXCEL

AWSアカウント管理

  • AWS Organizations

  • Consolidated Billing

コスト配分タグ


AWS Config
  • AWS Configでタグの付いていないリソースをチェックすることができる。
請求アラート


Cost Explorer


請求レポート



ディレクトリサービス

ネットワーク

EC2のネットワークパフォーマンス
  • SR-IOV
  • 拡張ネットワーキング
  • プレイスメントグループ
  • ジャンボフレーム
  • プレイスメントグループ
HPC
VPN

Direct Connect
  • 1/10Gbps
  • 802.1Q、1500byte MTU
  • eBGPピア接続
  • プライベート/パブリック仮想インターフェース(VIF)
  • シングル/デュアル DX/CGW

オンプレとAWS間の名前解決

グローバルトランジットネットワーク

デプロイ管理
  • Beanstalk など

データベース移行


大規模アプリケーション


ホワイトペーパー