CodeDeploy/CodePipelineを設定した際の備忘録です。
経緯
現在、EC2で、Apache/PHPを使用しています。
Pushの度にPullしていますが、そこを自動化してはどうか?とご提案頂いたので、
CodeDeploy/CodePipelineを使って、GitHubリポジトリをデプロイしてみます。
ちなみに、AWSは初心者です。
手順は以下を参考に実施しました。
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorials-github.html
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-four-stage-pipeline.html
Pushを契機に自動的にデプロイしたいですが、まずは、CodeDeployからデプロイしてみます。
環境
- EC2インスタンス
- AWS CLIインストール済み
- ALB
- GitHubにリポジトリ
- 2段階認証:有効
AWS CLIのインストールは、以下を参照して実施しました。
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/getting-started-configure-cli.html
AppSpec fileファイルの作成(appspec.yml)
CodeDeployを実施した際、appspec.ymlの内容に従ってデプロイされます。
DocumentRootにデプロイしたかったのですが、そのままでは使えない構成となっていたため、
- 一旦、user配下(/home/hoge)にデプロイ
- シェル(shells/initialize.sh、shells/update.sh)を起動
によって、DocumentRoot配下に展開するようにしています。
version: 0.0
os: linux
files:
- source: /
destination: /home/hoge/test_repo
hooks:
BeforeInstall:
- location: shells/initialize.sh
AfterInstall:
- location: shells/update.sh
appspec.ymlの詳細に関しましては、以下を参照願います。
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file.html#appspec-reference-server
CodeDeployのサービスロール作成
-
IAMコンソールを開く
-
ナビゲーションペインでロールを選択、ロールの作成ボタンを押下する
-
以下を選択して、次のステップ:アクセス権限ボタンを押下する
信頼されたエンティティの種類 :AWSサービス
このロールを使用するサービスを選択 :CodeDeploy
ユースケースの選択 :CodeDeploy -
Attached アクセス権限ポリシーにAWSCodeDeployRoleが表示されていることを確認、
次のステップ:タグボタンを押下する -
必要に応じて、タグの設定を行う(オプション)
次のステップ:確認ボタンを押下する -
ロール名を入力する (例: CodeDeployServiceRole)
ロールの作成ボタンを押下する -
ロールの一覧より、ロールが作成されていることを確認する
アプリケーションの作成
-
** CodeDeploy**コンソールを開く
-
ナビゲーションペインでアプリケーションを選択、アプリケーションの作成ボタンを押下する
-
以下を入力/選択して、アプリケーションの作成ボタンを押下する
アプリケーション名 :(任意)
コンピューティングプラットフォーム :EC2/オンプレミス
デプロイグループの作成
-
デプロイグループタブを選択、デプロイグループの作成ボタンを押下する
-
以下を入力/選択して、デプロイグループの作成ボタンを押下する
デプロイグループ名 :(任意)
サービスロール :[CodeDeployのサービスロール作成]で作成したロールを選択
デプロイタイプ :インプレース
環境設定 :Amazon EC2 インスタンス
キー/値 :(デプロイ先のEC2インスタンスを選択)
デプロイ設定 :CodeDeployDefault.OneAtATime
ロードバランシングを有効にする :チェックを外す
デプロイの作成
-
デプロイグループタブを選択、[デプロイグループの作成]で作成したデプロイグループをクリックする
-
デプロイの作成ボタンを押下する
-
以下を入力/選択して、デプロイの作成ボタンを押下する
デプロイグループ :[デプロイグループの作成]で作成したデプロイグループを選択
リビジョンタイプ :アプリケーションは GitHub に格納されています
GitHub トークン名 :(接続したいGitHubトークン名を入力)
※ GitHubに接続ボタンを押下して、使用したいGitHubアカウントでログインする
リポジトリ名 :(GitHubトークン名)/(デプロイしたいリポジトリ名を入力)
コミットID :(デプロイしたいコミットを入力)
デプロイグループのオーバーライド :(変更なし)
追加のデプロイ動作設定 :(変更なし)
ロールバック設定の上書き :(変更なし)
ここで、デプロイが実行されます。
もし、失敗していた場合、ナビゲーションペインでデプロイメントを選択するとデプロイ履歴が表示されます。
失敗したデプロイメIDをクリックすると画面が切り替わりますので、
デプロイのライフサイクルイベントのView eventsをクリックします。
こちらにエラーメッセージ、及びどのイベントで失敗したのかを確認することが出来ます。
次にPushのタイミングで、デプロイするため、CodePipelineの作成を行います。
CodePipelineの作成
-
CodePipelineコンソールを開く
-
ナビゲーションペインでパイプラインを選択、パイプラインを作成するボタンを押下する
-
パイプラインの設定を選択するの画面で、以下を入力/選択して、次にボタンを押下する
パイプライン名 :(任意)
サービスロール :新しいサービスロール
ロール名 :(任意)
サービスロール名の入力 :チェックを入れる
アーティファクトストア :デフォルトのロケーション -
ソースステージを追加するの画面で、以下を入力/選択して、次にボタンを押下する
ソースプロバイダー :GitHub
※ GitHubに接続ボタンを押下して、使用したいGitHubアカウントでログイン
リポジトリ :(デプロイしたいリポジトリを選択)
ブランチ :(デプロイしたいブランチを選択)
検出オプションを変更する :GitHub ウェブフック (推奨) -
ビルドステージを追加するの画面では、ビルドステージをスキップボタンを押下する
-
デプロイステージを追加するの画面では、以下を入力/選択して、次にボタンを押下する
デプロイプロバイダー :新しいサービスロール
リージョン :(任意)
アプリケーション名 :**[アプリケーションの作成]で作ったアプリケーション名を選択
デプロイグループ :[デプロイグループの作成]**で作ったデプロイグループを選択 -
レビューの画面では、入力内容を一通りチェックして、パイプラインを作成するボタンを押下する
ここで、CodePipeline起動後、CodeDeployが起動します。
成功したら、実際にPushして、CodePipelineが起動するか確認して終了となります。