KubernetesへのGoアプリの最速デプロイ方法 - DEV コミュニティ

KubernetesへのGoアプリの最速デプロイ方法のカバー画像

😰 Kubernetesクラスターの設定は大変な時間投資が必要です。 ゼロからデプロイまでは多くのステップが必要で、かなり安全な方法で物事を設立するためには、ドキュメントやいくつかのガイドを参照しなければなりません。

✨ Encore:インフラのための新しい型安全なワークフロー
この記事では、EncoreインフラストラクチャSDKを使って、Goバックエンドに必要なインフラを宣言的に定義し、順を追って、クラウドアカウント内で直接Kubernetesクラスターや他のインフラを自動的にプロビジョンするEncoreを利用します。

ご自身のコードはGCPとAWSのどちらにもデプロイ可能で、選んだクラウドに応じてGKEまたはEKS Fargateを使用してクラスターをプロビジョンします。🙋‍♂️

もし好みであれば、コードの行を一行も変更することなく、サーバーレスコンピュートインスタンスを使用してデプロイも可能です。これは、安価で簡単に動かせるテスト環境を設定するのに最適です。💸

🚀 これから行うステップ:

  • Encoreのインストール
  • テンプレートからバックエンドアプリを作成
  • ローカルで動かす
  • クラウドアカウントを接続
  • Kubernetesにデプロイ

今すぐ構築する気がしない?代わりにビデオを見てください:
How to deploy a Go backend to Kubernetes

💽 Encoreのインストール

ローカル環境を動かすEncore CLIをインストールします:

  • macOS: brew install encoredev/tap/encore
  • Linux: curl -L https://encore.dev/install.sh | bash
  • Windows: iwr https://encore.dev/install.ps1 | iex

🔨 アプリの作成

Encoreの動作をシンプルに説明するために、Encoreのテンプレートリポジトリから事前に作成されたアプリをクローンします。それは単純なURL短縮アプリで、REST APIとPostgreSQLデータベースがあります。

以下を実行してインストールします:

encore app create my-app-name --example=url-shortener

🏁 ローカルでの実行

アプリケーションをローカルで実行するためには、Dockerがインストールされ、実行されていることを確認してください。これは、SQLデータベースを使ったEncoreアプリケーションを実行する必要があります。

それから単に以下を実行します:

encore run

次のように表示されるはずです:

画面表示の説明の画像

🧪 APIの試用

次に、エンドポイントを呼び出します:

curl http://localhost:4000/url -d '{"URL": "https://encore.dev"}'

これが表示されるはずです:

{
  "ID": "5cJpBVRp",
  "URL": "https://encore.dev"
}

🕹 開発者ダッシュボードのオープン

encore runが実行されている間に、http://localhost:9400/を開いて、Encoreのローカル開発者ダッシュボードを表示します。

ここでAPIドキュメントを見たり、APIエクスプローラー経由でAPIを利用したり、Encoreの組み込み分散トレースを見たりできます。

🧐 コードのチェック

今このアプリはローカルで実行中で、ローカルのKubernetesインスタンスを手動で設定することなく、そしてこれからクラウドアカウントへデプロイします。でもどうやって動くのでしょうか?

コードを見てみましょう。👇

// Go言語に関連する部分のコードスニペット

Kubernetesの設定やその他のインフラ構成はありません。すべてGoコードで、ほぼすべてビジネスロジックです。

//encore:apiアノテーションを使ってAPIエンドポイントを定義し、encore.dev/storage/sqldbパッケージをインポートしています。

コンパイル時にEncoreはコードを解析してアプリケーションを実行するためのインフラ要件を理解し、必要なボイラープレートコードを生成します。

ローカルで実行するときは、CLIがインフラのローカルバージョンの設定を担当し、クラウドでEncoreは環境の作成時の構成オプションに基づいて必要なクラウドサービスをプロビジョニングします。それでは、それをやっていきましょう!

⛅️ クラウドアカウントの接続

まず、Encoreにクラウドアカウントを接続する必要があります。これはCloud Dashboard > (アプリを選択) > アプリ設定 > インテグレーション > クラウド接続で行います。

AWS

AWSを使っている場合は、ページの指示に従ってIAMロールを作成し、そのロールをEncoreに接続します。

セキュリティのため、「外部IDの要求」をチェックして、指示にある外部IDを指定することを忘れないでください。

AWS接続

GCP

GCPを使用する場合は、画面の指示に従ってEncoreアプリケーション用のGCPサービスアカウントを作成します。

注意:サービスアカウントを作成するには、GCPの組織アカウントを持っている必要があります。

GPC接続

🖼 環境の作成

アカウントを接続したら、新しい環境を作成する時が来ました。これはEncoreのCloud Dashboardの環境ページにて、環境を作成をクリックすることで行います。

ここから新しい環境を設定できます:

  • タイプ本番として選択。
  • デプロイメントトリガーブランチプッシュとして設定し、gitデフォルトのブランチ名を指定します(例:main、またはアプリのルートフォルダでgit branchを実行して確認してください)。
  • 使用するクラウドを選択(アカウントを接続したもの)。
  • リージョン(好きなものを選択)。
  • コンピュートインスタンス(Kubernetesを選択)。
  • プロセス割り当て全プロセスを1つのサービスでを選択)。

次に作成をクリックして環境を保存します。💾

環境の作成

これでデプロイの準備が整いました!✨

🚀 Kubernetesにデプロイ

ボタンを押す前に覚えておいてください:Encoreはリアルな本番環境のKubernetesクラスターをアカウント内でプロビジョニングし、ベストプラクティスのセキュリティ対策を行うため、デプロイにはアカウント上でのコストがかかることになります。🤑

アプリをデプロイして新しいKubernetesクラスターを作成するには、単純に以下を実行します:

$ git add -A .
$ git commit -m 'Initial commit'
$ git push encore

Encoreは今、アプリのビルドとテストを行い、必要なインフラをプロビジョニングし、アプリケーションをクラウドにデプロイします。🚀

デプロイメントをトリガーした後、EncoreのCloud Dashboardで進捗を確認できるURLが表示されます。👈

このような見た目をしています:https://app.encore.dev/$APP_ID/deploys/...

そこからメトリクスやトレースを見たり、GitHubアカウントを接続したりもできます。

🎉_これで完璧なGoバックエンドがKubernetesで動作しています、お疲れ様でした!_

注意:コストを抑えたい場合は、新しいクラスターを使いたくなくなったら、作成したすべてのリソースを削除するべきです。これはクラウドプロバイダーのコンソールから簡単に行うことができます。

🍰 お疲れ様 – 終わりました!

これでKubernetes上で拡張可能なGoバックエンドが始まりました。

オープンソースのEncore アプリテンプレートでさらに構築を進めていきましょう。👈

質問がある場合や作業を共有したい場合は、EncoreのコミュニティSlackで開発者のハングアウトに参加してください。👈

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/encore/the-fastest-way-to-deploy-a-go-app-to-kubernetes-4ahn