作業メモなのでざっくりと。
やりたいこと
CloudWatch(イベント)でモーニングコールの時刻設定を行い、Lambdaを自動実行することでAmazon Connectで電話をかけさせる。 動作パターンは4種類。
- モーニングコールの時刻確認
S3上のHTMLファイル(JavaScript)にアクセス
→APIGateway経由でLambda①を実行
→CloudWatch-Events①の値(cron)を取得して返す - モーニングコールの時刻変更
S3上のHTMLファイル(JavaScript)で時刻設定、PUT
→APIGateway経由でLambda②を実行
→CloudWatch-Events①の値(cron)を変更 - モーニングコール
CloudWatch-Events①がトリガとなって
→Lambda③が実行され
→Amzon Connectの問い合わせフローが流れる 次回モーニングコールのキャンセル
DashButtonをクリック
→IoT 1-Clickを経由して
→Lambda⑤を実行Lambda
① 設定時刻(CloudWatchのルール)の参照用
② 設定時刻(CloudWatchのルール)の変更用
③ CloudWatchをトリガとしてAmazon Connectをキック ←これで電話がかかる
④ 次回のコールをキャンセル(下記のCloudWatch①をdisable化)
⑤ CloudWatch①をenable化- CloudWatch-Events
イベント の「ルール」に以下2つの設定を作成。
① Lambda③をターゲットとするルール
② Lambda⑤をターゲットとするルール - Amazon Connect
事前に電話番号の取得や問い合わせフロー(電話をかけた後のアクション)を作成済み。
作業メモ
LambdaやHTML(python)はコードはGitHubにあげるので割愛。ポイントだけ。
Lambda + APIGateway
- CORS対応
-
- CORS(Cross-Origin Resource Sharing):オリジン間リソース共有
- 今回のケースだと、S3に保存したHTMLファイル(https://s3.amazonaws.com/xxx~)のJavascriptによって、APIGateway(https//< MCS用ドメイン > ~)経由でCloudWatch Eventsの情報を取得・Webブラウザ上に表示する。
- 以下の設定を行った。
- Lambda側 レスポンスのヘッダに「Access-Control-Allow-Origin」
return { … 'statusCode': 200, <span style="color: #ff0000;"><strong>'headers': {'Access-Control-Allow-Origin': '*'}</strong><span style="color: #000000;">,</span></span> 'body': json.dumps(response) }
-
- APIGateway側 「統合リクエスト」で「Lambda Proxy Integration」を選択。 これを有効にすることで、クライアントからのリクエストをいい感じに整理して後続のLambdaに渡してくれる。 (参考) https://qiita.com/_mogaming/items/2bd83204e212e35b2c6c
- 後々で気づいたが、Lambdaでレスポンスヘッダを記述するのではなく、APIGateway側で「CORSの有効化」をクリックしちゃえばそれで良かった。。次はこれで試そう。
-
APIGateway
- コール時刻(cron)の取得、変更のリソースを作成。変更用(/setSchedule)の方も横着してGETメソッドで。
- CloudFormationによるスタック再作成時のAPIGatewayエンドポイント(URL)変更を吸収するために、カスタムドメインを設定。
感想
- APIGateway
- HTTPプロキシ機能が便利。昔は細かく設定する必要があって大変だったらしいが、今はボタンぽちーで完了。
- エンドポイントは1つにして、メソッドによって裏のLambdaを変える構成にしたい。
- 「APIキー」による認証機能の追加も、いずれ。