ここでは、フロントエンドをコードで管理するためのGitリポジトリを、CodeCommitをリモートリポジトリとして利用して作成します。
「サービス」から「CodeCommit」を選択し、「リポジトリの作成」を選択します。
「リポジトリを作成」の画面で、以下のように設定します。
{ユーザ名}-ecsdemo-frontend
次に、今回のハンズオンで作成したCloud9環境を開き、ターミナルに以下のコマンドを入力します。
git config --global user.name "{任意の名前}"
git config --global user.email "{任意のメールアドレス}"
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
cd ~/environment
git clone {コピーしたGitリポジトリのURL}
以下は実行例です。
$ cd ~/environment
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/user1-ecsdemo-frontend
Cloning into 'user1-ecsdemo-frontend'...
warning: You appear to have cloned an empty repository.
cd ~/environment
wget {このハンズオンのURL}/codes/ecshandson.tar.gz
tar --warning=no-unknown-keyword -xzf ecshandson.tar.gz
ここでは、クローンしたリポジトリに、ダウンロードしたファイルをコピーしながら、CI/CDのための準備をします。
cd ~/environment/ecshandson/ecsdemo-frontend/
cp -pr ./* ~/environment/{ユーザー名}-ecsdemo-frontend/
cp -pr .dockerignore ~/environment/{ユーザー名}-ecsdemo-frontend/
cp -pr .gitignore ~/environment/{ユーザー名}-ecsdemo-frontend/
Cloud9環境の左側、ディレクトリツリーから{ユーザー名}-ecsdemo-frontend
を開き、不要なbuildspec-dockerhub.yml
とbuildspec-test.yml
を削除します。
そして、以下のようにbuildspec.yml
を修正します。
REPOSITORY_URI
に、先ほど作成したご自身のフロントエンドサービス用のECRのリポジトリのURIを指定します。
本モジュールの最後、「まとめと次のステップ」でbuildspec.yml
の解説をしています。
version: 0.2
phases:
pre_build:
commands:
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- REPOSITORY_URI=01234567890.dkr.ecr.us-east-1.amazonaws.com/{ユーザ名}-ecsdemo-frontend
- IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
build:
commands:
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- printf '{"Version":"1.0","ImageURI":"%s"}' $REPOSITORY_URI:$IMAGE_TAG > imageDetail.json
artifacts:
files: imageDetail.json
appspec.yml
を作成します。以下の内容を修正せず、そのままお使いください。ファイルの作成は、ディレクトリを右クリックし、「New File」を選択すると作成できます。
appspec.yml
ファイルはCodeDeployがデプロイを管理するために使用するファイルです。
TASK_DEFINITION
プレースホルダーは、パイプラインが走ると自動的に置き換わります。
今回のデプロイ対象はECSなので、「ECSタスク定義」「ロードバランサー情報」などを含める必要があります。
version: 0.0
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: "<TASK_DEFINITION>"
LoadBalancerInfo:
ContainerName: "ecsdemo-frontend"
ContainerPort: "3000"
taskdef.json
を作成します。こちらは「サービス」から「ECS」を選択し、「タスク定義」、「{ユーザ名}-ecsdemo-frontend」、「最新のRevisionを表示」、「JSON」と順に選択すると表示される内容をコピーして、利用します。
先ほどコピーして作成したtaskdef.json
を以下のように修正します。
taskdef.json
はFargateで起動されるタスクの情報が記載されたファイルです。
今回はパイプラインがトリガーされると動的にタスク定義を更新します。
image
を<IMAGE1_NAME>
に変更しますが。このプレースホルダーは「Build」アクション後に動的にアップデートされます。
{
"memoryReservation": 128,
"volumesFrom": [],
"stopTimeout": null,
"image": "<IMAGE1_NAME>",
"startTimeout": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null
}
cd ~/environment/{ユーザ名}-ecsdemo-frontend/
git add -A
git commit -m "my first commit"
git push origin master
以下は実行例です。
Admin:~/environment/user1-ecsdemo-frontend (master) $ git push origin master
Counting objects: 135, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (130/130), done.
Writing objects: 100% (135/135), 48.51 KiB | 2.42 MiB/s, done.
Total 135 (delta 51), reused 0 (delta 0)
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/user1-ecsdemo-frontend
* [new branch] master -> master