Capistrano-s3copy-awscli
概要
https://github.com/bacter1a/capistrano-s3copy-awscli
AWS Autoscaling + Capistranoにおいて、
- CapistranoでのDeploy時にS3にパッケージをput
- 稼働中の対象サーバはS3からパッケージをダウンロードして展開
- AutoScaleされたサーバも起動時にS3からダウンロードして展開
- みんな幸せ
上記動作のための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が追加されますので、それを使用します。
set :deploy_via, :s3_copy
deploy時には基本的に環境変数を使用するかと思いますが、以下を設定します。
set :aws_access_key_id, ENV['AWS_ACCESS_KEY_ID']
set :aws_secret_access_key, ENV['AWS_SECRET_ACCESS_KEY']
最後に、S3bucketの設定をします。
set :aws_region, 'mybucket-region'
set :aws_releases_bucket, 'mybucket-deployments'
AutoScalingについて
改変元の付属スクリプトがありますので、内容を確認の上使用してください。最低限コマンド部分のみ変更してあります。
Rails用ですが当環境はDjangoのため使用しておらず、内容については十分な確認をしておりません。
強くお勧めしますが、自前のdeployスクリプトを使用する場合は、ファイルを用意して
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]
などと設定するとよいかもしれません、いろいろ試してみてください。
その他
- IAMロールを使用すればスクリプトに環境変数を書かなくてよいのでなんかいい気分。
- スクリプト実行はSudoersについてなどの設定を忘れないようにしましょう。
参考:CloudInitを使ってアプリケーションの自動デプロイを構成してみる(たたき台)