Docker上で、Buildしたファイルをローカルに保存する。

やりたいこと

Docker上で、nuxt build したファイルを、S3にあげたい。 ただ、Docker上にAWSのアカウント情報をもたせたくなかった。

流れとして、github push -> code pipeline -> code build -> ecs deploy の code build 部分で、S3へ Nuxt の assets ファイルをデプロイしたかった。

やったこと

code pipeline とか、code build の基本設定は、もともとできてるとする。

code build 内では、Docker build が走っていて、そのDocker内で、Nuxt の build が走っていて、それが Image として生成されている。 code build の build_spec.yml で、以下の.sh を実行する。

IMAGE = [Nuxtをbuild済みのイメージの名前]
# docker container を作成。
docker create ${IMAGE}
# -q とするとcontainer ID がかえってくる。-a としないと、起動していないcontainerが見つからない
CONTAINER = $(docker ps -a -q --filter ancestor=${IMAGE})

# コンテナから、ファイルをコピー
docker cp ${CONTAINER}:/app/.nuxt /.nuxt

# S3へアップロード
aws s3 cp ../.nuxt s3://[バケット名] --recursive --metadata-directive "REPLACE" --cache-control "max-age=31536000"

ただ、code build を行うロールに、s3のバケットにputできるポリシーの追加が必要。

しかし...

code build や、code deploy で、S3へアップロードした方がいいとアドバイスをもらった。 docker push をしている code build は、docker に関することだけ行い、S3へのアップロードは新しいcode build 作成した方が役割分担できて良さそう。