LoginSignup
8
8

More than 5 years have passed since last update.

AWS OpsWorks上でのchefリポジトリの構成について

Posted at

概要

OpsWorksではカスタムのChef cookbooksを指定して自前のレシピを流せます。更に、opsworks-cookbooksというaws側で作成されているレシピもあり、こちらをカスタムレシピでも使用したいという場面があると思います。
今回は、opsworks-cookbooks内のnginxのレシピを使用したく自前のレシピからインクルードして使用したいと考えていました。

git、chefともに初心者レベルに毛が生えた程度のレベルです。

OpsWorks上でのディレクトリ構成

実際にレシピが動作する環境を調査したところ以下のようにOpsworksはchefを実行するみたいです。

opsworks-cookbook-dir.png
図1. Opsworks上に展開されるディレクトリ構成

図1.のsite-cookbooks配下に自前のレシピが展開されるのですが当然gitのリポジトリの構成そのままが展開されます。
つまり、
site-cookbooks
:
+- site-cookbooks
+- cookbooks
:

みたいな構成になります。ただし、これでもレシピ自体を実行することは可能です。
自前のレシピでcookbooks内のレシピを参照している場合に、図1.のcookbooksを参照することになります。ここでBerskfileはnginxを落とそうとするのですが、community cookbookのnginxを落としてきます。
そしてそれが、merged-cookbookへ展開されることになり、意図したレシピを実行することが出来ませんでした。

課題

  • このような状況でopsworks-cookbooks/nginxを指定する方法

gitのリポジトリ構成

そこでの対応は、gitリポジトリの構成を以下のようにすることで対応しました。
m-okamura_—_tmux.png
図2. ローカルのレシピリポジトリ

ポイント

  • ここをgitのリポジトリとして管理する
  • レシピをフラットに構成する

ただ、こうするとせっかく用意したtest-kitchenを動かすことが出来ません。
試行錯誤の末、テストを動かすためのリポジトリを用意することにしました。

テスト用のgitリポジトリ構成

以下のようにすることで、テスト用の環境も維持しながらOpsworksのリポジトリ構成も管理できる状態になりました。

m-okamura_—_tmux.png
図3. テスト用リポジトリ構成

ただ若干手間がかかるのが難点です。

ポイント

  • テスト用のgitリポジトリとして管理
  • テストしたいレシピはBerkshelfで管理

まとめ

以上が、今回とった解決方法でした。
これより、いい方法があるように思いますが現状ではわからず、皆さんの突っ込みをお願いしたいところです。
テストについては端折りましたが、test-kitchen、kitchen-ec2を利用して、インスタンス上でテストをするようにしております。実際に流されるnode情報をenvironmentsに設定して、Opsworksで実行される状況に近いようにやってます。
その辺についてはAWs OpsWorks User Guideを参照してください。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8