27
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

爆速でモックAPIを構築する

Last updated at Posted at 2021-09-30

AWS Chalice を使って爆速でモックAPIを作ってみました。

AWS Chalice は Python 製のフレームワークで API Gateway と Lambda をサクッと構築できます。(詳細は公式を参照ください。)

構成

構築する環境はAPI Gateway + Lambdaとなります。

composition.png

今回は以下前提にて構築します。

  • pythonインストール済み
  • Lambdaに付与するロールは事前作成済み(ロールの自動生成は使わない)
  • AWS CLIの設定済み

構築

何はともあれ作っていきます。

  1. chalice インストール

    pip install chalice
    
  2. プロジェクト作成

    chalice new-project chalice-example
    cd chalice-example
    
  3. app.py を修正

    • 初期状態からコメントアウトを削除
    app.py
    from chalice import Chalice
    
    # app_nameに指定した値がAPI Gateway名になる
    app = Chalice(app_name='chalice-example-apigateway')
    
    # GETメソッドで'/'にアクセスした際{'hello': 'world'}を返す
    @app.route('/')
    def index():
        return {'hello': 'world'}
    
    # GETメソッドで'/hello/{name}'にアクセスした際{'hello': 'パスパラメータ(name)'}を返す
    @app.route('/hello/{name}')
    def hello_name(name):
       return {'hello': name}
    
    # POSTメソッドで'/users'にアクセスした際{'user': body}を返す
    @app.route('/users', methods=['POST'])
    def create_user():
        user_as_json = app.current_request.json_body
        return {'user': user_as_json}
    
  4. .chalice/config.json を修正

    • ロールを自動生成させないようにmanage_iam_roleを指定
    • Lambdaに付与するロールをiam_role_arnに指定
    • Lambda名app_nameを変更
    config.json
    {
      "version": "2.0",
      "app_name": "chalice-example-lambda",
      "stages": {
        "dev": {
          "api_gateway_stage": "api",
          "manage_iam_role": false,
          "iam_role_arn": "arn:aws:iam::XXXXXXXXXXXX:role/XXXXXXXXXXXX"
        }
      }
    }
    
  5. デプロイ

    chalice deploy --profile [AWS CLI プロファイル名]
    
  6. リソース確認
    マネコンからAPI GatewayとLambdaが作成されているか見てみます。
    APIGatewayを見てみるとchalice-example-apigatewayという名前で作成されていて、Lambdaが紐づいているようです。
    apigateway.png
    次は、紐づいているLambdaを見てみます。
    chalice-example-lambda-devという名前で作成されてます。
    -devがついているのはconfg.jsonで指定したステージ名で、デプロイ時に指定することができます。
    デフォルトdevになります。
    lambda.png
    無事、API GatewayとLambdaが作成されてました!

  7. アクセス確認
    今回はお手軽にCurlコマンドで確認します。URLはデプロイ後に出力されます。

    [user@server chalice-example]$ chalice deploy --profile [AWSプロファイル名]
    Creating deployment package.
    Creating lambda function: chalice-example-test-dev
    :
    # このURLに対してアクセス
      - Rest API URL: https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/
    

    結果はこんな感じですべて期待通りになりました!

    # GETメソッドで'/'にアクセスした際{'hello': 'world'}を返す
    [user@server chalice-example]$ curl https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/
    [user@server chalice-example]$ {"hello":"world"}
    
    # GETメソッドで'/hello/{name}'にアクセスした際{'hello': 'パスパラメータ(name)'}を返す
    [user@server chalice-example]$ curl https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/hello/AAA
    [user@server chalice-example]$ {"hello":"AAA"}
    
    # POSTメソッドで'/users'にアクセスした際{'user': body}を返す
    [user@server chalice-example]$ curl -X POST -H "Content-Type: application/json" -d '{"Name":"AAA", "Age":"100"}' https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/users
    {"user":{"Name":"AAA","Age":"100"}}
    
  8. 削除
    不要なリソースは削除しましょう。

    chalice delete --profile [AWS CLI プロファイル名]
    

最後に

chaliceを使うことでわずか数コマンドで簡単にモックAPIが作れました。

Lambdaのコードも感覚的にわかりやすいので簡単なAPIであれば数分でいくつも開発できると思います。

この記事がどなたかの力になれれば幸いです。

補足

ローカル実行はこのコマンドをたたくだけです。

[user@server chalice-example]$ chalice local
Serving on http://127.0.0.1:8000

'/'へ接続してみると期待通りのレスポンスがありました。

[user@server chalice-example]$ curl http://127.0.0.1:8000
[user@server chalice-example]$ {"hello":"world"}
27
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?