どうも、cloudpack の デプロイ市民のかっぱ (@inokara) です。
はじめに
AWS CodeDeploy って appspec.yml
に記述されたスクリプトを叩いてくれんであれば chef-client
とか叩かせそうですよねってチームの先輩の一言で思いつきました。ということは… docker run
も叩いてくれるんぢゃねかなって思って試してみました。
準備
コンテナの用意
Apache をインストールした CentOS6 コンテナを用意しておきます。
docker run -t -d -p 80:80 centos_apache /usr/sbin/httpd -D FOREGROUND
上記のように起動すれば Apache だけが動くコンテナが起動します。
ソースコードの用意
超単純なソースコードを用意しました。
% tree . . ├── appspec.yml └── scripts ├── cleanup.sh ├── install.sh └── start.sh 1 directory, 4 files
appspec.yml
version: 0.0 os: linux files: - source: / destination: /opt hooks: BeforeInstall: - location: scripts/cleanup.sh timeout: 300 runas: root AfterInstall: - location: scripts/install.sh timeout: 300 runas: root ApplicationStart: - location: scripts/start.sh timeout: 300 runas: root
scripts/cleanup.sh
#!/usr/bin/env bash
scripts/install.sh
#!/usr/bin/env bash
scripts/start.sh
#!/usr/bin/env bash docker run -t -d -p 80:80 centos_apache /usr/sbin/httpd -D FOREGROUND
準備は以上です。
あとはでプローイ
アプリケーションの設定
今回もリポジトリは git を利用します。
デプロイ終わり
git clone
して docker run
しているだけなので上手くいってれば速攻終わるはず。
かくにーん
% curl ec2-xx-xx-xx-xx.compute-1.amazonaws.com Welcome to CodeDeploy
コンテナの 80 番ポートとインスタンスのポート 80 番をバインドしているので上記のように PublicDNS でアクセスすればオッケーです!
おお、CodeDeploy って…
docker run
も叩けるってことは chef-client
や fabric
や capistrano
等の既存のデプロイツールをそのまま叩かせることが出来そうですね!(但し、ログやエラーハンドリングは別で検討する必要があるかなって思います)
元記事はこちらです。
「AWS 白帯シリーズ(24)祝:新サービス! おい、CodeDeploy よ!もしかして君は docker run とかも出来るのかい?(PREVIEW)」