話題の記事

AWS Lambda + API Gatewayで日本語を扱う

2015.09.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

LambdaとかAPI Gatewayでの文字化け

この間までLambda関数から日本語を返そうとすると、結果がすべて文字化けしてしまっていました。
そのためbase64でエンコードして受け取り側でデコードするという面倒な手法でしか日本語のやりとりができなかったのですが、
先日のアップデートで日本語が無事返せるようになったようです。

また、API Gatewayでもcontent typeを設定できるようになったみたいで、
ずっとやりたかった、「Lambda + API GatewayでJSON形式のレスポンスを返す」
というのが日本語でもできるようになりました。
今回はその方法についてご紹介。

Lambda + Gatewayサンプル

動作環境

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.10.4
  • AWS SDK(JavaScript) : 2.1.42

また、AWSコンソールは使用できることを前提にしています。

1.セットアップ

今回はaws-sdk for javascriptを使用してLambda関数を定義します。 事前にnode.jsとnpmをインストールしておきましょう。
npmが使えるようになったらaws-sdkとgulpもインストールしておきます。

% npm install aws-sdk
% npm install -g gulp

2.Lambda関数の用意

まずはLambda関数をローカルで定義します。
Lambdaでは、単純に日本語を含むJSON文字列を返します。

var AWS = require("aws-sdk");
AWS.config.update({region: "<任意のリージョン>"});

exports.handler = function (event, context) {
    //日本語をJSON形式文字列で返す
    context.succeed("{message:'日本語返したい'}");
};

次に、ここを参考にLambda関数をデプロイしましょう。  

% gulp deploy

3.API Gateway設定

最後にAWSコンソールでAPI Gatewayの設定です。
API設定方法はこのあたりを参考にしてください。

APIに対してResourceとMETHODを定義し、そこのIntegration RequestのLambda Functionで、
先ほどデプロイしたLambda関数を指定します。そして、Method ResponseのMapping Templatesにある
Content-Typeを「application/json;charset=UTF-8」に変更します。
※ちょっと前まではcharsetが指定できなかったみたいです

lambda-gateway-jp1

ここまでできたらTESTボタンを押してAWSコンソール上で動作を確認してみてください。
JSON文字列がResponse Bodyに表示されます。

lambda-gateway-jp2

また、このAPIをデプロイして発行されたURLにアクセスしてみてください。
ブラウザにJSON文字列が問題無く表示されます。

まとめ

日本語も問題なく扱えるようになったようで、Lambda + API Gatewayを思う存分使えるようになりますね。

参考サイトなど