[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 6/6

# 第6回 終わりに（自動デプロイの動作確認と作成したリソース削除）
第6回は、自動デプロイの動作確認と作成したリソース削除について記述します。
それからオープントーンで行った卒業試験について説明します。

前回：[[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 5/6](https://qiita.com/toru-yamagishi/items/52e1d2719edbefdcc73e)

## 自動デプロイの動作確認
1. デプロイ前のWebページを確認します。
- 自動デプロイが完了したら、AWSマネジメントコンソールから、EC2の画面へ移動します。
- 左メニューから「ロードバランサー」を選択します。
- fargate.yaml実行時に作成したALBを選択して、「DNS名」をコピーします。
- コピーしたDNS名のURLにアクセスして画面を表示し、Hello Worldが表示されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/f89414a8-b24a-106a-c226-a02f259bf044.png)

1. auto-deploy配下のDockerfileの内容に変更を加えます。
 `RUN echo 'Hello World!' > /var/www/html/index.html`
<br>htmlに出力する表示文字列（Hello World!）を任意の文字に変更します。

1. 更新後git pushまで行います。
<br>AWSのCodePipelineがアップデートを検知して自動デプロイが開始されます。

1. AWSマネジメントコンソールを表示し、CodePipelineへ移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/002e4695-dc1b-d409-fa3d-57ef7ea84689.png)

1. 作成したCodePipelineを選択します。

1. Source、Build、Deployの状態が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/3d08e0ac-1501-373b-9515-7c1af0e40ed9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/cafad81e-3b42-b59c-be03-e86e96047664.png)

1. CodePipelineの実行履歴に「成功しました」と表示されていればデプロイ成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/97a77578-84b9-a7b6-2be6-2b840f2e6110.png)

1. デプロイ後のWebページを確認します。
- 自動デプロイが完了したら、AWSマネジメントコンソールでEC2の画面へ移動します。
- 左メニューから「ロードバランサー」を選択します。
- fargate.yaml実行時に作成したALBを選択して、「DNS名」をコピーします。
- コピーしたDNS名のURLにアクセスすると、サーバー側の変更も反映されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/b25c83ca-57f6-a8d3-151e-d436c9108c1b.png)

## CloudFormationで構築したリソース（スタック）の削除
* 学習用に本記事のCloudFormationでのリソース作成を実施された方は、もう使用しないリソースでもECSやS3を残しておくことで不要な利用料金が発生してしまう場合もありますので、最後に作成したリソースを削除しておきます。
* 構築したリソースをこの後も利用する予定がある方は、ここでの削除手順は不要です。
* リソースを構築した時とは逆に、以下の順番でリソースを削除します。
    1. S3 Bucketの削除
    1. CloudFormation: deploy-backend.yamlのスタック削除
    1. CloudFormation: policy.yamlのスタック削除
    1. CloudFormation: fargate.yamlのスタック削除
    1. CloudFormation: ecr.yamlのスタック削除
    1. CloudFormation: network.yamlのスタック削除
    1. GitHub接続設定の削除
* CloudFormationで構築したリソースは、スタックの削除を実行することですべて削除できます。
* ただし、削除しようとしているリソースが他のリソースから使用されている状態だと依存関係でエラーとなってしまうため、依存関係に引っかからないように構築時とは逆の順番で削除していく必要があります。

### 1. S3 Bucketの削除
* CloudFormationからスタックの削除を実行する前に、CodePipelineでのデプロイ実行時に自動生成されたS3 Bucketを削除しておく必要があります。。
* 手順
    1. AWS Consoleにログインする
    1. S3の画面に遷移する
    1. CodePipelineで自動生成されたS3 Bucketのチェックボックスを選択する（"codepipeline-リージョン-usecase-auto-deploy"のような名前で生成されているはずです）
    1. 「空にする」を実行する
    1. 「削除する」を実行する

### 2. deploy-backend.yamlのスタック削除
* CloudFormationで作成されたCodePipeline、CodeBuildとCodePipeline実行用のIAMロールを削除します。
* 手順
    1. CloudFormationの画面に遷移し、スタックの一覧を表示します
    1. deploy-backend.yamlのスタックのチェックボックスを選択して「削除」を実行する
    1. スタックの削除が完了するまで待つ

### 3. policy.yamlのスタック削除
* CloudFormationで作成されたCodePipeline実行用のIAMポリシーを削除します。
* 手順
    1. CloudFormationの画面でpolicy.yamlのスタックのチェックボックスを選択して「削除」を実行する
    1. スタックの削除が完了するまで待つ

### 4. fargate.yamlのスタック削除
* CloudFormationで作成されたELBと、ECSのクラスター、サービス、タスク定義をを削除します。
* 手順
    1. CloudFormationの画面でfargate.yamlのスタックのチェックボックスを選択して「削除」を実行する
    1. スタックの削除が完了するまで待つ

### 5. ecr.yamlのスタック削除
* CloudFormationで作成されたECRを削除します。
* ECRは、事前にそのECRへ登録されているイメージをすべて削除しておかないとECR自体の削除をすることができません。
* 手順
    1. Elastic Container Serviceの画面に遷移する
    1. 左メニューの「Amazon ECR リポジトリ」のリンクからECRの画面に遷移する
    1. 作成したリポジトリに遷移する
    1. リポジトリに登録されているすべてのイメージにチェックを付けて、「削除」を実行する
    1. CloudFormationの画面に遷移する
    1. ecr.yamlのスタックのチェックボックスを選択して「削除」を実行する
    1. スタックの削除が完了するまで待つ

### 6. network.yamlのスタック削除
* CloudFormationで作成されたVPC、Subnet、セキュリティグループを削除します。
* 手順
    1. CloudFormationの画面でnetwork.yamlのスタックのチェックボックスを選択して「削除」を実行する
    1. スタックの削除が完了するまで待つ

### 7. GitHub接続設定の削除
* 最後に、GitHubとの接続設定を削除します。
* 手順
    1. CodePipelineの画面に遷移する
    1. 左メニューの「設定＞接続」のリンクを開く「GitHubへ接続」の手順で作成した接続名をチェックして、「削除」を実行する

お疲れさまでした。これで今回の連載で作成したリソースの削除は完了になります。

## 卒業試験
オープントーンのハンズオン講義では以下のような卒業試験を行ったので参考してください。
- 概要
    - ハンズオンと同じ手順でゼロから構築し直す
    - 自動デプロイが起動することを確認するために、Dockerファイル内の`/var/www/html/index.html`に記載されているメッセージを変更する
    - ECSを停止する
- 提出物
    - スクリーンショット
        - メッセージ変更前：ブラウザでアクセスしてメッセージが表示されている画面
        - メッセージ変更後：ブラウザでアクセスしてメッセージが表示されている画面
        - CodePipelineの画面
            - デベロッパー用ツール > CodePipeline > パイプライン
                - 自分のCodePipeline名をクリックした先の画面
    - URL
        - 変更後の画面URL
        - スクリーンショットを取得したCodePipelineの画面URL

## ふりかえり

この記事は株式会社オープントーンで内部的に開催したハンズオン講義を元で書かれました。
CloudFormationを利用して自動デプロイ環境を構築する演習はいかがでしたか。
自動デプロイの設定は漠然と難しい作業かと思っている方もいるはずですが、
少しだけ調べてみるとAWSのCodePipeline等を利用したらそんなにコストがかからないことに気づくと思われます。

運用中のアプリケーションをいまだ手動でデプロイしている方、
あるいは新しくアプリケーションを開発される方はこの記事を参考にして試していただいたらと思います。開発がすごく楽になります。

最後までお読みいただきありがとうございました！

## 連載記事一覧
- [[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 1/6](https://qiita.com/toru-yamagishi/items/deb79c9a3f0040b6f8ad)
- [[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 2/6](https://qiita.com/toru-yamagishi/items/580f49d158aecfc52473)
- [[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 3/6](https://qiita.com/toru-yamagishi/items/c9a2d877a5de553a4c4f)
- [[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 4/6](https://qiita.com/toru-yamagishi/items/801612fd72347e98bcd7)
- [[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 5/6](https://qiita.com/toru-yamagishi/items/52e1d2719edbefdcc73e)
- [[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 6/6](https://qiita.com/toru-yamagishi/items/1515c35273376a60482d)