Twitter Facebook github

Posts Tagged with “chef”

kitchen-ec2でChefレシピをEC2で実行する

お久しぶりです。
最近またAWSのサービスを一通り触ってみていて、プロビジョニングまでAWSマネージドでやってくれるOpsWorksを本番環境で使ってみたいと思い、Chefに取り組んでいます。

Chefにはレシピをローカルのvagrantで簡単に実行・テストできる test-kitchen というgemのツールがあるのですが、
これを初めて使ってみたところ非常に使い勝手がよく、当然ながらEC2でも試したいという気になりました。

今回は test-kitchen からEC2を扱える、kitchen-ec2を使ってみます。

環境

  • 実行元は手元の MBP macOS High Sierra 10.13.5
  • ruby 2.3.3 (rbenv) gem 2.7.2
  • Chef DK 3.0.36 をインストール
  • Test Kitchen version 1.21.2
  • aws-cli/1.11.63 Python/3.5.2

test-kitchen は単体でgemからインストールできますが、Chef DKに付いてくるので真っ新な環境ではこっちを入れた方がよいと思います。

Chef DK
https://downloads.chef.io/chefdk

AWS CLI で認証情報を設定

kitchen-ec2では、AWSの認証情報(APIキーとトークン)は環境変数か、aws-cliの認証情報から読み込むことになります。
今回は既にインストール済みのaws-cliを使っていますが、必要に応じて先に aws configure を行ってAPIキーを登録してください。

参考
AWS CLI の設定
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html

インストールと準備

ChefDKで入れたtest-kitchenにはkitchen-ec2は付いてこないので、個別にgemで入れます。

適当なディレクトリでmetadata.rbを作り、それを元にinitし、
サンプルとして、適当なディレクトリを作成するレシピを用意します。

Read More »

VagrantのゲストOSから名前解決できない件

昔の記事「Vagrant+Chef-Zero入門」でprovisionを行おうと思い、vagrant upしたところ、次のエラーでプロビジョニングがコケました。

よく見るとinline scriptとchef両方でコケてる

inline script はゲストOSにchefをインストールするスクリプトで、opscode.comからダウンロードしてくるのですが、3行目でこれが失敗しています。
原因はホストアドレスの名前解決ができなかったようですね。

chefがインストールできていないので、chef provisionがコケるのは当然なのですが、14行目でも network is unreachable ということで、ゲストOSから名前解決が正しくできていないために、インターネットに出て行けなかったのではないかと推測できます。

解決策

ゲストOSから名前解決がうまくいかないとき、ホストOSで名前解決するようプロキシする設定にすることが可能なようで、VirtualBoxの NAT Networking settings に詳細が記載されていました。

https://www.virtualbox.org/manual/ch08.html#idp46608649138592

今回はこの設定の中の natdnshostresolver をVagrantfileから有効にします。

vagrant up でVMを立ち上げ直すと、正しく名前解決が行われるようになります。

このオプションを有効化することによる副作用はなさそうなので、配布する場合は付けておいたほうがよさそうです。

所感

この原因が解明できておらず曖昧なのですが、Vagrantを使っているとネットワーク周りの問題にはよく遭遇します。
自分の中でネットワークに関しては知識面において弱点でもあるので、克服できるように精進したいと思います。

余談ではありますが、本記事内や以前の記事で書いた opscode.com は chef.io に引っ越しが行われており、古いドメインでもリダイレクトされますが、DNSルックアップが2度走ることになるので気になる方は新しい方を参照するように修正すると良いでしょう。