ChefとvagrantでAWSに環境構築
最近のDevOps系記事の続きです。 hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com
vagrantでawsインスタンスにアクセスできるようにする
まずはvagrantでawsインスタンスにアクセスできるようにします。
以下のコマンドでvagrant-awsをインストールします。
vagrant plugin install vagrant-aws
できたらvagrantの設定です。
$ vagrant init A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Vagrantfile
#Vagrantfile config.vm.box = "dummy" config.ssh.pty = true config.vm.provider :aws do |aws, override| aws.access_key_id = '' aws.secret_access_key = '' aws.keypair_name = "vagrant_aws" override.ssh.username = "ec2-user" override.ssh.private_key_path = "~/.ssh/vagrant_aws.pem" aws.instance_type = "t2.micro" aws.region = "" aws.ami = "" aws.subnet_id = "" aws.private_ip_address = "" aws.elastic_ip = true aws.security_group = [ '' ] end
以下のコマンドで起動します
$ vagrant up —provider=aws
起動するとこんなエラーが出ました。
UnauthorizedOperation => You are not authorized to perform this operation. (Fog::Compute::AWS::Error)
確認したら、keypair_nameの名前が間違っていました・・・
修正してもう一度起動したら次はこんなエラーが出ました。
There was an error when attempting to rsync a synced folder. Please inspect the error message below for more info. sudo: sudo を実行するには tty がなければいけません。すみません rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]
フォルダの同期時にエラーが出てるみたいなんですが、実際にvagrant sshで/vagrantフォルダを確認するとちゃんとあります・・・
なんだこのエラーは・・・
どうやらvagrant-awsのバージョンの問題だったみたいです。
0.6から0.5に変更します。 http://yakinikunotare.boo.jp/orebase2/chef/reading_chef_jissen_nyumon/c05
もう一度起動したらちゃんとawsのインスタンスが起動してsshで入れるようになりました!
Chefで環境構築
ここでは
をインストールしたいと思います。
Berksfileを新規作成
#Berksfile source "https://api.berkshelf.com" cookbook 'ruby_build' cookbook 'ruby_rbenv', :git => 'https://github.com/chef-rbenv/chef-rbenv.git' cookbook 'nginx' cookbook 'selinux'
これでBerksfileの内容を適用します
$ berks vendor cookbooks
次にmysqlのインストールです ディレクトリを作成してレシピを書きます。
mkdir -p cookbooks/mysql_pkg/recipes
#cookbooks/mysql_pkg/recipes package “mysql-server” do action :install end
Vagrantfileに以下を追記してください
#chefの最新バージョンをインストール config.omnibus.chef_version = :latest config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "./cookbooks" chef.run_list = [ "recipe[nginx]", "recipe[ruby_build]", "recipe[ruby_rbenv::system]", "recipe[mysql_pkg]", ] chef.json = { rbenv: { rubies: ["2.2.2"], global: "2.2.2" } } end
これで
$ vagrant provision
すればchefが環境構築してくれます。
$ vagrant ssh
で入るとちゃんとec2に入れます。
出たエラー
- add_recipeじゃない
There are errors in the configuration of this machine. Please fix the following errors and try again: chef solo provisioner: * The following settings shouldn't exist: add_recipe
ああadd_recipeは違うのか。 上の通りchef.run_list[]としました。
Chef never successfully completed! Any errors should be visible in the output above. Please fix your recipes so that they properly complete.
どうやらBerksfileでmysqlを指定するとエラーが出るようです。