AWS CodeDeployのappspec.ymlの超基本的な書き方




AWS CodeDeployとは

CodeDeployはAWSのマネージドサービスで、EC2とオンプレミスのサーバーやLambdaに対してソースコードやビルドした成果物をデプロイすることができます。

EC2とオンプレミスサーバーへのデプロイにはインプレースデプロイとBlue/Greenデプロイの2種類を選択できます。

配布物の元はS3とGitHubから選択できますが拡張子がzip、tar、tar.gzじゃないといけないため必然的にS3になるかと思います。

これらのデプロイのルールを決めるのがappspec.ymlになります。どっちの種類であってもappspeck.ymlは必要になります。

appspec.ymlで決めることができるのは下記になります。

  1. デプロイするファイルを選択でき、どこに配置するか決めることができる。
  2. デプロイの前後など細かいステップに対して任意のコマンドを実行できる。

デプロイするファイルの選択と配置先

まずS3にアップしているsample.zipファイルの中身を下記とします。sample.jarはすでにビルド済みのファイルで、start.shはこれを起動するコマンドを記述しているとします。

sample.zip
├── appspec.yml
├── sample.jar
└── start.sh

appspec.ymlの中身は下記です。

上から順番に説明すると

  • version:これはappspec.ymlのバージョンです。
  • os:デプロイ先のOS
  • files:デプロイするファイルの選択と配置先を決めます。
  • hooks:デプロイの各タイミングでコマンドを実行できる
version: 0.0
os: linux
files:
  - source: sample.jar
    destination: /var/app
hooks:
  ApplicationStart:
    - location: start.sh

filesについて

filesのsourceはsample.zipの中を指定していて、destinationはデプロイ先のサーバー上のパスを指定します。

なので、上記appspec.ymlの場合だと、S3にあるsample.jarをサーバーの/var/appディレクトリに配置することになります。

overwriteはすでにファイルがあった場合でも新しく上書きしてくれる設定です。

hooksについて

まずhooksで扱えるタイミングですが、かなり多くあり複雑です。下記は公式ドキュメントに記載されているものです。

hooksで指定できるイベント種類は全部で13個あり、デプロイの種類とインスタンスの状態によって使えるイベントが変わってきます。

今回は超シンプルにデプロイしたアプリケーションを起動するだけなのでApplicationStartイベント時にjarを起動するスクリプトを実行する設定としています。

locationで指定するパスはsample.zipの中に対してなのでstart.shとなります。

まとめ

AWS CodeDeployは便利な反面、appspeck.ymlの他にも設定項目が多く使い慣れるまでには自分でいろいろ触って慣れるしかありません。

しかし、一度設定してうまく動くようになればそのあとのメンテナンスコストが下がるので是非試してみてください。

合わせて読みたい

おすすめ書籍

AWSをこれから使う初心者の方から現在使っている中級者の方までおすすめできる書籍です。内容はVPC、セキュリティグループ、IAMなどの基本的なことからWEBサービスを作るのに欠かせない、EC2、RDS、Route53などの扱い方が丁寧に説明されています。

中級者向けにはWEBサーバのオートスケール、Cloud Watchを使ったモニタリング方法、セキュリティ等について解説されています。手元において困ったときに読むのにちょうどいい一冊になると思います。

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です