SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
CodePipeline
Commit()
Build()
Deploy()
継続的デプロイ
+
HOOK
で
JAWS UG GUNMA 2019 .6 .18
前回CodePipelineの話が出たのでLTしてみようと思い立ちま
した。
AWS Codeシリーズを使った継続的デプロイ環境の構築。
また、Codeシリーズを利用してどんなことが実現できるのか?
などについて、入門的なお話ができればと思っています。
概要
継続的デリバリーと継続的デプロイ
CI/CD
継続的デリバリーと継続的デプロイの違いは、運用環境
への更新に手動での承認が必要か否かという点です。
継続的デプロイでは、明示的な承認が行われることはな
く、自動的に本番環境になります。
AWS公式 「継続的デリバリーとは」より引用
https://aws.amazon.com/jp/devops/continuous-delivery/
自動化
今回試してみたこと
GitからAWS上のリポジトリにPush
アーティファクト(成果物)生成
アプリケーションをEC2にデプロイ
hookでByteCodeCacheやSessionのクリア
&
CodePipeline
対象
Gitのリポジトリ操作をAWSマネジメントコンソール上で行いたい
デプロイを自動化したい
デプロイするだけじゃなくて、ちょっとしたことも自動化したい
1.
2.
3.
それ、○○でも出来るよ!みたいなことは当然あると思いますが、
このスライドの作成にあたり、他のGitホスティングサービスやCIツールと比較してどうか
といったような細かい調査までは行なっておりません。
※
こんな方を想定
実現
1. Gitのリポジトリ操作をAWSマネジメントコンソール上で行いたい
IAMでユーザ別の権限の設定が可能
他のGitホスティングサービスに頼らず
AWSのみで一元管理
で出来ること。
実現
とりあえずプッシュしたらデプロイ、 
くらいであれば設定の敷居は比較的低い
2. デプロイを自動化したい
( Git WebHook → git pullなどと比較して )
で出来ること。
実現
3. デプロイするだけじゃなくて、ちょっとしたことも自動化したい
設定ファイルからタスク別に実行するタイ
ミングを細かく指定できる
他のAWSサービスとの連携が可能
(Lambda, SESなど)
で出来ること。
さっそく自動化してみる。
と、いう訳で
Advance preparationNext ...
準備
• AMS CLI
必要なもの
• buildspec.yml
• appspec.yml
( localにインストール. commit時に必要なCredential情報の登録で使用 )
( Buildステージでの動作を定義するファイル. 必須 )
( Deployステージでの動作を定義するファイル. 必須 )
version: 0.1
phases:
build:
install:
runtime-versions:
php: 73
commands:
- aws deploy push --region
ap-northeast-1 --application-name
{ $your_application_name }
--s3-location
s3://{ $your_application_name }codebuild/app.zip
--source src
artifacts:
files:
- '**/*'
base-directory: src
name: app.zip
buildspec.yml
ランタイムのバージョンはbuildアプリ
ケーション作成時に選択するものを指定
アーティファクトの名称を指定。
srcディレクトリ以下を対象とする。
ymlファイルはsrcと同階層に設置。
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html/
appspec.yml
アプリケーションのルートディレクトリに配置します。
( 先ほどのsrcの例だとsrcの一階層下)
後にこちらのファイルへデプロイ時のhookなどの動作
を追加していきます
CodeCommitNext ...
1. マネジメントコンソールにログイン
2. CodeCommitにてリポジトリを作成
3. IAMにてアクセスキーIDとシークレットアクセスキーを取得
( IAM → ユーザー → 認証情報 →アクセスキーの作成 )
CodeCommit
$ aws configure
$ AWS Access Key ID : { ******************** }
$ AWS Secret Access Key : { ******************** }
$ Default region name : { e.g. ap-northeast-1 }
$ Default output format : { json | text | table }
IAMのクレデンシャル情報を使ってawsのリポジトリにcommitします
CodeCommit
$ git config --global credential.helper
'!aws —region { $region } codecommit
$ git config --global credential.UseHttpPath true
credential-helper $@'
Code BuildNext ...
AWS 認証情報プロファイルでGit認証情報ヘルパーを使用するように指定します
オプションにて一緒にリージョンの設定をしています。
$region = e.g. “ap-northeast-1”
CodeCommit
1. S3でアーティファクト格納用のバケットを作成する
2. バケットのプロパティ→バージョニングを有効化しておく
3. CodeBuildのプロジェクトを作成する
( 各オプションはデフォルトでOK )
( バージョン管理用 )
CodeBuild
4. 新規CodeBuildプロジェクトの各設定を行います
先ほど作成したbuildspec.ymlを使用するに選択
こちらも先ほど作成したS3のアーティファクト格納用バケットを指定
CodeBuild
5. IAMにてCodeBuild用のロールを作成します
CodeBuildプロジェクト名に対応したポリシーが作成されているのでアタッチします
CodeBuildプロジェクトを削除してもこちらのポリシーは削除されません。
同名でプロジェクトを再作成する際には一旦古いポリシーを手動で削除する必要があるようです
※
Code DeployNext ...
CodeBuild
1. EC2用にS3アクセス用のロールを作成
( CodeBuildで生成したアーティファクトを参照できるようにします )
2. 作成したロールをEC2インスタンスに割り当てる
( ec2 → インスタンスを選択 → アクション → インスタンスの設定 → ロールの割り当て )
3. EC2インスタンスにCodeDeployエージェントをインストール
4. CodeDeploy用のIAMロールを作成
5. CodeDeployアプリケーションを作成
( EC2インスタンスにSSHでログインしcurlなりwgetで導入します ※次ページで詳しく)
( AWSCodeDeployRoleをアタッチ )
( 名称はCodeBuildと合わせる )
6. デプロイグループを作成
( デプロイタイプは特に難しいことをしないのであればインプレースデプロイを指定 )
( 環境設定ではタグのキーと値をEC2インスタンスと一致させます )
CodeDeploy
$ curl -O https://aws-codedeploy-
$ wget https://aws-codedeploy-
wget
$region = e.g. “ap-northeast-1”
{ $region }.s3.amazonaws.com/latest/install && sudo
chmod +x ./install && sudo ./install auto
curl
{ $region }.s3.amazonaws.com/latest/install
CodeDeploy
EC2インスタンスに、CodeDeployエージェントをインストール
$ sudo service codedeploy-agent status
CodePipelineNext ...
正常にインストールできたか確認を行います
エージェントのインストールがうまくいかない場合
• appspec.ymlが正しく書かれているか?
• ロールの割り当てよりも前にCodeDeployエージェントをインストールしてしまった場合は 
エージェントの再起動が必要
• エージェントのログを確認。(※以下のパスは私のCentOS7における環境です)
 tail -f -n 200  /var/log/aws/codedeploy-agent/codedeploy-agent.log
デプロイがうまくいかない場合
CodeDeploy
( サービスロールは新しいサービスロールを選択すると自動生成、割り当てが行われます )
1. マネジメントコンソールから新規Pipelineを作成
2. ソースステージを追加
3. ビルドステージを追加
4. デプロイステージを追加
(作成したCodeCommitとpusu時に動作させたいブランチを指定します)
( 作成したCodeBuildプロジェクトを指定します )
( 作成したCodeDeployアプリケーションとデプロイグループを指定します)
5. Pipelineは作成時に1度動作し、以後Push時に動作します
AWS公式 リファレンス : CodePipelineでパイプラインを作成する
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/pipelines-create.html
CodePipeline
デプロイ時にPermission変更
Setting ...Next ...
Hook
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html/
appspec.yml
permissions:
- object: /var/www/html/auth
pattern: "**"
owner: root
group: root
mode: 606
type:
- file
- object: /path/to/log
pattern: “sample.log"
owner: root
group: root
mode: 606
type:
- file
ドキュメントルート
ワイルドカードで指定
ファイル名で指定
詳しくはAWS公式リファレンスを参照
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/
userguide/reference-appspec-file-example.html
もう少しいろいろやってみます。
デプロイ時に、
Setting ...Next ...
Hook
既存のセッションファイルを一掃し、
ByteCodeCache(opcache)をクリアする
appspec.yml
files: …
hooks:
BeforeInstall:
- location: script/clean.sh
runas: root
AfterInstall:
- location: script/destroy_session.sh
runas: root
ApplicationStart :
- location: script/clean_opcache.sh
runas: root
ValidateService:
- location: sample.sh
permissions: …
rm -rf /var/www/html/
php opcache消去用
wgetでphpスクリプトを叩く
rm -rf /session_file_path*
BeforeInstallでも良さそう
実際にPipelineを流してみます。
と、いう訳で
ご静聴ありがとうございました一旦...

Contenu connexe

Tendances

AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)
Amazon Web Services Japan
 

Tendances (20)

Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
AWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar Elastic Load BalancingAWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar Elastic Load Balancing
 
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
 
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
 
Google Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサ
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
基礎からのEBS
基礎からのEBS基礎からのEBS
基礎からのEBS
 
AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)AWS 初級トレーニング (Windows Server 2012編)
AWS 初級トレーニング (Windows Server 2012編)
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
AWS CURのデータを安く楽に可視化して共有したい
AWS CURのデータを安く楽に可視化して共有したいAWS CURのデータを安く楽に可視化して共有したい
AWS CURのデータを安く楽に可視化して共有したい
 
20190313 AWS Black Belt Online Seminar Amazon VPC Basic
20190313 AWS Black Belt Online Seminar Amazon VPC Basic20190313 AWS Black Belt Online Seminar Amazon VPC Basic
20190313 AWS Black Belt Online Seminar Amazon VPC Basic
 
週末趣味のAWS Transit Gatewayでの経路制御
週末趣味のAWS Transit Gatewayでの経路制御週末趣味のAWS Transit Gatewayでの経路制御
週末趣味のAWS Transit Gatewayでの経路制御
 
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンスAWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
 

Similaire à CodePipeline入門

NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
guestc4549
 

Similaire à CodePipeline入門 (20)

どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
 
JenkinsとCodeBuildとCloud Buildと私
JenkinsとCodeBuildとCloud Buildと私JenkinsとCodeBuildとCloud Buildと私
JenkinsとCodeBuildとCloud Buildと私
 
Azure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - OverviewAzure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - Overview
 
ng build --prod & Continuous Delivery
ng build --prod & Continuous Deliveryng build --prod & Continuous Delivery
ng build --prod & Continuous Delivery
 
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポートJAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsi
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみた
 
Lambda EdgeとALB認証を導入した話
Lambda EdgeとALB認証を導入した話Lambda EdgeとALB認証を導入した話
Lambda EdgeとALB認証を導入した話
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要
 
AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
de:code 2019 Cloud トラック 総まとめ! 完全版
de:code 2019 Cloud トラック 総まとめ! 完全版de:code 2019 Cloud トラック 総まとめ! 完全版
de:code 2019 Cloud トラック 総まとめ! 完全版
 
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFrameworkTrue Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
 
分かったうえではじめるCI/CD
分かったうえではじめるCI/CD分かったうえではじめるCI/CD
分かったうえではじめるCI/CD
 

CodePipeline入門