LoginSignup
3
2

More than 5 years have passed since last update.

Bottle使ってAWSでAPIを動かして見た

Posted at

はじめに

AWS上でWebAPIを動かす機会があったのでそのやり方を忘れないように、ここに綴っていきます!

事前に準備するもの

  • AWSアカウント

以上。

手順

AWSマネジメントコソールにログイン

スクリーンショット 2018-11-09 14.09.07.png

その後EC2ダッシュボードへ

サーバの設置

インスタンス作るだけ
青い「インスタンスの作成」から、
1.Amazonマシーンイメージを選択(AMIがあればそれを選択)
2.インスタンスの選択(CPUやメモリ)
3.インスタンスの設定(ネットワークなどの細かい設定)
4.ストレージの追加(サーバのストレージの増減)
5.タグの追加
6.セキュリティグループの設定(トラフィックを制御するファイアウォールのルールセット)
7.確認
を経てサーバを作成する
このとき,pemファイルを作っておくとsshやscpの際にいちいちメンドくさいことやらなくて良くなります。
私は~/.sshディレクトリにpemファイルを置きました。

AMIの作成(必要なら)

やっぱ公式が最強
https://docs.aws.amazon.com/ja_jp/toolkit-for-visual-studio/latest/user-guide/tkv-create-ami-from-instance.html

サーバに必要なパッケージなどをぶち込む

yum で頑張る
python3(pyenv)
僕はpyenvを入れたのですが、ここではpython3.6を入れるコマンド書いときます

$ sudo yum install python36u python36u-libs python36u-devel python

bottle

$ pip install bottle

ポートの解放

aws上でできます
インスタンスを指定し、説明欄のセキュリティグループのインバウンドに行きます
編集ボタンを押してタイプ,プロトコル,ポート範囲,ソースを設定します
スクリーンショット 2018-11-09 14.26.13.png
この例だと80,20,10080番ポートを開放してます

実行

ログイン

$ssh -i .ssh/***.pem ec2-user@¥¥¥¥¥.?????.amazonaws.com

pythonのコード

bottleを用いたpythonコードを書きます

api.py
# -*- coding:utf-8 -*-

from bottle import route, run
from bottle import get, post, put, delete, request, response
import json

test_data = {"flag":"True","test":"OK"}

@get('/test')
def return_json():
    return json.dumps(test_data)
    #return test_data

@get('/test/<element:re:[a-z]+>')
def return_specific_element(element):
    print(element)
    if element in test_data:
        print("OK")
        return test_data[element]
    else :
        response.status = 404
        return {}

@post('/test/post')
def post():
    #requestはjson形式
    print(request.params.keys())
    for key in request.params.keys():
        print("key:",key)
        if key not in test_data :
            test_data[key] = request.params[key]
            print("add_data")
    print(test_data)
    return "succeess"

run(host='0.0.0.0',port=10080,debug=False,reloader=True)

テスト用です
bottleについて詳しく知りたい人はここをみるといいと思います

コンソールから実行

$ python api.py

すると・・・

Bottle v0.12.13 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:10080/
Hit Ctrl-C to quit.

みたいな感じのが出ます。これで無事動いています
この例だと10080ポートを指定しているので、
AWSのインスタンスのURL:10080/test/flag
を叩くと・・・
スクリーンショット 2018-12-04 16.07.24.png
上のコードのtest_dataの中身が確認できています

おまけ

AMI : インスタンスの作成に必要なソフトウェア構成 (OS、アプリケーションサーバー、アプリケーション) を含むテンプレートです

サーバで使えるコマンド

ファイル送る時

$ scp -i .ssh/***.pem -r (ローカルの指定のディレクトリ) ec2-user@¥¥¥¥¥.?????.amazonaws.com:(サーバの指定のディレクトリ)

プロセス情報を見る & 削除

$ ps -ef | grep ***
$ kill (process number)

感想

やっぱ定期的に使ってないと忘れるよね

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