ECSを触っていなかったので慣れる&学習するために実際に作業してみました
やること
NginxのDockerコンテナを作ってECSに登録、プロキシでS3に登録した画像を表示する
事前準備
- AWSアカウントを作成する
やったこと
cliのインストール
AWSの設定やS3への画像アップロードなど色々なことができるやつです。入っていなかったのでインストールします
pip
が入っていない場合はそこからインストールします
pip install awscli
aws configure
...(略)...
ここで設定するAWS Access Key ID
とAWS 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で同じ作業ができるようにします