2015年3月30日月曜日

AWSの料金情報csv

AWSの料金情報csvが「いつ時点の料金なのか」 はcsvの末尾に次ぎのような形で表示されているらいしんでメモ。

This report reflects your estimated monthly bill for activity through approximately 2015/03/29 16:16:18

2015年1月23日金曜日

AWSのMACアドレス。

AWS EC2 の VPC の中では Instance を停止/再開してもMACアドレスは変わらない。Terminateすれば変わる。
EC2-Classic の環境では停止再開で変わる。

ENIのMACアドレスは固定。

2014年12月22日月曜日

AWS VPCを作る際に最低限必要なIP

VPCを作成する際、最低でも /28 のサブネットが必要。最大は /16。
VPC内のサブネットも、最低 /28 のサブネット。
但しサブネット一個につき、先頭 4IPアドレス、末尾 1IPアドレスの合計5つはAWS側が利用するので使えない。
つまり /28 で作ったら利用できるIPは11個。

但しVPC内にELBを立てる場合は、/27 でサブネットを作る必要があり、フリーのIPアドレスが8個ある必要がある。

 参考
* Amazon VPC のよくある質問
* Amazon VPC の Elastic Load Balancing
* Configure Amazon VPC for Elastic Load Balancing
* ELBをVPC内に設置する際のサブネット設計の注意点


2014年8月1日金曜日

「取り敢えずAWSを使ってる」 開発者のためのAWS再入門のスライドを公開しました。

社内勉強会で使ったスライドを公開しました、ので宣伝です。 対象 AWSは利用してるけど、InstanceとVolume位しか使ってない・・・、という人。 最近のAWSの機能に追いついてない・・・、という人。 目的 AWSの新機能、余り知られていない機能を活用してより快適に、より安く、より安全にAWSを利用しよう。 ・・・という事で余りAWSを活用出来てないなぁという方を対象にしたスライドです。

2014年5月19日月曜日

2014年4月19日土曜日

botocoreでマルチプロファイルを使う方法。

botocore使ってるAWS CLIは簡単にプロファイル(AWSアカウント)の切替出来るのに、botocoreだとどうやるか分からんかったので調べた。
ただなーんかスマートじゃないんだよね。誰か正しい方法教えてえろい人。

準備

環境はUbuntu13.10。まずはpythonのインストール。多分余計なのも入れてる気がする。

sudo aptitude install python3.3 python3.3-dev build-essential automake libtool pkg-config

続いてbotocoreを持ってきていれる。ここは敢えてAWS CLIは入れてない。

cd ~/git
git clone https://github.com/boto/botocore.git
cd ~/git/botocore
sudo python3.3 setup.py install

configファイルの作成

configファイルってのはプロファイルの集まり。つまりこのファイルに利用したいAWSアカウントのアクセスキー/シークレットアクセスキーを列挙する。
一応このファイルには以下の書式ルールがある。

特に指定がなきゃ「default」が使われる
二個目以後は必ず「profile HOGE」見たいに頭に「profile 」を付ける必要がある。

ファイルの場所はどこでもいい。最終的にAWS_CONFIG_FILE環境変数にこのファイルへのパスを書く。
[default]
aws_access_key_id=AAAA
aws_secret_access_key=BBBB

[profile HOGE]
aws_access_key_id=CCCC
aws_secret_access_key=DDDD

[profile FUGA]
aws_access_key_id=EEEEE
aws_secret_access_key=FFFFF
region=ap-northeast-1

サンプルコード

session毎にprofileが切り替わる。つまりsession毎にAWSアカウントが切り替わる。
get_sessionメソッド実行時に環境変数っぽいけいしきでファイルを引き渡すとそれを元に、sessionを作ってくれるっぽい。

import botocore.session

# 特に指定しないと default が読まれる。
session = botocore.session.get_session()
ec2 = session.get_service('ec2')
operation = ec2.get_operation('DescribeInstances')
endpoint = ec2.get_endpoint('us-east-1')
http_response, response_data = operation.call(endpoint)
print(response_data)

# HOGEアカウントを指定したい場合
EnvironmentVariables = {
    'profile': ('HOGE', 'HOGE', 'HOGE'),
}
session = botocore.session.get_session(EnvironmentVariables)
ec2 = session.get_service('ec2')
operation = ec2.get_operation('DescribeInstances')
endpoint = ec2.get_endpoint('us-east-1')
http_response, response_data = operation.call(endpoint)
print(response_data)

2014年3月8日土曜日

古いInstanceTypeから新しいInstanceTypeに切り替えた時のトラブル対応

社内でm1系とかm2系で運用してきたInstanceをm3系、c3系に切り替えて再開したら、上手く起動しないという報告があった。

詳しく見てみるとm1.m2系のInstanceをSTOPして、InstanceTypeをm3/c3系に変更。その後STARTしたらRUNNING状態になるがステータスチェックの二つ目で転けていた。んでもってそもそもこのInstanceは結構古くから使われているモノだった。

ここまで聞いておおよそ見当が付いた。EC2Configとドライバが古いのだ。
取り敢えず一旦m1/m2系のInstanceで起動し直す。そこで以下の二つをDLして更新する。

http://aws.amazon.com/developertools/5562082477397515
http://aws.amazon.com/developertools/2187524384750206

とこれで完了。この後にm3/c3系に切り替えれば無事起動した。

2014年3月3日月曜日

python3 + bottleでshif-jisなcsvを出力する

無駄に悩んだ。
取り敢えずメモ程度に。
from io import StringIO
from bottle import route, response
@route('/get_csv')
def get_csv():
    response.content_type = 'application/octet-stream'
    response.headers['Content-Disposition'] = "attachment; filename='hoge.csv'"
    stream = StringIO()
    writecsv = csv.writer(stream)
        # ここでcsvを作る。
    stream.seek(0)
    return stream.getvalue().encode('shift-jis')

2013年11月18日月曜日

BOTOでCloudWathcのmetricsをとる

InstanceのIDを指定してCPU使用率をとる方法。

環境
python3.3
BOTO 2.9.0 py3kport
import datetime
from decimal import Decimal,ROUND_HALF_UP
from boto.ec2.cloudwatch import CloudWatchConnection,regions

for region in regions():
    cw_con = CloudWatchConnection(
        aws_access_key_id     = 'AAA',
        aws_secret_access_key = 'BBB',
        region = region,
    )
    for val in cw_con.get_metric_statistics(
            60,
            datetime.date.today() - datetime.timedelta(hours=0.1),
            datetime.datetime.today(),
            'CPUUtilization',
            'AWS/EC2',
            'Average',
            {'InstanceId': ['i-CCC']},
            'Percent',
    ):
        print(val)

2013年9月18日水曜日

Python bottleでPOST時の項目数上限

Pythonのbottleを使ったWebサイトで、100個以上の項目(inputとかtextarea)を投げると100個までしか取得出来ない問題が起きた。

調べたらどうやら100個制限してるのが仕様っぽい
THE REQUEST OBJECT

んで取り敢えずこの設定を上書きすれば100この制限は外れるっぽい。

そのWeb全てのqueryに適用する場合はbottle読み込んでる所の一番上にかく。

from bottle import BaseRequest
BaseRequest.MAX_PARAMS = 200

各ページ個別で上限を設定する場合は

from bottle import BaseRequest
@route('/create', method='POST')
@view('confirm')
def post_create():
    BaseRequest.MAX_PARAMS = 200
    value = request.forms.decode().get('key')

となる。
まぁSecurityとか考えたら個別で設定だよな。