LoginSignup
6
1

More than 5 years have passed since last update.

はじめてのECS(dockerをECSにプッシュしてS3の画像を表示)

Last updated at Posted at 2018-12-12

ECSを触っていなかったので慣れる&学習するために実際に作業してみました

やること

NginxのDockerコンテナを作ってECSに登録、プロキシでS3に登録した画像を表示する

事前準備

  • AWSアカウントを作成する

やったこと

cliのインストール

AWSの設定やS3への画像アップロードなど色々なことができるやつです。入っていなかったのでインストールします
pipが入っていない場合はそこからインストールします

pip install awscli
aws configure
...()...

ここで設定するAWS Access Key IDAWS Secret Access KeyはAWSコンソールのIAM>ユーザー>{ユーザー名選択}>認証情報タブ>アクセスキーの作成で作成することができます

ECSを色々するやつです
macユーザですが、公式の手順通りに作業してすんなりインストールできました。長いので省略します

S3へ画像アップロード

アップロード方法については検索すると分かりやすいサイトがたくさん出てきますので省略します。パーミッションの設定については、Everyoneのオブジェクトの一覧とバケットのアクセス権限の読み取りを「はい」に設定しました

Dockerイメージの作成

nginxのdefault.confを作成します。proxy_passにはS3にアップロードしたファイルのパスを設定します

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass https://s3-ap-northeast-1.amazonaws.com/{バケット名}/path/to/image;
    }
}

Dockerfileを作成し、上記default.confと同じ階層に配置します

FROM nginx
COPY default.conf /etc/nginx/conf.d/default.conf

Dockerイメージを作成します

docker build -t dog .

ローカルで画像が表示されるか確認します

# 起動 dogイメージからdogコンテナを作って起動
docker run -d -p 80:80 --name dog dog
# 起動確認
docker ps
# 以下が表示された
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
73ffbefe8032        dog                 "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp       dog

PORTSに記載された0.0.0.0:80にアクセスしてS3にアップロードした画像が表示されるか確認します
自分の場合はじめはNoSuchKeyエラーが表示されましたが、default.confに設定したproxy_passとS3バケットのアクセス権限を見直し修正を行ったところ、無事表示されました

起動したコンテナからイメージを作成します

docker commit {コンテナID} dog:latest

ECRへpush

まずリポジトリを作成します。コンソール上でもECR>リポジトリで作成されたことが確認できます

aws ecr create-repository --repository-name dog
# 返却値
{
    "repository": {
        "repositoryArn": "arn:aws:ecr:ap-northeast-1:{id}:repository/dog",
        "registryId": "{id}",
        "repositoryName": "dog",
        "repositoryUri": "{id}.dkr.ecr.ap-northeast-1.amazonaws.com/dog",
        "createdAt": xxxxxxxxxx.0
    }
}

Dockerイメージにプッシュ用のタグをつけます

# パスは上記リポジトリ作成時に返却された値の`repositoryUri`
docker tag dog {id}.dkr.ecr.ap-northeast-1.amazonaws.com/dog

プッシュするためにログインを行います。このあたりの手順はECR>プッシュコマンドの表示でコマンドを表示してくれるので、その通りにやればOKです

# ログインコマンドを取得
aws ecr get-login --no-include-email
# 以下が返却されるのでコピーしてペッとする
docker login -u AWS -p {長い長い長い文字列} https://{id}.dkr.ecr.ap-northeast-1.amazonaws.com
# プッシュ
docker push {id}.dkr.ecr.ap-northeast-1.amazonaws.com/dog

クラスターの作成

ここから先はAWSコンソールで作業しました

ドキュメントにしたがってクラスターを作成しました。選択したクラスターテンプレートはネットワーキングのみです。

タスクの作成

作成したクラスターを選択し、タスク>新しいタスクの実行からドキュメントにしたがってタスクを作成します。選択した起動タイプはFARGATEです

表示確認

クラスター>タスクでステータスがRUNNINGになったら表示確認が可能です
RUNNINGになるまで時間がかかることもあります
タスクを選択すると詳細画面のNetwork>Public IPで自動で割り振られたIPが確認できます
ブラウザからアクセスして無事に画像が表示されることを確認しました
わーい

感想と宿題

  • 作業内容は簡単なのにパーミッションやconf等の設定まわりで手間取って疲れました
  • S3のライフサイクル等の設定はなんとなくな状態なのできちんと理解したいです
  • 途中からコンソールを直接いじってしまったので、ecs-cliで同じ作業ができるようにします
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1