ECRにコンテナイメージをアップロードして起動してみる

  •  
 
ズィスト2023年4月10日 - 18:26 に投稿

タグ

はじめに

今回はAWSを使用してコンテナを起動する方法を紹介します。
また、今回のブログ記事は個人のメモとなるためキャプチャは添付しておりません。予めご了承ください。
使用するサービスは以下になります。

  • ECR
  • ECS(Fargate)

前提条件

以下のコマンドをインストールしている前提で説明します。

  • AWS CLI
  • Docker

ECRの作成

まず最初にコンテナイメージをアップロードするECRを作成します。
作成手順は以下になります。

  1. リポジトリの作成ページを開く
  2. 可視性設定を設定する
  3. リポジトリ名で任意の値を入力する
  4. その他の設定はデフォルトとする

IAMアカウントの作成

ECRにコンテナイメージをアップロードする場合は権限を持ったIAMアカウントが必要になります。
IAMアカウントを作成して権限を付与する手順を紹介します。

  1. AWSマネジメントコンソール > IAM > ユーザー > 「ユーザーを追加」を選択する
  2. ユーザー名を入力して次の画面に進む
  3. 許可を設定で次のように設定する
    1. 許可のオプション: ポリシーを直接アタッチする
    2. 許可ポリシー: AmazonEC2ContainerRegistryFullAccess
  4. 次の画面に進む
  5. その他の情報を入力してアカウントを作成する
  6. IAM > ユーザー > 作成したユーザー > セキュリティ認証情報 を開く
  7. 「アクセスキーを作成」を押下する
  8. 画面に従ってアクセスキーを作成する
  9. 8が終わるとアクセスキーとシークレットキーが表示される。
    1. アクセスキー及びシークレットキーは後で使用するため控えておくこと
    2. これらの値はインターネット上に公開してはいけないものであるため慎重に扱うこと

Dockerイメージのアップロード

Dockerイメージを作成してECRにアップロードする方法を紹介します。

  1. ターミナルで``aws configure`を実行する
    1. 表示内容に従ってアクセスキーやシークレットキー等を入力する
  2. 認証トークンを取得してDockerクライアントを認証する
    1. aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
  3. 任意のDockerイメージをビルドする
    1. docker build --platform linux/x86_64 . -t sandbox:latest
    2. コンテナを起動する際にエラーが発生するため--platformオプションをつける必要がある
  4. 2のイメージにタグ付けを行う
    1. docker tag sandbox:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox:latest
  5. イメージをPUSHする
    1. docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox:latest

2~5のコマンドは AWSマネジメントコンソールのECR > リポジトリ から任意のリポジトリを開き、画面右上の「プッシュコマンドの表示」を押すことで表示することができます。

コンテナイメージの起動

アップロードしたコンテナイメージを起動する方法を紹介します。
コンテナイメージを起動するために以下のものを作成する必要があります。

  • クラスター
  • タスク定義
  • サービス

クラスターの作成

以下の手順でクラスターを作成します。

  1. AWSマネジメントコンソール > ECR > クラスターを開き、「クラスターの作成」を押下する
  2. 以下の値を入力する
    1. クラスター名: 任意の値
    2. VPC: 任意のものを選択する
    3. サブネット: 任意のものを選択する
    4. その他の設定: デフォルト
  3. 「作成」を押下する

タスク定義の作成

以下の手順でタスク定義を作成します。

  1. AWSマネジメントコンソール > ECR > タスク定義 を開き、「新しいタスク定義の作成」を押下する
    1. 今回は「新しいタスク定義の作成」を使用して説明する
  2. 以下の値を入力する
    1. タスク定義ファミリー: 任意の値
    2. コンテナ - 1
      1. 名前: 任意の値
      2. イメージURI: ECRにアップロードしたコンテナイメージのURI
      3. ポートマッピング: 使用するポートを入力する
      4. 他の設定はデフォルトとする
  3. 次の画面で以下の値を入力する
    1. アプリケーション環境: AWS Fargate
    2. オペレーティングシステム/アーキテクチャ: Dockerビルドで指定した値
    3. CPU: 任意の値
    4. メモリ: 任意の値
    5. 他の設定はデフォルトとする
  4. 次の画面で確認画面が表示される。問題がなければ「作成」を押下する

サービスの作成

以下の手順でサービスを作成します。

  1. AWSマネジメントコンソール > ECR > クラスターを開き、作成したクラスターを選択します。
  2. 画面下のサービスタブにある「作成」を押下します。
  3. 以下の値を入力します。
    1. ファミリー: 作成したタスク
    2. サービス名: 任意の値
    3. 他の設定はデフォルトとする
  4. サービスのステータスがアクティブになればコンテナが起動している状態になります。

実際にアクセスしてみる

今回はnginxのコンテナを作成したため実際にブラウザからアクセスして疎通できるかどうかを確認します。
IPアドレスは以下の手順で確認することができます。

  1. AWSマネジメントコンソール > ECR > クラスターを開き、作成したクラスターを選択します。
  2. 「タスク」タブを開き、実行しているタスクのタスクIDを選択します。
  3. 設定の中にパブリックIPが表示されていることを確認します。

上記のIPアドレスをブラウザに入力してコンテナが起動していることが確認できました。

まとめ

今回はECRとECSを使用してコンテナを起動する方法を紹介しました。 ECRやECS等を触る機会がなかったため設定に苦戦しましたが、思ってたより簡単にコンテナを起動することができました。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。