こんにちは。ソリューションアーキテクト小川です。
先日1/20(水)と1/27(水)に開催した、AWS Black Belt Tech Webinar 「Amazon SNS / SQS」ならびに「Amazon CloudFront」の資料が公開されました。
・1/20(水) 開催: Amazon SNS / SQS
SA市崎より、AWSの数あるサービスの中でも長い歴史を持つ メッセージキューサービス「Amazon SQS」と、プッシュ方式のメッセージ送信サービス「Amazon SNS」について解説して貰いました。それぞれ使い方についての解りやすい説明から、他のサービスとの連携、最近アップデートされた新機能についても解説しております。
Amazon SNS / SQS について頂いた、Q&Aの回答を下記に紹介させて頂きます。
Q1. 秒間どの程度のメッセージを受信出来るのでしょうか。
A. 少なくとも、秒間数千メッセージの処理が可能なレベルです。
Q2. キューの消去は、メッセージの消去ですか?聞き漏れたかもしれませんが、よろしくお願いいたします
A. 「キューの消去(PurgeQueue API)」とは、キューに入っているメッセージを一括して消去可能な操作です。これに対して、「キューの削除(DeleteQueue API)」はキューそのものを削除する操作となります。各APIの詳細は下記のAPIのリファレンスも参照下さい。
http://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/APIReference/API_PurgeQueue.html
http://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html
Q3. メッセージをキューに入れるときにファイルを指定することはできますか?
Q4. テキストに書いたメッセージをキューに入れるときにファイルを指定することはできますか?
Q5. テキストにメッセージ内容を書いて、そのファイルを指定して内容をキューに入れることはできますか?
A. 上記3つの質問は関連性が深いと思われますのでまとめて回答させていただきます。SQSに格納可能な情報は、文字列そのものとなります。これをSQS内部では「メッセージ」という単位で管理します。メッセージに対してファイルを添付する、というようなことはできません。ですが、メッセージの中にファイルへのURL(典型的にはS3に格納した)の文字列を含めることで、ファイル添付に似たようなことは実現可能かと存じます。SQSにファイルそのものを格納する、ということはできないため、アプリケーションプログラムとしては、ファイルの内容を読んでいただき、それをメッセージとしてセットする、というふうにご理解いただけましたらと思います。
Q6. EC2->SNS->SQS->EC2でメッセージを送る場合Delay Queueの設定をSNS経由のメッセージに指定する方法はありますか?
A. もし、メッセージ内容の値を使ってDelay Queueの時間の設定値を変更したい、ということであれば直接的な機能はございません。ですが、たとえば、ある程度の設定時間枠のような区切りが可能であれば、異なるDelay時間のキューを複数作っておき、アプリケーション側でそれらを選んで投げる、という構成は可能かと思います。また、複雑にはなりますが、キューに入ったメッセージを取り出して設定変更をするAPIを投げるアプリケーションを外側で作成する、なども可能かと考えられます。
Q7. SNSからメッセージを送られたこと、送られなかったことをログなどで確認する方法はありますか?
A. CloudWatchをご利用いただくことでご確認可能です。具体的には、マネジメントコンソールにてCloudWatchの画面に行き、「Metrics」から「SNS Metrics」を選んでください。そうすると、Topicの一覧が出て参りますので、見たいTopicを選択ください。Topicごとに4つのメトリクスが閲覧可能となっており、その中で「NumberOfNotificationsFailed」というメトリックスが、SNSが配信に失敗したメッセージの数として表示されます。また「NumberOfNotificationsDelivered」は配信されたメッセージの数となります。他2つは、メッセージサイズ(「PlublishSize」)と発行されたメッセージ数(「NumberOfMessagesPublished」)がございますので適宜ご活用ください。
Q8. Lambdaといつ連携できるようになりますか?
A. 具体的な対応予定を申し上げることは難しい状況でございますが、お客様からそのようなご要望を多数いただけましたら対応されることは十分に考えられます。
・1/27(水) 開催: Amazon CloudFront
SA北迫より、コンテンツ配信サービス「Amazon CloudFront」について語って頂きました。Amazon CloudFrontの特徴である、コンテンツの高速配信やストリーミング配信、またはセキュリティやレポート機能などについて、アーキテクチャやTIPSも含め解りやすく説明しています。
Amazon CloudFrontについて頂いた、Q&Aの回答を下記に紹介させて頂きます。
Q1. 独自ドメインをCertification Managerで発行された証明書を使う場合(非SNI)は$600はかかりますか?
A. AWS Certification Managerで発行された証明書であっても、独自証明書(非SNI)の場合は$600の課金はされます。
Q2. 制限を1000RPSから8000RPSに上げていただいたDistributionがあるのですが、こういう場合は今は自動的に15000RPSになっているのでしょうか?A. 上限緩和申請は不要です。
Q3. CFのIPアドレスでオリジンを保護する場合のIPアドレスの追加/削除をSGに自動的に設定させることは出来ますか?
A. パブリックIPアドレスリスト自体はJSONフォーマットでダウンロードできるので、Security Groupへの適用プログラムを実装いただければ自動化は可能です。また、パブリックIPアドレスの変更をAmazon SNSで検知することが可能なため、今後CloudFrontのEdge Locationが増えて際にも自動的反映させるためのフックとして利用いただけるかと思います。
Q4. IPレンジによるカスタムオリジンサーバの保護ですが、CloudFrontのIPレンジを絞っただけでは、任意の他アカウントで作成されたCloudFrontディストリビューションをプロキシとすることでアクセスを通過してしまうと思います。特定のディストリビューションのみを許可するプラクティスは、カスタムヘッダによるシェアドシークレットのみになるでしょうか。
A. その通りです。特定のディストリビューションからのアクセスのみを許可したい場合は、シェアードシークレットを使っていただくのが良いかと思います。
Q5. ストリーミングで使用するデータをS3に格納する必要があるという話しで、これもエッジ(インターネット上)からアクセス可能な状態である必要がありますか?アクセスコントロールの条件があれば教えてください
A. S3に関しては、CloudFrontからアクセスができれば良いので、Origin Access Identity(OAI)を利用し、S3のBucket Policyで制御いただく形になります。
Q6: 日本国内のサーバの中国への配信キャッシュにCloudFrontは有効ですか?
A. 中国に関しては、現状CloudFrontは香港にエッジロケーションが存在しています。本土に関しては実際にレイテンシーを計測していただき、要件を満たすようであればご利用いただくのが良いかと思います。また中国向けにChinaNetCenterと提携もしていますので、こちらの利用も合わせて検討いただければと思います。
https://www.amazonaws.cn/en/content-delivery/
Q7. CloudFrontを利用する場合、どうテストしたらよいでしょうか?システム更改前は、インターネット上に開放したくないのですが、CloudFront経由できちんとアクセスできることを確認したい場合、どうするのがベストプラクティスでしょうか?署名付きアクセスなどが一般的でしょうか?
A. 署名付きURL/Cookie等で制限いただくのも良いですが、テスト用のディストリビューションに対してAmazon WAFを利用し、特定のIPアドレス(テスト用端末IP)からのアクセスのみを許可するという方法もございます。
Q8. CloudFrontのログの保存先を既にCloudFrontにアクセスが来ている状態で変更した場合どのタイミングから保存先が変更後の場所に保存されますでしょうか
A. 設定反映まで10~15分程度かかるため即時反映はされません。1日ほど両方S3保存先を保持して置いていただくことを推奨します。
Q9. オリジンがS3 Websiteの場合も、CloudFrontとの通信はHTTPSで行われるのでしょうか?A. CloudFrontの設定画面のOrigin Domain NameにてS3の静的Web Site hosting用のURLを指定した場合(カスタムオリジンと同様)は、通信プロトコルを選択できます。
Q10. ELBで賄えないL7スイッチ機能として利用するケースをWebで見たことがあるのですが、それはURLパスでアクセス先を切り替えるためのベストプラクティスでしょうか?
A. CloudFrontではURLパスでアクセスするオリジンサーバを切り替えることができるため、L7のスイッチのような用途での利用は可能ですが、CloudFrontを通すと、全てのWebアプリケーション側の要件(ダイナミックコンテンツなど)にマッチするわけではないので、用途に合わせたベストプラクティスかとおもいます。