AWS API Gateway + Lambda -chaliceでお手軽実装-

#AWS#chalice#lambda

AWS上で簡単なサーバレスアーキテクチャを作ってみます。 API GatewayとLambdaを使おうと思いますが、事前に調べているとchaliceというAWS謹製のPythonのサーバレスフレームワークがあることを知りました。 ざっと読む限り簡単にデプロイできそうなので物は試し。

chaliceインストール、動作確認

これでhelloworldというプロジェクトディレクトリが作成されます。

pip install chalice
chalice new-project helloworld
cd helloworld

profileを指定

デフォルトのaws profile以外を使いたい場合は以下のようにオプションをつけます。

chalice new-project helloworld --profile YOUR_PROFILE

  これにより.chalice/config.jsonにprofileの項目が追加されます。 プロジェクトのprofileを後から変更したい場合はこのファイルをいじりましょう。

簡単なAPIのデプロイ

話を戻して、ディレクトリ内にはapp.pyrequirements.txtが配置されています。 app.pyの中身はシンプル。{"hello": "world"}を返すだけです。   aws-cliなどで~/.aws/credentialsが作成されていればその情報を使ってでプロデイできます。

chalice deploy

すると多少の処理時間ののち、エンドポイントが表示されます(https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/)。 早速叩いてみます。jsonが帰ってきました。 これがサーバレスアーキテクチャ。。。 なんてお手軽。   コンソールからも確認して見ます。 AWSコンソールでAPI Gatewayを検索。新しいのが作成されていました。   Lambdaも確認。

削除

作ったAPIを削除するときは、以下のコマンドで綺麗さっぱり消してくれます。

chalice delete

環境変数を設定する

Lambdaの環境変数はAWSマネジメントコンソールからも編集可能です。   また.chalice/config.jsonからも編集することが可能です。 詳しくはこちらに記載されています。

  いくつかの変数名は使用できないので気をつけましょう。

ローカルで確認する

AWSにデプロイせずにローカルで確認することもできます。 デプロイ大して時間かかりませんが、それでもこちらの方が早いので頻繁に確認したいときや、オフラインの時は使えます。

chalice local

  ただしconfig.jsonに設定した環境変数を読んでくれないみたいです。

  良い方法が見つかったら追記します。

chaliceの強み

上記のようにchaliceを使うととても手軽にサーバレスアーキテクチャを構築できます。 また、LambdaにはIAMロールが紐付けられており、その関数のアクセス権限(どのリソースにアクセスできるか)を制限するのですが、chaliceでデプロイした場合自動で新しいIAMロールを作成してくれます。   さらに、コードを編集して、例えばS3を操作するような処理を追加したとします。 すると再デプロイの際に自動的にIAMロールにS3へのアクセス権を追加してくれます。これは便利。   ただしDynamoDBをはじめとしてこれらのサポートが対象外の部分もあります。 その場合はchaliceによって作成されたIAMロールに手動で権限を追加する必要があるので注意です。

参考