Sub Documents

AWS ECR にコンテナを格納する


 まずはじめにどうでもいいことなんですが、AWSのコンソール上で「 ECR」でサービスを検索したら、何も出て来ないという。これ何なんですかね。検索するときは「Amazon Elastic Container Registry」じゃないと出てこないという。S3はSimple service strageなんて検索しなくても出てくるよ。といったところで、ECRにコンテナを格納する方法です。
Amazon Elastic Container Registry (Amazon ECR)
 なんでこんなものが必要なのかというと、

  • AWSの他のサービスでコンテナを使い回せる。(LambdaとかFargateで使えるわけです。)
  • Deployフローを自動化できる。

の2点に尽きるのかなと思っています。実際問題、全部手動でつくることもできると思いますが、コストに見合う開発ではないので、ECRを使った方が懸命でしょうということです。
 ここではLaravelをコンテナとして格納する方法と手順を紹介します。

Laravelをlocalで起動する

 LaravelにはsailというDockerコマンドのラッパーみたいなものがあるので、すぐに起動して開発することができます。まずはこれらを実行しましょう。Laravelの具体的なインストール方法は割愛。lambda_laravelというディレクトリでインストールしたことを前提にすすめます。

ECRにコンテナを格納する

Amazon Elastic Container Registryにログインして「リポジトリを作成」を押します。ここではプラベートかパブリックのどちらかを選び、リポジトリ名をつけてください。ここでは一旦プライベートにして設定してゆきます。作成を押すと新しいリポジトリが作成されます。
リストに現れた作成したリポジトリ名をクリックして詳細画面に遷移します。プッシュされているimageがないので空になっていると思います。右上にプッシュコマンドの表示というボタンがあるのでそれをクリックして、そのコマンドに従います。

AWC CLIとDockerの準備

「AWS CLI および Docker 向けの最新バージョンがインストールされていることを確認します。」ありますが、この記事を読んでいる方々はもう設定がされているということを前提に話しを進めます。
Dockerの確認は、

$ Docker --version
Docker version 20.10.12, build e91ed57

CLIの確認は、

$ aws --version
aws-cli/2.7.21 Python/3.9.11 Darwin/21.5.0 exe/x86_64 prompt/off

と、こんな感じです。もしインストールされていない場合は別途インストールが必要です。(ここでは割愛)

イメージのプッシュコマンド

基本的にはpushの手順に従えば問題なしです。

  1. 認証トークンを取得し、レジストリに対して Docker クライアントを認証します。
    コマンドをそのままコピペして実行するだけです。もしエラーが出たら、CLIの認証関連の設定の問題だと思うので、もう一度クレデンシャルを確認しましょう。AWS CLIを設定する
    問題がなければ、Login Succeededが出てログインが成功します。これでECRに入っている状態になります。

  2. 以下のコマンドを使用して、Docker イメージを構築します。一から Docker ファイルを構築する方法については、「こちらをクリック 」の手順を参照してください。既にイメージが構築されている場合は、このステップをスキップします。

    $ docker build -t lambda_laravel .

    Laravelのアプリケーションディレクトリ内(.envがあるところ)で、このコマンドを実行します。やたらと時間がかかりますので、コーヒを入れてしばらく待ちます。

  3. 構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
    AWSではlatestタグをつけています。これもコピペでいけます。

    $ docker tag lambda_laravel:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/lambda_laravel:latest
  4. 以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします。
    これでECR側にpushできます。

    $ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/lambda_laravel:latest

    成功すると、ECRの画面の方で新しいimageが格納されているのが確認できます。

    ECRへのコンテナの格納はこれで終わりです。