LoginSignup
4
6

More than 5 years have passed since last update.

EC2にApacheでPython動かした時の覚書

Last updated at Posted at 2016-06-19

Hello World!というhtmlを返す+S3に何か書き出せることだけ確認したときの覚書。

インストール

$ 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は自分のバケット名に書き換え)

index.py
#!/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()ならとれた。

How to parse the “request body” using python CGI?

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