メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

AWS API Gatewayにカスタムオーソライザーを設定してみたら、判りにくい事があった

1. オーソライザーの設定方法

f:id:ryoichi0102:20180218203159p:plain

この位置…なんかわかりにくい…

2. Execution failed due to configuration error: Invalid JSON in response

戻りのJSONが良くないのですが、どう良くないかって話ですよね。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/use-custom-authorizer.html#api-gateway-custom-authorizer-output

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html#api-gateway-calling-api-permissions

とりあえず動かす場合は、

callback(null, {
  "principalId": "ユーザーを特定できる文字列なら何でも良し",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:*",
        "Effect": "Allow",
        // "Resource": "arn:aws:execute-api:ap-northeast-1:000000000000:yourApiGatewayId:*"
        "Resource": "*"
      }
    ]
  },
  "context": {
    "stringKey": "stringval",
    "numberKey": 123,
    "booleanKey": true
  }
});
}

contextにDynamo.getの戻り値(data)をセットするとうまくいかないです!!

"context": data

これハマりました。
(多分だけどJSON.stringify(data)すればいけるんだろうな…と後で思った)

policyDocumentのstatementにはIAMの指定とかではなく、IAMポリシーを作成してそれを指定するわけでもないんですね。

3. カスタムオーソライザーが呼び出されない

コンソール上のテストでは呼び出されるのに、Postmanやcurlだと呼び出されない。

⇒サイドメニュー"リソース" クリック
⇒カスタムオーソライザーを適用したいメソッドをクリック
⇒認証にて、作成したカスタムオーソライザーを指定

全部に自動的に効くわけじゃないんですね。。。面倒。

4. Invalid authorizer ID specified. Setting the authorization type to CUSTOM or COGNITO_USER_POOLS requires a valid authorizer.

画面リフレッシュしたら設定できることもあるかも知れません。
自分の場合は、オーソライザーを同じ名前で作り直したので、裏でそれが更新されていなかったのかも。

5. "Message": "User is not authorized to access this resource" が返ってくる

policyDocumentはちゃんと返してると思ったんですが、

"Resource": "*"

にしたら通りました。
少しづつ狭めて確認していきましょう。

Twilioを使ってAPIから電話をかけてみた #devsumi 番外編

経緯

APIから電話が発着信ができる時代です。前々からなんとなく知ってはいたのですが、デブサミにブース出展されていたこともあり、ちょっと書いてみました。

一般の携帯電話契約にありがちな事務手数料・プランの2年縛りなどがなく、
1つの050番号が月々108円で、番号を取得していない間はこの料金はかからず、
携帯電話宛なら1分16.2円という所が今回ちょっと試してみようかと思った経緯です。

twilio.kddi-web.com

登録

f:id:ryoichi0102:20180217103513p:plain

パスワードは14文字〜です。
用途などまだ決まってない方にも、I'm just exploring / I don't have a project in my mind yet / Not a production App あたりの選択肢があるので大丈夫です。

f:id:ryoichi0102:20180217103527p:plain

ここで自分の電話番号を認証させます。
※ ここで入力する番号から発信したりするのではなく、単に本人確認のためです。
電話番号は国番号(日本は+81)から始まるので、080-****-****であれば+8180********となります。

f:id:ryoichi0102:20180217103537p:plain

SMSに送られてきた4桁の認証用の数値を入力します。

f:id:ryoichi0102:20180217103549p:plain

認証が完了するとProject名の入力を求められます。

f:id:ryoichi0102:20180217103558p:plain

これで登録が完了した感がありますね。
APIを呼び出す時はここで表示されているアカウントSIDAUTH TOKENを使います。

f:id:ryoichi0102:20180217103610p:plain

サイドメニューの下部のハンバーガー (○の中に…が書いてあるアイコン)を押すと、サイドメニューに表示する機能が選べます。ピン留めもできますね。

f:id:ryoichi0102:20180217103620p:plain

サイドメニューの#の所が電話番号の一覧です。
ここで、"最初のTwilio電話番号を取得"ボタンをクリック。

f:id:ryoichi0102:20180217103629p:plain

すると、電話番号がサジェストされますが、だいたい気に入らない場合が多いと思います。横にある"別の番号を検索する"リンクをクリックします。
表示は国番号からの表示なので、+8150********は、050-****-****と読み替えます。

f:id:ryoichi0102:20180217103642p:plain

取得可能な電話番号が検索できます。個人的にこの機能気に入ってます!
国はJapanを選択。
ちなみに、JapanからはVoice(音声電話)とFaxの発信が選択できます。
テキストボックスの"番号"に希望の番号を入力して、
セレクトボックスから、
・Anywhere in number : 指定の番号をどこかに含む
・First part of number : 指定の番号から始まる
・Last part of number : 指定の番号で終わる
を選択します。
SMSを利用する場合は海外の番号を取得します。
(SMSの場合の料金は国際電話の料金になります。今後のアップデートに期待)

f:id:ryoichi0102:20180217103651p:plain

はい、検索されました。"この番号を選択"ボタンをクリック。

f:id:ryoichi0102:20180217103702p:plain

これで、番号が取得できました!

f:id:ryoichi0102:20180217103709p:plain

一覧にも表示されています。
さらに追加する場合は、一覧上部の赤丸+アイコンをクリックです。
(これちょっとわかりにくい…)

f:id:ryoichi0102:20180217103718p:plain

実装

・電話番号
・アカウントSID
・AUTH TOKEN
が揃ったところで、電話をかけてみましょう。

下記に実装例を書いてみました。
当然、上記の3つの情報は環境変数設定です。

github.com

ビルドしてAWS LambdaにデプロイすればcallToに指定した電話番号に電話がかけられます!

デブサミ中に何度もブースに足を運んでQAしてわかったこと

実装上の質問などなど、その場で聞けるのは良いですね。今回デブサミをこのように使ったのは初めてだったのですが、調べながらやるより全然効率が違いますね!

・任意の電話番号に発信するには、Trial account(いわゆる無料枠)から正規アカウントにアップグレードすればよい(Trial状態では、検証済電話番号にしかかけられない)
・Trail accountで使える範囲はだいたい5コールぐらい?
・発信時に相手に繋がった後の挙動や、他の電話からの着信で受けた時の挙動は、TwiMLというxmlを書かなければいけない
https://jp.twilio.com/docs/api/twiml
・TwiML (xml) は基本どこかにアップロードしておかなければならない
・日本の電話番号からだとSMSの発信ができないため、海外の番号を取る必要があり、この場合に通話料金がかさみがち

#devsumi 2018参加レポ (Developers Summit 2018) 初日 (2/15)

行かない年はナイ。

通い始めて5年目、今回は仕事として新人にも推薦して投入してみました。レポが楽しみ。

デブサミ2018テーマ「変わるもの×変わらないもの」
今回公式はネット上での動きは早くもうまとめサイトが上がってます。

codezine.jp

カイゼン・ジャーニー 〜たった一人からはじめて、「越境」するチームをつくるまで〜
市谷 聡啓 [ギルドワークス] / 新井 剛 [ヴァル研究所・エナジャイル]

新井さん

管理職になると、残業の定義が変わる。
副業をすると、労働の定義が変わる。
起業をすると、時間の定義が変わる。

ヒンズー教の教えのよう。

市谷さん

世界は、ただあなたが戻ってくるのを待ってる。

良すぎる。

f:id:ryoichi0102:20180215124421j:plain

当日買ったのではないことだけどは言っておきたいw

Microsoft AIプラットフォームによるインテリジェントアプリケーションの構築
佐藤 直生 [日本マイクロソフト]

Azureサービスの紹介で、基本的な所から本格的な所まで。

本業的に、
これまでは、事象発生⇒手入力⇒入力画面⇒データ
といった流れであったが、自動的に登録されている状態になる。
というアプローチと同じことが言えそうだなーと。

サービス・メッシュ Istio を利用した Kubernetes でのマイクロサービス開発
寺田 佳央 [日本マイクロソフト]

IstioというOSSの紹介。
k8sでmicroservicesを管理していると起こりがちな、サービス間の認証やモニタリング・ロードバランシングを便利にする

・サービス間の依存関係の明確化
・ログ可視化
・Feature Flags
・Canary release
・リクエスタイムアウト
・サーキットブレーカー
あたりが主。

寺田さんといえばデモですよね。

Slack⇒Bot Framework⇒IstioでPodの管理
加えて、
VUI⇒Payara⇒Azure Translator⇒LUIS⇒Istio
といった感じで、ここで「おおーっ!」と。

先のセッションでも紹介あったように、AzureのCognitive Servicesはやはり優秀です。

www.slideshare.net

事例2本立て!Redmineユーザ達が語る現場定着化への取組みと導入アンチパターン
大野 憲一 [ワコム]/小林 稔央 [富士ゼロックスアドバンストテクノロジー]/川端 光義 [アジャイルウェア]

冒頭は、Redmineを使わないと業務が回らない(作業一覧が見れない)、チケットのステータスフローのルール化、No ticket No taskなど既に行っているプラクティスの話が殆ど。

小林さんのセッションが良かった。

進捗率を使わない。子チケットに細分化して未着か終了を明確にする。
チケットの最大期間は3日(⇒スクラム的)

流石Redmineエヴァンジェリストだけあってよく纏まっている資料の紹介もありました。

www.slideshare.net

www.slideshare.net

www.slideshare.net

そしてこれ。

タウンワークをドライブさせるためになんちゃってアジャイルをやめた話
高橋 陽太郎 [リクルートジョブズ]

案件の活動細分化と、フロント/バックエンド分業チームに起こる、優先順位とリードタイム改善の話。強い締切意識を撤廃し、価値あるDoneにこだわって、手戻りを可視化したところ、レビューとテストのコストに気づき…

⇒結局のところモブなんじゃないか(俺考)

「変更のしやすさはリードタイムに直結する。」

⇒まぁ、、そりゃそうだよね。

音声UIはアプリ開発の何を変えるのか? スマートスピーカーアプリ開発者大集合!
【モデレーター】西田 寛輔 [ロボットスタート]/市川 純 [リクルートマーケティングパートナーズ]/砂金 信一郎 [LINE]/小川 慧 [ポケモン]/村井 孝至 [面白法人カヤック]

Amazon, Google, LINEの違いについて。
そしてピカチュウトークについて。

www.kayac.com

おうちハック的に「行ってきます」で電源オフ、「ただいま」で電源オン。
運転中のハンズフリーLINEなどなど。

マネタイズはまだ。

設計について、既存のアプリの機能を踏襲しすぎない、であったり。

また、UUや平均セッション時間の非公開スライドがお土産だった。

物事は拙速で

ということでポストです。