AWS re:Postを使用することにより、以下に同意したことになります 利用規約

AWS CodeBuild で Docker イメージを使用する際に発生する「イメージ設定のプルエラー: toomanyrequests」というエラーを解決するにはどうすればよいですか?

所要時間3分
0

AWS CodeBuild で Docker イメージを使用する際に発生する「イメージ設定のプルエラー: toomanyrequests」というエラーを解決したいと考えています。

簡単な説明

CodeBuild で Docker イメージを使用する場合、パブリック DockerHub リポジトリからレイヤーをプルするときにスロットルが発生する可能性があります。

スロットルが発生したときに表示されるエラーを解決するには、DockerHub アカウントの認証情報を使用してレイヤープルを認証するように CodeBuild を設定する必要があります。

重要: 次の手順を完了するには、DockerHub アカウントと、アカウントのユーザー名とパスワードが必要です。

解決方法

AWS Secrets Manager で DockerHub 認証情報を保存する

1.    AWS Secrets Manager コンソールを開きます。

2.    [Store a new secret] (新しいシークレットを保存する) を選択します。

3.    [Select secret type] (シークレットの種類を選択) セクションで、[Other type of secrets] (その他のシークレット) を選択します。

4.    [Specify the key/value pairs to be stored in this secret] (このシークレットに格納するキーと値のペアを指定する) セクションで、[Secret key/value] (シークレットキー/値) タブを選択します。

5.    最初のテキストボックスに、ユーザー名を入力します。2 つ目のテキストボックスに、DockerHub ユーザー名を入力します。その後、[Add row] (行を追加) を選択します。

6.    新しい行の最初のテキストボックスに、パスワードを入力します。2 つ目のテキストボックスに、DockerHub パスワードを入力します。その後、[Add row] (行を追加) を選択します。

7.    [次へ] を選択します。

8.    [Secret name] (シークレット名) に、シークレットの名前を入力します。例: dockerhub

9.    [次へ] を選択します。

10.    [Disable automatic rotation] (自動ローテーションを無効にする) のデフォルト設定が選択されていることを確認します。

11.    [次へ] を選択します。

12.    [Store] (保存) を選択します。

13.    [Secret name] (シークレット名) 列から、シークレットを選択します。

14.    [Secret details] (シークレットの詳細) セクションで、シークレット ARNAmazon リソースネーム (ARN) を書き留めます。

プロビジョニングフェーズで発生するスロットリングを解決する

1.    CodeBuild コンソールを開きます。

2.    ナビゲーションウィンドウで、[Build] (ビルド) を選択し、[Build projects] (ビルドプロジェクト) を選択します。

3.    ビルドプロジェクトを選択します。

4.    [Edit] (編集)、[Environment] (環境) の順に選択します。

5.    [Override image] (イメージの上書き) を選択します。

6.    [New environment image] (新しい環境イメージ) で、[Custom image] (カスタムイメージ) を選択します。

7.    [Environment type] (環境タイプ) で、 カスタムイメージを選択します。

8.    [Image registry] (イメージレジストリ) で、[Other registry] (その他のレジストリ) を選択します。

9.    [External registry URL] (外部レジストリ URL) で、Docker イメージの名前を入力します。

10.    [Registry credential] (レジストリの認証情報) には、前に書き留めたシークレットの ARN を入力します。

11.    [Update environment] (環境の更新) を選択します。

他のフェーズで発生するスロットリングを解決する

重要: シークレットにアクセスするには、CodeBuild サービスロールに AWS Identity and Access Management (IAM) のアクセス許可を付与する必要があります。

1.    CodeBuild コンソールを開きます。

2.    ナビゲーションウィンドウで、[Build] (ビルド) を選択し、[Build projects] (ビルドプロジェクト) を選択します。

3.    ビルドプロジェクトを選択します。

4.    [Build details] (ビルドの詳細) タブを選択します。

5.    [Environment] (環境) セクションの [Service role] (サービスロール) で、サービスロール ARN を選択します。これにより、IAM コンソールが開きます。

6.    [Permissions] (アクセス許可) タブで [Add inline policy] (インラインポリシーを追加) を選択します。

7.    [JSON] タブを選択します。

8.    テキストエディタのコードを次の IAM ポリシーに置き換えます。

重要: YOUR_SECRET_ARN を書き留めておいたシークレット ARN に置き換えます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "YOUR_SECRET_ARN*"
            ]
        }
    ]
}

9.    [Review policy] (ポリシーの確認) をクリックします。

10.    [Name] (名前) で、ポリシーの名前を入力します。例: dockerhub_secret_access 注: ポリシーの名前を任意に選択できます。この名前は、今後の参考のみを目的とするものです。

11.    [Create policy] (ポリシーを作成) を選択します。

シークレットを取得するように CodeBuild を設定する

1.    CodeBuild コンソールを開きます。

2.    ナビゲーションウィンドウで、[Build] (ビルド) を選択し、[Build projects] (ビルドプロジェクト) を選択します。

3.    ビルドプロジェクトを選択します。

4.    [Edit] (編集)、[Environment] (環境) の順に選択します。

5.    [Additional configuration] (追加設定) セクションを展開します。

6.    環境変数を追加するには、[Environment] (環境) 変数セクションの [Name] (名前) に DOCKERHUB_USERNAME と入力します。

7.    [Value] (値) で、:username の前にシークレットの名前を入力します。例: dockerhub:username

8.    [Type] (タイプ) で、[Secrets Manager] を選択します。

9.    次の環境変数を追加するには、[Add environment variable] (環境変数の追加) を選択します。

10.    [Name] (名前) に、DOCKERHUB_PASSWORD と入力します。

11.    [Value] (値) で、 :password の前にシークレットの名前を入力します。例: dockerhub:password

12.    [Type] (タイプ) で、[Secrets Manager] を選択します。

13.    [Update environment] (環境の更新) を選択します。

14.    buildspec を変更し、他の Docker アクションを実行する前に、次のコマンドを追加します。

echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin

警告: このコマンドは、Docker ログインユーザー名とパスワードの詳細をビルドログに記録できます。スロットルエラーを解決したら、Docker パスワードをリセットします。

例:

version: 0.2

phases:
  install:
    commands:
      - echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin 
  build:
    commands:
      - docker pull docker:dind

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ