Skip to content

Latest commit

 

History

History
186 lines (172 loc) · 11.8 KB

Step_4.md

File metadata and controls

186 lines (172 loc) · 11.8 KB

Step 4: EC2 インスタンスに Django のアプリケーションをデプロイしてみよう

  • 今回は、CodeDeploy というサービスを使ってデプロイをします
  • 現状、まだ EC2 インスタンス上に Django のアプリケーションが存在しないことを確認しておこう
    • Step 3 でも記載しましたが、Django のアプケーションは /web/mysite/app に配置されることを想定しています
    [ssm-user@ip-172-31-22-149 bin]$ ll /web
    ls: cannot access /web: No such file or directory
    

CodeDeployの Agent について

  • Codedeploy を使って EC2 インスタンスにデプロイするためには、専用の Agent が必要です
    • インストールされていないことを確認
    [ssm-user@ip-172-31-22-149 ~]$ systemctl status codedeploy-agent.service
    Unit codedeploy-agent.service could not be found.
    
  • 通常 Linux にアプリケーションをインストールする場合、パッケージマネージャーを使う
    • Amazon Linux 2 では yum というパッケージマネージャーがデフォルトで使える
    • Step 3 の Extra 項目で使っていたコマンドもこの yum
    • しかし codedeploy-agent は yum でインストールできるようなパッケージが用意されていない
  • 今回は、AWS マネジメントコンソールからログインする方法を試してみる
  • 参考: https://dev.classmethod.jp/articles/codedeploy-agent-ssm-distributor/#toc-4

codedeploy-agent をインストールする

  • AWS Systems Manager のディストリビューターを使う
  • https://ap-northeast-1.console.aws.amazon.com/systems-manager/distributor?region=ap-northeast-1
  • AWSCodeDeployAgent と入力して検索する
    • AWSCodeDeployAgent のリンクをクリック
  • 右上の1回限りのインストールボタンをクリック
  • 下にスクロールし、ターゲットの項目でインスタンス を手動で選択するを選択
    • Instances の項目で表示されているインスタンスのチェックボックスをチェックする
  • さらに下にスクロールし、出力オプションS3バケットへの書き込みを有効化する でチェックを外す
  • 実行ボタンを押す
  • ステータスが 進行中 から 成功 になれば OK
  • インストールが無事完了していたら、起動していることを確認する
    [ssm-user@ip-172-31-22-149 ~]$ systemctl status codedeploy-agent.service
    ● codedeploy-agent.service - AWS CodeDeploy Host Agent
      Loaded: loaded (/usr/lib/systemd/system/codedeploy-agent.service; enabled; vendor preset: disabled)
      Active: active (running) since Fri 2020-09-25 08:06:08 UTC; 1h 0min ago
    Main PID: 3766 (ruby)
      CGroup: /system.slice/codedeploy-agent.service
              ├─3766 codedeploy-agent: master 3766
              └─3770 codedeploy-agent: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller of master 3766
    

実行を待っている間に。皆さんが思いつく、あるいは実施したことがあるデプロイの方法って何かあります?

  • etc ...

tomokatsu/aws-hands-on リポジトリを fork

  • デプロイするアプリケーションもこの tomokatsu/aws-hands-on に存在するので、自分の GitHub アカウントに fork しましょう

CodeDeploy 用の IAM ロールを作成

  • IAM ロールの画面を表示し、ロールの作成 ボタンをクリック
  • 2箇所で CodeDeploy を選択する
  • 次のステップ: アクセス権限 ボタンをクリック
  • AWSCodeDeployRole をテキストボックスに入力して検索し、 次のステップ: タグ ボタンをクリック
  • タグの設定は不要なので、次のステップ: 確認 ボタンをクリック
  • aws-hands-on-codedeploy という名前を記載し、ロールの作成 ボタンをクリック

CodeDeploy の設定

  • CodeDeploy の画面にアクセス

  • アプリケーション名、コンピューティングプラットフォームを入力し、アプリケーションの作成ボタンをクリック

  • リダイレクトされた画面にあるデプロイグループの作成ボタンをクリック

  • デプロイグループの作成では、まずデプロイグループ名に aws-hands-on を入力

  • 次に、サービスロールを設定する

    • 前の手順で作成した aws-hands-on-codedeploy が選択できるはず
  • 環境設定の項目では Amazon EC2 インスタンス をチェック

    • タググループには以下を入力する
      • キー: CodeDeploy
      • 値: aws-hands-on
  • Load Balancer の項目では、チェックを外す

  • デプロイグループの作成 ボタンを押す

CodeDeploy で Django アプリケーションをデプロイ

  • CodeDeploy の画面を表示
  • デプロイの作成 ボタンをクリック
  • リビジョンタイプアプリケーションはGitHubに格納されています をチェック
    • Github トークン名 は、あなたの GitHub ユーザネームを入力
      • tomokatsu ではないので注意!!!
    • GitHubに接続 ボタンをクリックし、Authorize する
    • リポジトリ名は、デプロイするリポジトリの名前を設定
      • 今回は、各自の GitHub ユーザに fork した aws-hands-on リポジトリを指定
    • コミットID は、デプロイしたいコミットの ID を指定
  • デプロイの作成 ボタンをクリックし、デプロイを開始する!
  • 成功となったら、無事デプロイできているはず
  • 実際に、 EC2 インスタンス上にファイルが作成されているかを確認してみましょう
    [ssm-user@ip-172-31-22-149 bin]$ ll /web/mysite/
    total 0
    drwxr-xr-x 3 root root 37 Sep 25 08:17 app
    -rw-r--r-- 1 root root  0 Sep 25 08:17 reload.trigger
    

動作確認

想定したディレクトリにデプロイされた理由

  • ここまでの設定で、 /web/mysite/app にデプロイするような指示はしていませんでした
  • 実は、GitHub リポジトリの ../appspec.yml に CodeDeploy に対する指示が記載してあります
  • appspec.yml で指示している内容は以下
    • リポジトリの docker/app ディレクトリを /web/mysite/app に配置
    • 配置した後、 ../codedeploy/after_install.sh を実行
      • after_install.sh で touch /web/mysite/reload.trigger しなければ、ディレクトリに配置しても最新のアプリケーションに切り替わらない
      • ../ec2/server/etc/uwsgi/vassals/mysite.initouch-reload オプションを指定しているから touch で reload できる

Extra) Github Actions から CodeDeploy を実行する

  • CodeDeploy でデプロイを作成するの、実際手間かかりましたよね?
    • リポジトリ名入れたり、コミットID入れたり
  • ここでは、GithubActions と連携し、 master ブランチに変更が取り込まれたタイミングでデプロイが動くようにしていきます

IAM ユーザの作成

  • ユーザの追加 ボタンをクリック
  • ユーザ名に aws-hands-on-github-actions と入力
    • プログラムによるアクセス にチェックを入れて、次のステップ: アクセス権限 ボタンをクリック
  • AWSCodeDeployFullAccess を検索し、選択して 次のステップ: タグ ボタンをクリック
  • タグの追加は特に設定せず、 次のステップ: 確認 ボタンをクリック
  • 内容を確認しユーザの作成ボタンをクリック
  • .csv のダウンロード ボタンをクリックし、クレデンシャルをダウンロードしておく

GitHub のリポジトリに、クレデンシャルを登録

あとは master ブランチに変更を加えてみると、 Github Actions が起動するはず

Extra) Django アプケーションに変更を加えてみる

  • では、デプロイできる環境も揃ったので、手元のマシンで Django アプリケーションに変更を加えてみましょう
  • 加えた変更は GitHub に push して、再度 CodeDeploy でデプロイしてみましょう
    • ../docker/app/config/urls.py にある #path('polls/', include('polls.urls')), の行をコメントインしてください
    • 以下のようになっていればOK
      from django.contrib import admin
      from django.urls import include, path
      
      urlpatterns = [
          path('polls/', include('polls.urls')),
          path('admin/', admin.site.urls),
      ]
      
  • refs. https://docs.djangoproject.com/ja/3.1/intro/tutorial01/#creating-the-polls-app