CircleCI、CodeDeploy、S3を使って、GitHubにpushしたらEC2にデプロイされる仕組みを作る

  • 13
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

備忘録。
かなり適当なので、ツッコミ大歓迎です。

1. IAMでEC2用ロール作成してEC2に設定

  • 作成するロールのタイプはEC2、ポリシーはAmazonS3ReadOnlyAccessのみ。
  • EC2インスタンス作成時でないとロールは設定できない。
  • なので既にEC2インスタンスが存在する場合は、作りなおす必要がある。

2. EC2インスタンスにCodeDeploy Agentをインストール

EC2インスタンスにログインして下記コマンド実行

bash
sudo yum update
sudo yum install aws-cli -y
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
chmod +x ./install
sudo ./install auto

3. IAMでCodeDeploy用ロール作成

設定するタイプはCodeDeploy、ポリシーは下記URL参照。
http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-create-service-role.html

よくわからない場合は、とりあえずAWSCodeDeployFullAccessを設定すれば動く。

4. CodeDeployでアプリケーション作成

  • 新しいアプリケーションを作成する
  • タグはEC2インスタンスを指定
  • デプロイ設定は任意のものを選ぶ
  • サービスロールには前述のCodeDeploy用ロールを指定

5. GitHubでリポジトリ作成

プライベートリポジトリでもOK。

6. circle.yml設定

  • リポジトリのルートにcircle.ymlを追加して下記のように設定(コメント要削除)
circle.yml
machine: # タイムゾーンや言語バージョン設定など
    timezone: Asia/Tokyo
    node:
        version: 5.2.0
    post:
        - npm install -g npm@3.3.12
dependencies: # 依存ライブラリ等のインストール、ビルド
    post:
        - npm run build
deployment: # デプロイ設定
    staging: # 任意の文字列
        branch: master # ブランチ名
        codedeploy:
            app_app_app: # CodeDeployで作成したアプリケーション名
                deployment_group: group_group_group # CodeDeployで作成したデプロイグループ名
                application_root: /public # デプロイしたいディレクトリ
                region: ap-northeast-1
                revision_location:
                    revision_type: S3
                    s3_location:
                        bucket: xxxxxx # バケット名
                        key_pattern: '{BUILD_NUM}_{COMMIT}.zip'

7. appspec.yml設定

  • デプロイしたいディレクトリのルートにappspec.ymlを追加して下記のように設定(コメント要削除)
appspec.yml
version: 0.0
os: linux
files:
   - source: / # ファイル参照元ディレクトリパス
     destination: /var/www/dest_dest_dest/ # ファイルコピー先ディレクトリパス
hooks:
    BeforeInstall: # ファイルコピー前に実行する内容
        - location: before_install.sh # ファイル削除とか

8. IAMでCircleCI用ユーザー作成

設定するタイプはCodeDeploy、ポリシーは下記URL参照。
http://jedipunkz.github.io/blog/2015/11/15/circleci-codedeploy/

よく分からない場合は、とりあえずAWSCodeDeployFullAccessAmazonS3FullAccessを設定すれば動く。

9. CircleCIでプロジェクト追加

  • Add Projectsをクリックしてプロジェクト一覧画面に遷移
  • GitHubアカウントを選択する
  • Build Projectをクリックするとプロジェクトを追加できる

10. CircleCIにIAMユーザーを紐付け

  • Buildsをクリックしてビルド一覧画面に遷移
  • さっき作ったプロジェクトを選択
  • Project Settingsをクリックしてプロジェクト設定画面に遷移
  • AWS PermissionsをクリックしてAWS権限設定画面に遷移
  • さっき作ったCircleCI用ユーザーのアクセスキーとシークレットアクセスキーを入力(ユーザー名ではないので注意)
  • Save AWS Keysをクリックして保存

11. GitHubのリポジトリにpush

pushすると一連のデプロイが実行されるのでCircleCIで確認する

12. 完了

デプロイされているか確認する