はじめに
Opsworks で Rails アプリを管理しており、Redis を導入することになりました。
Rails コード上でもろもろ設定はできるのですが、他の Opsworks で管理している Rails アプリでも導入することになった時に楽になるよう今回は cookbook を作ろうと思います。(個人的にはそこまで工数変わらないかなーと思いつつも AWS がそちらを推奨しているので)
実装
ローカルに chef のインストール
検索すると様々な情報が出てきますが、私は下記記事を参考にしてインストールしました。
https://qiita.com/hamichamp/items/d3ca7c365353285a564b
cookbook の作成
続いて先程インストールした chef を使って cookbook を作成します。
first_cookbook という名前の cookbook を作成するには以下のコマンドを叩きます。
$ chef generate cookbook first_cookbook
Generating cookbook redis_opsworks_cookbook
- Ensuring correct cookbook file content
- Committing cookbook files to git
- Ensuring delivery configuration
- Ensuring correct delivery build cookbook content
- Adding delivery configuration to feature branch
- Adding build cookbook to feature branch
- Merging delivery content feature branch to master
すると少し差はあるかもですが以下のような構造の first_cookbook ディレクトリが作成されます。
CHNAGELOG.md
LICENSE
README.md
chefignore
metadata.rb
recipes
spec
test
- recipes 配下 → 実際の処理を書いていきます
- metadata.rb → 他の cookbook や gem などの依存関係を書きます
パッと必要なのは上記くらいかなと。
私の場合は recipes 内の処理でファイルを生成する必要があったので、first_cookbook ディレクトリ直下に templates ディレクトリを作り生成するファイルの雛形をしまいました。
Opsworks の設定
Stack の設定からカスタムクックブックとして自作した cookbook を設定します。
私は github に cookbook を上げたので、git の URL とブランチ名を指定しました。
作ったレシピは cookbookの名前::recipe 名
で実行します。
例えば今回 recipes/generate.rb
というファイルで処理を書いたとした場合は first_cookbook::generate
で実行できます。
Opsworks では Layer のレシピの設定から処理を走らせたいタイミングに 'first_cookbook::generate' を追加すれば、
思ったタイミングで処理を実行できます。(私は Deploy に設定しました。)
さいごに
割と簡単に cookbook を作成できました。
文面だけではわかりにくかった方は、非常に簡単なものですが私が作ったものを参考にしてみてください。
コードはほぼ AWS のものですw