2
4

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 5 years have passed since last update.

【AWS】Pythonの開発環境Chaliceを使ってみる - API Key

Last updated at Posted at 2018-12-23

PythonのLambda関数の開発環境としてChaliceを使ってみます。今回はChaliceによって作られるAPI Gatewayへのアクセスを、API Keyで制限してみます。

Chaliceの環境設定などは以下の記事を参照してください。
【AWS】Python Lambdaのdeploy - Chalice

ドキュメントは「AWS Chalice」「aws/chalice - github」 になります。

#1.プロジェクト作成

まずプロジェクトを作成作成します。

$ chalice new-project api-key-test
$ cd api-key-test

次にソースコートは、ドキュメントにあるものを流用させていただきます。
APIが必要なパスと、必要無いパスを設定します。

app.py
from chalice import Chalice

app = Chalice(app_name='api-key-test')

# 以下のパスへのアクセスにはAPI Keyが必要ありません。
@app.route('/')
def index():
    return {'hello': 'world'}

# 以下のパスへのアクセスにはAPI Keyが必要です。
@app.route('/auth', methods=['GET'], api_key_required=True)
def authenticated():
    return {"secure": True}

次にdeployします。自動的にIAM roleが生成され、LambdaとAPI Gatewayが作成されます。最後に作成されたリソースが表示されます。

$ chalice deploy
Creating deployment package.
Creating IAM role: api-key-test-dev
Creating lambda function: api-key-test-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxx:function:api-key-test-dev
  - Rest API URL: https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/

#2.テスト

まずAPI Keyの必要ないパスにアクセスします。問題ありません。

$ curl https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/

{"hello": "world"}

次に、API Keyを要求するパスに、API Keyを指定せずに、アクセスします。これはエラーとなります。

$ curl  https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/auth/

{"message":"Forbidden"}

それでは作成したAPI GatewayにAPI Keyの紐づけを行います。「ゼロから作りながら覚えるAPI Gateway環境構築」を参考にさせていただきました。今回はLambdaやAPI Gateway自体は自動生成されているので、API Keyの紐づけだけが必要となります。

AWSのコンソールのAPI Gatewayで使用量プランを選択します。無かったら上記ブログを参考にして作成ます。以下の画面のように作成されたAPI Gatewayを追加します。

image.png

追加されたら、APIキーの画面で「表示」をクリックし、キーをコピーします。

image.png

コピーしたキーをx-api-keyの値(zzzzz)にしてアクセスします。

$ curl -H 'x-api-key:zzzzz' https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/auth/

{"secure": true}

これで無事にアクセスできました。

今回はこれで終わりです。

#★最近の投稿
Python でいろいろスクレイピング
【AWS】Pythonの開発環境Chaliceを使ってみる - アマゾン売れ筋ランキング
【AWS】Pythonの開発環境Chaliceを使ってみる - CloudWatch Events
【AWS】Pythonの開発環境Chaliceを使ってみる - API Key
【AWS】Python Lambdaのdeploy - Chalice
【AWS】Python Lambdaのdeploy - CloudFormation

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?