API GatewayからS3で取得したXMLを返す

APIGateway, AWS, Python

この記事は最終更新日から1年以上が経過しています。

やりたかったこと

S3へアップロードされるXMLファイルをAPI Gatewayを介して返却する。

やったこと

  • 前提として、S3とLambdaの連携(オブジェクトの取得)と
    LambdaとAPI Gatewayの連携(Lambdaから返る値をAPI Gateway経由で返す)が
    できていること。

まずはLambdaのコード

こんな感じのコードで
LambdaからS3にアップロードされているファイルの中身を
取得(content)して、JSONで返却する。

API Gatewayの設定

・メソッドレスポンス
レスポンスモデルにコンテントタイプ: text/xml, モデル: Empty追加
・統合レスポンス
本文マッピングテンプレートのContent-Typeにtext/xml追加
テンプレートに下記追加

これで念願のXMLを返すことができました。

まとめ

できないこと

・APIキー以外のアクセス制限
→使うコンポーネントを増やせばできます。
例えば、CloudFrontを用意してWAFで制限をかけてやることもできますが
お値段がお高いです。
だったら、EC2でという気持ちになります。
私は、アプリ内に接続元IPアドレス確認関数を定義しました。
アクセス制限にはなっていないですね。機能が使えるかどうかのレベルなので。

・HTTPでリクエストを受ける
CloudFrontを使ってください。

いいなあと思ったこと

・API GatewayからLambdaに渡すテンプレートを指定できる。
・LambdaからのレスポンスをJSONから変更できる。
今回のようなXMLへとかHTMLへとか

APIGateway, AWS, Python