最初のec2インスタンスを作る
AWS management consoleのEC2 Dashboardから早速EC2インスタンスを一つ作り、これをテンプレートマシンと呼ぶことにします。 このテンプレートマシンに一通りのソフトウェア、設定を手でごりごり入れていきます。 アプリケーションサーバが1台ほしいという時になったら、このテンプレートマシンのAMIをベースに「アプリケーションサーバ」という環境変数的なものを与えてマシンを起動するとアプリケーションサーバとして立ち上がってくるというようにします。
色々調べているとChefを使って構成管理をする記事をよく見かけるので、「自分もやりたい!」と思いつつもすぐ「時間足りないかなぁ」となって、使うのは見送っていました。最近になってまた勉強する時間もできそうなのでChefにトライしたいところです。
インスタンス起動後は以下を進めます。手順詳細はここに書かずに、参考になった記事をリンクさせて頂きます。
yum updateする
/etcをgitで管理する
etckeeperを導入します。 手順
dateコマンド打った時に日本時間で表示されるようにする
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ruby環境準備
rbenv、ruby-build、ruby2.1(当時は2.0)を入れる 手順
シェルからAWSのコマンドを使えるようにする
このインスタンスのシェル上からAWSのAPIを叩けるようにします。 AWS-CLIパッケージはインストール済みだったので、与えたれたアクセスキー、シークレットアクセスキー等を設定します。 手順
$aws configure AWS Access Key ID [****************]: *** AWS Secret Access Key [****************]: *** Default region name [ap-northeast-1]: ap-northeast-1 Default output format [text]: text
すると~/.aws/configが生成されます。
[default] aws_access_key_id = *** aws_secret_access_key=*** output = text region = ap-northeast-1
awsからはじまるコマンドが使えるようになります。 as-、ec2-、rds-から始まるコマンドは昔のもので今はawsに一新されたようです。
AWS SDK for rubyはRuby2.1を入れた後gem installで入れます。
このインスタンスのAMIを定期的に作成できるようにする
任意のインスタンスのAMIを作成するスクリプトを用意します。 AWS manegement consoleからAMI削除、AMI作成をするのが手間だったので、スクリプトにしました。 インスタンスの改造作業の前にスクリプトを実行したり、cronで定時バックアップするようにしておきます。
Ruby環境な会社なので、私も見習ってRuby使っていきます!
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require "aws-sdk" AWS.config(YAML.load(File.read("config.yml"))) machine_names = [ "template", ] machine_names.each {|name| AWS::EC2.new.images.filter("name", name).each{|ami| p "deregister ami name: #{name}, ami_id: #{ami.id}" if ami.deregister p "success" else p "fail" end } AWS::EC2.new.instances.tagged("Name").tagged_values(name).each{|ins| p "create ami name: #{name}, ec2_id: #{ins.id}" new_ami = ins.create_image(name, {:description => Time.now.to_s, :no_reboot => true}) if new_ami && new_ami.tag("template", :value => name) p "success" p "ami.id: #{new_ami.id}" else p "fail" end } }