#はじめに
AWS上でWebAPIを動かす機会があったのでそのやり方を忘れないように、ここに綴っていきます!
##事前に準備するもの
- AWSアカウント
以上。
その後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上でできます
インスタンスを指定し、説明欄のセキュリティグループのインバウンドに行きます
編集ボタンを押してタイプ,プロトコル,ポート範囲,ソースを設定します
この例だと80,20,10080番ポートを開放してます
###実行
####ログイン
$ssh -i .ssh/***.pem ec2-user@¥¥¥¥¥.?????.amazonaws.com
###pythonのコード
bottleを用いたpythonコードを書きます
# -*- 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
を叩くと・・・
上のコードのtest_dataの中身が確認できています
##おまけ
AMI : インスタンスの作成に必要なソフトウェア構成 (OS、アプリケーションサーバー、アプリケーション) を含むテンプレートです
###サーバで使えるコマンド
ファイル送る時
$ scp -i .ssh/***.pem -r (ローカルの指定のディレクトリ) ec2-user@¥¥¥¥¥.?????.amazonaws.com:(サーバの指定のディレクトリ)
プロセス情報を見る & 削除
$ ps -ef | grep ***
$ kill (process number)
##感想
やっぱ定期的に使ってないと忘れるよね