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 作成した方が役割分担できて良さそう。