20200222のGoに関する記事は2件です。

Go で Docker の multi-stage build を試す

前提

  • Docker がインストールされていること

手順

Go ファイルを作成

app.go という名前のファイルを作成する。

app.go に「Hello, world」と出力するだけのコードを書く。
(ホストOS に Go がインストールされてなくても :ok_hand:

app.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, world")
}

Dockerfile を作成

Go ファイルと同じディレクトリに Dockerfile を作成する。
「Go のバイナリをビルドする環境」と「Go のバイナリを実行する環境」の定義を記述する。

Dockerfile
# 「builder」という名前で Dockerfile 内から参照できるようにする
FROM golang:1.13 AS builder
WORKDIR /root
# 作成した Go ファイルをコピー
COPY . /root
# Linux 用のバイナリをビルドし、WORKDIR に出力
RUN GOOS=linux go build -o app .

# scratch は超軽量なイメージ
FROM scratch
WORKDIR /root
# 「builder」にあるバイナリを WORKDIR にコピー
COPY --from=builder /root/app .
CMD ["./app"]

イメージをビルド & コンテナ起動

Go ファイルと Dockerfile があるディレクトリでターミナルを起動し、イメージをビルド & コンテナ起動する。

terminal
# app という名前でイメージをビルド
docker build -t app .

# app のコンテナを起動( --rm はコンテナ停止時にコンテナを削除するオプション )
docker run --rm app
# app.go の実行結果が出力される
> Hello, world

# app のイメージサイズ ≒ バイナリのサイズ で「Go のバイナリを実行する環境」が実現できたことがわかる
docker images app --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
REPOSITORY          TAG                 SIZE
app                 latest              2.01MB
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GoをAWS Lambdaで動かす一番小さいサンプルメモ

前提

  • Go 1.x
  • ローカル環境でGoが動く
  • デプロイは lambroll
  • IAMロール作成済み
  • 手元にAWSの認証情報がある

メモ

必要なパッケージのインストール

% go get -u github.com/aws/aws-lambda-go/lambda

コードの準備
hogehoge をログ出力するだけ。引数も戻り値も考慮しない。

hello.go
package main

// 一番最小限のLambda
import (
  "fmt"
  "github.com/aws/aws-lambda-go/lambda"
)

func hello() {
    fmt.Println("hogehoge")
}

func main() {
  lambda.Start(hello)
}

ビルド

# hello バイナリが出来る
% go build -o hello

デプロイ準備

% lambroll init --function-name hello-go --region "ap-northeast-1

function.json 更新

function.json
{
  "FunctionName": "[Function Name]",
  "Handler": "hello",
  "MemorySize": [MemorySize],
  "Role": "[Role ARN]",
  "Runtime": "go1.x",
  "Timeout": [Timeout Second]
}

デプロイ

% lambroll deploy --region "ap-northeast-1"

あとはマネコン等で適当に実行

参考

AWS Lambda で Go が使えるようになったので試してみた | Developers.IO https://dev.classmethod.jp/cloud/aws/aws-lambda-supports-go/

Go の AWS Lambda 関数ハンドラー - AWS Lambda https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-handler-types.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む