limitusus’s diary

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

TravisCI upgraded to Xenial, and ChefDK install failed

tl;dr

Should you have a trouble on ChefDK install in TravisCI for Chef cookbook you maintain, you can fix it by fixing .travis.yml

What happened

I received a TravisCI notification that indicates my cookbook's weekly test build failed.

The error says ChefDK installation failed and build stopped then. Here is the log.

gist.github.com

Root Cause

TravisCI seems to have changed the default build environment from Precise to Xenial.

I used chef-current-precise as an apt addon, so the apt source line had turned to be disabled.

How to Fix

Easy. Just fix the apt source line. Unfortunately "chef-current-xenial" is not registered in 

GitHub - travis-ci/apt-source-whitelist: Whitelist of apt sources approved for build environments with restricted sudo for now. I chose to manually write an apt source line for Xenial by TravisCI instruction page, and the build passed.

Actually the diff is very small.

gist.github.com

github.com

複数OSSのContributerになりました

年末ということで1つ記事を書いて今年を締めたいと思います。

インフラエンジニアとしての仕事も6年目となりましたが、この間にITインフラ界隈はオンプレからクラウドへの移行というものが急速に進んできているのを感じています。

そんなわけで仕事ではAWSを主としてクラウド上のインフラを構築することが増えているのですが、Infrastructure as Codeという思想もあり(なくてもやるんですが)TerraformであったりCodenize Toolsを使ったりしていました。

サーバのプロビジョニングはChefを使っています。Codenize ToolsもChefもRuby製なので言語を切り替えなくてよいのが個人的には気に入っています。TerraformがHCLですが…

Codenize ToolsのContributerへ

さて、そんなわけでCodenize Toolsもroadworkerやpiculet、miamなど、いろいろ使っていて、今年に入ってからは機能の小さな修正をいくつかPull requestにしていたのですが、ある時こんなmentionがメンテナからやってきました

f:id:limitusus:20171229222331p:plain

というわけで、現在Codenize ToolsのContributerをやっております。

全てに目を通しているわけでもないですし、基本的には自分が使っていて不便に感じているところを修正していくのがメインの活動になるかなと思いますが、無理のない範囲で貢献していければと思っています。

timezone_iii CookbookのContributerへ

Chefでサーバのtimezoneを設定しようと思うと、そのものズバリの

timezone Cookbook - Chef Supermarket

というcookbookが最初に見付かります。ただこのメンテナがやめてしまったのか、2010年で更新は終了、対応しているのもDebian/Ubuntuのみとなってしまっています。

もちろんこれではいかんと思った人がいて、timezone-iiというforkが生まれました。

timezone-ii Cookbook - Chef Supermarket

ところがこれまた2015年で更新が止まってしまっていて、Chef13では動きません。

こんなIssueが作成されており、読んでみるとメンテナのLarry Gilbert氏が死去してしまったようです(Facebookも追悼アカウントになっています)。

github.com

timezone-iiを誰も直接引き継ぐことができず、やむをえず作られたのがtimezone_iiiです。

timezone_iii Cookbook - Chef Supermarket

Cookbook名にhyphenを使わないのが推奨というのもあり、いろいろ改善されています。

何より活発にメンテナンス活動がされているようだったのでこれを利用することにし、例によって自分で不満なところをPull requestにしてぶつけていきました。

CentOSのwhyrunを綺麗にした

github.com

ちょっとテストを書いたり、Debianのwhyrunを綺麗にした

github.com

#14のPRでメンテナにCollaboratorにならない?って言われました

f:id:limitusus:20171229224018p:plain

というわけでtimezone_iiiのv1.1.5を先ほどsupermarketにアップロードしました。

 

そんなわけで、Codenize Toolsやtimezone_iiiへの要望があればissueなりTwitterなりでご連絡ください。

timezone_iiiにも日本語で書いていただいて構いません。メンテナ向けに翻訳します。そういうのもcollaborationだと思ってます。

今年のOSSへのcommitはさすがにこれで打ち止めですが、来年も機会があればやっていこうと思います。

 

ではでは。


追記

timezone_iiiのv1.1.6までリリースしちゃいました

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

ということで以下は実装

続きを読む