PythonでHHMM形式同士の時刻の差分を取得する方法を備忘録的に残しておきます。
実行すると以下のように差分が取得できます。
takakabe@MyComputer:~$ python time_diff.py 0:30:00
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
PythonでHHMM形式同士の時刻の差分を取得する方法を備忘録的に残しておきます。
実行すると以下のように差分が取得できます。
takakabe@MyComputer:~$ python time_diff.py 0:30:00
LambdaのトリガにCloudWatchを設定した際にWe currently do not support adding policies for $LATEST.
のエラーがでた場合の対処法をご紹介します。
バージョンが$LATESTのLambda関数のトリガにCloudWatch Eventsを追加しようとしたところ以下のようなエラーが出てしまいました。
We currently do not support adding policies for $LATEST. (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 70ce2637-f806-11e7-91e6-098e8967446a)
雑な日本語訳をすると「$LATESTのポリシーの追加はサポートされていない」といったようなメッセージのようです。
これの原因はCloudWatchルールにデフォルトの場合、以下のように設定されているためです。
バージョン/エイリアスの設定の箇所がデフォルトになっており、エイリアスが非修飾のLambda関数を呼び出すようになっているためです。
CloudWatchルールのターゲットはLambda関数のバージョンまたはエイリアス単位で設定してあげる必要あります。
つまり、$LATESTなんてバージョンはしらねーぞというエラーみたいです。
このエラーを解決するためにはCloudwatchルールのターゲットでこのLambdaの$LATESTの設定を入れてあげればいいわけですが、そのままでは以下のように「項目がありません」と言われてしまいます。
これを解決するためにLambdaで$LATESTのエイリアスをつくってあげる必要があります。
マネジメントコンソールでLambdaのページに戻り、バージョンで$LATESTを選び、アクションから「エイリアスの作成」を選択します。
新しいエイリアスの作成ウインドウが開きますのでエイリアスの名前を適当に決め、バージョンで$LATESTを選択します。
上記のLambdaの設定を行うと、ターゲットで先程追加したエイリアスが選択できるようになっています。
これでバージョンが$LATESTのLambda関数のトリガにCloudWatch Eventsを追加することができます!
まあ言われてみれば当たり前といえば当たり前なんですが、わすれがちです。
デフォルトのエイリアスで非修飾のエイリアスが$LATESTになっているので、特に意識しなくてもいいようにはなっているんですが、特殊な設定をしたいといったときには有効です。
Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)
だいたいタイトルのとおりです。
停止中のEC2インスタンスのIAMロールを置換しようとするとエラーがでて、置換することができません。
以下のようなエラーがでます。
when calling the ReplaceIamInstanceProfileAssociation operation: The association iip-assoc-000000000012345678 is not the active association
そんなときは一度IAMロールをデタッチしてあげる必要があります。
IAMロールA→ロールなし→IAMロールB
といったかんじです。
なんでこんなことしなきゃいけないんだと思って調べていたらIAMロールの置換ができるのは実行中のインスタンスのIAMロールだけとのこと。
IAM ロールを置き換える 実行中のインスタンスの IAM ロールを置き換えることができます。
CLIなどでスクリプトを組む際は注意しなきゃいけませんね!
Amazon Web Services 業務システム設計・移行ガイド
EC2インスタンスの一覧を見るAWS CLIのdescribe-instances
コマンドでよくつかっているコマンドを紹介します。
aws ec2 describe-instances
aws ec2 describe-instances --instance-ids i-xxxxxxxx
複数指定の場合はスペース区切りでインスタンスIDを列挙する。
aws ec2 describe-instances --instance-ids i-xxxxxxxx i-yyyyyyyy i-zzzzzzzz
aws ec2 describe-instances --filter "Name=instance-state-name,Values=running"
停止中の場合はValues=stopping
で取得可能。
他にもpending
,shutting-down
,terminated
,stopping
が指定可能です。
aws ec2 describe-instances --filter "Name=instance-type,Values=t2.micro"
aws ec2 describe-instances --filter "Name=vpc-id,Values=vpc-xxxxxxxx"
以下の例だとNameタグがwawawaのインスタンスの情報を取得します。
aws ec2 describe-instances --filter "Name=tag:Name,Values=wawawa
aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId'
aws ec2 describe-instances --query 'Reservations[].Instances[].{instanceid:InstanceId,instancetype:InstanceType}'
aws ec2 describe-instances --query 'Reservations[].Instances[].{instanceid:InstanceId,Tags:Tags[?Key==`Name`].Value|[0]}'
aws ec2 describe-instances --query 'Reservations[].Instances[].{instanceid:InstanceId,ebs:BlockDeviceMappings[].Ebs.VolumeId}'
aws ec2 describe-instances --query 'Reservations[].Instances[].{instanceid:InstanceId,security_groups:SecurityGroups[].GroupName[]}'
aws ec2 describe-instances --query 'Reservations[].Instances[].{ipaddress:NetworkInterfaces[].PrivateIpAddress[]',instanceid:InstanceId}
aws ec2 describe-instances --query 'sort(Reservations[].Instances[].InstanceId)'
aws ec2 describe-instances --query 'reverse(sort(Reservations[].Instances[].InstanceId))'
aws ec2 describe-instances --query 'sort_by(Reservations[].Instances[].{ipaddress:NetworkInterfaces[].PrivateIpAddress[],instanceid:InstanceId,name:Tags[?Key==`Name`].Value|[0]},&instanceid)'
Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)
IPアドレスとサブネットマスクでどこまでがネットワークアドレスなのかがわからなくなることが多かったので作りました。
ちょっとしたひまつぶしに作成したのでエラー処理等まじめにやっていないです。
こんなかんじで引数にIPアドレスをCIDR表記でわたしてあげるとそれぞれ2進数に変換してくれます。
./address.sh 192.168.10.1/25 Netmask: 11111111 11111111 11111111 10000000 Address: 11000000 10101000 00001010 00000000
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
さて、今回は我が家のTrello活用法をご紹介します。
我が家ではタイトルにも書いたとおり冷蔵庫の中身をTrelloでゆるーく管理しています。
うまく説明できないのでTrelloの画面をそのままみせるとこんな感じ。
冷蔵庫、冷凍庫、常温保存している食材をそれぞれ記載しています。
ただし、冷蔵庫の中身をすべて記載するのではなく、管理したいなー腐らせちゃいそうだなーと思うものだけを記載しています。
全部書こうと思うとキリがないですからね。(以前全部管理しようとして挫折しました…)
期限の日付はそのまま賞味期限です。
冷凍庫の場合は冷凍庫に移動させてから1ヶ月後などてきとーに設定しています。
まぁ多少はめんどくさいです。
でも便利!!!
性能評価や負荷試験でJMeterを利用することも多いかと思いますが、JMeterで負荷かけ開始から30秒~60秒くらいした後にJMeterClientのサーバがCPU使用率100%の応答なし状態になってしまう事象がありました。
スレッドグループの「結果をツリーで表示」を無効にする。
JMeterを利用していて動作が不安定になったときははヒープサイズを上げるという方法が一般的ですが、この「結果をツリーで表示」するが有効の場合ではヒープサイズをいくら上げても意味が無いことがおおいです。
CUIでやりなさいよってはなしなのかもしれないですけれどね。
Amazon Web Services負荷試験入門―クラウドの性能の引き出し方がわかる (Software Design plusシリーズ)
S3上にアクセスログを定期的に書き込むようなシステムがあったとして、古いアクセスログも残しておこなければならないんだけどそんなに頻繁に利用するわけではないから安価に保存したいといった場合があります。
これらを実現するために S3バケットにライフサイクルルールを設定し、古いログを削除するよう設定します。
ライフサイクルルールの設定はバケット単位で設定します。
バケットの「管理」の「ライフサイクル」から「ライフサイクルルールの追加」を選択します。
ライフサイクルルールの「ルール名」に任意のルールを設定します。
フィルターの追加も任意で構いません。
これを設定するとtest/
ディレクトリ以下のオブジェクトにのみライフサイクルを設定するといった設定ができます。
移行の設定で「現行バージョン」にチェックを入れ、オブジェクト作成から「AmazonGlacierへの移行の期限」を選択します。
オブジェクト作成からの日数にGlacierへ移行するまでの日数を入力します。
今回は確認のために1日としています。
設定の失効はとくに何も設定せずそのまま「次へ」でかまいません。
設定の内容が正しいことを確認して「保存」します。
S3の設定は以上で完了です。
これが
こうなります。
ストレージクラスがGlacierとなっているのがわかります。
Glacierに新たにボールドが作成されるわけでなく、S3から各オブジェクトを確認することになります。
Amazon Web Services実践入門 (WEB+DB PRESS plus)
EC2で拡張ネットワーキングを有効化する設定方法をご紹介します。
拡張ネットワーキングは、高い帯域幅、1 秒あたりのパケット (PPS) の高いパフォーマンス、常に低いインスタンス間レイテンシーを実現します。拡張ネットワーキングは追加料金なしで使用できます。
Linux の拡張ネットワーキング - Amazon Elastic Compute Cloud
ということです。
つまり有効にするだけで通信が早くなるというすぐれものです。
Ubuntuでネットワーキングを有効にする方法を記載します。
ethtool
コマンドでネットワークインターフェースで利用されているドライバーを確認します。
driver
の箇所がixgbevf
となっていたらOKです。「拡張ネットワーキングの設定を行う」まで読み飛ばしてもらって構いません。
以下の場合はvif
となっているのでネットワークインターフェースの設定を実施する必要があります。
$ ethtool -i ens3 driver: vif version: firmware-version: expansion-rom-version: bus-info: vif-0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no
まずixdbevfのモジュールのソースをwget
でダウンロードします。
wget "sourceforge.net/projects/e1000/files/ixgbevf stable/2.16.4/ixgbevf-2.16.4.tar.gz"
ダウンロードしてきたファイルを解凍します。
tar -zxvf ixgbevf-2.16.4.tar.gz
パッケージを/usr/src
の移動させます。
dkms
がこのパッケージをビルドできるようにするためです。
sudo mv ixgbevf-2.16.4 /usr/src/.
dkms.confを作成して以下のように値を設定します。
そのままコピーで大丈夫です。
sudo vim /usr/src/ixgbevf-2.16.4/dkms.conf PACKAGE_NAME="ixgbevf" PACKAGE_VERSION="2.16.4" CLEAN="cd src/; make clean" MAKE="cd src/; make BUILD_KERNEL=${kernelver}" BUILT_MODULE_LOCATION[0]="src/" BUILT_MODULE_NAME[0]="ixgbevf" DEST_MODULE_LOCATION[0]="/updates" DEST_MODULE_NAME[0]="ixgbevf" AUTOINSTALL="yes"
dkmsを利用してモジュールを追加します。
sudo dkms add -m ixgbevf -v 2.16.4
モジュールをビルドします。
sudo dkms build -m ixgbevf -v 2.16.4
モジュールをインストールします。
sudo dkms install -m ixgbevf -v 2.16.4
インスタンスに拡張ネットワーキングの設定を行うには、AWSCLIで以下のコマンドを実行します。
$ aws ec2 modify-instance-attribute --instance-id i-xxxxxxxxxxxxxxxxx --sriov-net-support simple
以下のAWSCLIを実行し、SriovNetSupport
のValue
がsimple
となっていればOKです。
$ aws ec2 describe-instance-attribute --instance-id i-xxxxxxxxxxxxxxxxx --attribute sriovNetSupport { "SriovNetSupport": { "Value": "simple" }, "InstanceId": "i-xxxxxxxxxxxxxxxxx" }
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
S3上にアクセスログを定期的に書き込むようなシステムがあったとして、古いアクセスログを自動的に消す仕組みを作ってみたいと思います。
これらを実現するために S3バケットにライフサイクルルールを設定し、古いログを削除するよう設定します。
ライフサイクルルールの設定はバケット単位で設定します。
バケットの「管理」の「ライフサイクル」から「ライフサイクルルールの追加」を選択します。
ライフサイクルルールの「ルール名」に任意のルールを設定します。
フィルターの追加も任意で構いません。
これを設定するとtest/
ディレクトリ以下のオブジェクトにのみライフサイクルを設定するといった設定ができます。
以降の設定は今回はそのまま「次へ」を選択します。
Glacierなどに以降するライフサイクルを設定する場合にはここで設定を行います。
ライフサイクルルールで削除の設定を行います。
「オブジェクトの現行バージョンを執行する」の箇所が重要です。
たとえば30日より前のログが不要である場合には30を設定します。
今回はテストのために1日経過したオブジェクトを削除するように設定しています。
設定を確認して、「保存」を選択します。
これが
一日後…
「s3_index.html」が削除されていることがわかります。
ライフサイクル機能をつかうことで手動で過去ログを削除するといったわずわらしさから開放されます。
消し忘れや誤った削除も発生しませんので是非活用してみてください。
S3で署名付きURLを利用してユーザごとに別々のURLを発行できるようにしてみたいと思います。
まずは署名付きURLを利用するコンテンツを配置するディレクトリに誰もアクセス出来ないようにアクセス権を設定します。
基本的にはなにもしなくてOKです。
バケットポリシーに何も指定しなければ暗黙的拒否扱いになり、オブジェクトへのアクセスは拒否されます。
署名付きURLを作成していきます。
例として「/wawawa/s3_index.html」というコンテンツに署名URLを作成していきます。
署名付きURLはAWSCLIを使うことで作成できます。
以下のようなコマンドを実行します。
aws s3 presign s3://kabegiwa-secret/wawawa/s3_index.html --expires-in 3600
実行すると以下のようなURLが応答されます。
URLはコマンドを実行するたびに新しいものが生成されます。
https://kabegiwa-secret.s3.amazonaws.com/wawawa/s3_index.html?AWSAccessKeyId=AKIAJ4M6D6DG7LQHQ53A&Expires=1511184525&Signature=mFMiY7%2BMoJm%2FOsWB1D6Wp0jWqj8%3D
ちなみにコマンドのオプションの--expires-in 3600
はこの署名付きURLは3600秒有効だという意味です。
URLの生成から3600秒=1時間経過するとこのURLは無効となり、アクセスできなくなります。
Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-
S3にはアクセスログを記録する機能があります。
その機能を有効にすると、別のS3バケットにログを記録することができます。
まずはログを格納するためのバケットを作成します。
バケットの名前はなんでもよいです。
今回は「kabegiwalog」という名前のバケットを作成しました。
アクセスログを記録したいバケットで「ログ記録」機能を有効にします。
アクセスログを記録したいバケットに移動し「プロパティ」タブを選択、「サーバーアクセスのログ記憶」を選択して、さきほど作成したバケットをターゲットバケットに指定します。
ターゲットプレフィックスは特に指定がなければそのままで構いません。
上記の設定をして1時間くらいするとログが書き出されるようになりますのでしばらく待ちます。
1時間後…
アクセスログが無事格納されました!
ログの中身については以下の公式ドキュメントが役に立ちます。
S3でアクセスログを記録することができました。
ただ、このログの記録はベストエフォートであり、確実に記録される保証はありません。(実際はほとんど欠落することはないようですが)
即座に保存されるわけではなく、保存されるのにしばらく時間がかかるのもデメリットです。
ですが、かんたんでログの記録そのものには料金はかかりませんので、検討してみるのもいいかもしれません。
Amazon Web Services パターン別構築・運用ガイド 一番大切な知識と技術が身につく
S3にはストレージとして利用する以外にもうひとつの使い方があります。
それは静的コンテンツを公開するWebサーバとしての使い方です。
S3には静的ウェブホスティング機能というものがあり、この機能を有効にするとS3に保存したファイルをWebサイトとして公開することができます。
独自ドメイン名でS3バケットを作成します。
たとえば当ブログのドメイン名でもある「www.kabegiwablog.com」で運用するのであれば「www.kabegiwablog.com」というバケットを作成します。
作成したバケットのプロパティを開き「Static website hosting」を選択します。
設定項目が開くので「このバケットを使用してウェブサイトをホストする」を選択し、「保存」します。
「インデックスドキュメント」と「エラードキュメント」はそれぞれ「index.html」と「error.html」で構いません。
現時点ではアクセス許可をだれにもしていない状態ですのでバケットポリシーでオブジェクトへのアクセス許可を与えます。
バケットの「アクセス権限」から「バケットポリシー」を選択してバケットポリシーエディターに以下のように入力します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::www.example.com/*" } ] }
"Resource": "arn:aws:s3:::www.example.com/*"
の箇所は自分のバケットのARNに読み替えてください。
実際に設定されたかどうか確認してみます。
S3に任意の内容の「index.html」ファイルをアップロードし、S3のエンドポイントのURLを指定してブラウザでアクセスしてみると、以下のようにファイルの中身が見れるはずです。
S3のエンドポイントのURLは静的ウェブホスティングを有効にした際と同じく、バケットのプロパティを開き「Static website hosting」を選択したところに記載があります。
S3へのアクセスはできるようになりました。
つづいて独自ドメインでアクセスできるように設定します。
具体的にはAレコードのAlias機能を利用します。
Route53で「Create Record Set」を選択して、それぞれ以下のように設定します。
以上で設定は完了です。
さて、独自ドメインでアクセスしてみると、S3上のオブジェクトにアクセスできるようになっているはずです。
サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス
今回はjmeterを複数のサーバで同時に実行する方法をご紹介します。
システムのパフォーマンス測定や負荷テストを実施できるOSSのソフトです。
HTTPレスポンスの内容を判定することもできるのでWebコンテンツの妥当性確認にも利用することができます。
さて、JMeterを複数サーバで実行してみたいと思います。
今回は以下のようにJMeter-Clientから指示を出してJMeter-ServerがWeb-Serverへ負荷テストを実行するような構成を取ってみます。
JMeterの設定ファイルを編集します。
JMeterをダウンロードしたフォルダ配下のbin/jmeter.propaties
をテキストエディタで開きremote-hosts
の部分にJMeter-ClientのIPアドレスを入力します。
remote_hosts=172.1.1.1:1099,172.1.1.2:1099,172.1.1.3:1099
基本的に設定するものはありません。
テスト内容は普段のJMeterの設定方法と同じように設定またはjmxファイルをJMeter-Clientに読み込ませます。
jmeter-server.bat
を起動します。
jmeter.bat
を起動します。
赤枠のリモートで起動のボタンを押下します。
以下のようなコマンドを実行します。
jmeter -n -t test.jmx -r
Amazon Web Services負荷試験入門―クラウドの性能の引き出し方がわかる (Software Design plusシリーズ)
会社が乾燥して辛いので加湿器を導入したいのですが、コンセントに空きがない…
と諦めていたのですが電気の要らないいいかんじの加湿器をみつけたのでご紹介します。
積水樹脂という会社から出ている「うるおい Animal 小さな森」という自然気化式の加湿器です。
これ一つでコップいっぱいの10倍の加湿効果があるようです。
積水樹脂 自然気化式ECO加湿器 うるおいちいさな森 エルク‐グリーン ULT-EL-GR
さて、実際に使用してみたいと思います。
箱を開けると中身はこんな感じ。
ボトルとフィルターとトレイが入っています。
まず、ボトルに水を入れます。
そしてトレイに逆さまにさします。
キャップには小さな穴が空いているのでトレイに水がはられます。
続いてフィルターを森の形にくり抜いていきます。
これが
こうなって
こうなります。
点線に沿って手でかんたんにくり抜くことができます。
そのくり抜いたフィルターを水で濡らして
トレーにさしたら完成です。
正直効果の程はよくわかりませんが電気もいらないということと、見た目が可愛いのでおすすめです!
積水樹脂 自然気化式ECO加湿器 うるおいちいさな森 エルク‐グリーン ULT-EL-GR