どうも、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

準備は以上です。

あとはでプローイ

アプリケーションの設定

AWS CodeDeploy で docker を試す: アプリケーションの設定

今回もリポジトリは git を利用します。

デプロイ終わり

AWS CodeDeploy で docker を試す: デプロイ完了

git clone して docker run しているだけなので上手くいってれば速攻終わるはず。

かくにーん

% curl ec2-xx-xx-xx-xx.compute-1.amazonaws.com
Welcome to CodeDeploy

コンテナの 80 番ポートとインスタンスのポート 80 番をバインドしているので上記のように PublicDNS でアクセスすればオッケーです!

おお、CodeDeploy って…

docker run も叩けるってことは chef-clientfabriccapistrano 等の既存のデプロイツールをそのまま叩かせることが出来そうですね!(但し、ログやエラーハンドリングは別で検討する必要があるかなって思います)

元記事はこちらです。
AWS 白帯シリーズ(24)祝:新サービス! おい、CodeDeploy よ!もしかして君は docker run とかも出来るのかい?(PREVIEW)