Lambda + API Gateway入門。CSVやCORS

前回はほぼLambdaだけでREST APIを作成してみました。
その応用でCSVファイルのダウンロードとクロスサイトスクリプトの対応例を紹介します。

前回のLambdaを使いまわしますので、先にそちらを参照してください。

xp-cloud.jp

 

CSVファイルをダウンロード

exports.handler = async (event) => {
    return {
        "statusCode": 200,
        "headers": {
            "Content-Disposition": 'attachment;filename="aaa.csv"',
            "Content-Type": 'text/csv'
        },
        "body": 'Hello,from,Lambda!'
    };
};

 

"headers"でファイル名やファイルの形式を指定します。
"filename"の部分を変更すればファイル名を動的に変更することができます。
API Gatewayでヘッダーを作成するとファイル名を動的に変更できないため、Lambdaで指定するやり方ならではだと言えます。

前回作成したURLを開けばダウンロードが始まります。

 

クロスサイトスクリプト(XSS/CORS)対応

exports.handler = async (event) => {
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": 'application/json',
            "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
            "Access-Control-Allow-Methods": "POST",
            "Access-Control-Allow-Origin": "*"
        },
        "body": JSON.stringify({"key1":"val1", "key2":"val2"})
    };
};

 

ヘッダーにCORS用の値を設定します。
AJAXJSONを扱う場合なんかに大変有効ですね。

実際に動いている所を確認するには、下記サービスが便利なので利用させていただきました。
POSTメソッドのテスト
https://so-zou.jp/web-app/network/post/

 

POSTメソッドのテスト

 

まとめ

非常によく使う2機能の作り方を紹介しました。
画像や動画、ZIPファイル等をレスポンスにする場合は、API Gatewayの操作も必要になってきてしまいます。
とはいえ、ほぼほぼLambda側だけでできるので、別の機会に紹介できればと思います。

 

 

 

AWS相談会