ECRがデファクトスタンダードになってきたかなと思います。Imageは全てECRからpullしてきて、DockerHubからはpullしないようにするとかはよくあるかと思います。これで運用しているときに地味に辛いのが、自分たちで作成していないimageやmanifestをデプロイする時だと思います。etc...)これらをデプロイしようとする場合は以下の手順を踏む必要があります。pathに変更するmanifestをapplyする地味にめんどいです、2~4あたりを自動化するshellとかを作っていたのですが、1,5の作業もだいぶ辛くなってきたこれらの作業をまとめるツールを作ってみたhttps://github.com/esakat/trimgこのあたりを楽にするCLIを作ってみました。最初にあげた6つの手順のうち、1~4を実施するサブコマンドと、5を実施するサブコマンドを用意しました。.spec.template.spec.containers[0].image"<YourAccountId>.dkr.ecr.<YourDefaultRegion>.amazonaws.com/gcr.io/google_samples/gb-frontend:v3"シンプルなものですが、よかったら使ってもらえると嬉しいです内部的なものこれだけだと宣伝なので、内部でちょっとハマった箇所とかをまとめておきます。docker.io/library/nginx:latestdocker.ioが省略されており、さらにDockerHub公式のイメージの場合はさらにlibraryを付与する必要があります。以下で対応しています。省略で拾えないエラーだったら、省略されている文字を追加してあげてます。Manifestからimageの箇所を抜き出す。ごり押してますまずmanifestを読み込むところですが、kubernetesの場合は1つのファイルに複数マニフェストが含まれるのはよくあります。manifest["apiVersion"]だけ読み込んで、対応する構造体(kubernetesリポジトリが提供している)にマッピングしようとしましたがうまくいきませんでした。いうのもkubernetesリポジトリが提供している構造体は全ての情報を含んでいるので(例えばcreationTimeとか)マッピングしたら余分な情報が初期値で作られてしまいます。今回のアプリでは、image名だけ変えて、あとはそのままというのにする必要があったので、この方法は諦めて,以下のようにゴリ押しをしています。manifest["spec"].(map[interface{}]interface{})["template"].(map[interface{}]interface{})....これで掘っていくと、ネストがとても深くなります一番長いCronJobだと以下のようになりますmanifest["spec"].(map[interface{}]interface{})["template"].(map[interface{}]interface{})["spec"].(map[interface{}]interface{})["containers"].([]interface{})[i].(map[interface{}]interface{})["image"]これを1つのkey毎に存在チェックしてあれば、次の処理へってネストするとコードのインデントが半端なくなります。このあたりはutil化して再帰的にやるようにしています。いう処理は全部やるとそこそこ時間かかります(でかいイメージだと2,3分かかったり)その間画面動かないのも嫌なのでプログレスバーを用意しようとしました。ecrへpush中なのか)を表示したいけど、一度progressbarを作っちゃうと、パーセンテージとか以外の情報は変えづらいのが少しだけ辛いとこですが、それ以外はとても使いやすいいいライブラリです。upLoginユーザーは見つかりませんでした。