PackerでECRにpushする

—– 2017 / 05 / 15 ——-

PackerでECRにpushする時はaws ecr get-loginの工程はいらなかった - hatappiのブログ

動作としてこの記事でも問題ないのですが、よりよい方法があったので上記書き直しました

最近は個人でも会社でもPackerでDocker Imageをbuildしている
以前GCRを使っていたが今回はAWSのECR を扱う

hatappi.hateblo.jp

こちらはGCRとは違いすでにPacker側で必要な情報だけ指定すればpushできるようになっている

www.packer.io

作業の流れ

まずはECRにリポジトリを登録する
今回はhoge/fuga とした

f:id:hatappi1225:20170508202500p:plain

次にAWS コマンドラインインターフェイス | AWSからコマンドラインawsコマンドが使えるようにしておく

# 事前にaws configureをしておく
$ aws ecr get-login --region ap-northeast-1 # 日本リージョンのECRを使用する時
docker login -u AWS -p [password] -e none https://11111111.dkr.ecr.ap-northeast-1.amazonaws.com

これでdocker loginコマンドが出力される
userはAWSで固定なのでpasswordをひかえておく

Packer用のjsonファイルは下記のように定義します (必要な部分だけを表示してます)
docker-pushの部分で先程のdocker loginコマンドで表示されたものを使用していくだけです
パスワード情報だけはECR_LOGIN_PASSWORDという環境変数で使用できるように設定しておきます

{
  "variables": {
    "ecr_registry_url": "https://11111111.dkr.ecr.ap-northeast-1.amazonaws.com",
    "ecr_repository": "11111111.dkr.ecr.ap-northeast-1.amazonaws.com/hoge/fuga",
    "ecr_login_password": "{{env `ECR_LOGIN_PASSWORD`}}"
  },
  "builders":[{
    "type": "docker",
    "image": "amazonlinux",
    "commit": true
  }],
  ~~
  "post-processors": [
    [
      {
        "type": "docker-tag",
        "repository": "{{user `ecr_repository`}}",
        "tag": "latest"
      },
      {
        "type": "docker-push",
        "login": true,
        "login_email": "none",
        "login_username": "AWS",
        "login_password": "{{user `ecr_login_password`}}",
        "login_server": "{{user `ecr_registry_url`}}"
      }
    ]
  ]
}

これでbuildすればpushされるはずです