たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

[Buildpacksとは] GCPのCloudRunにBuildpacksでつくったコンテナイメージをデプロイしてみた

   

BuildpacksはDockerfileなしでコンテナイメージを作成してくれるOSSです。ためしに利用してみたところ、問題なくイメージを生成できました。Dockerfileなしでイメージが作れるのは爽快でした。

buildpacks
https://buildpacks.io/

about buidpacks
https://cloud.google.com/blog/ja/products/containers-kubernetes/google-cloud-now-supports-buildpacks

Buildpacksのよさ

Buildpacks は複数の使い方ができます。1 つ目はコンテナ化を完全に導入していない場合で、Buildpacks を採用して最新のコンテナのランタイムと配信プラットフォームを利用するという方法です。また、Dockerfile を見つけて適切に処理しカスタマイズする時間がないといった、お急ぎのプロジェクトに対処する場合にも便利です。さらにBuildpacks はセキュリティと速度、再利用性が最適化されています。

BuildpacksでコンテナイメージをCloudRunにデプロイしてみる

ContainerRegistryのAPIを有効化

Buiildpacksで生成されるコンテナイメージはContainerRegistryに保存されるので、APIを有効化します。

artifact-registry

参考:https://cloud.google.com/container-registry/docs/enable-service

dockerの認証設定

Buildpacksは.ローカルでdockerを利用するので、そのローカルのdockerの認証設定をする必要があります。

Docker コマンドを実行するユーザーとして gcloud にログインします。

ユーザー認証情報により認証を構成するには、次のコマンドを実行します。

gcloud auth login

サービス アカウントの認証情報で認証を構成するには、次のコマンドを実行します。

gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE

ここで

ACCOUNT は [USERNAME]@[PROJECT-ID].iam.gserviceaccount.com 形式のサービス アカウント名です。既存のサービス アカウントは、Cloud Console の [サービス アカウント]ページまたは gcloud iam service-accounts list コマンドを使用して表示できます。KEY-FILE はサービス アカウント鍵ファイルです。鍵の作成については、Identity and Access Management(IAM)のドキュメントをご覧ください。jsonで鍵を作成し、それをローカルの任意のパスに保存します。

重要 サービスアカウントには適切にロールの設定をすることを忘れないでください。サービスアカウントはGCPのリソースを利用するためのものですが、すくなくとも今回利用するGCPリソース、CloudBuild、ContainerRegistry, CloudRunの実行権限をつけておきましょう。わずもがな環境によって依存するリソースはことなるので、うまくいかないときはall rolesで試してみるとよいでしょう。もちろん、過度な権限付与はセキュリティ的によろしくないので、試したあとは適切な権限をふりなおすことを忘れずに。

次のコマンドを使用して Docker を構成します。

gcloud auth configure-docker

参考:https://cloud.google.com/container-registry/docs/advanced-authentication#gcloud-helper

Buildpacksでコンテナイメージを生成する

pack build <Buildpacksで作成するイメージ名> --builder gcr.io/buildpacks/builder:v1
pack set-default-builder gcr.io/buildpacks/builder:v1
pack build --publish gcr.io/YOUR_PROJECT_ID/<Buildpacksで作成するイメージ名>

YOUR_PROJECT_IDには利用するGCPのプロジェクト名をいれてください。pack build --publishでContainerRegistryにコンテナイメージが生成保存されます。

CloudRunにデプロイ

通常のCloudRunへのデプロイ手順と同じです。使用するコンテナイメージにさきほどBuildpacksでContaienrRegistyに生成したイメージを指定してデプロイするだけです。

gcloud run deploy bfaq --image gcr.io/YOUR_PROJECT_ID/<Buildpacksで作成するイメージ名>  --region us-central1

まとめ

ためしにBuildpacksでGoのアプリをコンテナ化してCloudRunにデプロイしてみましたがとくに問題ありませんでした。Dockerfileを書くコストとBuildpacksを利用するコストを考えて積極的に利用してよいと思いました。

ではでは

参考:
https://github.com/GoogleCloudPlatform/buildpacks/tree/84c1d9c2f5f72ba5ebcbbbd44f3e488e7431dbab

 - Docker, GCP, プログラミング系 ,