こんにちは、けーどっとけーです😀
最近やっと仕事でもAWS(Amazon Web Service)を使うようになり日々勉強中です。
そのためプライベートでもAWSのアカウントを取得し、少しでも慣れていこうと手を動かしています。
AWSにはCodeCommitという機能があり、これはソースコードを内部で非公開に管理できるバージョン管理サービスのことです。
これで管理しているソースコードをCodeBuildを使ってデプロイ可能なソフトウェアパッケージにし、CodeDeployで使用しているシステムにそのパッケージをデプロイ(配置)します。
システムに配置するパッケージをWARファイル形式にしたかったのですが、うまくCodeDeployできず試行錯誤したので私が取った方法を残しておくことにしました。
WARファイルをCodeBuildで作成してCodeDeployでデプロイしてみると・・・
CodeBuildを使用するには、対象のソースコード群に「buildspec.yml」を作成し配置しておく必要があります。
buildspec.ymlには、作成するファイル(WARなど)名などビルド設定を記述しておきます。
CodeBuildはこちらの画面で行います。
さらにここで作成したWARファイルをCodeDeployでデプロイします。
CodeDeployには、「appspec.yml」が必要になります。
こちらもビルド設定を記述したファイルになりますが、こちらはシステム内の配置場所を記載したりします。
何が問題だったか・・・
CodeDeployの仕様がわかってなかったのですが、自動で配置するファイルを解凍するようです。
CodeBuildで作成したファイルは、S3内に配置するのですが最初は「〇〇.war」と「appspec.yml」を同フォルダに置いていました。
しかし、CodeDeployで「〇〇.war」を解凍し、その中に「appspec.yml」がないというエラーが発生しました。
それならと「〇〇.war」の中に「appspec.yml」を配置したのですが、「appspec.yml」内に記述した「〇〇.war」がないというエラーが発生しました。
結局こう解決しました!
CodeBuildでのビルドの作成方法を見直して、「〇〇.war」を作成した後に「〇〇.war」と「appspec.yml」を1つのZIPファイルに固めてS3内に配置しました。
CodeDeploy起動後、そのZIPファイルを解凍、中にある「appspec.yml」を読み取り「〇〇.war」を指定したシステムの箇所に配置してくれました。
このように最初は「〇〇.war」を作成して配置していましたが、ZIPファイル化することでうまくいきました。
CodeDeployのファイル指定もZIPファイルなどの形式選択になっているので、解凍を前提としてビルドを作成するのが正規のやり方なのかもしれません。
今回の一言・・・
正直AWSはいろいろ便利に簡単に設定してくれるのですが、前提や仕様がよくわからないところがあり悩むことがあります。
今回は一例で試してみましたが、ぜひ参考にしていただければ幸いです。
ここまで読んでくれてありがとう。
では、また次回。