AWS Builder Labs (セルフペースラボ) の Introduction to Amazon Elastic Container Registry をやってみた

AWS Builder Labs (セルフペースラボ) で提供されている Introduction to Amazon Elastic Container Registry を実際にやってみました。
2023.05.10

AWS Builder Labs (セルフペースラボ) とは

AWS Builder Labs (セルフペースラボ) とは、AWS Skill Builder 内で提供されている AWS の学習コンテンツであり、以下の特徴があります。

  • ハンズオン形式で実践的な学習ができる
  • AWS のラボ環境が提供されるため、コストを気にせずに学習できる
  • オンデマンドで利用可能なため、時間や場所を問わずに学習できる

注意点として、AWS Builder Labs の利用には、個人またはチームのサブスクリプション契約が必要となります。

詳細は公式サイトをご参照ください。

Introduction to Amazon Elastic Container Registry とは

Introduction to Amazon Elastic Container Registry とは、AWS Builder Labs (セルフペースラボ) で提供されているコースの1つです。

コースの概要は公式サイトより引用いたします。

概要

このラボでは、 Amazon Elastic Container Registry (Amazon ECR) をご紹介します。 このラボを修了すると、次のことができるようになります。

  • Amazon ECR リポジトリを作成する
  • Amazon ECR リポジトリにイメージをプッシュする
  • Amazon ECR に保存されたイメージを使用してアプリケーションをデプロイする

本コースの所要時間は約1時間です。
日本語版のコースも提供されています、今回は日本語版コースをやってみました。

コースの流れは以下です。

  1. Amazon ECR リポジトリを作成する
  2. Docker イメージのプル、タグ付け、プッシュを行う
  3. 新しいイメージを使用して Amazon ECS タスク定義を作成する
  4. サービスを作成する

やってみた

1. Amazon ECR リポジトリを作成する

ここでは ECR リポジトリを作成していきます。

ラボの指示に従い myrepo リポジトリを作成のうえ、リポジトリ URI を控えておきましょう。
後ほどリポジトリ URI を使用してリポジトリにアクセスします。

続いて作成した myrepo リポジトリのリポジトリポリシーを設定していきましょう。

ラボの指示に従い設定値を入力していきます。
ラボ側で用意された IAM ロール EC2InstanceRole に対して、全てのアクションを許可するように設定します。

以下のリポジトリポリシーの作成できました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "my_repository_statement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/EC2InstanceRole"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchDeleteImage",
        "ecr:BatchGetImage",
        "ecr:CompleteLayerUpload",
        "ecr:DeleteLifecyclePolicy",
        "ecr:DeleteRepository",
        "ecr:DeleteRepositoryPolicy",
        "ecr:DescribeImages",
        "ecr:DescribeRepositories",
        "ecr:GetDownloadUrlForLayer",
        "ecr:GetLifecyclePolicy",
        "ecr:GetLifecyclePolicyPreview",
        "ecr:GetRepositoryPolicy",
        "ecr:InitiateLayerUpload",
        "ecr:ListImages",
        "ecr:PutImage",
        "ecr:PutLifecyclePolicy",
        "ecr:SetRepositoryPolicy",
        "ecr:StartLifecyclePolicyPreview",
        "ecr:UploadLayerPart"
      ]
    }
  ]
}

2. Docker イメージのプル、タグ付け、プッシュを行う

ここでは Docker イメージのプル、タグ付けのうえ、作成した ECR リポジトリにプッシュしていきます。

ラボ側で EC2 インスタンスを用意してくれており、かつ Session Manager の接続 URL も用意してくれています。
まずはブラウザからSession Manager の接続 URL にアクセスして EC2 インスタンスにログインしましょう。

ラボの指示に従い以下のコマンドを実行して、Docker イメージのプル、タグ付け、プッシュを実施していきます。

docker pull amazon/amazon-ecs-sample
REPOSITORY=123456789012.dkr.ecr.us-west-2.amazonaws.com/myrepo
docker tag amazon/amazon-ecs-sample:latest $REPOSITORY
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-west-2.amazonaws.com
docker push $REPOSITORY

3. 新しいイメージを使用して Amazon ECS タスク定義を作成する

ここでは ECR にプッシュしたイメージを使用して ECS タスク定義を作成していきます。

このラボでは ECS マネジメントコンソールの従来版の UI を使用しますので、[新しい ECS エクスペリエンス] はオフにしておきます。

ラボの指示に従い、設定値を入力していきます。
ラボ側でタスク定義の JSON ファイルを用意してくれていますので、そちらを入力のうえ作成しましょう。

{
  "family": "ecs-demo",
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "memory": 128,
      "extraHosts": null,
      "dnsServers": null,
      "disableNetworking": null,
      "dnsSearchDomains": null,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "hostname": null,
      "essential": true,
      "entryPoint": null,
      "mountPoints": [],
      "name": "ecs-sample",
      "ulimits": null,
      "dockerSecurityOptions": null,
      "environment": [],
      "links": null,
      "workingDirectory": null,
      "readonlyRootFilesystem": null,
      "image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/myrepo:latest",
      "command": null,
      "user": null,
      "dockerLabels": null,
      "logConfiguration": null,
      "cpu": 0,
      "privileged": null
    }
  ],
  "volumes": []
}

タスク定義の作成が完了しました。

4. サービスを作成する

ここでは先ほど作成した ECS タスク定義を使用して ECS サービスを作成していきます。

ラボ側で ECS クラスター ECSCluster を用意してくれていますので、こちらのクラスター内にサービスを作成します。

ラボの指示に従い設定値を入力していきます。
ラボにて NLB MyLoadBalancer、ターゲットグループ myTargetGroup、サービス用 IAM ロール ecsServiceRole はすでに用意してくれています。

サービスの作成が完了しました。
タスクが RUNNING 状態であることも確認できました。

ターゲットグループも確認していきましょう。
登録されている EC2 インスタンスが healty であることを確認できました。

続いて NLB の DNS 名にブラウザからアクセスします。

サンプルアプリケーションが実行されていることを確認できました。

まとめ

実際に本コースをやってみて、初めて ECR を触るという方には勉強になるコンテンツではないかと思いました。

ラボ側で詳細に手順を提示してくれるため、特につまずくことなく誰でもコースを完走することができるかと思います。
提示される手順と、実際のマネジメントコンソール画面にほとんど差異がないのが本当に良いですね。

今後も AWS Builder Labs のコンテンツを試してはブログ化していきたいと考えています。

最後までお読みいただき、ありがとうございました!