🔧

Fastly Compute 開発の基礎 (2) はじめてのビルドとデプロイ(Go編)

2023/12/06に公開

この記事は Fastly Compute (旧 Compute@Edge) 一人アドベントカレンダー 5 日目の記事です。

これから開発環境を整備して初めてビルドやデプロイをする方向けの手順を紹介するシリーズ(Fastly Compute 開発の基礎)の第二回目です。本稿では開発環境の整備を行います。

API トークンの作成と Fastly CLI のセットアップ

hkakehashi さんの記事の手順に沿って進めてください。APIトークンの作成の際に、以下のような Type という種類の設定が追加されていますが、こちらはデフォルトのまま(User Token)で問題ありません。

なお、CLI セットアップの際のプロファイルについては作成せずに環境変数 $FASTLY_API_TOKEN をシェルで export することで済ませることもできます。(私の環境はこの方法で利用しています)

はじめてのビルドとデプロイ(Go編)

hkakehashi さんの記事で既に Rust と JavaScript でのビルドやデプロイの手順については紹介されていますので、本稿ではもう一つの公式 SDK である Go での手順を紹介します。

ツールチェインのインストール

Go SDK の利用には Go 1.21 以上、または TinyGo 0.28.1 以上の環境が必要になります。ツールチェインが未インストールの場合は、以下の公式手順に沿って整備を進めてください。

プロジェクトの作成

プロジェクトで利用するフォルダを作成して(例:mkdir tmp-fastly-go)、そのフォルダ内で fastly compute init コマンドを実行します。Name, Description, Author(email) など尋ねられますがデフォルトのまま(空欄)でも問題ありません。

その後以下のように利用言語を尋ねられたら、3 の Go を選択します。続いて利用するスターターキット(ベースとなるプロジェクトのテンプレート)を聞かれるので、Go を使う場合は 1 、TinyGo を使う場合は 2 を選択します。

Language:
(Find out more about language support at https://developer.fastly.com/learning/compute)
[1] Rust
[2] JavaScript
[3] Go
[4] Other ('bring your own' Wasm binary)

Choose option: [1] 3

Starter kit:
[1] Default starter for Go
    A basic starter kit that demonstrates routing, simple synthetic responses and overriding caching rules.
    https://github.com/fastly/compute-starter-kit-go-default
[2] TinyGo starter kit for Go
    A basic starter kit that demonstrates routing, simple synthetic responses and overriding caching rules.
    https://github.com/fastly/compute-starter-kit-go-tinygo

INFO: For a complete list of Starter Kits:
    https://developer.fastly.com/solutions/starters/

Choose option or paste git URL: [1] 1

以上でプロジェクトの初期化が完了し、フォルダ内にソースコードが展開された状態となります。

ビルドとデプロイ

go の場合のコード例は以下の通りです。Go のエントリポイントは main.go です。

package main

import (
  "context"
  "fmt"
  "io"
  "github.com/fastly/compute-sdk-go/fsthttp"
)

func main() {
  fsthttp.ServeFunc(func(ctx context.Context, w fsthttp.ResponseWriter, r *fsthttp.Request) {
    if r.URL.Path == "/" {
      r.CacheOptions.TTL = 60
      resp, _ := r.Send(ctx, "backend_1")
      w.WriteHeader(resp.StatusCode)
      io.Copy(w, resp.Body)
    } else {
      w.WriteHeader(fsthttp.StatusNotFound)
      fmt.Fprintf(w, "The page you requested could not be found\n")
    }
  })
}

上記コードを手元のプロジェクトの main.go として保存したのちに、hkakehashiさんの記事に倣って手順通りにデプロイします。$fastly compute publish コマンドによるデプロイに成功すると、以下のようなターミナル表示となります。

Manage this service at:
	https://manage.fastly.com/configure/services/<YOUR_SERVICE_ID>

View this service at:
	https://some-random-name.edgecompute.app

SUCCESS: Deployed package (service <YOUR_SERVICE_ID>, version 1)

この *.edgecompute.app ドメインは Compute で作成されたサービスに対して払い出されるデフォルトのドメインです。サブドメインは空いていれば任意の名前を指定することもできます。

まとめ

本稿ではローカル環境の設定やビルド・デプロイの手順等について紹介しました。次回はデバッグやロギング周りの基礎知識について紹介したいと思います。

Discussion