サクッとChaliceでAPI作ってみた!(入門編)

サクッとChaliceでAPI作ってみた!(入門編)
この記事をシェアする

はじめに

こんにちは!スカイアーチHRソリューションズのnakaoです!
突然ですが皆さん、「Chalice」という言葉を聞いたことがあるでしょうか?
恥ずかしながら私は聞いたことすらなかった言葉でした。
つい先日、その「Chalice」に業務で初めて触れる機会があり、「とても便利で使いやすい!」と感激しました。
今回は「Chalice」を初めて聞く方向けに紹介と簡単な使い方について、お伝えできればと思います!

Chalice とは

「Chalice」とは、AWSが提供しているサーバーレス アプリケーションを作成するためのフレームワークです。
Chaliceを使うことで、サクッと簡単にLambda+API GatewayのようなREST APIが作成できてしまいます!

それではサクッと実際に作ってみましょう!

公式のドキュメントがありますので、詳細に関しては以下を参照してください。

やること

今回は公式ドキュメントにあるQuickstartを実際に手を動かしてやってみたいと思います!
ソースコードの展開は、ローカル環境(Windows)を想定しています。

環境構築

まず公式ドキュメントのQuickStartに沿って、Chaliceの環境構築をしていきましょう。

pythonインストール

Chaliceはpython製のOSSフレームワークですので、まずはpcにpythonのインストールが必要です。
ドキュメントを確認すると、このQuickStartはPython3.7を使用しているが、python3.6~3.10バージョン全てでサポートされているみたいですね。

この記事を作成している現在のpython最新バージョンは3.12ですが、Chalice記載のバージョンを使用しましょう。
今回は公式からpython3.10バージョンをインストールします。
公式サイトから古いバージョンの場所が少し分かりにくいのでリンクを貼っておきます。

インストール完了後に以下コマンドでpythonバージョンが確認できれば成功です。

python --version
Python 3.10.11

仮想環境構築

次に、仮想環境を構築していきます。python標準モジュールの「venv」を使用します。
ディレクトリは好きな場所で適宜作成してください。

C:\Users\xxxxx\Desktop>mkdir chalice-test
C:\Users\xxxxx\Desktop>cd chalice-test
C:\Users\xxxxx\Desktop\chalice-test>python -m venv venv310
C:\Users\xxxxx\Desktop\chalice-test>.\venv310\Scripts\activate
(venv310) C:\Users\xxxxx\Desktop\chalice-test>

仮想環境から出たい場合は以下コマンドです。

(venv310) C:\Users\xxxxx\Desktop\chalice-test>deactivate
C:\Users\xxxxx\Desktop\chalice-test>

Chaliceインストール

次に仮想環境内でChaliceをインストールします。
インストール完了後に以下コマンドでChaliceバージョンが確認できれば成功です。

(venv310) C:\Users\xxxxx\Desktop\chalice-test>pip install chalice
(venv310) C:\Users\xxxxx\Desktop\chalice-test>chalice --version
chalice 1.29.0, python 3.10.11, windows 10

AWS認証情報登録

認証情報を登録していない場合は登録しておきます。

(venv310) C:\Users\xxxxx\Desktop\chalice-test>aws configure --profile chalice
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

環境構築に関しては以上です。

プロジェクトを作成する

それではサクッとChaliceを試してみましょう!
まずは、Chaliceプロジェクトを作成します。プロジェクト名は適宜変更してください。

(venv310) C:\Users\xxxxx\Desktop\chalice-test>chalice new-project chaliceApp

プロジェクトの作成が成功すると、以下のようなフォルダ構成でファイル群が作成されます。

主なファイルはapp.pyです。プロジェクトで自動生成されるファイルの中身は以下です。
API Gatewayのエンドポイントのルート(‘/’)にアクセスしたらレスポンスボディとして{‘hello’: ‘world’}を返すようなコードになっています。

from chalice import Chalice

app = Chalice(app_name='chaliceApp')


@app.route('/')
def index():
    return {'hello': 'world'}

プロジェクト作成に関しては以上です。

ローカルテストする

作成したコードをローカル環境でサクッとテストすることができます。
以下コマンドでローカルサーバーを起動できます。

(venv310) C:\Users\xxxxx\Desktop\chalice-test>cd chaliceApp
(venv310) C:\Users\xxxxx\Desktop\chalice-test\chaliceApp>chalice local
Serving on http://127.0.0.1:8000

ブラウザでアクセスすると、{‘hello’: ‘world’}が返ってくるのが確認できると思います。

ローカルテストに関しては以上です。

デプロイする

ローカルテストは問題なさそうでしたね。AWS環境にデプロイしてみます。

(venv310) C:\Users\xxxxx\Desktop\chalice-test\chaliceApp>chalice deploy --profile chalice

デプロイに成功すると、以下のようなメッセージが流れてきます。
IAMロール、Lambda、API Gatewayのリソースが作成されているみたいですね。

Creating deployment package.
Creating IAM role: chaliceApp-dev
Creating lambda function: chaliceApp-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxxxxxxx:function:chaliceApp-dev
  - Rest API URL: https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/

ブラウザでアクセスすると、{‘hello’: ‘world’}が返ってくるのが確認できると思います。

コードを修正して再デプロイしたい場合は、コードを修正後、同じコマンドを実行すれば再デプロイ可能です。
また、Rest API URLが分からなくなった場合は以下のコマンドで表示できます。

(venv310) C:\Users\xxxxx\Desktop\chalice-test\chaliceApp>chalice url

デプロイに関しては以上です。

リソースの確認

AWSマネジメントコンソール上で、今回デプロイされたリソースを確認してみましょう。

Lambda

Lambdaが作成されていることが確認できますね。

IAM ロール

IAM ロールが作成されていることが確認できますね。

アタッチされているポリシーの中身も確認しておきましょう。
今回はLambdaで必要最低限のポリシーしかアタッチされていませんね。
Chaliceではコードを解析して、必要最低限のポリシーを自動で作成してくれます!とても便利ですね!
コードによってはポリシーを自動生成できない場合もあるみたいですが、そういった場合は作成するポリシーをChaliceのコードで定義することも可能です。

API Gateway

API Gatewayが作成されていることが確認できますね。

リソースの確認に関しては以上です。

リソースの削除

最後に、作成したリソースを削除しておきましょう。
「chalice deploy」でコマンド実行時にAWSにデプロイされたIAMロール、Lambda、API Gatewayは以下のコマンドで一括削除ができます!これも簡単で便利ですね!

(venv310) C:\Users\xxxxx\Desktop\chalice-test\chaliceApp>chalice delete --profile chalice
Deleting Rest API: xxxxxxxxxx
Deleting function: arn:aws:lambda:ap-northeast-1:xxxxxxxxxx:function:chaliceApp-dev
Deleting IAM role: chaliceApp-dev

リソースの削除に関しては以上です。

おわりに

サクッとChaliceでAPIが作成できましたね!
私自身、まだまだ使いこなせていないですが、シンプルでとても便利だと感じました!
今回はLambda+API Gatewayを紹介しましたが、Lambda+S3イベント、Lambda+SQS、Lambda+CloudWatch Eventの定期実行など、Lambdaと連携するリソースをChaliceでサクッと作成することができるみたいです!
また、CloudFormationやCDKとの連携もサポートしているみたいですので、こちらも別記事で紹介できたらと思います!
今後も業務で触れる機会も多いと思うので、継続して知見を高めていきたいと思います!

私の記事が少しでも皆様のご参考になれば幸いです!

この記事をシェアする
著者:nakao
IoT、サーバーレスな開発に興味深々。AWSエンジニア。