Tag: ECR

ECRのパブリックレポジトリをCLIから作成する

2021/09/10 時点だと --region us-east-1 が必要だった。でないと Could not connect to the endpoint URL: "https://api.ecr-public.ap-northeast-1.amazonaws.com/" というエラーがでる。AWS 管理コンソール上は東京リージョンで存在を確認できる。 作成 AWS 管理コンソールでの作り方は パブリックリポジトリの作成 aws ecr-public create-repository --repository-name hogehoge --region us-east-1 削除 aws ecr-public delete-repository --repository-name hogehoge --region us-east-1 push までの流れ push する前にログインする( public とはいえ push にはログインが必要 ビルドする タグづけをする push aws ecr-public get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin public.ecr.aws/hoge docker build -t test-20210910-1 . docker tag test-20210910-1:latest public.ecr.aws/hoge/test-20210910-1:latest docker push public. Read more...

AWS ECR へCLIでイメージをアップする

dockerコンテナをECS repository( 以下、ECR )にアップする まず、WibUIにログインした後、上部メニューの[ サービス ]->[ EC2 Container Service ]->[ リポジトリ ]->[ リポジトリの作成 ] からリポジトリを作成する。 リポジトリ名 『リポジトリ名は英字で始まる必要があり、小文字、数字、ハイフン、アンダースコア、スラッシュのみを含めることができます。』というルールがある。 スラッシュがつけられるので、組織名をつけた。Githubのレポジトリ名は大文字を許容するが、ECS Registryは許容しないので小文字に変更する。 example/Hoge_Web -> example/hoge_web AWS CLIがインストールされていなければインストールして、アカウント設定する。 brewでインストール あるいはpipでインストール pip install awscli アカウント設定は上のURLを参考にすること。 ECRへのアクセス設定をする ( これはリポジトリ作成時に説明が表示されます。一度、空のリポジトリを作成すると流れがより良く分かるかもしれません ) ECRへのログインコマンドを得る、ECRにログインする。 aws ecr get-login --no-include-email --region ap-northeast-1 下記のような出力が得られるので、それを実行する docker login -u AWS -p password https://1111111111.dkr.ecr.ap-northeast-1.amazonaws.com Dockerイメージをビルドする。 カレントディレクトリにあるDockerfileを用いてイメージ作成。Dockerfileにある場所に移動してから docker buildする。 docker build -t example/hoge_api . イメージにタグを付ける docker tag example/hoge_api:latest 1111111111.dkr.ecr.ap-northeast-1.amazonaws.com/example/hoge_api:latest Dockerレポジトリを作成 aws ecr create-repository --region us-east-1 --repository-name hoge 実行例。 これは2017/12に出たばかりの fargateモードで検証するため、バージニア北部リージョンにレポジトリを作成している Read more...

ECS EC2タイプでの基本的なサービスの立ち上げ

ALB->ECSインスタンス->コンテナ->RDSとかRedis といった構成を構築する ネットワークはECSデフォルトのブリッジをつかう  イメージ内には2つのポートをlistenするnginxが立っている。 ALBのリスナーでは、リクエストヘッダ内のパラメータを見て、人ごとに作られたターゲットグループに振る ターゲットグループからECRのタスク、サービスに振られる。 作業の流れ ECRにログイン Dockerイメージ作成 ECRにコンテナイメージのpush クラスターを作成( ECSインスタンスの入れ物的なもの ) タスク定義 タスク定義を元にクラスター内にサービスを作成 ECRにイメージをpush ECRへのアクセス権を得るには下記出力を実行する $ aws ecr get-login --no-include-email --region ap-northeast-1 コンテナにタグつけ $ docker tag example_web:latest 111111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/example_web:latest push $ docker push 111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/example_web:latest タスク定義 タスク定義名 : 何か入力 ネットワークモード : コンテナの追加 コンテナ名 : 任意 イメージ : ECRのページで確認。 あるいはdocker push で指定する先 メモリ制限 : ソフト制限 500MB / ハード制限 1000MB にした 参考 コンテナ用に予約するメモリのソフト制限 (MiB 単位)。 システムメモリが競合している場合、Docker はコンテナメモリをこのソフト制限に維持しようとします。 ただし、コンテナは必要に応じて、memory パラメーターで指定したハード制限 (該当する場合)、またはコンテナインスタンスの使用可能なメモリの、 いずれか先に達するまで、追加のメモリを消費できます。 このパラメータは、Docker Remote API の コンテナを作成する セクションの MemoryReservation と docker run の --memory-reservation オプションにマッピングされます。 コンテナ定義で memory と memoryReservation の一方または両方を 0 以外の整数を指定する必要があります。 両方を指定する場合、memory は memoryReservation より大きいことが必要です。memoryReservation を指定する場合、 コンテナが配置されているコンテナインスタンスの使用可能なメモリリソースからその値が減算されます。それ以外の場合は、memory の値が使用されます。 たとえば、コンテナが通常 128 MiB のメモリを使用しているが、短期間に 256 MiB のメモリにバーストする場合は、 memoryReservation を 128 MiB に、memory ハード制限を 300 MiB に設定できます。 この設定により、コンテナは、コンテナインスタンスの残りのリソースから 128 MiB のメモリのみを確保できますが、必要に応じて追加のメモリリソースを消費できるようにもなります。 ポートマッピング ホストポート : 空 / コンテナポート 10080 / プロトコル TCP Read more...

コンテナの再起動

ECSのある環境を再起動したい いろいろな理由で再起動したいことはあります。例えば SecretsManagerの変更したので再起動して反映したい docker-php環境を更新したので、再起動して最新のdockerイメージで起動し直したい 起動時のログを追いかけたいとき などですね。 手順 1. タスク定義のリビジョンを上げる AWS管理画面にログイン 左上のサービス一覧から[ ECS ]を検索してクリック 左側メニューから[ タスク定義 ]を選択 目的の環境のタスク定義をクリック(env25など) 一番新しいリビジョン( 数字の大きいもの )をクリック [ 新しいリビジョンを作成 ]->[ 作成 ] ( この作成は失敗することがあります ) 2. クラスター内の各サービスが参照するタスク定義のリビジョンを上げる ECS管理画面の左側のメニューから[ クラスター ]を選択 [ dev-20181030-1 ] サービス名のカラムから再起動したいサービス名をクリック(env25など) 右上の方の[ 更新 ]をクリック [ リビジョン ]のプルダウンメニューをクリック 少しスライドして[ latest ]と書いてあるタスク定義を選択(1で作成したリビジョン番号を選択) [ 次のステップ ]->[ 次のステップ ]…->[ サービスの更新 ] 以上でECSコンテナの再起動が行われます ※ 再起動ですが、結構時間かかります… 細かく『いまどういう状態なのか?』を確認する場合ですが、 この再起動はブルーグリーン方式で、ダウンタイムが無いように再起動するようにしています。 どのような順番で行われるかというと、 ECSの該当サービスで追加のタスク( タスクの中には nginx, php-fpm, volumeなどのコンテナが含まれます )が追加されます。 タスクはロードバランサーの中のターゲットグループの中に追加されます( EC2 -> ロードバランサー -> ターゲットグループで該当のサービス名が書いてあるターゲットグループを探す ) dockerコンテナはターゲットグループに追加され、ヘルスチェックに成功すると新しいコンテナをheltyにし、アクセスを受け付け始め 、 古いコンテナをdrainingします 上記の流れで『今、デプロイがどのような状態なのか? Read more...