limitusus’s diary

主に技術のことを書きます

CircleCIをv1からv2に上げたら4倍速くなった話

tl;dr

今までRubyのテストをCircleCI v1で行ってきましたが、v2がGAになったことを受けてv2への移行を行いました。

結果、それまで2分40秒ほどかかっていたテストが40秒台で完了できるようになりました。この過程と効果について紹介します。

続きを読む

terraformのバージョンを上げようとしたらハマったのでメモしておく

terraform 0.9.11を使っていたが、あるとき0.10系がリリースされたのでバージョンアップを試みたところ、かなりハマってしまったのでメモ。

tl;dr

terraform init -backend-config=/path/to/config -reconfigure

続きを読む

この時代にupstartに関する知見をいくつかまとめておく

背景

なぜSysVinitからupstart、さらにsystemdへと進化が進んでいる中、upstartなのかという疑問が当然ありますが、理由は簡単で最近Amazon Linuxを使っているため。

Amazon LinuxはCentOS6ベースで構築されており、入っているのはsystemdではなくupstartなので。

続きを読む

AWSのコストを取得するgemを調べた

AWSは料金表を提供していますが、JSONを取得してごにょごにょ…と自分でやるのは何か違う気がします。どうせgemくらい誰か作ってるだろう、ということで少し調べてみました。

tl;dr

今のところamazon-pricingを使うか、やっぱり自前で書くのがいいのではないか。

調べたもの

(amazon|aws).*(pric|cost)

みたいなものを探すと見付かったのは以下の4つ

aws-pricing

EC2、RDS、ElastiCache、CloudFront、EMRに対応している。最終更新が2012年でメンテされている様子がない。

awsprice

EC2しかなさそう。Homepageに設定されているのがGithubでなく、飛んでもDNSが引けなくて何も情報がない。

amazon-pricing

EC2、RDS、ElastiCacheあたりのデータが取れる。メモリの情報などもついでに取れるようにベタ書きしてあるが、ElastiCacheのm4など、更新が追い付かず抜けているものがある(PR済み)。メモリが1GBを切っていると0GBになってしまう(PR済み)。

awscosts

RDSがない。S3、EMRがある。東京リージョンのデータが取れるかどうかテストされておらず、EBSのデータが取れない(PR済み)

RDS logをRubyでダウンロード

AuroraのAudit log検証をしていて、「これ定期的にS3にアップロードしないと消えるよね?」って話になったので、まずはRDSから取ってくるとこからだね…ってことでやってみることにしました。

候補手段

 方法はいくつかあるんですが、

1. rds-cliを使う

もうdeprecatedだそうで、今後メンテされないものを今から使い始めるというのはいかにもセンスがないので却下。

docs.aws.amazon.com

The Amazon RDS Command Line Interface (RDS CLI) has been deprecated. Instead, use the AWS CLI for RDS.

 

2. aws-cliを使う

アリなんですが、aws-cliだとrds download-db-log-file-portionというコマンドになり、最大1MB単位でしかダウンロードできず、何度も呼び出して連結して…という処理を書くのがめんどくさいので避けたいところです。

download-db-log-file-portion — AWS CLI 1.11.118 Command Reference

3. SDKを使う

2の方法だとshell scriptで繰り返し処理を書くのがめんどくさいということで、RubyなりPythonなりで書くのが現実的でしょう。SDKでダウンロードするAPIもあります。

Rubyだと Aws::RDS::Client#download_db_log_file_portion が用意されています。ただ、2とほぼ同様にmarkerをリクエストに入れて何度も呼び出す仕組みであり、めんどくさい…

4. DownloadCompleteDBLogFileを使う

[Tips] Amazon RDSのログファイルから全てのメッセージを取得する方法 | Developers.IO でも紹介されている方法です。ここではPythonでやっていますが、今回Rubyで書きたいなと思ったのでRubyでやってみました。

docs.aws.amazon.com

ということで以下は実装

続きを読む

terraformのprovider aliasを使うときのtips

最近よくterraformで構成管理とか構築をやってて、ハマったのでメモ。

やろうとしたこと

AWS ap-northeast-1で主な構成を組んでいて、CloudFrontでの静的コンテンツ配信をhttpsで行いたい。このときACMを利用するが、証明書はus-east-1に配置する必要がある。

証明書の発行はWeb画面でやったので、terraformにはdata aws_acm_certificateとして利用することにした。

このときリソースの場所は普段ap-northeast-1のため、明示的にus-east-1を指定してやらないと意図した証明書が得られない(あたりまえ)。

このためには以下のサイトのように、provider aliasを使ってregionを指定し、data resourceでproviderを指定する。

coderwall.com

これで全てはうまくいく、はずだった。

続きを読む

はてなブログに移行しました

ふと思い立ったのではてなダイアリーからはてなブログへと移行を行いました。

既存記事は移行ツールにより全てリダイレクトされているはず…

一番人気の Server::Starterに対応するとはどういうことか - limitusus’s diary も正常に移行されています。