DesignAssembler

備忘録に近い

ChefとvagrantでAWSに環境構築

最近のDevOps系記事の続きです。 hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com hyottokoaloha.hatenablog.com

vagrantawsインスタンスにアクセスできるようにする

まずはvagrantawsインスタンスにアクセスできるようにします。

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に入れます。

f:id:hyottokoaloha:20160214111520p:plain

出たエラー

  1. 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[]としました。

  1. mysqlでコケる mysqlでコケてる事に気付くのに時間がかかりました。
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

どうやらBerksfileでmysqlを指定するとエラーが出るようです。

参考

Vagrant で AWS EC2 のインスタンスを使う | CUBE SUGAR STORAGE

qiita.com