あんパン

こしあん派

CDKでISUCONの練習環境を立ち上げる

最近、ISUCON*1の練習でもしようかな〜と思いAWSに環境を立ち上げることにした。これまでは有志で作られていたTerraformの定義をありがたく利用させてもらっていたのだが、AWSだしCDKで立ち上げられると便利だよな〜という思いがあり定義を書いた。

ここ2年くらい天下n品というチームでISUCONに参加していて、ときどき練習もしている。なのでこの中で使えるといいなと思って天下n品のorgに置いておいた。

以下のような手順で練習環境を立ち上げることができる。Ed25519の公開鍵をEC2に送るので、デプロイ前にrepoの直下に配置しておく。もし持っていなかったら作る必要がある。

$ git clone git@github.com:tenka-n-hin/cdk-isucon.git
$ cd cdk-isucon
$ npm i
$ cp $HOME/.ssh/id_ed25519.pub ./
$ npm run cdk deploy isucon9q -- --profile YOUR_AWS_PROFILE

各環境(ISUCON9予選とかISUCON10予選とか)がそれぞれひとつのStackとなっていて、何も指定せずにデプロイすると全環境を立ち上げようとするので注意。デプロイできるStackは cdk ls で確認できる。

$ npm run cdk ls

> cdk-isucon@0.1.0 cdk
> cdk ls

isucon10q
isucon11q
isucon8q
isucon9q

いまのところ8から11の予選に対応している。本戦の定義は単に面倒で追加してないだけ…… 12は公式にCloudFormationの定義が配られているのでそちらを使うのがよさそう。

なお、AMIはmatsuuさん(id:tmatsuu)が管理されているmatsuu/aws-isuconを利用している。いつもお世話になっています。自前のAMIに変えたい場合は cdk.json に定義があるのでこれを書き換えれば良い。

他にも cdk.json の中で実際の予選で使われたのと同等のインスタンスタイプを指定していたり、optionalでセキュリティグループの開放ポート設定を行えたりする。詳しくはコードを読んでください。TypeScriptだしコード量も少ないので読みやすいはず。

というわけで、8から11の予選を立ち上げたい場合はどうぞご利用ください。

ところでcdk-isuconを書いた結果、環境を立ち上げるので満足してしまってまだ練習はできていない。がんばろう。

*1:「ISUCON」は、LINE株式会社の商標または登録商標です。この記事は「ISUCON」を運営するLINE株式会社とは一切関係ありません。 https://isucon.net