OAuth API for ALIS with backed Authlete.
# Install this project
$ [email protected]:AlisProject/serverless-oauth-api.git
$ cd serverless-oauth-api
$ npm install
# Setup libraries
$ python -m venv venv
$ . venv/bin/activate
$ pip install -r requirements.txt
# Create .envrc to suit your environment.
$ cp -pr .envrc.sample .envrc
$ vi .envrc # edit
# allow
$ direnv allow
Set up AutlteleApiKey
and AutlteleApiSecret
ssm values with the following link.
https://github.com/AlisProject/environment
ローカルでインテグレーションテストを実施してうまく動けばセットアップは完了です
Serverless Frameworkを使用しています。基本的な使い方は以下を参照してください https://serverless.com/framework/docs/providers/aws/
コマンド | 用途 |
---|---|
npx serverless deploy | AWS環境へのデプロイ |
npx serverless deploy -f <function名> | 関数単位でのデプロイ |
npx serverless logs -f <function名> | CloudWatchLogsのログ確認 |
npx serverless invoke local -f <function名> | 関数のローカルでの実行 |
npx serverless invoke -f <function名> | デプロイ済みの関数の実行 |
** ステージ名とリージョンはそれぞれserverless.ymlで指定しているため、コマンドラインからの指定は不要です
|- .circleci CircleCIの設定ファイルを格納
|- lambdas Lambdaのハンドラー関数格納。Lambdaが発火するイベントごとにディレクトリを分ける
|- lib 共通で使うライブラリを格納
|- tests テストコードを格納、ユニットテストとインテグレーションテストをディレクトリを分けて格納
|- serverless.yml API及びLambdaの構成管理
|- requirements-prod.txt AWS環境にデプロイするパッケージ(テストのみで使用するパッケージは追加しない)
|- requirements.txt テストのみで使用するものを含む全パッケージ
ユニットテストとインテグレーションテストを実装してください。基本的にはインテグレーションテストで正常系をテスト、 インテグレーションテストでは行えないような異常系のテストなどはユニットテストで行ってください
以下のコマンドで実行されます。新たなエンドポイントに対するテストを追加する場合は、tests/unit配下にtest_xxxxx.pyにてファイルを追加してください
$ pytest tests/unit/ -s
以下のコマンドで実行されます。新たなエンドポイントに対するテストを追加する場合は、tests/integration配下にtest_xxxxx.pyにてファイルを追加してください
$ pytest tests/integration/ --stage $INTEGRATION_TEST_STAGE --region $AWS_DEFAULT_REGION -s
PR送信時にCIが走ります。テストを通した状態でレビュー依頼を実施してください
本GitHub上でtagを作るとデプロイパッケージがS3バケットにputされます。環境変数DEPLOYMENT_BUCKETにデプロイしたいバケット名を指定してください。 指定したtagをS3オブジェクトのprefixとしてデプロイパッケージがアップロードされます。
$ git tag 1.0.0
$ git push origin 1.0.0
上記のデプロイが正常終了後は以下のaws-cliでCloudFormationテンプレートを反映させてください。なお、stack-nameは自由に決めて構いません。
新規追加時
$ aws cloudformation create-stack --stack-name <スタック名> --template-url https://s3-ap-northeast-1.amazonaws.com/<バケット名>/<tag名>/cloudformation-template-update-stack.json --capabilities '["CAPABILITY_IAM","CAPABILITY_NAMED_IAM"]'
既存stack更新時
$ aws cloudformation update-stack --stack-name <スタック名> --template-url https://s3-ap-northeast-1.amazonaws.com/<バケット名>/<tag名>/cloudformation-template-update-stack.json --capabilities '["CAPABILITY_IAM","CAPABILITY_NAMED_IAM"]'