[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を有効化します。
参考: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