LoginSignup
17
17

More than 5 years have passed since last update.

AWS Autoscaling環境を想定した、deploy時にS3にパッケージをアップロードするCapistranoプラグイン(IAMロール対応)

Last updated at Posted at 2013-07-30

Capistrano-s3copy-awscli

概要

https://github.com/bacter1a/capistrano-s3copy-awscli

AWS Autoscaling + Capistranoにおいて、

  1. CapistranoでのDeploy時にS3にパッケージをput
  2. 稼働中の対象サーバはS3からパッケージをダウンロードして展開
  3. AutoScaleされたサーバも起動時にS3からダウンロードして展開
  4. みんな幸せ

上記動作のためのCapistranoプラグインを作りました。

AWSのAccess Key等をスクリプトに残したくなかったので、AWSのIAMロールに対応するためaws-cli使用版としてcapistrano-s3-copy(https://github.com/richie/capistrano-s3-copy) を元に改変をさせていただきました。

使用にはaws-cli(https://github.com/aws/aws-cli)が必要となります。(最近のAMIならデフォルトで入ってるかも)

aws-cliはAWSアクセスのために、以下の方法をサポートしています。

  • 環境変数
  • Configファイル
  • IAMロール

ただしこのプラグインはConfigファイルをサポートしていません

インストール

$ sudo gem install aws-s3copy-awscli

使用方法

Capistranoに新しいstrategyが追加されますので、それを使用します。

deploy.rb
set :deploy_via, :s3_copy

deploy時には基本的に環境変数を使用するかと思いますが、以下を設定します。

deploy.rb
set :aws_access_key_id,     ENV['AWS_ACCESS_KEY_ID']
set :aws_secret_access_key, ENV['AWS_SECRET_ACCESS_KEY']

最後に、S3bucketの設定をします。

deploy.rb
set :aws_region, 'mybucket-region'
set :aws_releases_bucket, 'mybucket-deployments'

AutoScalingについて

改変元の付属スクリプトがありますので、内容を確認の上使用してください。最低限コマンド部分のみ変更してあります。

Rails用ですが当環境はDjangoのため使用しておらず、内容については十分な確認をしておりません。

強くお勧めしますが、自前のdeployスクリプトを使用する場合は、ファイルを用意して

deploy.rb
set :aws_install_script, File.read(File.join(File.dirname(__FILE__), "custom_aws_install.sh.erb")

と設定してください。

起動時設定としてはIAM + cloud-initを使用して

#cloud-config
runcmd:
- [aws, s3, get-object, --bucket, *mybucket* , --region, *region*, --key, production/aws_install.sh, /tmp/aws_install.sh]
- [sudo, -u, ec2-user, sh, /tmp/aws_install.sh]
- [service, httpd, restart]

などと設定するとよいかもしれません、いろいろ試してみてください。

その他

17
17
0

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
17
17