AWS Lambda 上での Python API サービスをローカルでも検証するために serverless-wsgi を利用する

serverless framework を使って Web API を作りたいと思っていて色々調べていたのだけれど、以下のような場合にどうしようかなあと思っていた。 AWS S3 Bucket上に展開したWeb Hosting上からAPI Gateway経由でサービスを叩くアーキテクチャ つまり別途フロン…

WSL on Dockerでbridgeネットワークを使うと通信速度がやけに劣化する

Windows Subsystem for Linux に apt 経由で docker をインストール*1したものの、どうにもこうにも処理が遅い。 元々のきっかけは docker をビルドに利用する別のツールを利用していたのだけれど、1ビルドに数十分かかるのでいったいなぜだと調べ始めたこ…

serverless frameworkでpublic repositoryに含めるべきではないデプロイ情報を扱う

AWS

AWS Lambdaの開発環境としてServerless Frameworkを使ってみることにしました。Frameworkと銘打っていますがソフトウェアの中に組み込んで使うフレームワークではなく、各種のSource Code as a Serviceに対するデプロイや運用をサポートしてくれるためのツー…

ファイル操作をmock化する

open とか codecs.open でファイルを開く場合は基本 with句で使っているので単純にopenをモックに書き換えようとすると相当面倒くさい。そのために mock_open という関数が用意されている。 open() をコンテキストマネージャーとして使う方法は、ファイルが…

Github上のPythonプロジェクトに必要なテストツールとCIツールのセットアップを行った話

Githubに公開するなら、普通のPython関連の周辺ツールのインストールや設定をしてみようと、色々と試行錯誤したところでハマったところとかポイントとか工夫とかのメモ。今回はプロジェクトの構造は boto3 のものをまねることにした。対象プロジェクト - htt…

nosetestsをWindows Subsystem for Linuxで使う場合の注意点

Pythonのunittest実行ライブラリの nose ですが、ファイル名に test がついているテストファイルを nosetests コマンドで自動検索しようとしても全然引っかからない事象に遭遇。 一応、直接ファイルを指定すれば実行はしてくれる。で、色々なところを見て回…

ボードゲームカード自作補助のためのツール testplay-card-generator のα版を公開しました

別の名義を使ってはいますが、個人的な趣味でボードゲームの自作などをやっています。 そういったゲームを作る中でも汎用性が高く、印刷しやすいコンポーネントにカードがあります。で、実際にルールを考えてテストプレイをするタイミングで実際に考えた内容…

複数の画像から印刷用のpdfファイルを作成する(Python, ImageMagick)

複数の画像をまとめて1回の印刷で対応できるような PDF ファイルを作りたい場合にどうするか。 Python上でプログラムによって pdf ファイルを生成する AWS Lambda Python で PDF 作りたくてどうしようかと思って調べていたけど、Pillow(PIL) と reportlab …

MFAによって認証された有効期限付きのAWS Access Keyをできるだけ楽に使いたい

AWSのIAMユーザーを作って権限を与えて管理している場合、やっぱりふとしたミスが怖い。例えば、AccessKeyとSecretAccessKeyをプログラムの中に埋め込んでしまっていることを忘れて public repository にコミットしてしまったりなど。 そもそも、profileをち…

AWS LambdaにアップロードしたZIPファイルの取得方法

AWS

ちょっとした作業ミスで Lambda 関数をデプロイした後にローカルのファイルを跡形も無くすっ飛ばしたので、現在アップロード済みのファイルを取得できないか調べた。結論としてはできる。 aws lambda get-function --function-name [your function name]とし…

Amazon Simple Workflow ServicesをAWSCLIで使ってみて理解する

AWS

ちょうどAWS上でワークフローが必要になるような業務を実装することになったので、アーキテクチャを考えてみました。 もちろん、それらのワークフローの実施が冗長化されており、同時にスケールすることも前提で。…と、意気込んで以下のコンセプトを元にした…

Amazon Cognito User Pools のAuthorize APIを結局解読した

AWS

1度挫折したんですが、Node.js側からせめてサーバーサイドでも認証できました。 具体的なコードを(ほとんどコピーですが)以下のプロジェクトに上げました。https://github.com/a-hisame/cognito-userpools-examplecognito-idpのGetAuthenticationDetailsとA…

Amazon Cognito User Pools をPythonから利用しようとして挫折した

先週のAWS Summit in シカゴで発表された AWS Cognito User Pools ですが、モバイルやウェブ画面からだけではなくて、サーバー側の認証機構として使えないかをPythonとAWSCLIで色々試行錯誤して失敗したので記録しておきます。原理的にはできなくもないんで…

AWS LambdaでVPC内のPrivateインスタンスにSSH接続する

http://aws.typepad.com/aws_japan/2016/02/access-resources-in-a-vpc-from-your-lambda-functions.html昨年のAWS re:Inventで対応が発表されていましたが、とうとうAWS LambdaからVPC内リソースにアクセスが出来るようになったので何が出来るのか眺めてい…

AWS LambdaのPython版をいまさらながら使ってみた

ので、導入の時に迷った点を残しておく。 pythonで用意するエントリポイントのファイル名や関数名は自由 (ただし、Configuration#Handlerで"ファイル名.エントリポイント関数名" で指定する必要がある) エントリポイントの関数の第一引数は基本dict形式でイ…

Amazon Linux上のOpenJDKをアップデートするとTimeZoneのデフォルトがおかしくなったというお話

はじめに Amazon Linuxで動作するJavaのWebアプリケーションを動かしていたんだけれど、アップデートをするとどうにもログの出力日付がおかしい。 ということで色々調査してみてた結果、以下のTimeZoneのデフォルト値(取得方法は下記のソースコードを参照)が…

Eclipse BIRTのレンダリング時にReport Parametersによって読み込む固定ファイルを変更する

シナリオ レポート生成ツールとしてEclipse BIRTを利用している 多数のCSVファイルが存在する BIRT Serverへのリクエスト時に引き渡す値によって異なるCSVファイルを読み込んで出力したい CSVを読み込むには 以下、BIRT用のEclipse Designerを利用しているこ…

Amazon SQSでVisibility Timeout中のメッセージを消す方法

AWS

Amazon SQSのキューからメッセージを取得した場合、Visibility Timeoutという期限が設定されてこの間にはメッセージを受信した時に取得したReceiptHandleを利用しない限りVisibility Timeoutの再設定およびメッセージの削除を行うことができない。Visibility…

matplotlibで円グラフを書く

タイトル通りだが、実際にやってみると幾つかうまく行かないところがあったのでメモ。 そもそも円グラフを書くには plot.pie あるいは axes.pie関数を利用する。http://matplotlib.org/examples/pie_and_polar_charts/pie_demo_features.html

commons-codecのBase64に改行が入ってくる

紆余曲折、うまく行かないことを調査していくとBase64.encodeの結果に改行が入っているというところに行き着く。Javaでcommons-codecのBase64クラスを使ってたんですが、このencodeBase64Stringメソッドがバージョンによって戻ってくる文字列のフォーマット…

Amazon Linux で yum に失敗する

Amazon Linuxを仕事で使っていると、誰もが一度は通る道。インターネットには接続できるのに、Amazon Linux上でyumコマンドのどれを実行してもタイムアウトになってしまうことがある。yumが使えないという場合の大半の事象がこれで良く聞かれる上に結構汎用…

AWSCLIではまったこと

AWS

awscliを普通のbashとかと同じ感覚で使ってはまったのでメモ。一般に、bashとかだと . とか .. がパスの間に挟まってもそれを解釈した上で処理してくれる。これは、srcやdestとして使ってもおんなじ。 # 以下の2文は同じ結果を返す ls /var ls /var/./log/..…

DynamoDBのテーブル存在チェック

DynamoDBのテーブルの存在チェックをする方法。 ListTableを利用する 一番簡単なのはListTableを実施して、その中にお目当てのテーブルがあるかどうかを見ればよい。 def exists_table(table_name, connection): return table_name in connection.list_table…

SQSでメッセージ受信回数による処理切り分けをしたい

SQSのVisibility Timeoutを使って再実行をするのはいいんだけれども、無効な命令が投げられてたりした場合には有限で終了して欲しいので、それを実現するにはどうすればいいのかというお話。幾つか方法はあるけれども、主に考えられるのは2つ。 MessageのAtt…

FirefoxをverupするとSeleniumが動作しなくなった

Windows7/Firefox36/Python2.7/Selenium2.39で発生。昨日まで動いていたプログラムがFirefoxのバージョンを上げた結果、以下のようなエラーメッセージを発して失敗するように。 ... File "C:\lib\Python27\lib\site-packages\selenium-2.39.0-py2.7.egg\sele…

matplotlibでうまく行かなかったこと

グラフを生成するライブラリとして、matplotlibを利用してみた。かなりやりたい事が手軽にできたのだが、1つのプログラム内で大量の画像を生成しようとすると以下のような警告がでる。 /usr/lib/pymodules/python2.7/matplotlib/pyplot.py:412: RuntimeWarni…

環境構築中にハマったこと

AWS

直近でサーバをセットアップしていてはまったネタを幾つか。 なお、両方ともテスト環境では動作していたので、調査に色々と手間取りました。 両方とも、原因は再構築時に色々バージョンが上がっていたことですが、その問題にぶち当たりそうな人がしばらくで…

PowerShellのechoにつまづいたので忘備録。

さて、以下のPowerShellのコードにどのような結果を期待するだろうか? function Hoge([int]$num) { echo "Debug" return ($num + 1) } Hoge 10PowerShellの経験が無ければ、おそらく以下のように考えるはずである。 Debugという文字列が標準出力される Hoge…

Eclipse BIRTでできる事を書いてみた

仕事で既にそろっているデータを元にして自動的にレポート生成をしたいことがあった。 色々探してみると、既にある仕組みを探してみるとEclipse BIRTがちょうど良かった。日本語の資料としてはかなり古いバージョンの2系を中心にしたものはあるけど、最新の4…

PowerShellのリモート処理をAWS Windows Serverで使ってみて

はじめに この記事はPowerShell Advent Calendar 2013の1日目の記事です。 今年に入って、AWS上のWindows Serverを操作するためにPowerShellのリモート機能を使うことがありました。 そこで得た知見を書き残すのが、本エントリの主旨です。