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

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ロールに手動で権限を追加する必要があるので注意です。

 

参考

コメントを残す