Nwht0xn1

ServerkitでAmazon S3のバケットを管理するCreated on 2016-05-15 by r7kamura

WikiHubでAmazon S3を利用したくなってきたので、ServerkitでS3のバケットを構成管理するために serverkit-aws というプラグインをつくってみた。

serverkitとは

Serverkit というのは、レシピを書いて適用したらその通りになってくれるよというやつ。ChefやPuppetなどの構成管理ツールの中では、どちらかと言うとAnsibleに似ているもの。今回はそれのプラグインをつくったので、Amazon S3のバケットを管理できるようになりましたという話。

serverkit-s3の使い方

serverkit コマンドで serverkit-aws をライブラリとして読み込んでもらえるよう、まずGemfileを編集する。

# Gemfile
gem "serverkit"
gem "serverkit-aws"

次に、Serverkit用のレシピを書く。今回はYAMLで書くことにする (JSONなどでも記述できる)。

# recipe.yml
resources:
  - type: s3_bucket
    name: r7kamura-test
    aws_region: ap-northeast-1

credentialsの設定

serverkit-awsはAWSのAPIを通して操作を行うが、これを行うにはAWS Access Token IDとAWS Secret Access Tokenを指定する必要がある。serverkit-awsにそれらを指定するには、環境変数AWS_ACCESS_TOKEN_ID、AWS_SECRET_ACCESS_KEY を設定しておくか、~/.aws/credentials に設定を書くか、あるいはレシピに直接記述する方法がある (詳しくはserverkit-s3のREADMEに記載されている)。

serverkitの適用

serverkit checkコマンドを利用すると、適用せずに現状の確認だけやってくれる。NGと出るのでこれはまだ適用されていない状態。

$ bundle exec serverkit check recipe.yml --hosts=example.com
[ NG ] s3_bucket r7kamura-test on example.com

serverkit applyコマンドを利用すると、適用して結果を教えてくれる。これでbucketが作成される。

$ bundle exec serverkit apply recipe.yml --hosts=example.com
[DONE] s3_bucket r7kamura-test on example.com

再度確認すると、出力がNGからOKに変わっていることが分かる。

$ bundle exec serverkit check recipe.yml --hosts=example.com
[ OK ] s3_bucket r7kamura-test on example.com

これで http://r7kamura-test.s3.amazonaws.com/ のようなAmazon S3のbucketが出来る。

雑感

serverkit-awsはポリシーなどの設定をまだ行うことが出来ないので、今後利用しながら足りない実装を追加していきたい。serverkitは、状態を定義して適用するタイプのものであれば利用できるので、AWSのようにマシンの状態以外にも便利な用途があるのではないかと思っている。