プロジェクト

全般

プロフィール

2nd memo 2023-08-23


ECR

[初心者向けシリーズ] Dockerイメージを作成しAmazon ECRにプッシュする方法を確認してみた
第9回【いろいろなサービス使ってみよう編その6】

↑の内容の一部古くなっていた部分の変更版

# jqのインストール(未インストールの場合)
sudo yum install jq -y

# shell変数の設定
AWS_REGION="us-east-1"
ACCOUNT_ID=`aws sts get-caller-identity | jq -r .Account`
REPOSITORY_NAME=repo-study-nginx

TAG_NAME=${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${REPOSITORY_NAME}:latest

# ECRのリポジトリ作成
aws ecr create-repository --repository-name ${REPOSITORY_NAME} --region ${AWS_REGION}

# dockerイメージをビルド
docker build -t $TAG_NAME .

# ECRのget-login実行(pushの向き先をECRに向けるため)
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com

# ECRにpush
docker push $TAG_NAME

# 確認
aws ecr list-images --repository-name ${REPOSITORY_NAME} --region ${AWS_REGION}

ECSサービスでの確認(パブリックサブネットに配置してグローバルIPで直接アクセス)

  • ECSクラスタの作成(study-cluster)
  • ECSタスク定義の作成(タスク定義名:study-webserver-taskdef、AWS Fargate、メモリ0.5GB、0.25vCPU、コンテナ名:study-webserver-container、ポートマッピング:80)
    • タスクロール、タスク実行ロールはデフォルトの新しく作成する設定で(→ あとで権限足す)
    • イメージURIに、ECRのイメージのURIを設定
  • 自動で作成させたIAMロール「ecsTaskExecutionRole」に「CloudWatchLogsFullAccess」のポリシーを足す(足さないとサービスの起動時に権限エラーになる)
  • ECSサービスの作成
    • 起動タイプ: FARGATE、アプリケーションタイプ:サービス、タスク定義に↑で作成したものを選択、(ネットワーキングなどはデフォルト※デフォルトVPCのパブリックサブネットを指定)
  • 起動されたタスクの設定から割り振られたグローバルIPを調べて、ブラウザからアクセス

※ 注意:ECSをプライベートサブネットに配置する場合はECSとECRなどが通信できるようにVPCエンドポイントを作成する必要あり
ECSに必要なVPCエンドポイントまとめ(2022年版)

(参考:ちょっと古いかも)AWS CLIを使ってECRにDockerイメージを登録する