「AWS用REST API風のもの」の版間の差分
1行: | 1行: | ||
− | VYATTA USERS MEETING Spring 2014 に行ってきたら、結構いろんなクラウドにはREST | + | VYATTA USERS MEETING Spring 2014 に行ってきたら、結構いろんなクラウドにはREST APIが用意されているのに、Amazon Web Services(AWS)にはServiceごとにまちまちにしか用意されてなさそうだったので、REST API風に見せかけるやつをあれしました。S3用のREST情報や、商品検索(A2S ECS)などのREST API情報は見つかるのですが、EC2やRoute53、IAMやRDSなど他のサービスについては見つかりませんでした。ちゃんとしたものがあるかもしれませんが、とりあえず手っ取り早くREST風味に仕立てました。 |
ただ単純に、HTTPで受けたのをAWS CLIに食わせるだけという暴挙を行っております。 | ただ単純に、HTTPで受けたのをAWS CLIに食わせるだけという暴挙を行っております。 | ||
11行: | 11行: | ||
※せめてHTTPSにしましょう | ※せめてHTTPSにしましょう | ||
+ | |||
+ | ※あたりまえですが、IAMユーザを発行してそのKEYでやりましょう。 | ||
== 作り方の雰囲気 == | == 作り方の雰囲気 == |
2014年4月10日 (木) 12:26時点における版
VYATTA USERS MEETING Spring 2014 に行ってきたら、結構いろんなクラウドにはREST APIが用意されているのに、Amazon Web Services(AWS)にはServiceごとにまちまちにしか用意されてなさそうだったので、REST API風に見せかけるやつをあれしました。S3用のREST情報や、商品検索(A2S ECS)などのREST API情報は見つかるのですが、EC2やRoute53、IAMやRDSなど他のサービスについては見つかりませんでした。ちゃんとしたものがあるかもしれませんが、とりあえず手っ取り早くREST風味に仕立てました。
ただ単純に、HTTPで受けたのをAWS CLIに食わせるだけという暴挙を行っております。
Security的などなどいろいろ問題はありますが、まあ内部で利用する分にはいいよね!ってことで割り切って使えばいいかな?
※ちゃんと作るつもりはありません。
※キーをおもいっきりURLに書いちゃってるところが熱いのですが、内部用としてはいいかな?って思ってます
※せめてHTTPSにしましょう
※あたりまえですが、IAMユーザを発行してそのKEYでやりましょう。
作り方の雰囲気
あくまでも雰囲気なので、この通りやってもだめかもしれません。
AmazonLinuxをLaunch
sshでAmazonLinuxに入る
sudo yum -y install httpd python mod_python aws-cli
で必要そうなものを入れる
/etc/httpd/conf.d/python.conf に
Alias /test/ "/var/www/test/" <Directory "/var/www/test"> AllowOverride None Order allow,deny Allow from all AddHandler mod_python .py PythonHandler mod_python.publisher PythonDebug On </Directory>
こんな感じに足す
/var/www/test/aws.py
を
#!/usr/bin/python2 # -*- coding: utf-8 -*- import os import shutil import sys import codecs import datetime import locale import commands from mod_python import apache,util def escapecmd(arg): ret = arg.replace(";", "") ret = ret.replace("`", "") ret = ret.replace("<", "") ret = ret.replace(">", "") ret = ret.replace("$", "") return ret def restapi(req, awsid, awskey, region, cmd, subcmd, options): ret = apache.OK json = "" req.content_type = "application/json" awsid = escapecmd(awsid) awskey = escapecmd(awskey) region = escapecmd(region) cmd = escapecmd(cmd) subcmd = escapecmd(subcmd) options = escapecmd(options) line = " export AWS_ACCESS_KEY_ID=" + awsid line += " ; export AWS_SECRET_ACCESS_KEY=" + awskey line += " ; aws " line += " --output json" line += " --region " + region line += " " + cmd line += " " + subcmd line += " " + options c_status, c_output = commands.getstatusoutput(line) json = c_output if 0 != c_status: ret = apache.HTTP_BAD_REQUEST req.write(json) return ret
こんな感じで作る
※ちゃんとサニタジングとかエラートラップとか必要ないimportとかあれするのがおすすめ!
sudo service httpd restart
で反映!
で curl なり wget なり Browser なりで、
でアクセス!
例.
※繰り返しではございますが、せめてHTTPSにはしましょうね