サクッと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との連携もサポートしているみたいですので、こちらも別記事で紹介できたらと思います!
今後も業務で触れる機会も多いと思うので、継続して知見を高めていきたいと思います!
私の記事が少しでも皆様のご参考になれば幸いです!