火曜日, 4月 29, 2025
ホームニューステックニュースGoで実装したAPIをデプロイしよう!(k8s編) #AWS - Qiita

Goで実装したAPIをデプロイしよう!(k8s編) #AWS – Qiita



Goで実装したAPIをデプロイしよう!(k8s編) #AWS - Qiita

概要

Goで実装したAPIを Kubernetes(k8s)上にデプロイする方法を紹介します!

最近は業務でECSとかEKSとかまだまだ勉強することが多く、
個人開発にも取り入れようとこの記事を作成しました!

k8s編なので、ECSやEKSの記事もどこかで書くつもりです!

前提条件

  • Go 言語の開発環境が整っていること
  • Docker と Kubernetes(k8s)がインストールされていること
  • AWS ECR(Elastic Container Registry)へのアクセス権限があること

また今回はHelm Chartを使用して、k8sリソース作成を
簡略化します!

Helmについては以下記事で入門編として解説してます!

1. Go アプリケーションの作成

まずは、シンプルな API を作成します。
今回は Ginを使用し、いくつかのエンドポイントを提供する API を作成します。

main.go

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	// /test エンドポイント
	r.GET("/test", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "test is passed!",
		})
	})

	// / エンドポイント
	r.GET("https://qiita.com/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "/ is alive!",
		})
	})

	// ポート8080で起動
	r.Run(":8080")
}

注意

今回はk8sにデプロイすることがメインなので、Goの解説はしないです!
(気になる方はChatGPTに聞いていただけたら!)

2. Dockerfile の作成

次に、アプリケーションを Docker コンテナにパッケージングするための Dockerfile を作成します。

# ビルド用のベースイメージ
FROM golang:1.24 as builder

WORKDIR /app
COPY . .

# Goアプリケーションをビルド
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app

# 最終的なイメージ
FROM alpine:latest
RUN apk --no-cache add ca-certificates

WORKDIR /root/
COPY --from=builder /app/app .

CMD ["./app"]

golangのバージョンは、2025年4月現在ですと1.23以上にしないと
動きませんのでご注意を

3. Docker イメージをビルド

次に、Docker イメージをビルドします。

$ docker build -t my-go-api .

4. AWS ECR に Docker イメージをプッシュ

AWS ECR を使用して、作成した Docker イメージをアップロードします。

ECR にリポジトリを作成

AWSマネジメントコンソールにログインし、ECRにリポジトリを作成しましょう。
名称は任意で大丈夫です!

スクリーンショット 2025-04-29 15.22.17.png

作成したら、画面右上に「プッシュコマンドを表示」ボタンがあります。
これを押下すると、何とECRにPushするところまで方法を案内してくれます!

スクリーンショット 2025-04-29 15.22.35.png

5. Kubernetes クラスタの準備

kubectl コマンドで Kubernetes クラスタに接続していることを確認します。
今回は、kind でクラスタを作成する方法を記載します。

6. Helm を使ってデプロイ

helm を使って、Kubernetes 上に Go アプリケーションをデプロイします。
まずは、Helm チャートのテンプレートを作成し、values.yaml を編集します。

Helm Chartを作成する

これで go-api/ ディレクトリができ、k8sリソースを作成するための
基本構成が入っています。

ディレクトリ構成例

go-api/
  Chart.yaml          # Chartの基本情報
  values.yaml         # デフォルトの変数
  templates/          # K8sマニフェスト(Helmテンプレート)
    deployment.yaml   # デプロイメント定義
    service.yaml      # サービス定義
    ...

values.yaml

values.yaml

replicaCount: 2

image:
  repository: {作成したECRのURI}
  tag: {作成したECRのタグ}

service:
  name: go-api
  type: ClusterIP
  port: 8080

livenessProbe:
  httpGet:
    path: /
    port: http
  initialDelaySeconds: 3
  periodSeconds: 10

readinessProbe:
  httpGet:
    path: /test
    port: http
  initialDelaySeconds: 3
  periodSeconds: 10

deployment.yaml

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-api
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: go-api
  template:
    metadata:
      labels:
        app: go-api
    spec:
      containers:
        - name: go-api
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: 8080
          livenessProbe:
            httpGet:
              path: {{ .Values.livenessProbe.httpGet.path }}
              port: {{ .Values.livenessProbe.httpGet.port }}
          readinessProbe:
            httpGet:
              path: {{ .Values.readinessProbe.httpGet.path }}
              port: {{ .Values.readinessProbe.httpGet.port }}

7. Kubernetes にデプロイ

次に、Helm を使って Kubernetes クラスタにデプロイします。

//「go-api」は任意で変えて大丈夫です
$ helm install go-api ./go-api

これで、Go アプリケーションが Kubernetes 上でデプロイされ、サービスが公開されます。

8. 動作確認

デプロイ後、以下のコマンドでリソースが正常にデプロイされているか確認します。
まずはPodが起動しているかをチェック。

pod起動確認

$ kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
go-api-cd454c75-jk6wv   1/1     Running   0          2s
go-api-cd454c75-vggtp   1/1     Running   0          2s

replicaCount

replicaCountで設定した値によって、作成されるPodの数が変わります!

アクセス確認

Service経由でアクセスできるか確認
(例:port-forward使ったり、Ingress設定等)

$ kubectl port-forward service/go-api 8080:80

http://localhost:8080/test にアクセスしてみましょう!

スクリーンショット 2025-04-29 14.57.45.png

Goで実装したAPIで指定したメッセージが返却されていることを
確認できればOKです!

まとめ

今回は Goで実装したAPIを、Kubernetes にデプロイする方法を紹介しました。
これで、Go アプリケーションを簡単にスケーラブルな環境で運用できます!

k8sを個人開発で使用するための入門として、お役に立てれば幸いです!



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -

Most Popular