KubernetesへのGoアプリの最速デプロイ方法 - DEV コミュニティ
😰 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を指定することを忘れないでください。
GCP
GCPを使用する場合は、画面の指示に従ってEncoreアプリケーション用のGCPサービスアカウントを作成します。
注意:サービスアカウントを作成するには、GCPの組織アカウント
を持っている必要があります。
🖼 環境の作成
アカウントを接続したら、新しい環境を作成する時が来ました。これは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