スキップしてメイン コンテンツに移動

初めてのAWSメモ(2):CloudWatchからSNS→SQS、AWS SDK for RubyでQueue取り出し

■やりたいこと

■参考にしたURL
AWS CloudWatch と Alarm を試してみる
SQSってなんじゃ?(AWSコンソールにSQS登場)
Rubyを使ってAmazon SNSとSQSを操作する:fanoutパターン
AWS SDK for RubyでSQSを操作する

■やったこと
1.SQSの設定
  SNSから通知するためのSQSを、先に作っておく。
  -- SQS NavigationからCreate new Queueをクリック
   -- 適当に名前付けてQueueを作っておく
   -- Detail画面からARNをメモしておく
   -- PermissionからAdd a Permissionで追加
    -- Allow Everybody Sendmessage(送信元をSNSに縛れるか?確認)

2.SNSの設定
(1)SNS NavigationからSNSのTopicを作る
  -- Create New Topic
   -- Nameを付与して作る
(2)作成したTopicに対してSubscriptionを設定する
  -- Create Subscription
   -- ProtocolはEmail、Endpointはメールアドレス
   -- 登録したメール宛に認証メールが来るので対応する
  -- もいっちょCreate Subscription
   -- ProtocolはAmazon SQS、Endpointは1.で作ったSQSのARN。
      (後で気づいたんだけど、Queue側からSubscribe Queue to SNS Topicで紐つけが出来た)
  -- TopicからPublish to this Topicでテストメッセージが送信可能。

3.CPU監視される側のEC2立ち上げ
(1)EC2からSNSにアクセスするために、IAM roleの設定を行う。
  なお、Launch済のEC2のIAM Roleを変更することは出来ないみたい。
  -- IAM Dashboard
   -- Roles -> Create New Role
    -- Amazon EC2に対しPower Usersを付与。
(2)IAM roleを設定したEC2を立ち上げる。
  -- EC2 Dashboard
   -- Instances -> Launch New Instance
    -- ほぼDefault、IAM Roleだけ(1)で作ったRoleを設定する。
  -- Elastic IPsでGlobal IPも振っておく。
(3)CloudWatchの設定。今回は「1分に1回CPU使用率を通知」したいんだけど、
  基本モニタリングでは5分に1回しか出来ないため、Deailed Monitoringを使う。
  追加料金かかります。
  -- EC2 Dashboardで対象のEC2を選択、Monitorningタブを表示
   -- Enable Detailed Monitoringをクリック
   -- Create AlermからAverage of CPU Utilizationを1分単位で通知にする。
    -- 負荷はテストなので10%以上に。
    -- send a notification toは1.で作成したSNSを指定。
(4)試しに負荷を上げてみる。yum installとか。


4.CPU監視する側のEC2立ち上げ
(1)EC2 DashboardからLaunch EC2でもう1台立ち上げる。
 IAM Roleの設定だけ忘れずに。
(2)このEC2からSQSをPollingして、Queueがあったらコンソールに表示したい。
(3)AWS SDK for Rubyのセットアップ
  $ sudo yum install ruby-devel rubygems gcc make libxml2-devel libxslt-devel
  $ sudo gem install aws-sdk
(4)AWS SDK for Ruby経由でSQSからMessageを拾って表示。一度表示したらQueueから削除。
 Access_keyとSecret_keyはアカウントオプションのSecurityから取得できる。
  (※追記:IAM Roke for EC2を設定してればアクセスキーとシークレットキーはいらない)

  $ vi get_sqs.rb

#!/usr/bin/ruby

require 'rubygems'
require 'aws-sdk'

access_key = 'アクセスキー'
secret_key = 'シークレットキー'
sss_endpoint = 'SQSのURI'
queue_url = 'queueのURL'
queue_name = 'queueの名前'

sqs = AWS::SQS.new(:access_key_id => access_key,
                   :secret_access_key => secret_key,
                   :sss_endpoint => sss_endpoint,
                   :queue_url => queue_url  ).client

while true
  message = sqs.receive_message(:queue_url => queue_url)[:messages][0]
  if message
    puts message[:body]
    sqs.delete_message(:queue_url => queue_url, :receipt_handle => message[:receipt_handle])
    puts "Waiting"
  end
  sleep 5
end

(5)$ ruby ./get_sqs.rb で実行。
(6)SNSからPublish to this Topicsでテストメッセージを送って、コンソールにMessageが表示されることを確認。
(7)監視される側のサーバでyumとか使って負荷を上げて、SNS→SQS→コンソールにメッセージが表示されることを確認する。

■感想
・CloudWatchを使った監視はとてもお手軽。5分より短い間隔で監視したいほどシビアな案件なんてそんなに無いので、基本モニタリング充分使えると思う。
・SQSとAWS SDKを使ってイベント駆動のアプリ作るのもなかなか面白そう。
・AWS SDKはもっといろんなことできそうなのでもっと調べたい。


Amazon Web Services クラウドデザインパターン実装ガイドAmazon Web Services クラウドデザインパターン実装ガイド
大澤 文孝,玉川 憲,片山 暁雄,鈴木 宏康

日経BP社
売り上げランキング : 17216

Amazonで詳しく見る by AZlink

コメント

このブログの人気の投稿

リモートワークは仕組みじゃなくて文化です

ここ最近、コロナウイルス関連の報道が数多くあるが、その中でも多くの企業がリモートワークを推奨するという記事やプレスリリースが注目を浴びている。それ自体はもちろん大変望ましい。不要な対面での接点を減らすことで感染リスクを抑えることが出来るし、通勤ラッシュや首都圏への経済集中も抑制出来るからだ。 だがちょっと待ってほしい。リモートワークというのは社員が在宅で働くことだけを指すのではない。 社員が在宅で働いても出社時と同じパフォーマンスが出ること をリモートワークというのだ。だからこの記事のタイトルで「リモートワークは仕組みじゃなくて文化です」と書いた。 弊社がリモートワークを導入したのは2011年の東日本大震災がきっかけだけれど、9年経った今、どのようにリモートワークを運用して、そしてパフォーマンスを維持しているかを共有したいと思う。以下のことが文化として根付けば、その会社のメンバーはリモートワークでもオフィスでも同じようなパフォーマンスが発揮出来るはずだ。 1.勤怠を厳密に管理しない え、だってダルくないすか。管理するの。何時に働き始めて何時に働き終わったかなんて関係ないっしょ。大事なのは働いた結果のアウトプットであり、働いた時間なんか問題じゃない。 2.休憩も厳密に管理しない え、だってダルくないすか。管理するの。何時に休憩し始め(ry 3.工数を厳密に管理しない え、だ(ry 4.目に見えるアウトプットを意識する 当然のことながら、仕事は結果が全てであり、結果が出なければどこで何時間働いたって意味がない。そして結果というのは目に見えなければ意味がない。 だからこそ、アウトプットを出すこと、アウトプットを評価することに徹底的にこだわる。それはドキュメントかもしれないし、お客様やパートナーとコミュニケーションするためのメールかもしれないし、社内の改善活動かもしれないし、メンバーへのフォローかもしれないし、ブログかもしれないし、Slackでの発言かもしれない。 とにかく目に見えないものは周りも認められない。目に見えるアウトプットしか評価されないし、そのために徹底的にアウトプットするんだ、という意識を社内でしっかりと作ることが重要。 5.コミュニケーションコストを意識する どんなに頑張っても、オンラインのコミ

これで完璧!本当に役立つテレワークマナー

コロナ禍によってテレワークを導入する企業が増えた昨今、皆様いかがお過ごしでしょうか。僕は4連休明けでダルかったので有給を取得し妻とデートしてきました。イェーイ。 さて、 弊社 も今年2月以降は全社員完全テレワークに移行しました。弊社は2011年からテレワークを導入し各自が自由に活用していたため、特に大きな問題も無くテレワーク体制に移行したのですが、全社員完全テレワークは初めての状況であり、幾つかの課題が発生しました。特に、その状況下でも新しく入社する社員がいますので、これまで社内で培ってきた暗黙の了解が共有出来ないことは大きな課題でした。 ということで、本記事では、弊社のテレワークマナーについてご紹介したいと思います。皆さんのご参考になれば幸いです。 業務の開始と終了はチャットで宣言する これはオフィス出社時でもテレワークでも変わらないのですが、業務開始時と業務終了時にはSlackで宣言しています。弊社ではこれを開店/閉店と呼んでいます。 気をつけて頂きたいのは、これは 報告ではなく共有である ということです。業務開始と業務終了を共有しておくことで、同僚が相談したり依頼をしたりできる時間を把握出来ます。この共有をしておかないと、業務開始前や業務終了後にMentionがバンバン飛んで来るかもしれません。もちろん飛んできたからって怒るメンバーはいないのですが、お互いちょっとした気遣いが出来るように、自分が働いている時間は共有しておくと良いでしょう。 これは休憩時間も同様です。昼休みにのんびりゲームしているときにスマホがブーブー鳴っていたら気が散るかもしれません。休憩開始と終了をSlackで宣言することでゆっくり休憩することが出来ます。休憩中は Display name の後ろに「休憩中」等と付けておくのも良いでしょう。 マイクとスピーカーはPC内蔵のものを使わない PCの性能は以前と比べて格段に上がっていますが、残念ながらマイクとスピーカーはそうではありません。マイクについては音質は向上しているものの、指向性が無いために周囲の音を拾ってしまいます。そしてPC操作時には、どうしても打鍵音がダイレクトに響いてしまいます。またスピーカーは、まぁ正直全く駄目です。音楽を聞くのにさえ向いていないのに、音声のやり取りなんか出来るわけがない。 マイクとスピーカーは必ず別に用意しましょ

ネガティブなフィードバックをする時に意識したい7つのこと

僕は現在は取締役兼事業本部長という立ち位置でお仕事させて頂いてますが、元々はエンジニアで、かつピープルマネージメントを15年以上しておりました。僕がマネジメントしたメンバーは合算すると200人以上になります。正直に言えば、楽しいことはたくさんあったけれど、もちろん辛いことも多々経験していまして、特にメンバーに対してネガティブなフィードバックをすることは大きな苦しみの一つです。 最近、自分の部署の若いマネージャーから、ネガティブなフィードバックを上手に行うことが難しく課題に感じている、という声があったので、僕の経験をまとめてみました。 ポジティブなフィードバックをセットにして伝える どんな人にとっても、悪い話を聞くことは楽しい経験ではありません。悪い話だけを聞き続けると、不愉快な感情が理性を覆い隠してしまいます。しかしフィードバックとは叱ることではなく、どのように改善していくかを議論するためのきっかけであり、感情的になることはマイナスに働きます。ネガティブなフィードバックを伝える時は、ポジティブなフィードバックをセットに、出来れば先に伝えます。良い点がない人はいません(そんな人は採用していないはずです)から、必ず褒めるポイント、褒めるべきアウトプットがあるはずです。ポジティブなフィードバックをセットすることで、相手の感情のバランスを取ることが出来ます。 ネガティブな内容を責めるのではなく事実として伝える 上述の通り、フィードバックの目的は叱責ではなく改善なので、「なんで出来ないんだ」とか「どうして出来なかったんだ」ではなく、事実としてのネガティブな現状を正確に伝えることが重要です。例えそれが叱責に値する内容であったとしても、どちらか一方が感情的になると必ずもう片方も感情的になるので、冷静に正しく事実のみを伝えます。 期待値を提示する ネガティブなフィードバックには、必ずあるべき姿、こちらが期待していた姿があるはずなので、それを伝えます。その際には一方的に伝えるのではなく、こちらの期待値を根拠と併せて伝え、その上で一緒にその期待値の妥当性を議論します。この期待値のすり合わせをしないと、メンバー本人の振り返りも生まれず、改善のためのアクションも「言われたからやる」だけになってしまいます。 なぜネガティブな結果になったのかをヒアリングする 人それぞれ様々な事情や環境がある