Mais conteúdo relacionado
Semelhante a 【AWS×Deployment】TechTalk #5 (20)
【AWS×Deployment】TechTalk #5
- 2. About Me
・茅根 幸夫(ちのね ゆきお)
・Sonicmoov Co.,Ltd.
・基幹エンジニア歴5年、Webエンジニア歴10年
・茨城県ひたちなか市出身
(右図の茅根町とは全く関係ございません。名前が同じだったので掲載しただけです)
常陸太田航空衛星センター
オセロの生みの親
長谷川 五郎氏の出身地
誰もが知ってる
水戸黄門
社会現象にもなった
ガルパン
非公認キャラ
ねば〜る君
- 4. アジェンダ
・AWS CodeDeploy とは?
・AWS CodeDeploy の設定
・デプロイ前に自動テストができる CircleCI とは?
・CircleCI と CodeDeployの連携
・CircleCI と Bitbucketの連携
・ワンコマンドによる デプロイ・フロー
・使ってみて分かった、 AWS CodeDeploy の問題点と対策
- 11. AWS CodeDeploy Agent とは?
・デプロイ先サーバ上で起動しているRuby製のデーモンプログラム
・AWSマネジメントコンソールや、AWS APIからのリクエストを検知する
・リクエストを検知すると appspec.yml に書かれた内容でデプロイ実行
(各サーバの /var/log/aws/codedeploy-agent/codedeploy-agent.log にログがある)
・スケールアウトが発生した場合、最後にデプロイに成功
したリビジョンを、起動時にS3からデプロイする。
OutOfService
新規起動
EC2
(E)
InService
EC2
(B)
AutoSucaling グループ
InService
EC2
(A)
S3
デプロイ
ELB
- 12. AWS CodeDeploy Agent のインストール
・デプロイ先のEC2に、CodeDeployエージェントをインストール
[公式] http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html
$sudo yum update
$sudo yum install ruby
$sudo yum install wget
$cd /home/ec2-user
$wget https://bucket-name(※).s3.amazonaws.com/latest/install
$chmod +x ./install
$sudo ./install auto
※bucket-name には リージョンを指定。
東京リージョンならば「aws-codedeploy-ap-northeast-1」
$sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID xxxx ← running中ならOK
・インストール確認
- 13. AWS CodeDeploy Agent の設定
version: 0.0
os: linux
files:
- source: / ← デプロイファイル(「/」は全て)
destination: /var/www/release/xxxxxx ← デプロイ先を指定
hooks:
BeforeInstall:
- location: scripts/BeforeInstall.sh ← デプロイ前に実行するシェルを指定(任意)
runas: sonicmoov
AfterInstall:
- location: scripts/AfterInstall.sh ← デプロイ後に実行するシェルを指定(任意)
runas: sonicmoov
・リビジョンルートに「appspec.yml」を作成し、デプロイ内容を記載する
[公式] http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html
- 19. AWS CodeDeploy と連携できるサービス
・AWS CodeDeployと連携できる外部パートナーサービス
[公式] http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/integrations-partners.html
・Ansible
・Atlassian – Bamboo and Bitbucket
・Chef
・CircleCI
・CloudBees
・Codeship
・GitHub
・Jenkins
・Puppet Labs
・SaltStack
・Solano Labs
・TeamCity
・Travis CI
上記は 2017/5/21現在のAWS公式ドキュメントより引用
今回連携します。
デプロイ時の
自動テストで
利用します
- 21. ・CIサービスの1つで、クラウド型のサービス
- CI(継続的インテグレーション)とはプログラムの品質改善 や納期短縮 の為の習慣や手法の事。
- CIサービスとは、CIを自動化したサービスの事。
- 具体的にはエンジニアが今まで実施したテストを一気に行い、バグ等を自動で見つける。
- バグが見つかったらデプロイを中止 するので、未然にデグレを防ぐことができる。
・コンテナ上にサーバー環境を構築することができ、
テスト環境として利用可能
・1コンテナならば無料で利用可能。
コンテナ内にソフトを自由にインストール可能。
ハードウェア
OS
コンテナ管理ソフト
コンテナ
MySQL
PHP
ライブラリ
コンテナ
MySQL
PHP
ライブラリ
.....
CircleCI とは?
- 23. CircleCI と CodeDeployの連携
(概要)
:
deployment: ← CodeDeployとの連携
production:
branch: master ← CircleCIがmasterブランチへのpushを検知したら処理
codedeploy:
prod-app:
deployment_group: prod-deploy-group ← CodeDeployで定義したデプロイグループ
application_root: /
region: ap-northeast-1
revision_location:
revision_type: S3
s3_location:
bucket: codedeploy.sonicmoov-media.com
key_pattern: master/prod-app-{SHORT_COMMIT}
・リビジョンルートに「circle.yml」を作成、circle.ymlのcodedeployブロック
を使用して、CodeDeployの詳細設定を記述します。
[公式] https://circleci.com/docs/1.0/continuous-deployment-with-aws-codedeploy
- 25. ・CircleCI は Bitbucketのリポジトリと連携できる。
・連携することにより Bitbucketへのpushを検知し CircleCIを動かす事が可能
<弊社のBitbucket運用ルール>
- masterブランチ(本番環境用のブランチ)
- developブランチ(開発環境用のブランチ)
- feature/[任意名称]ブランチ(個別開発用ブランチ(※))
・ブランチやその他の詳細設定は「circle.yml」に記述する。
(概要)
CircleCI と Bitbucketの連携
- 27. CircleCI と Bitbucketの連携
(circle.ymlの設定)
general:
branches:
only:
- master ← CircleCIが検知するブランチを指定
- develop
- /feature.*/
machine: ← CircleCiのコンテナの設定(1コンテナなら無料で使える)
timezone: Asia/Tokyo
php:
version: 7.0.11 ← デフォルトではphp7.0.4が入っているので本番サーバと同じに変更
services: ← CircleCiがデフォルトでインストールしていないものをインストール
- elasticsearch - redis
:
・リビジョンルートに「circle.yml」に詳細内容を記載する
[公式] https://circleci.com/docs/1.0/configuration/