AWS CodeStarを使って，Django製アプリをデプロイするまで

## 環境
- AWS CodeStar
- Python: 3.6
- pipenv: 2018.7.1
- pip: 18.0.0
- Django: 1.11.18

## 執筆したきっかけ
- 研究で開発する実験用システムをデプロイするため
- AWSに（ちゃんと）初挑戦する！
- 開発するシステムをそれなりな環境で動かす必要があるため，herokuじゃ厳しそう
- 毎度手作業でデプロイするのがしんどい

## CodeStarとは
>AWS CodeStar を使用すると、アプリケーションを迅速に開発および構築して AWS にデプロイできます。
[AWS CodeStar](https://aws.amazon.com/jp/codestar/?nc=sn&loc=0)

とのこと． 
つまり，「CI/CDも含めたWEBアプリの開発環境を，お手軽に構築するよ！」というサービスです． 
対応する言語やフレームワークがたくさんあり，困ることはなさそうです． 
ちなみに，2019-05-22時点では，

- Go
- Node.js
- Python, (FlaskやDjangoを含む)
- Ruby on Rails
- Lalavel
- Java  

などがありました．
さらに，
>AWS CodeStar に対する追加料金はありません。CodeStar プロジェクトでプロビジョニングした AWS リソース (例: Amazon EC2 インスタンス、AWS Lambda の実行、Amazon EBS ボリューム、Amazon S3 バケット) に対してのみ料金を支払います。実際に使用した分に対してのみ料金が発生します。最低料金や前払いの義務はありません。
[AWS CodeStar の料金](https://aws.amazon.com/jp/codestar/pricing/?nc=sn&loc=3)

嬉しい限りです．

## Djangoのテンプレート
テンプレートは2種類ありました．
1. EC2で実行する
2. Elastic Beanstalkを介して実行する

つまり，Dockerを使うかどうかが大きく違うところでしょうか（間違っていたらすみません） 
私の場合，大規模開発でもないので，1でやってみました．

## プロジェクトを作成する
 <img width="1112" alt="スクリーンショット 2019-05-22 19.44.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/75d91eda-e3c6-be41-e429-b077dcff7a01.png">

AWSのコンソールから，CodeStarを選択します

<img width="1918" alt="スクリーンショット 2019-05-22 19.45.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/6512f297-6974-f59d-ccf4-69a97c5c533a.png">

テンプレートから，Djangoを選択します．

<img width="1126" alt="スクリーンショット 2019-05-22 19.49.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/dcc2323e-0880-72ef-0408-06d9dac7707e.png">

プロジェクト名や，ソースコードのリポジトリを選択します． 
私は，GitHubを選択しました．GitHubを選択すると，リポジトリ名やリポジトリをprivateかpublicに選択できます．

<img width="1162" alt="スクリーンショット 2019-05-22 19.50.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/b69da3e1-d7d4-596f-8725-b178a5840950.png">

続いて，AWSCodeStarに権限を付与することを許可します．その他，`Amazon ECの設定を編集`から，使用するEC2，VPC，サブネットを変更することもできます．

<img width="871" alt="スクリーンショット 2019-05-22 19.54.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/5216cfc4-c4ee-710e-9234-36db02a8fc70.png">

ご丁寧に，作成したリポジトリも案内してくれます． 
後はデプロイが完了するまで待機です．

<img width="1838" alt="スクリーンショット 2019-05-22 20.03.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/786f2aec-50e6-41dd-f46c-59d1d29da805.png">

これで，デプロイ完了です．  

<img width="1904" alt="スクリーンショット 2019-05-22 20.04.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160590/1b2ab8f2-69ca-b088-4841-0777b779d7c3.png">

アプリ自体は，`アプリケーションのエンドポイント`よりアクセスできます． 
今後はGitHub上のmasterへpushすると，CodeStarがそれを検知してデプロイまでやってくれます．

## 感想
すごい．．．ただし，現状はCIが回っていません．また，DBはSqliteのままです．これから，頑張ります！！
iOS以外の領域にうとい私でもできました．AWS様々です．

## 補足
CodeStarが作成したリポジトリのREADMEを見ると，各ファイルの説明や，ローカル環境下でDjango製のアプリを起動するまで書かれていました．また，READMEにはvirtualenvを使用した方法を紹介していましたが，私はpipenvを使用しました．

## 追記（2019-05-23）
提供された `buildspec.yml` には，マイグレーションに関わる記述がありません．したがって，追記する必要があります．記述内容に自身はありません

```yml
phases:
  install:
    commands:
      # Install dependencies needed for running tests
      - pip install -r requirements.txt
      # Migrations
      - python manage.py makemigrations # 追記
      - python manage.py migrate # 追記
```

## 参考文献
[AWS CodeStarを使っていい感じの開発環境を一瞬で作る](https://qiita.com/matsumatsu20/items/f318275922b79692dd85#プロジェクトを作成する)