ここでは、フロントエンドをコードで管理するための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.jsonappspec.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