CodeBuildのプロビジョニングフェーズでdocker pullの制限を回避する


こんにちは
株式会社Diverseで働いている@python_spameggsです
Diverse Advend Calendar 2020の初日になります
CodeBuildのプロビジョニングフェーズでdocker pullの制限でエラーになってしまうことが多くなってきたのでSecrets Managerを使用して解決しました

CodeBuildのプロビジョニングフェーズでのエラー

  • このようにエラーになってしまいます
  • プロビジョニングフェーズでのエラーなのでbuildspecにdocker loginを設定しても意味がないので別の方法で回避します

Secrets Managerを使う

  • シークレットの種類は「その他のシークレット」を選択します

  • キーはusernamepasswordで値はdockerhubのユーザ名とパスワードになります

    • 暗号化キーは使いたいものを選ぶ
  • 次に進んでシークレットの名前と説明を入れます

  • 次に進んでシークレットの自動ローテーションを設定します

    • 設定は無効にする
  • 後はレビューして問題なければ保存して作成したシークレットを選択して詳細を見ます

  • シークレットのARNをコピーします

    • ↑で作ったシークレットの名前と違います、sampleです

CodeBuildへ

  • ビルドプロジェクトのビルドの詳細から環境の項目を編集します
  • イメージを上書きを選択すると↓の項目が出てくるので先程コピーしたシークレットのARNをペーストします
    • 残りの空いている項目は今まで通りのものを入れて環境の更新をしてください
  • これで完了ですので再度ビルドしてエラーにならないことを確認しましょう

aws-cliで更新する

Secrets Managerに登録

secret.json
{
    "username": "dockerhubのユーザ名",
    "password": "dockerhubのパスワード"
}
aws secretsmanager create-secret --name dockerhub --secret-string file://secret.json

CodeBuildの更新をする

  • 現在の設定を取得する
aws codebuild batch-get-projects --names プロジェクト名 > project-info.json
  • project-info.jsonにSecrets ManagerのARNを追加する
  "registryCredential": {
    "credential": "作成したSecrets ManagerのARNを入れる",
    "credentialProvider": "SECRETS_MANAGER"
  }
  • プロジェクトを更新する
aws codebuild update-project --cli-input-json file://project-info.json
  • これで完了です

おわり

これでCodeBuildを使うたびにdocker pullの制限でエラーになってしまうことを回避することができました

明日の2日目は@masashi-sutouさんになります!