TOPコラム一覧【初心者向け】CICDって何が嬉しいの? AWSではじめるCICD②


AWSではじめるCICD②

はじめに

こんにちは、渡部(わたなべ)です。

前回の【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
  • 追加設定にある以下設定は必ず有効化してユースカジノ 特徴。
    「ユースカジノ 特徴構築するか、ビルドで昇格されたアクセス権限を取得するには、このフラグを有効にします」

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

■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のビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせユースカジノ 特徴。

お問い合わせ


【著者プロフィール】

渡部 喬登(わたなべ たかと)

伊藤忠テクノソリューションズ株式会社 クラウドアーキテクト

カジノゲームが提供するマネージドサービス担当者として、VMware SD-WANなどを用いたクラウドネットワーク検証、構築を実施。 クラウドネットワーク検証でクラウドの可能性を感じ、AWS関連業務に異動願を出しAWS担当となる。 現在はAWS関係のサービス検証及び自動化等の開発を実施している。

渡部 喬登(わたなべ たかと)

TOPコラム一覧【初心者向け】CICDって何が嬉しいの? AWSではじめるCICD②

pagetop