ECSでオリジナルイメージのコンテナを使う その1

こんにちは。かっぺいです。
AWSでコンテナを使う場合、いまいち扱いにくくて躊躇っていましたが、Lambdaみたいに軽量ファンクションをタスク起動する感じで使用してみました。
まずは、コンテナイメージの作成からECRへの登録まで。

コンテナイメージの作成

事前準備

まずは、Dockerをインストールした作業用PCを準備します。あまり細かいことは行わないので、DockerDesktopをPersonalプランで利用する形で問題ありません。

ローカルイメージの作成

Dockerファイルを作成して、イメージをBuildするのが一般的ですが、最終的に自前のスクリプトを入れるので、ローカルでコンテナを作成してカスタマイズしたのちに、イメージを作成する手順で行います。

ベースとなるAmazonLinux2023のイメージをpullします。DockerHubからも取得できますが、今回は、PublicのECRから取得して、起動します。

# docker pull public.ecr.aws/amazonlinux/amazonlinux:2023
# docker run -it --security-opt seccomp=unconfined public.ecr.aws/amazonlinux/amazonlinux:2023 /bin/bash

今回必要なのは、PHPとAWSCLIなので、インストールします。
AWSCLIは入れるだけで、設定は必要ありません。

# dnf install php awscli

自分で作成したPHPをホストからコンテナへコピーします。
コンテナを実行したまま、ホストのプロンプトへ戻る場合は、Ctrl + P Ctrl+Qで戻ります。

docker ps -al
docker cp php-exec contena-id:/root/

コンテナは、基本的にrootユーザーで動くような感じなので、/rootに配置します。
必要なものが配置できたら、新しいイメージとしてcommitします。

docker commit contena-id new-image-name

ECRのプライベートリポジトリを作成

マネージメントコンソールからECRを開きます。(サービスから検索しても出てこないので、ECSを開いて左ペインのリンクから開きます)

プライベートリポジトリのリポジトリを開き、右上のリポジトリの作成をクリックします
ネームスペースとリポジトリ名を入力して、作成を実行します

ローカルのDockerからECRへログイン

ポリシーの事前準備

ローカルPCのAWSCLIに使っている、IAMユーザーのロールにECS関連のポリシーをアタッチします
AWSの組み込みポリシー、EC2InstanceProfileForImageBuilderECRContainerBuildsにECRへコンテナをアップロードするための必要なポリシーがセットされているので、これを使います

ECRへログイン

AWSCLIでログイン情報を取得して、ECRへログインします

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

イメージをECRへアップロード

ローカルのイメージと、リポジトリのタグを関連付けします

docker tag local-image:latest xxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/namespace/public-image:latest

イメージをpushして、アップロードします

docker push xxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/namespace/public-image:latest