継続的ブログ

主にweb系の技術について書いています

AWS Summit DevCon2日目に行ってきました!

やっぱりこういうのに出席するのはいいですね。

全部素晴らしかったのですが、私が特に感動したのは「クックパッドはなぜ開発しやすいか(クックパッド株式会社 成田一生さん)」です。

speakerdeck.com

業務でRailsを触っていて、ゲーム系よりサービス系を作りたいと思っている自分にはとてもいい刺激になりました。
Railsを業務で使っている人、サービス開発をしている人は必見です。

とにかく全てのスケールのデカさに驚きました。
特に一番驚いたのがModelの数。
1732って・・・

どうやって開発しているのか気になるなあ。
この数を開発者全員が全て把握できているとは思えないし。
今度は是非、そこら辺の話もお聞きたい!(もうしてたらすみません・・・)

あと、作っているのは「機能」ではなく「サービス」「ユーザ体験」というところ。
耳が痛いです・・・
振り返ってみると、早さを優先してしまって、完全に「機能」を作ってたなと思うことが多々あります。
これからは気をつけよう。
そして、そういう文化を作りたいなあ。

とりあえず全部参考になった、面白かった!
クックパッドさんの並々ならぬ努力が伝わってきました。
やっぱりクックパッドさんはすごい!

オリジナルクックブックの作成

Vagrant + ChefでRails開発環境構築② - 継続的ブログ

あれからちょくちょく修正していっています。
いろいろなところで「最初は慣れるために、コミュニティクックブックを使わないようにしましょう」と言われていますが、自分は最初にコミュニティクックブックで一通り構築して、少しずつ自分好みに修正して行く方が合ってたみたいです。
Chefで何度か挫折した人はこの方法でやってみるといいかもしれません。
Chefの便利さを最初に知れるだけで、モチベーションが上がると思います。

で、今回はオリジナルクックブックの作り方です。

手順

オリジナルクックブックはsite-cookbooksディレクトリに入れるので、ディレクトリを作成します。

$ mkdir site-cookbooks

site-cookbooksに移動します。

$ cd site-cookbooks

hogeというクックブックを作ります。

$ chef generate cookbook hoge

Berksfileに追記します。

cookbook "hoge", path: "./site-cookbooks/hoge"

前回のブログで書いた通り、vagrant-chef-zeroプラグインはcookbooksディレクトリに置かれたクックブックをChef Zero Serverにアップロードするので、site-cookbooksを修正したら、下記コマンドを打つのを忘れずに。

$ berks vendor cookbooks

Vagrantfileのrun_listに追加します。

chef.run_list = [
  "hoge"
]

provisionersの実行。

$ vagrant provision

参考

Vagrant と Chef による仮想環境構築の自動化(VirtualBox編) | オブジェクトの広場

Vagrant + ChefでRails開発環境構築②

追記
(2015/05/26)激古なNginxがインストールされてしまうため、使用するnginxのレシピを「nginx::source」に変更しました。それに伴い、chef.json内にnginxの設定を追加しました。

Vagrant + ChefでRails開発環境構築① - 継続的ブログ

続きです。
Railsの環境を構築していきます。
クックブックは自作せず、コミュニティのクックブックを使用しています。
細かい設定はしていません。
コミュニティクックブックに頼るのはあまりいい方法とは言えませんが、手軽に試せる開発環境を目指しました。

Berksfileの作成

カレントディレクトリにBerksfileというファイルを作成し、以下のように記述します。

source "https://api.berkshelf.com"

cookbook "vim"
cookbook "ruby_build"
cookbook "rbenv", github: "fnichol/chef-rbenv"
cookbook "git"
cookbook "mysql", "~> 5.3.6"
cookbook "nginx"

クックブックをダウンロード

$ berks vendor cookbooks

このコマンドで、cookbooksディレクトリにクックブックをダウンロードしてきます。
vagrant-chef-zeroプラグインはCookbooksディレクトリに置かれたクックブックをChef Zero Serverにアップロードします。

Vagrantfileの修正

Vagrantfileに、実行するクックブックと設定を追記します。

...

# private ipでアクセスできるように設定 
config.vm.network "private_network", ip: "192.168.50.12"

config.vm.provision :chef_client do |chef|
    chef.custom_config_path = "chef_custom_config"
    chef.run_list = [
      "vim",
      "ruby_build",
      "rbenv::user",
      "git",
      "mysql::server",
      "mysql::client",
      "nginx::source"
    ]
    chef.json = {
      "rbenv" => {
        "user_installs" => [
          {
            "user" => "vagrant",
            "rubies" => ["2.2.2"],
            "global" => "2.2.2",
          }
        ]
      },
      "mysql" => {
        "version" => "5.6",
        "port" => "3306",
        "server_root_password" => "vagrant",
        "remove_anonymous_users" => true
      },
      "nginx" => {
        "version" => "1.9.0",
        "source" => {
          "checksum" => "ここにチェックサムを入力"
        }
      }
    }
  end

...

ちなみに、nginxは/opt以下にインストールされます。

checksumの生成方法

まず、wget等でnginx.tar.gzをダウンロードします。

$ curl -o nginx-1.9.0.tar.gz http://nginx.org/download/nginx-1.9.0.tar.gz

次にダウンロードしたファイルに対して、下記コマンドでchecksumの生成をします。

$ shasum -a 256 nginx-1.9.0.tar.gz

出てきた文字列を先程の場所に入力すればOKです。

Provisionersの実行

$ vagrant provision

参考

Vagrant + ChefでRails開発環境構築①

VagrantとChefでRailsの開発環境構築したのでメモ。

ここら辺の技術はホント流れが早いですよね。 2015年5月時点で、なるべく最新(っぽい)感じで構築しているつもりです。

環境

環境構築

VirtualBoxのインストール

以下のURLからインストールします。

Downloads – Oracle VM VirtualBox

Vagrantのインストール

以下のURLからインストールします。

Download Vagrant - Vagrant

Chefのインストール

昔のブログでも書きましたが、ChefのインストールはChefDKがオススメです。

MacでChef環境構築はChef Development Kitがオススメ - 継続的ブログ

以下のURLからインストールします。

Chef Development Kit | Chef Downloads | Chef

ChefDK

Chefを利用する際に必要な以下のツールがひとまとめになったものです。

  • Chef
  • Berkshelf
  • Test Kitchen
  • ChefSpec
  • Foodcritic

rubyも入っているので、既存の環境に依存することなく、Chef環境を構築できます。 今回は使いませんが、ChefDKには含まれていないknife-soloを使う場合は、

$ chef gem install knife-solo

とすればインストールできます。

ChefDKのRubyを使うために、以下の設定をします。

$ echo 'eval "$(chef shell-init SHELL_NAME)"' >> ~/.YOUR_SHELL_PROFILE

自分はZshなので、以下のように設定しました。

$ echo 'eval "$(chef shell-init zsh)"' >> ~/.zshrc

Vagrantプラグインのインストール

$ vagrant plugin install vagrant-vbguest
$ vagrant plugin install vagrant-chef-zero
  • ゲストOSにChefをインストールするために必要なプラグイン
$ vagrant plugin install vagrant-omnibus

実践

Vagrantの設定

Boxのインストール

以下のURLから好きなboxを選ぶ。

A list of base boxes for Vagrant - Vagrantbox.es

ここではcentos65という名前で、CentOS6.5のBoxを作成してます。

$ Vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

Vagrantfileの作成

好きなディレクトリに移動し、以下のコマンドを入力。

$ vagrant init

作成されたVagrantfileを修正。

Vagrant.configure(2) do |config|
  # Boxは「centos65」を使用
  config.vm.box = "centos65"
  # vbguestでエラーが出るので、一旦自動更新を切っておく
  config.vbguest.auto_update = false
  
  # ゲストOSに最新のChefをインストール
  config.omnibus.chef_version=:latest
  # Chef Zero Serverのリポジトリとしてカレントディレクトリを設定
  config.chef_zero.chef_repo_path = "."
  # プロビジョンはChef Client
  config.vm.provision :chef_client do |chef|
    chef.custom_config_path = "chef_custom_config"
    chef.run_list = []
  end
end

カレントディレクトリに設定ファイルchef_custom_configを作成。

# ssh関係の警告を出さないようにするため
Chef::Config.ssl_verify_mode = :verify_peer

Vagrantを起動

$ vagrant up

Chef Zero Serverも起動し、ゲストにChefのインストールが行われていると思います。

続き

Vagrant + ChefでRails開発環境構築② - 継続的ブログ

参考

MacでChef環境構築はChef Development Kitがオススメ

らしいです。
次やる時に、Chef Development Kitで構築したことを忘れてそうなので、メモだけ。

参考

qiita.com

Chef Development Kitは昔Windowsで試したことがあって、その時はいろいろと苦労したけど、 今はだいぶ安定したのかな。

問題なさそうなら、このまま使ってみようかな。

Intellij IDEAでGolang(Windows)

環境

  • Windows(64bit)
  • Go 1.4.2
  • Intellij IDEA 14.1.2(Community Edition)
  • go-lang-idea-plugin 0.9.3

Goのインストール

Downloads - The Go Programming Language

  1. 「go1.4.2.windows-amd64.msi」をダウンロード
  2. インストール

msi環境変数の設定を自動でやってくれる。

  • GOROOT: C:\Go\
  • Path: ;C:\Go\bin

Intellij IDEAのインストール

IntelliJ IDEA :: Download Latest Version of IntelliJ IDEA

  1. 無料のCommunity Editionをダウンロード
  2. インストール

プラグインのインストール

以前はjarを落としてインストールしていたらしいが、最近廃止されたとのこと。
リポジトリを登録してインストールします。

  1. Intellij IDEAを起動
  2. Welcomeページ右下の「Configure」から、「Plugins」をクリック
  3. 「Browse repositories...」をクリック
  4. 「Manage repositories...」をクリック
  5. 「+」をクリックし、下記リポジトリを登録する(私はAlphaにしました)
  6. Browse Repositoriesページに戻り、『Go』というプラグインが追加されているので、検索等して見つける
  7. インストール
  8. Intellij IDEAの再起動

Alpha: https://plugins.jetbrains.com/plugins/alpha/list
Nightly: https://plugins.jetbrains.com/plugins/nightly/list

SDKの設定

  1. Intellij IDEAを起動
  2. Welcomeページ右下の「Configure」から、「Project Defaults」、「Project Structure」をクリック
  3. 「SDKs」をクリック
  4. 「+」をクリックし、「Go SDK」をクリック
  5. GOROOTのパス(デフォルトだとC:\GO)を選択
  6. 「OK」で保存

参考

基礎からわかる Go言語

基礎からわかる Go言語

AWS IAMポリシーについて

Managed PoliciesとInline Policiesの2種類がある。

Managed Policies

  • 複数のユーザ、グループ、ロールに付与することが出来る。
  • Managed Policesには、AWS Managed PoliciesとCustomer Managed Policiesの2種類がある。

AWS Managed Policies

  • AWS側で作成・管理されるポリシー。
  • 大まかなポリシーが予め定義されている。
  • 細かい設定をする必要がない場合は、楽。
  • 自分では変更できない。
  • AWSが管理しているため、自動でポリシーが更新されるので注意。

Customer Managed Policies

  • ユーザーが作成し、自由に設定できるポリシー。
  • 特定IPからのみ操作を受け付けるといった設定をする場合、AWS Managed Policiesは変更ができないため、こちらを利用する。

Inline Policies

  • 特定のIAMユーザ、IAMグループ、IAMロールに直接付与されるポリシー。
  • 基本的にManaged Policiesを利用するので、こちらを利用することはほとんどない。
  • Managed Policiesはそのポリシーを適用している全てのIAMユーザ、IAMグループ、IAMロールに影響するので、特定のユーザのみに権限を付与したい場合等は、利用する。
  • 乱用すると管理が難しくなるので注意。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド