EC2にApacheでPython動かした時の覚書
Hello World!というhtmlを返す+S3に何か書き出せることだけ確認したときの覚書。
インストール
$ sudo yum install httpd
設定
$ sudo yum install httpd
/etc/httpd/conf/httpd.conf
を編集
- Options に ExecCGIを追加
- DirectoryIndex に index.pyを追加
- AddHandler cgi-script に.pyを追加
ソースコード
/var/www/html/
にindex.pyをつくってコード書く
$ chmod 755 index.py
して実行できるようにする。
boto3使うので入れる
$ sudo pip install boto3
書いたコード
(BucketNameは自分のバケット名に書き換え)
#!/usr/bin/python
# coding:utf-8
import boto3
import logging
import datetime
import cgi
import uuid
def main():
now_s = datetime.datetime.now().strftime('%Y.%m.%d-%H:%M:%S')
messge = "no-message"
field = cgi.FieldStorage() # クエリパラメータにmessageがあれば使う
if field.has_key('message'):
message = field['message'].value
# html
print "Content-Type: text/html\n"
print "Hello World!"
# S3
s3 = boto3.resource('s3')
key = 'test-folder/{0}-{1}.txt'.format(now_s, uuid.uuid4())
s3.meta.client.put_object(Bucket='BucketName', Key=key, Body=message)
# log
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(logging.INFO)
logger.error(message)
logger.info(message)
if __name__ == "__main__":
main()
Apache Start
$ service httpd start
確認
httpリクエストして、以下が確認できればOK。
- 応答が200で、Hello World!というhtmlが返る。
- S3の指定したバケットのtest-folderに「日付+日時+uid.txt」みたいな名前のファイルができている。
- ログ出力できている。
その他
PostされたBodyを取得したいとき、それがフィールドとして壊れてたり生データだとcgi.FieldStorageから取れず、not indexableエラーでる。sys.stdin.read()ならとれた。
Author And Source
この問題について(EC2にApacheでPython動かした時の覚書), 我々は、より多くの情報をここで見つけました https://qiita.com/shu85t/items/e80129ea93dcfb6e6d61著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .