この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
HTMLやCSS、SVGには仕様があり、Webアプリケーション開発などでは、それらの仕様に沿って画面が実装されることになります。
実装中の画面が、それらの仕様に沿ってマークアップされているのかどうか? を確認できるツールの1つがWorld Wide Web Consortium (W3C)で公開されているNu Html Checkerです。
ソースコードがGitHubでMITライセンスで公開されており、Dockerイメージもありますので、手軽にローカルの環境を構築することができます。
今回は、AWS CLI v2を使ってNu Html Checker をAWS App Runnerで動作させる手順をご紹介したいと思います。
手順の概要
- Docker Hubからイメージを取得
- 取得したイメージをAmazon Elastic Container Registry(ECR)に登録
- 登録したイメージを指定してAWS App Runnerサービスを作成
1. Docker Hubからイメージを取得
Nu Html CheckerのDockerイメージのURLを指定します。
$ docker pull validator/validator:latest
pull
が完了したら確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
validator/validator latest 0d2eef07d029 3 days ago 96.6MB
問題なさそうです。
2. Amazon ECRにイメージを登録
ここからAWS CLI v2を使いますが、適切な権限を持ったIAMユーザーが実行環境に登録され、リージョンが指定され、output
には json
が指定されていることを前提とします。
まず、今回のイメージを登録するリポジトリがAmazon ECRにない場合は、以下の手順で作成します。
2.1 Amazon ECRにリポジトリを作成
ここでは、リポジトリ名 validator
を作成します。
$ aws ecr create-repository --repository-name validator
作成されると結果が表示されます。
{
"repository": {
"repositoryArn": "arn:aws:ecr:<region>:xxxxxxxxxxxx:repository/validator",
"registryId": "xxxxxxxxxxxx",
"repositoryName": "validator",
"repositoryUri": "xxxxxxxxxxxx.dkr.ecr.<region>.amazonaws.com/validator",
"createdAt": "2021-07-07T00:00:00+09:00",
"imageTagMutability": "MUTABLE",
"imageScanningConfiguration": {
"scanOnPush": false
},
"encryptionConfiguration": {
"encryptionType": "AES256"
}
}
}
念の為、describe-repositories
サブコマンドでも確認しておきます。
$ aws ecr describe-repositories
実行すると、先ほどと同様の結果が表示されます。
{
"repositories": [
{
"repositoryArn": "arn:aws:ecr:<region>:xxxxxxxxxxxx:repository/validator",
"registryId": "xxxxxxxxxxxx",
"repositoryName": "validator",
"repositoryUri": "xxxxxxxxxxxx.dkr.ecr.<region>.amazonaws.com/validator",
"createdAt": "2021-07-07T00:00:00+09:00",
"imageTagMutability": "MUTABLE",
"imageScanningConfiguration": {
"scanOnPush": false
},
"encryptionConfiguration": {
"encryptionType": "AES256"
}
}
]
}
2.2 レジストリにログインする
Dockerイメージを登録するレジストリに docker
コマンドでログインする必要があります。以下のコマンドで一度に実行できますが、 <aws_account_id>
や <region>
などは、describe-repositories
サブコマンドの実行結果から読み替えて実行してください。
$ aws ecr get-login-password \
| docker login \
--username AWS \
--password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
問題なくログインできれば Login Succeeded
と表示されます。
2.3 ローカルのDockerイメージにtagをつける
ローカルのDockerイメージにtagをつけます。形式は ドキュメントを参照してください。ここでは、タグは latest
とします。<IMAGE ID>
はローカルのIMAGE IDです。
$ docker tag <IMAGE ID> <aws_account_id>.dkr.ecr.<region>.amazonaws.com/validator
2.4 イメージをpushする
ECRのレジストリにイメージをpushします。
$ docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/validator
成功するとdigest値などが表示されます。
2.5 イメージの確認
list-images
サブコマンドで、登録したイメージを確認します。
$ aws ecr list-images --repository-name validator
結果が表示されます。
{
"imageIds": [
{
"imageDigest": "sha256:xxxxxxx......",
"imageTag": "v1.0"
}
]
}
3. App Runnerのサービスを作成
登録したイメージを指定してAWS App Runnerのサービスを作成します。
create-serviceサブコマンドのリファレンスを読む限り、なかなかパラメータが複雑そうです。
JSON形式のパラメータは改行をつけていますが、実際には1行で入力する必要があります。
aws apprunner create-service \
--service-name validator \
--source-configuration '{"ImageRepository":
{
"ImageIdentifier": "<aws_account_id>.dkr.ecr.<region>.amazonaws.com/validator",
"ImageConfiguration": {"Port": "8888"},
"ImageRepositoryType": "ECR"
},
"AuthenticationConfiguration": {
"AccessRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/aws-service-role/apprunner.amazonaws.com/AWSServiceRoleForAppRunner"
}
}'
実行すると、実行結果がざっと表示されますが、"Status": "OPERATION_IN_PROGRESS"
になっています。
サービスの作成には数分かかります。
しばらく経ったら、 list-services
サブコマンドで確認します。
$ aws apprunner list-services
結果が返ってきます。
{
"ServiceSummaryList": [
{
"ServiceName": "validator",
"ServiceId": "xxxxxxxxxxxx",
"ServiceArn": "arn:aws:apprunner:<region>:<aws_account_id>:service/validator/xxxxxxxxxxxx
"ServiceUrl": "xxxxxxxxxxxx.<region>.awsapprunner.com",
"CreatedAt": "2021-07-07T00:00:00+09:00",
"UpdatedAt": "2021-07-07T00:00:00+09:00",
"Status": "RUNNING"
}
]
}
"Status": "RUNNING"
であれば、サービスが正常に作成されています。 ServiceUrl
に https://
スキームでアクセスすると、W3Cと同じような画面が表示されます。