実際にデプロイ今後の展望はじめにAWSのサービスのひとつにCodeDeployというサービスがあります。今回はこのCodeDeployを使う機会があったのでそれについて調べたことをまとめていこうと思います。CodeDeployではデプロイする元のソースはS3かGitHubができますが今回はGitHubで行います。CodeDeployとはCodeDeployとは、EC2インスタンスへのデプロイを自動化出来るサービスです。デプロイをする際にはダウンタイムを最小限におさえるために多くの工程があるかとおもいますが、それを自動化し作業の効率化につながります。加えて、複数のEC2インスタンスで冗長化等している場合にも、一元管理をしてくれて簡単にデプロイをすることができます。今回はEC2インスタンスへの設定となりますがオンプレミス環境でもCodeDeployを使用することが出来るみたいです。shellスクリプトを実行することが出来る。master的なことをして終わるだけではなくて、shellスクリプトを実行することが出来るのでキャッシュクリアであったり、再起動も自由に記述することが出来るわけです。実際なんでもできてしまいます。ELBで複数台管理されてたとしてもうまくやってくれる複数台のサーバーで構築されている場合に、デプロイ中は一旦ロードバランサーから切り離して、デプロイ完了したら接続し直して、次のデプロイを始めるというようなことも自動で行ってくれるのですごく便利です。デプロイのトリガーを設定できる今回は扱いませんが、例えばmasterブランチをプッシュしたときに自動でデプロイが走るようにする設定ができたりもします。CodeDeployの仕組み導入の手順を説明する前に、CodeDeployの仕組みを簡単に説明します。EC2インスタンスにCodeDeployAgentをインストールして起動します。CodeDeployAgentが何をするかというと、定期的にAWS側にデプロイの命令があるかどうかを問い合わせます。ここでデプロイの命令があればデプロイが開始します。このような流れになっていて、この仕組を理解しておくと導入がスムーズになるので理解しておきたいところです。導入手順CodeDeployAgentの導入まず先程説明したようにEC2インスタンスにCodeDeployAgentをインストールします。cliを使えるようにする必要があります。auto導入がちゃんと出来てるかどうかは以下のコマンドで確認できます。statusこれでエラーが出る場合は導入の何処かでミスが有ると思われます。//ログの確認ですね。appspec.ymlを作成githubで作成したリポジトリの一番上の階層にappspec.ymlを作成します。これはデプロイの設定を書くファイルです。rootこのようなかんじで設定します。いじるべき箇所はdestinationとhooksの部分です。destinationはデプロイを行う階層を設定します。cloneしたときに.gitファイルが置かれる階層のファイルが並びます。(CodeDeployした際には.gitファイルは作られません。これについては後述)hooksはデプロイする際に実行したいシェルスクリプトのファイルを指定することができます。セオリーとしてappspec.ymlと同じ階層にscriptsというフォルダを作成してその中にまとめておきます。BeforeInstallやAfterInstallというのはCodeDeployのライフサイクルのことです。AWSのページにのっていた図なのですが、ライフサイクル的にはこのようになっています。左が通常のライフサイクルで、右はロードバランサーをかませてるときのライフサイクルです。ロードバランサーをかませている場合は、ロードバランサーから切り離したりと接続が増えるのでその分多くなっています。先程の図の黒く塗られてない部分はフックとしてshellを実行することができます。各ライフサイクルの簡単な説明を書いておきます。ApplicationStopアプリケーションを正常にストップするための処理を書きます。DownloadBundleCodeDeployAgentがアプリケーションリビジョンファイルを一時的な場所にコピーします。BeforeInstallインストールの直前に呼ばれ、現在のバージョンのバックアップの作成などの事前インストールタスクに使用します。InstallCodeDeployAgentがリビジョンファイルをdestinationに指定した場所にコピーします。AfterInstallインストールの直後に呼ばれ、アプリケーションの設定や、ファイルのアクセス権限の変更などのタスクに使用できます。ApplicationStart通常、ApplicationStop中に停止したサービスを再起動する場合に、このデプロイライフサイクルイベントを使用します。ValidateServiceデプロイが正常に完了したことを確認するために使用されます。BeforeBlockTrafficロードバランサーから登録解除される直前に呼ばれます。BlockTrafficロードバランサーから登録解除されます。AfterBlockTrafficロードバランサーから登録解除された直後に呼ばれます。BeforeAllowTrafficロードバランサーに登録する直前に呼ばれます。AllowTrafficロードバランサーに登録します。AfterAllowTrafficロードバランサーに登録する直後に呼ばれます。ここでApplicationStopだけ注意なのですが、新しいリビジョンファイルのダウンロードの前に呼ばれるものなので、このイベントに関しては既存のappspec.ymlの設定に書かれているものが実行されるので注意です。それ以降のイベントに関してはデプロイするバージョンのappspec.ymlの設定が採用されます。IAMを作成するEC2に設定する用と、CodeDeployの設定で作成するデプロイグループに設定する用のIAMを作成しないといけません。]}以上の2つのIAMを作成して、対象のEC2に割り当てましょう。デプロイグループはこの後作成するのでその際に付けます。今回のようにCodeDeployAgentの起動のあとにIAMを作成して割り当てた場合にCodeDeployAgentの権限のエラーが起こる場合があります。profileこのようなかんじのエラーがはかれていると思います。これはCodeDeployAgentが定期的にデプロイがあるかどうかをAWS側に確認しに行く際にその権限がなくてエラーになっているというログです。restartを実行するようにしましょう。その後ログを確認して先程のエラーが出てなければ大丈夫です。CodeDeployの設定ここからついにAWSのCodeDeployのコンソール画面で設定していきます。CodeDeployの画面に行き「アプリケーションの作成」をクリックします。アプリケーションごとに設定することができますこのような画面になるので、アプリケーション名を入力します。コンピューティングプラットフォームは今回EC2インスタンスを使用するのでEC2/オンプレミスを選択します。デプロイグループ名も設定してください。1つのアプリケーションに対して、デプロイグループを設定することができて、デプロイグループごとにどのインスタンスに対してデプロイするのかなど分けることができます。デプロイタイプは今回は「インプレースデプロイ」にします。これは同じインスタンスにデプロイするのか、その都度新しいインスタンスを作成して古いのを削除するのかのやりかたの違いです。次にデプロイを行うEC2インスタンスを選択します。対象のEC2がAutoScalingグループとして既に設定されている場合はAutoScalingグループを選択します。ない場合はインスタンスを個別に設定することが出来るので設定しましょう。ロードバランサーをかませている場合は「ロードバランシングを有効にする」にチェックを入れましょう。加えてそのロードバランサーを選択します。次にデプロイ設定です。これは複数台合った場合にどの順番でデプロイするかを設定します。CodeDeployDefault.AllAtOnce一回で全部のインスタンスにデプロイしようとします。CodeDeployDefault.HalfAtATime半分ずつデプロイします。CodeDeployDefault.OneAtATime1つずつデプロイします。このようになっていて、ロードバランサーを経由している場合はCodeDeployDefault.OneAtATimeで設定しておくといいと思います。サービスロールARNは先程作成したCodeDeploy用のIAMを選択しましょう。これで設定は完了になります。実際にデプロイ設定が完了したので実際にデプロイをしてみましょう。CodeDeployの画面に行きデプロイしたいアプリケーションを選択します。するとこのような画面になるので、デプロイしたいデプロイグループを選択して、新しいリビジョンのデプロイを選択します。次の画面でデプロイの設定をしていきます。デプロイするアプリケーションとデプロイグループが正しいことを確認し、今回はリポジトリタイプにGitHubを選択します。GitHubにする場合には最初にアカウント認証が入ると思うので設定しておきます。設定し終わったら対象のリポジトリとデプロイするコミットIDを入力します。コミットIDで指定できるのでどのバージョンでもデプロイ出来ることがわかります。archiveをしています。archiveはコミットIDを指定してZip形式で出力するものです。コミットID指定であるのとデプロイした後に.gitファイルが作成されないのはこのためです。あとはロールバックの設定をします。こんなかんじにしました。うまく設定できていればこれで完了になって無事完了になります。今回は失敗してしまいました。失敗するとこのような画面になります。何か設定がミスってたみたいです。エラーログをみたいので、その場合には「全てのインスタンスの表示」ボタンをクリックします。このような画面になるので「イベントの表示」をクリックします。この画面はエラーじゃなくても進行中の場合にどこまで進行しているか確認のために使うことができます。先程のライフサイクルごとにどこまで進行したかがわかるようになっています。ログを表示するをクリックします。このような画面になりログが表示されます。今回はパスの指定が悪かったみたいです。/var/log/aws/codedeploy-agent/codedeploy-agent.logで表示されるログの直近のものを表示してくれる画面になっています。修正してみたらうまくいきました。今回CodeDeployを扱ってみましたが今回の内容は最低限必要な部分をまとめたというかんじでした。他にも細かい機能があるのでそのへんも今後使いこなせるようにしていけたらなと思います。当サイトはエックスサーバーで運営しています。方はこちらの記事を参考にしてください。仮想通貨1【windows】FFmpegをインストールする手順2FFmpegで動画変換!各OSごとのインストール方法と使い方まとめ3【簡単】MacにHomebrewをインストールする方法と基本的な使い方4macOSにXcodeをインストールしよう5HomebrewでMacにFFmpegをインストールする方法と使い方6BootCampでMacにWindows10をインストールする7〜初心者でもわかるswift入門〜基本文法からiOSアプリを開発するまで8【swift入門】apiを叩いてTableViewに表示させる9【Xcode】ファイル追加削除するときの注意10【入門】Reactチュートリアルをやりながら実践入門お問い合わせこちらからお願いいたします。