LoginSignup
18
17

More than 5 years have passed since last update.

aws-sdk v2をつかって、Capistrano3でdeployをする。

Last updated at Posted at 2015-01-13

aws-sdk-core(aws-sdkのversion2)をつかって、Capistrano3でデプロイする場合にどのようにコードを書けばいいかあまり情報がなかったので、公式ドキュメントを見ながら、実装してみた。

access keyを使うので、IAMでアクセスコントロールをしておいたほうが良い。

現在は2.0.6.preを指定してgem installする。

# Gemfile

# AWS SDK for Ruby version2
gem 'aws-sdk', '2.0.6.pre'

deploy配下はこんな感じでインスタンスを取得

# config/deploy/staging.rb
require 'aws-sdk-core'

# Access keyとSecret Access Keyをつかって、EC2からpublic_dns_nameを取得する
ec2 = Aws::EC2::Client.new(
        access_key_id: ENV['ACCESS_KEY_ID'],
        secret_access_key: ENV['SECRET_ACCESS_KEY'],
        region: 'ap-northeast-1')

# 検索条件は1、EC2に紐付いているtag情報 2、起動中のEC2で条件検索する。
# ここは自分の検索したい条件を色々変更することが可能。
ec2_filtered = ec2.describe_instances(
                 filters:[
                   {name: "tag:foo", values: ['bar']},
                   {name: 'instance-state-name', values: ['running']}
                 ])
# 検索条件からpublic_dns_nameを取得する(array)
instances = ec2_filtered.reservations.map{|k| k.instances}[0].map{|k| k.public_dns_name}

role :app, *instances
role :web, *instances
server *instances,
       user: 'ec2-user',
       roles: 'localhost',
       ssh_options: {
           forward_agent: true,
           auth_methods: ["publickey"],
           # if you want to debug capistrano set verbose to debug
           # verbose: :debug,
           keys: ENV['AWS_PEM_PATH']}

set :stage, :production
set :rails_env, 'production'

上記はEC2からの検索だが、もちろんELB配下のpublic_dns_nameを取得することも可能。その際は Aws::ElasticLoadBalancing::Client を使う。

18
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17