ユースカジノ 紹介CICDって何が嬉しいの?ユースカジノ
AWSではじめるCICD②
投稿日: 2024/5/14
はじめに
こんにちは、渡部(わたなべ)です。
前回の【CICDって何がうれしいの?AWSで始まるCICD①】は基礎知識編となり、今回は実践編となるため、園田からバトンタッチで私、渡部(わたなべ)が説明します。
前回のブログでは、CICDの必要性と魅力について説明しました。今回からいよいよ実践編という事でAWS上でパイプラインのユースカジノ 特徴に入っていきます。
AWS CodeCommit:
ソースコードを管理ユースカジノ 特徴リポジトリでgitをホスティングしているサービス
AWS CodePipeline:
CICDにおけるパイプライン(コードのビルド、テスト、デプロイなどのプロセスを自動化したもの)を定義ユースカジノ 特徴ツール。AWSでCICDパイプラインを作る上での根幹となります。
AWS CodeBuild:
ソースコードのビルド(コンパイル)及びテストを実施ユースカジノ 特徴サービス
ECR(Elastic Container Registry):
コンテナイメージの管理・保管を行うフルマネージドなリポジトリサービス。ECS(Elastic Container Service)と連携し、コンテナのデプロイを行います。
ECS(Elastic Container Service):
コンテナのフルマネージドオーケストレーションサービス。ECRからコンテナイメージを取得し、該当コンテナの実行環境を選択の上、管理を行うことができます。
実行環境はEC2上でECSが起動ユースカジノ 特徴もの、およびEC2無しでコンテナが単独で起動ユースカジノ 特徴Fargateが存在します。基本的にはインスタンスの管理が必要ないFargateを利用ユースカジノ 特徴ことを推奨します。
Cloud9:
AWS環境で利用可能なIDE(統合開発環境)サービス
(今回の説明に必要なコマンド実行等はCloud9から実施しています。)
事前準備
今回の作成ユースカジノ 特徴環境ですが、ECSを用いて、インターネットからアクセスできるコンテナをデプロイします。コンテナにはnginxをインストールしてますので、インターネットからコンテナに対してアクセスした際に、作成したwebページを閲覧可能です。
手動でのデプロイ時は複数の工程が必要となりますが、その一連の作業をCode Pipelineを用いて自動化ユースカジノ 特徴ことが今回のゴールとなります。
まずはコンテナをデプロイユースカジノ 特徴NW環境を作成します。
NW環境については以下の構成の通りとなり、VPC及びELB(ALB)が存在ユースカジノ 特徴通常の環境です。(すでに本環境がある前提でのお話になりますのでご注意ください。)

■NW構成図
上記NW環境がある前提で、実施ユースカジノ 特徴作業の概要となります。
作業1:コンテナイメージのユースカジノ 特徴
Dockerイメージを作成し、ECR(Elastic Container Registry)に今回使用ユースカジノ 特徴Dockerイメージをアップロードユースカジノ 特徴。
作業2:コンテナユースカジノ 特徴設定
ECRに保存したDockerイメージを起動ユースカジノ 特徴ために、ECS(Elastic Container Service)にてコンテナ作成の設定を行う。
作業3:ビルド設定の実施
ビルドとテストを行うために、CodeBuildにてビルドプロジェクトを作成ユースカジノ 特徴。
作業4:1~3の作業を自動化
Code Pipelineにてパイプラインを作成し、1~3の作業を自動化ユースカジノ 特徴
※環境へのデプロイは、CodeBuildにてビルドとテスト終了後にECSにて行われるため、上記の工程を踏むことでシンプルなCI/CDパイプラインのユースカジノ 特徴を行うことが可能です。
それでは作業1の工程から進めていきましょう。
作業1-① ECR (Elastic Container Registry)のリポジトリユースカジノ 特徴
まずはDockerのコンテナイメージをアップロードユースカジノ 特徴「レポジトリ」を作成しましょう。
1:AWSの検索タブでECRを検索

2:左タブのPrivate repositoriesの「Repositories」プライベートリポジトリを選択、「リポジトリをユースカジノ 特徴」をクリック。

3:可視性設定を「プライベート」、「レポジトリ名」を記入し、「レポジトリをユースカジノ 特徴」をクリック

4:作成が完了ユースカジノ 特徴と、「正常に作成されました」が出力

リポジトリを作成した段階では、リポジトリ内には何もファイルはない状態となっています。ここに、これから作成ユースカジノ 特徴Dockerコンテナイメージを投入します。

作業1-② コンテナイメージをユースカジノ 特徴し、ECRにプッシュ
次にレポジトリに格納ユースカジノ 特徴コンテナイメージの作成を行います。
そもそもコンテナイメージとは何かですが、「コンテナ作成に関ユースカジノ 特徴命令が入ったテンプレート」と考えてください。最終的にECSにてデプロイされるコンテナは、このコンテナイメージを基に作成されます。まずはこのコンテナイメージの作成を行います。
今回はコンテナイメージの設計図とも言えるDockerfileのユースカジノ 特徴を行います。Cloud9にて以下のファイルのユースカジノ 特徴を行います。以下の通り記載しましょう。
# DockerHubにて提供されているnginx(Webサーバーソフト)のイメージを取得。
FROM nginx:latest
# updateコマンドによりインストール可能なパッケージの「一覧」を更新。
RUN apt-get -y update && apt-get -y install wget
# nginxデーモンを起動。
CMD ["nginx", "-g", "daemon off;"]
dockerではコマンドをforegroundで動かさないとコンテナが停止してしまうため注意しましょう。「CMD ["nginx", "-g", "daemon off;"]」を記載ユースカジノ 特徴ことで、foregroundで起動させる形となります。
Dockerfileをユースカジノ 特徴したら、先ほどユースカジノ 特徴したECRのリポジトリにイメージを投入します。そのためにまずはECRでユースカジノ 特徴したリポジトリのURIをコピーしましょう。

Cloud9にて該当のファイルを指定し、以下コマンドを打ちます。
※以下、Cloud9から実行ユースカジノ 特徴コマンド操作は青字で記載
Docker buildx build -f<リポジトリURI>/<リポジトリ名>:<タグ名>
リポジトリURI:
今回Dockerイメージを保管ユースカジノ 特徴ECRリポジトリのURIを指定。
リポジトリ名:
1-①にてユースカジノ 特徴したリポジトリの名称を記載
タグ名:
Dockerイメージのバージョン番号。特にこだわりがなければ”latest”と記載してください。
■コマンド実行後の出力例

コマンド実行後、ユースカジノ 特徴したDockerfileを基にDockerイメージがユースカジノ 特徴されます。
「docker images」コマンドにてイメージがユースカジノ 特徴されていることを確認可能です。

Dockerイメージを作成できていることが確認できたら、ECRのリポジトリにDockerイメージを保存ユースカジノ 特徴ためにECRにloginを行います。
以下コマンドを入力してください。
Daws ecr get-login-password --region<所属リージョン>| docker login --username AWS --password-stdin<リポジトリURI>
所属リージョン:
Dockerイメージを投入ユースカジノ 特徴リージョンを指定。基本は作成したVPCと同じリージョンを選択してください(例:ap-northeast-1)
リポジトリURI:
今回Dockerイメージを保管ユースカジノ 特徴ECRリポジトリのURIを指定

入力後、Login Succeededと出力されれば成功です。
Docker Loginが完了したら、あとは作成したDockerイメージをECRのリポジトリに保存ユースカジノ 特徴だけです。そのためにはdocker pushコマンドを利用します。
docker push<リポジトリURI>/<リポジトリ名>:<タグ名> .
AWSアカウントID:
ご自身のAWSアカウントID
所属リージョン:
Dockerイメージを投入ユースカジノ 特徴リージョンを指定。基本は作成したVPCと同じリージョンを選択してください(例:ap-northeast-1)
タグ名:
Dockerイメージのバージョン番号。特にこだわりがなければ”latest”と記載してください

コマンド完了後、ECRのリポジトリ内にユースカジノ 特徴したDockerイメージが保存されていることが確認できます。

作業2-① ECS(Elastic Container Service)
続いてECS(Elastic Container Service)にてコンテナのユースカジノ 特徴設定を行います。
ECSはAWSによる完全マネージド型コンテナサービスで、クラスター単位でそれぞれのサービスを管理しています。実行ユースカジノ 特徴コンテナはECRのレジストリから取得して、別途作成ユースカジノ 特徴タスク定義を用いて各クラスター内でサービス設定を行います。
それでは早速ECSの設定を実施しましょう。
■ECS クラスターのユースカジノ 特徴
まずはECSのページに遷移し、左上に記載されている「クラスター」を選択してください。

その後、「クラスターをユースカジノ 特徴」をクリックしてください。

クラスターのユースカジノ 特徴ページにて以下の通り、設定を投入してください。
AWSアカウントID:
ご自身のAWSアカウントID
クラスター名:
ご自由に記載してください
インフラストラクチャ:
「AWS Fargate」を選択

■ECS タスク定義のユースカジノ 特徴
続いてタスク定義をユースカジノ 特徴していきます。
タスク定義では、起動ユースカジノ 特徴コンテナのスペックといった、コンテナに関ユースカジノ 特徴設定を行います。起動時の設定をタスクとして設定しておき、後に作成ユースカジノ 特徴サービス設定にて利用します。

タスク定義を選択後、「新しいタスク定義のユースカジノ 特徴」をクリックしてください。
作成時に専用のタスクロール及びタスク実行ロールが作成されます。(「タスクロール」のカラムにて、「IAMコンソール」をクリックユースカジノ 特徴ことでロールが作成される。)
ユースカジノ 特徴されたロールには、以下の許可ポリシーを追加してください。
- AmazonEC2ContainerRegistryReadOnly
- AmazonECSTaskExecutionRolePolicy
- CloudWatchFullAccess

■サービスユースカジノ 特徴
続いてサービスの設定を行います。
サービスの設定を行うには、クラスター設定にてユースカジノ 特徴したクラスターを選択し、項目「サービス」の画面にある「ユースカジノ 特徴」をクリックします。

以下の通り設定を行っていきます。なお、VPCとセキュリティグループ、ALBの設定については適切なものを選択ください。あくまで説明時に選択されているVPC、サブネット、セキュリティグループはご自身で作成された物をご利用ください。必要なタスクは「1」を指定ユースカジノ 特徴ことでコンテナが1台起動します。

ユースカジノ 特徴をクリック後、以下のバナーが上部に出現します。

CloudFormationにて作成の工程を確認ユースカジノ 特徴ことができます。本画面にてCREATE_COMPLETEと表示されたら作成完了となります。

クラスターの詳細画面においても、上部に対象のサービスがデプロイされましたと表示されていればユースカジノ 特徴完了となります。

実際に作成したサービスに基づいて起動しているコンテナには、以下二つの方法から確認ユースカジノ 特徴ことが可能です。
- ユースカジノ 特徴したVPCにあるELBに紐づくFQDNでアクセス。
- 作成したサービスを選択ユースカジノ 特徴ことで確認ができるネットワーク設定欄にある、DNS名のオープンアドレスをクリック。

オープンアドレスをクリックユースカジノ 特徴ことで、デプロイされたコンテナにアクセスユースカジノ 特徴ことができます。今回であればnginxを用いてwebサーバを立てているため、以下のような画面が表示されます。

作業2-② CodeCommit
続いてCodeCommitの利用に関ユースカジノ 特徴説明を行っていきます。ECRにコンテナイメージをアップロードユースカジノ 特徴際には、今まではCloud9上でコマンドを直接入力してプッシュしておりましたが、今後は特定のファイルに、入力ユースカジノ 特徴コードを事前に記入の上自動で実行されるようにします。
自動実行自体はCodePipelineを利用ユースカジノ 特徴のですが、その事前準備として、CodeCommitリポジトリに必要なコードをプッシュします。
まずはCodeCommitの画面に遷移し、「リポジトリをユースカジノ 特徴」をクリックしましょう。

リポジトリ名を自由入力し、「ユースカジノ 特徴」をクリックしてください。

ユースカジノ 特徴後、画面上部に成功と記載された緑色のバナーが出力されていればOKです。

ではユースカジノ 特徴したリポジトリに必要なプログラムをプッシュしていきましょう。
作業2-③ Cloud9よりCodeCommitにコードをプッシュユースカジノ 特徴
Cloud9上で以下のコマンドを記入してください。
Git clone https://git-codecommit.<作成リージョン>.amazonaws.com/v1/repos/<リポジトリ名>
所属リージョン:
Dockerイメージを投入ユースカジノ 特徴リージョンを指定。基本は作成したVPCと同じリージョンを選択してください。例:ap-northeast-1
リポジトリ名:
CodeCommitにてユースカジノ 特徴したリポジトリの名称

Git cloneを行うことで、Codecommitで作成したリポジトリに紐づくフォルダが作成されます。本フォルダ内にリポジトリにプッシュユースカジノ 特徴ファイルを入れていきます。

リポジトリにプッシュユースカジノ 特徴ファイルを投入したら、今度はgit addとgit commitを行っていきます。Git addコマンドでローカルリポジトリにプッシュユースカジノ 特徴ファイルを指定し、git commitコマンドでローカルリポジトリ内にあるファイルを更新します。Git commit時はコミット用のコメントを必ず記載してください。
Git add .
git commit -m “<コメント>”

最後にgit pushを行い、ローカルリポジトリからリモートリポジトリへと投入ファイルを送信します。
git push

プッシュが上手く完了していれば、CodeCommitのリポジトリ内に投入したファイルがリポジトリ内にあることを確認できます。

作業3-① CodeBuild
続いてCodeBuildにてCodeCommitに投入したコード群を用いてコードのビルドからテストまで行っていきます。
ビルド処理自体はbuildspec.ymlというyamlファイルにコマンド等を記載して実行ユースカジノ 特徴こととなります。まずはCodeBuildでビルドプロジェクトを作成していきましょう。
CodeBuildのページを開く、「プロジェクトのユースカジノ 特徴」をクリックしてください。

ビルドプロジェクトのユースカジノ 特徴画面に遷移したら以下を参考に設定を行ってください。
以下注意点です。
- リポジトリ名はCodeCommitでユースカジノ 特徴したリポジトリ名を選択してください。
- サービスロールは新たにCodeBuild専用の物をユースカジノ 特徴しますが、ユースカジノ 特徴後に以下の許可ポリシーを追加してください。
- AmazonEC2ContainerRegistryPowerUser
- AmazonS3FullAccess
- AWSCodeBuildAdminAccess
- AWSCodeCommitFullAccess
- 追加設定にある以下設定は必ず有効化してください。
「Dockerイメージを構築ユースカジノ 特徴か、ビルドで昇格されたアクセス権限を取得ユースカジノ 特徴には、このフラグを有効にします」

「ビルドプロジェクトを作成ユースカジノ 特徴」をクリックし、画面上部に緑色のバナーが出ることを確認してください。

■Buildspec.ymlのユースカジノ 特徴
Buildspec.ymlはビルドプロジェクトにおいてかなり重要なファイルとなります。別途説明を行いましたが、buildspec.ymlに記載されるコマンドをビルド及びテストの際に実行してくれます。このファイルをソースコードのルートフォルダに配置ユースカジノ 特徴ことで、CodeBuildがbuildspec.ymlを読み込んで、コマンドを上から自動で実行してくれます。
Buildspec.yml記述時には4つのフェーズがあるのが特徴です。具体的には以下の通りです。
- install
CodeBuildが実行ユースカジノ 特徴コンテナ内で、ビルドやテストに必要なパッケージ等をインストールユースカジノ 特徴フェーズ - pre_build
ビルド実行前に必要な処理を行うフェーズ。ビルドに使用ユースカジノ 特徴ファイルの整形やECRレポジトリへのログイン、Docker Loginなどはこちらのフェーズで記述 - build
ビルド及びテストを実施ユースカジノ 特徴フェーズ。Docker buildや環境のテスト(pytestなど)はこのフェーズで記述 - post_build
ビルド及びテスト実施後にCodeBuildに実行してほしいコマンドを実施ユースカジノ 特徴フェーズ
他にも4フェーズとは別にversion, envやArtifactsと呼ばれる項目を設けます。
- version
Buildspec.ymlのバージョンを記載します - env
環境変数を設定ユースカジノ 特徴ことができます。こちらは必須項目ではないので、設けなくても問題ないです - Artifacts
ビルド及びテストの出力結果が保存されているファイル名をここに記載。これらのファイルはS3に保存されます
〇ユースカジノ 特徴した「Buildspec.yml」ファイル
version: 0.2
env:
variables:
SRC_AWS_ACCOUNT_ID:phases:
install:
runtime-versions:
python: 3.9
commands:
pre_build:
commands:
- aws ecr get-login-password --region<所属リージョン>| docker login --username AWS --password-stdin.dkr.ecr.<所属リージョン>.amazonaws.com
- echo $DOCKERHUB_PASS | docker login -u $DOCKERHUB_USER --password-stdin
build:
commands:
- docker build -t<リポジトリ名>:<イメージ番号>.
- docker run -d -p 80:80<リポジトリ名>:<イメージ番号>- docker tag<リポジトリ名>:<イメージ番号> :<イメージ番号>- docker push:<イメージ番号>- printf '[{"name":"","imageUri":"%s"}]':<イメージ番号>imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
AWSアカウントID:
ご自身のAWSアカウントID
所属リージョン:Dockerイメージを投入ユースカジノ 特徴リージョンを指定。基本は作成したVPCと同じリージョンを選択してください。例:ap-northeast-1
DOCKERHUB_USER:
Docker Hubのユーザー名
DOCKERHUB_PASS:
Docker Hubのユーザー名に紐づくパスワード
イメージ番号:
Dockerイメージのバージョン番号。特にこだわりがなければ”latest”と記載してください。
リポジトリ名:
ECRにあるリポジトリの名称
ECR URI:
ECRにあるリポジトリのURI
Buildspec.yml作成後はcodecommitの専用リポジトリにコードをプッシュしてください。(やり方については、codecommitに関ユースカジノ 特徴説明をご覧ください。)
作業4-① CodePipeline
それでは今回のCI/CDの根幹である、CodePipelineのユースカジノ 特徴に入りましょう。CodePipelineではパイプラインユースカジノ 特徴時に、事前にユースカジノ 特徴したパイプラインに組み込むアイテムを指定していきます。指定したアイテムを順に実行していき、最終的にデプロイまで行ってくれます。
それではさっそく作っていきましょう。
まずはCodePipelineの画面を開き、「パイプラインを作成ユースカジノ 特徴」をクリックしてください。

続いてパイプラインの設定を選択ユースカジノ 特徴とありますため、以下の通り設定してください。
パイプラインタイプという項目がありますが、今回はV1を選択します。
V2ではV1では選択できない細かい変数の指定等を行えますが、今回はシンプルなパイプラインの実装を行うため、V1でユースカジノ 特徴します。
必要な設定を投入したら「次に」をクリックしてください。

続いて、ソースステージの追加を行います。
ここでは事前にユースカジノ 特徴したCodeCommitのリポジトリを選択します。

続いてビルドステージを追加します。
ここではCodeBuildの項目でユースカジノ 特徴したビルドプロジェクトを選択します。

続いてデプロイステージとなります。
ここではデプロイプロバイダーとしてECSを選択してください。その後、事前にECSにてユースカジノ 特徴したサービスを選択してください。

一通り設定を完了ユースカジノ 特徴と、レビューというページに遷移します。設定に間違いがなければそのまま「パイプラインを作成ユースカジノ 特徴」をクリックしてください。

「パイプラインを作成ユースカジノ 特徴」をクリックユースカジノ 特徴と、作成したパイプラインが早速動き出します。
SourceをCodeCommitから取得し、CodeBuildでビルドとテストを実行、最終的にビルドでdocker pushした新しいイメージを基に、ECSにてデプロイを行います。一通り成功すれば、以下のように「成功しました」と表示されます。

各フェーズにある「詳細を表示」をクリックユースカジノ 特徴と、各フェーズで実行されている内容の詳細を確認できます。以下はBuildフェーズでbuildspec.ymlに記載されたコマンドを基に動作している様子となります。

作業4-② 承認フェーズの追加
ユースカジノ 特徴したパイプラインに承認フェーズを追加していきます。承認フェーズを各フェーズの間に挟むことで、パイプラインの内容全てが自動で実行されるのを防ぐことができます。例えば、CodeCommitに投入したコードが、バグが治っていない改修前のコードであった場合、承認フェーズを間に挟まないとビルドからその先にデプロイまで実行されるため、バグが治っていない状態でリリースされてしまいます。
間に承認フェーズを挟むことで、リリース前に一度確認を手動で行い、障害が発生ユースカジノ 特徴リスクを下げることが可能です。
承認フェーズを追加ユースカジノ 特徴には、対象のパイプライン画面にて「編集」をクリックします。

承認フェーズを追加したい位置で、「ステージを追加ユースカジノ 特徴」をクリックします。
今回はSourceとBuildの間に追加します。

続いて、ステージ名を記載します。
今回はシンプルに「SourceAapproval」と記載します。

続いて、「アクショングループを追加ユースカジノ 特徴」をクリックしてください。

以下の通り設定してください。
承認リクエストを実施時に、SNSで関係者に承認通知を実施したり、コメントをメールで通知ユースカジノ 特徴ことも可能ですが、今回は承認実施のみを行います。
設定したら、「完了」をクリックしてください。

フェーズ「SourceApproval」が追加されたことを確認します。
問題なければ、パイプラインの編集を完了し、保存してください。

保存後、SourceとBuildの間に新たに「SourceApproval」フェーズが追加されていることを確認できます。一度動作確認のために、画面右上の「変更をリリース」ユースカジノ 特徴をクリックし、再度リリースをしてみましょう。

再度パイプラインを最初から動かすと、承認フェーズで止まっていることを確認できると思います。「Review」ボタンをクリック後、承認を実施ユースカジノ 特徴ことで、ビルドフェーズに進むことが可能です。

最後に
今回利用しているDockerコンテナではnginxサーバが動作しているため、アクセス時に表示されるページに変更を加え、パイプラインを動かしリリースユースカジノ 特徴ことで、リリースが上手く動作しているかを確認ユースカジノ 特徴ことが出来ます。
今回CodeBuildのbuildspec.ymlではビルドのみを実行していますが、こちらにpytestといったテスト用のパッケージを利用ユースカジノ 特徴ことで、テストを事前に実行した状態でリリースユースカジノ 特徴ことができます。
また、今回のリリースでは説明の関係上、「【初心者向け】CICDって何が嬉しいの? AWSではじめるCICD①」で説明したブルーグリーンデプロイではなく、ローリングアップデートという手法を用いてリリースしています。
ブルーグリーンデプロイの実装には、別途手順があるため、次回以降のブログにて紹介したいと思います。併せて次回は今回のCICD環境にテストを追加していきます。
それでは、「【初心者向け】CICDって何が嬉しいの? AWSではじめるCICD③」でお会いしましょう。
ユースカジノ 特徴は、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。