九州インフラ交流勉強会(Kixs)
Vol.006
CI/CDパイプラインを定着させる闘い
⾃⼰紹介
• ソリューションアーキテクト
• インフラエンジニア
• ひとり情シス
• ⽣まれも育ちも福岡(ただし⽥舎に限る)
• 好きなAWSサービス
- AWS Code Series
- Amazon CloudWatch
- AWS CloudFormation
内村 和博
内容についての諸注意
• 本資料は2017年12⽉時点の製品、サービス内容を記載しています。最新
の情報に関しては各種公式サイト、マニュアル等をご確認下さい。
• 本資料作成の際には⼗分注意しておりますが、内容に公式と相違がある場
合は公式を優先とさせていただきます。
内容についての諸注意
• だいぶWEBアプリケーション(フロントエンド)に近いエンジニア
• UI、アプリケーション、インフラの中間にいる⼈間
• しかも⽂系(経済学部経済学科 修了)
• 軽い気持ちで「こんな奴もいるんだな〜」程度に
CI/CD パイプライン

(の、おさらい)
CI/CD パイプライン
ProductionTestBuildSource
• ソースコード保管
• バージョン管理
• ブランチ管理
• コードコンパイル
• 単体テスト
• スタイルチェック
• 構⽂チェック
• コードメトリックス
• コンテナーイメージ⽣成
• 結合テスト
• ローディングテスト
• UIテスト
• 侵⼊テスト
• 運⽤環境へデプロイ
• レビュー
CI/CD パイプライン
ProductionTestBuildSource
継続的インテグレーション
継続的デリバリー
継続的デプロイメント
CI/CD パイプライン
ProductionTestBuildSource
•Git
•GitHub
•BitBucket
•Jenkins
•CircleCI
•TravisCI
•Maven
•Apache Ant
•Gradle
•Ghost Inspector
•Vaddy
•Capistrano
CI/CD パイプライン の恩恵
• 「確実な」システム化
- リリースプロセスの管理
• 「安全な」テスト
- 潜在的な問題を正しく検査
• 「迅速な」製品化
- ローンチ、コードの不具合
ただしい。実にただしい。教科書通り。
……が、現実はこう。
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive が終わる前に git hook 起動
• capistrano + Git → なんとなくデプロイメントを意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive (pull) が終わる前に次の git hook 起動
• capistrano + Git → なんとなくデプロイメントを意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive が終わる前に git hook 起動
• capistrano + Git → なんとなくデプロイメントを意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive が終わる前に git hook 起動
• capistrano + Git → なんとなくデプロイメントを意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive が終わる前に git hook 起動
• capistrano + Git → なんとなくデプロイメントを意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive が終わる前に git hook 起動
• capistrano + Git → なんとなくデプロイメントを意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
WEBアプリケーション、デプロイの変遷
• ファイルアップロード(プッシュ) → インタープリター⾔語の「罪と罰」
• rsync → 論外
• Git + git hook → git archive が終わる前に git hook 起動
• capistrano + Git → なんとなく CI を意識しだした
• capistrano + Git + Jenkins → なんとなく形が⾒えてきた
• AWS CodeDeploy → 未知との遭遇。属⼈化の排除。耐障害性。⼀元管理。
• AWS Code Serise → coming soon……
何か忘れてませんか?
Docker
• コンテナ型の最有⼒候補。
• でも、そもそも The Twelve-Factor App に準拠してないし。

(罪と罰)
• アプリケーション側の多⼤なるご協⼒が必要。
• 素敵なAWSマネージドサービス
- Amazon ECS
- AWS Beanstalk
Re:Invent 2017 release “Amazon ECS”
• AWS Fargate
- コンテナのデプロイを容易にするマネージドサービス。コンテナインスタンスの構築・管理・運⽤が不要。
必要なときに必要なだけ Docker コンテナを利⽤できる
- ECS の起動タイプ “FARGATE” を選択。 (旧式は ”EC2”)
- https://aws.amazon.com/jp/fargate/
• Amazon Elastic Container Service for Kubernetes(EKS)
- Kubernetesのコントロールプレーンをマネージド型で提供するサービス。
- 2018年にはFargateによるサポート。
- https://aws.amazon.com/jp/eks/
Re:Invent 2017 release “Amazon EC2”
• Launch Template
- インスタンス起動時に設定する項⽬をテンプレート化
- Key pair name や Network Type など頻繁に変更のない設定に?
• User Date + bash
で。
今⽇、実は kixs です。
infrastructure as a code
AWS インフラも
継続的デリバリー
AWS Code Series
• AWS CodeCommit
• AWS CodeBuild
• AWS CodePipeline
• AWS CodeDeploy
CI/CD パイプライン
ProductionTestBuildSource
• AWS CodeCommit
• Amazon S3
• AWS CodeBuild • AWS CodeDeploy
• AWS Elastic Beanstalk
• AWS OpsWorks
AWS CodePipeline
AWS インフラの継続的デリバリー
• AWS CodeCommit
• AWS CodeBuild
• AWS CodePipeline
• AWS CloudFormation
AWS インフラの CI/CD パイプライン
ProductionTestBuildSource
• AWS CodeCommit • AWS CodeBuild
• AWS CloudFormation
• AWS Lambda • AWS CloudFormation
AWS CodePipeline
Demo!
というか、何か忘れてませんか?
AWS CodeStar
いいんです……。まだ東京リージョンにGAしてないし……。
まとめ
まとめ
CI/CD パイプライン浸透には時間がかかる。

でも価値(恩恵)は⼗分にある。
インフラ(AWSリソース)もコード化。

i.e. CI/CD の対象。
- コードの保管、デバッグ、テスト、⼿動承認、デプロイ。
AWSマネージドサービス、素敵。
今後……
• infrastructure as a code(Web tire)の完成
• DevOps ⽂化の布教(普及)活動
• IoTデバイスへの継続的デプロイメント(エッジデプロイ)
- Amazon CloudFront and Lambda@Edge
- AWS Greengrass
• アプリケーションとインフラの間の⼈間
関連リソース
• AWS クラウドサービス活⽤資料集
‣ https://aws.amazon.com/jp/aws-jp-introduction/
• AWS Code Services Part 2

from “AWS Black Belt Online Seminar"
‣ https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-aws-code-services-part-2
• AWS マネージドサービスで実現する CI/CD パイプライン

from “AWS Summit Tokyo 2017”
‣ https://d1.awsstatic.com/events/jp/2017/summit/slide/D4T2-6.pdf
• AWS Fargate
‣ https://aws.amazon.com/jp/fargate/
• Amazon EKS
‣ https://aws.amazon.com/jp/eks/
• kubernetes
‣ https://kubernetes.io/
• Launching an Instance from a Launch Template
‣ https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-launch-templates.html
• AWS CodePipelineを利⽤したネストされたAWS CloudFormationスタックの継続的デリバリー | Amazon Web Services ブログ
‣ https://aws.amazon.com/jp/blogs/news/continuous-delivery-of-nested-aws-cloudformation-stacks-using-aws-codepipeline/
• AT PRO クラウドダイレクトサービス
‣ http://www.qtnet.co.jp/business/network/cloud-direct/
ご清聴ありがとうございました。

CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006