1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【IBM Cloud】Acountが異なるContainer Registryを使ってCode Engineにアプリケーションをデプロイする

Last updated at Posted at 2023-11-02

ドキュメントが分散していて苦労したので、記録しておきます。

やりたいこと

  • GitHub Enterprise(以下、GHE)で管理しているソースコードから、Code Engineに直接アプリケーションをデプロイしたい。
  • デプロイ中に作られるコンテナイメージは、異なるAccount上のContainer Registryに格納したい。

なんでローカルでビルドしないの?

Apple SiliconとIntelの差を気にしたくなかったからです。。

引っ掛かりポイント

  • ドキュメントと画面で言葉が異なっていて、説明文を探しにくいところでしょうか・・・

  • Container Registryの無料プランでは、1アカウントあたりが保持しておけるイメージの合計サイズが、小さめに設定されています。(500Mだったかな?)
    当手順でイメージをpushするときに上限を超えた場合、403 forbiddenが返却されます。
    ここで初手で権限の確認を始めると沼にハマります。
    まずは、Container Registryに保管されているイメージを削除して、リポジトリの空きを増やしてからリトライしてみてください。
    (うまく行っていたデプロイが急に403を吐くようになったら、大概この理由です。)

    ERROR: failed to push jp.icr.io/namespace/registry: unexpected status from POST request to https://jp.icr.io/v2/namespace/registry/blobs/uploads/: 403 Forbidden
    ------
     > exporting to image:
    ------
    error: failed to solve: failed to push jp.icr.io/namespace/registry: unexpected status from POST request to https://jp.icr.io/v2/namespace/registry/blobs/uploads/: 403 Forbidden
    

前提

  • GHE上に、docker build & runすれば稼働できる状態のWebアプリケーションのソースコードがある。(通常のGitHubでは、検証していません。)
  • IBM Cloudに、Code Engineを立ててある。
  • 異なるアカウントのIBM Cloudに、Container Registryを立ててある。

やったこと

ローカルPC〜GHE

  1. ローカルPCでssh-keygenを実行し、秘密鍵・公開鍵を作成します。
    このあたりは詳しく解説されているページがたくさんあるので、説明は割愛します。(GHEとCode Engineの接続に利用するだけなので、専用の鍵を作るのをお勧めします。)

  2. 公開鍵をGHEに登録します。
    このあたりは詳しく解説されている(ry

Container Registry

  1. Namespaceを作ります。
    私はロケーション 東京jp-myspace という名前で作りました。
    image.png

  2. Container RegistryにアクセスするためのAPIキーを作ります。
    Container RegistryがあるAccountで、
    コンソールからのサービス ID を使用した Container Registry へのアクセス権限の付与のステップ1〜3を実施します。
    <メニューの場所>
    image.png

注意と補足

  • ステップ1-⑤-a: ドキュメントには コンテナー・レジストリー と書かれていますが、 Container Registryと入力してください。
  • ステップ1-⑤-b: 私は「すべてのリソース」にしました。
  • ステップ1-⑤-c: 私は「リーダー」「ライター」「管理者」を選択しました。
    (「管理者」は要らないと思いますが、手戻りがイヤだったので。)
  • ステップ2: ステップ1で作業したサービスIDに、追加で実施してください。
  • ステップ2-②-c: サービスIDには「ServiceId-」の部分も含みます。
    (例:ServiceId-xxx99x99-99xx-9xx9-x999-99x999x9x99x)
    <ステップ1〜2を実行すると、こんな感じになります。>
    image.png

Code Engine

アプリケーションを作成します。

  1. 「実行するコードの選択」は、ソースコードを選択します。
    「ソース・コードURL」は、SSHでリポジトリをクローンするときのURLを入力します。
    image.png

  2. 「ビルド詳細の指定ボタン」を押して、デプロイの詳細を入力します。
    ・コード・リポジトリー・アクセス: ドロップダウンに新規作成の選択肢がありますので、追加します。(このとき、GHE用に作った秘密鍵を入力します。)
    image.png
    ・レジストリサーバー: <Container RegistryでNamespaceを作ったロケーション>.icr.ioです。東京の場合は jp.icr.io になります。
    ・レジストリー・アクセス・シークレット: Code Engine へのレジストリー・アクセス権限の追加の⑤以降を参考に作成してください。
    作成ボタンは、またもや選択肢の中に隠れています。。
    image.png
    ・名前空間: Container Registryに作成したNamespaceを入力します。(私の場合は jp-myspace
    ・リポジトリー名とタグ: 特定の名前を付ける必要が無ければ、デフォルトでOKです。

  3. 「作成」ボタンを押して作成開始!

  4. 画面が切り替わるので、右側メニューの「ロギングの起動」をクリックして、デプロイのログを確認します。
    あとはログと睨めっこしながらトライ&エラーです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?