Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go初心者のクラウドエンジニアが、デプロイを通して旨味を知っていく話
Search
穴田竜大
November 10, 2026
Technology
120
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go初心者のクラウドエンジニアが、デプロイを通して旨味を知っていく話
GoをAWSにデプロイするときにどんなことが気になるのか?という観点をもとに、Goの良さを学んでいきます
穴田竜大
November 10, 2026
Transcript
45 slides
Go初心者のクラウドエンジニアが デプロイを通して 旨味を知っていく話 2026/11/09 @layerx.go #6 株式会社アンチパターン 穴田竜大 © 2026
Anti-Pattern Inc. All rights reserved.
自己紹介 穴田竜大 (ryudai) 株式会社アンチパターン • ソリューションアーキテクト (SA) • AWS環境の設計・構築 ワークショップ主催など幅広く担当
• 2026 Japan AWS Top Engineers © 2026 Anti-Pattern Inc.
Goを配って運用するとき何が気になる? • 実行先の準備にどれだけ手間がかかるか • デプロイする資材はどれくらい大きいか • 更新・保守にどれだけ手間がかかるか © 2026 Anti-Pattern
Inc. 3
今回やってみたこと 1 EC2にバイナリをデプロイ 2 ECSにコンテナをデプロイ 3 LambdaにZIPをデプロイ © 2026 Anti-Pattern
Inc. 4
1 © 2026 Anti-Pattern Inc. EC2にデプロイしてみる
EC2はAWS上で使える仮想サーバー OSや常駐するアプリを自分で管理する WebアプリではALBでアクセスを分配する構成がよく使われる © 2026 Anti-Pattern Inc. 6
今回はEC2から外部サイトへ疎通確認する 「このサーバーから外のWebサイトへ通信できる?」 運用時の確認に使うCLIをEC2に配置する © 2026 Anti-Pattern Inc. 7
疎通確認用のコマンドを Goで作った probeは今回作った自作コマンド URLを渡すとHTTPSでアクセスして結果を表示する probe --brief https://go.dev --briefは詳しいDNS情報を省いて表示する自作のオプション © 2026
Anti-Pattern Inc. 8
CPUの違う2台のEC2で動かしてみたい 同じCLIをArm64とx86_64のEC2へ配置してみる © 2026 Anti-Pattern Inc. Arm64 / t4g.micro x86_64
/ t3.micro Linux / arm64 probe-arm64を配置 Linux / amd64 probe-amd64を配置 9
CPUアーキテクチャは命令のルール • CPUが理解して実行できる命令の体系 • Arm64やx86_64などの種類がある • 実行するCPUに合うバイナリを用意する © 2026 Anti-Pattern
Inc. 10
手元と同じ arm64のEC2向けにビルドする CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \ go build -o probe-arm64
./cmd/probe • GOOS=linux:Linux向けのバイナリを作る • GOARCH=arm64:Arm64のCPU向けに作る © 2026 Anti-Pattern Inc. 11
go buildで何をどこへ出力するか指定する CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \ go build -o probe-arm64
./cmd/probe • go build:ソースと依存をビルドする • -o probe-arm64:作る実行ファイルの名前 • ./cmd/probe:ビルドするパッケージの場所 © 2026 Anti-Pattern Inc. 12
まずはarm64のEC2で動いた! Go未導入を確認 疎通確認に成功 © 2026 Anti-Pattern Inc. 13
x86_64のEC2でも動く? CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -o probe-amd64 ./cmd/probe
• GOARCH=amd64に変えてx86_64向けにビルド • 出力ファイル名もprobe-amd64へ変更 © 2026 Anti-Pattern Inc. 14
手元と違う x86_64のEC2でも動いた! Go未導入を確認 疎通確認に成功 © 2026 Anti-Pattern Inc. 15
Goは手元と違う CPU向けにもビルドできる • GOOS・GOARCHで実行先のOS・CPUを指定できる • このようなビルドをクロスコンパイルと呼ぶ • 同じソースからCPUごとのバイナリを作れる © 2026
Anti-Pattern Inc. 16
HTTPS通信もCのライブラリなしで動いた! • HTTP・TLSはGoの標準ライブラリで使える • cgoはGoからCのコードを呼び出す仕組み • 今回は不要だったのでCGO_ENABLED=0でビルドした © 2026 Anti-Pattern
Inc. 17
実行先の準備が少なくて楽! • Goのランタイムもバイナリに含まれる • EC2にGo本体やCのライブラリを追加せずに済んだ • OSとCPUに合わせてビルドして置いて実行するだけ! © 2026 Anti-Pattern
Inc. 18
2 © 2026 Anti-Pattern Inc. ECSにデプロイしてみる
ECSはコンテナの起動と維持を管理する 今回はFargateを使いサーバーの管理もAWSに任せる WebアプリではALBからコンテナへアクセスを振り分ける © 2026 Anti-Pattern Inc. 20
今回の構成: ECRからFargateへ配置する ECRはコンテナイメージの保管場所 検証ではALBを置かずブラウザからAPIへ直接アクセスする © 2026 Anti-Pattern Inc. 21
GinとHonoで同じJSONを返すAPIを作る Webアプリのバックエンドを想定した小さなAPI 画面や他のサービスからのリクエストにJSONを返す Go / Gin Node.js / Hono GoのWebフレームワーク
GET / → JSONを返す Node.jsのWebフレームワーク GET / → 同じJSONを返す © 2026 Anti-Pattern Inc. 22
Distrolessは実行用の最小構成のイメージ シェルやパッケージ管理ツールを含めない Goはstatic / HonoはNode.js入りを使う © 2026 Anti-Pattern Inc. 23
ビルド用と実行用のステージを分ける FROM golang:1.27.3 AS build # ソースと依存を用意してビルド RUN CGO_ENABLED=0 GOOS=linux
GOARCH=arm64 \ go build -o /out/server ./cmd/server FROM gcr.io/distroless/static-debian13:nonroot COPY --from=build /out/server /server ENTRYPOINT ["/server"] ① 前半:コンパイラ・ソースを使ってビルド ② 後半:できたバイナリだけをCOPYして実行 © 2026 Anti-Pattern Inc. 24
ビルドに使うツールを本番へ持ち込まなくて良い • コンパイラやソースを含めずイメージを小さくできる • 不要なソフトウェアを減らし攻撃対象を絞れる © 2026 Anti-Pattern Inc. 25
ECRへ保存し ECSでコンテナを起動する ① docker push:作ったイメージをECRへアップロード ② ECS:イメージ・CPU・メモリを指定して起動 © 2026 Anti-Pattern
Inc. 26
ブラウザから GinのAPIを呼べた 配置したAPIがメッセージをJSONで返している © 2026 Anti-Pattern Inc. 27
Honoでも同じ APIを配置できた Node.js入りのDistrolessでも同じJSONを返せた © 2026 Anti-Pattern Inc. 28
今回のイメージは Goが約1/10のサイズだった 同じAPI・arm64・Distrolessで比較 ECR上の圧縮済みイメージサイズ 配布サイズ © 2026 Anti-Pattern Inc. Go
/ Gin Node.js / Hono 5.47 MiB 57.79 MiB 29
なぜGoのイメージを小さくできたのか? • Goコンパイラやソースを本番のイメージに入れない ◦ Ginを含め実行するコードをバイナリにまとめられる • Node.js側は実行するNode.js本体もイメージに必要 © 2026 Anti-Pattern
Inc. 30
小さいイメージは起動待ちと保存容量を減らしやすい • • • 取得時間の短縮でデプロイ・増台時の起動を速くしやすい Fargateでイメージが占めるディスク容量を抑えられる ECRに保存するイメージの容量も抑えられる © 2026 Anti-Pattern
Inc. 31
3 © 2026 Anti-Pattern Inc. Lambdaにデプロイする
Lambdaはイベントでコードを動かすサービス サーバーを起動し続ける管理が不要 Web APIではAPI GatewayをHTTPの入り口として使える © 2026 Anti-Pattern Inc. 33
今回はURLを開くと疎通確認が走る 必要なときに外部サイトとの疎通を確認する処理を想定 API Gatewayを使わずLambdaの関数URLから直接呼び出す © 2026 Anti-Pattern Inc. 34
aws-lambda-goがLambdaとGoの処理をつなぐ Lambdaからの呼び出しを受け自分のGoの関数を実行する lambda.Start(handler) © 2026 Anti-Pattern Inc. 35
Lambda向けにビルドする CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \ go build -tags lambda.norpc \
-o bootstrap ./cmd/lambda • • • Linux・arm64のLambda向けにビルドする -o bootstrap:Lambdaの仕様で決まっている名前 -tags lambda.norpc:不要な旧方式の処理を除く © 2026 Anti-Pattern Inc. 36
ZIPにかためてデプロイする zip function.zip bootstrap • bootstrapをZIPの直下に入れる • できたZIPを次のコマンドでLambdaへ送る © 2026
Anti-Pattern Inc. 37
LambdaへZIPを送り関数を作成する aws lambda create-function \ --function-name "$FUNCTION" \ Lambda関数の名前 --runtime
provided.al2023 \ OS環境(AL2023) --architectures arm64 \ CPUの種類(arm64) --handler bootstrap \ Goではbootstrapを起動 --role "$ROLE_ARN" \ IAMロール(AWSへの権限) --zip-file fileb://function.zip 送るZIP(バイナリ読込) © 2026 Anti-Pattern Inc. 38
LambdaをCLIから呼び結果を確認する aws lambda invoke \ --function-name "$FUNCTION" result.json cat result.json
result.jsonに実行結果を保存しcatで内容を表示する 実際の応答(抜粋) { } "url": "https://go.dev", "architecture": "arm64", "status": 200 © 2026 Anti-Pattern Inc. 39
関数URLを作るとブラウザからも呼べる aws lambda create-function-url-config \ --function-name "$FUNCTION" \ --auth-type NONE
• • • 関数ごとに専用のHTTPS URLを発行できる NONE:今回はログインせず呼べる設定で検証 URL作成に加え公開用の呼び出し権限も設定する © 2026 Anti-Pattern Inc. 40
ブラウザからも疎通確認できた URLを開くとLambdaが疎通確認してJSONを返す © 2026 Anti-Pattern Inc. 41
OSのパッチ適用を Lambdaに任せられる • OS専用ランタイムでサーバーのOS保守をAWSに任せる • 今回のZIP版はOSのパッチが標準設定で自動適用される © 2026 Anti-Pattern Inc.
42
Goの更新はビルドと ZIPの差し替えで済む Node.jsのメジャー更新 1. 2. 3. 4. ビルド・テスト ZIPを更新 Lambdaのランタイムを変更
更新後の動作確認 © 2026 Anti-Pattern Inc. Goのバージョン更新 1. 2. 3. ビルド・テスト ZIPを更新 更新後の動作確認 43
クラウドエンジニアとして嬉しかったこと 1 実行先の準備が少なく バイナリを置いて動かせた 2 コンテナに入れるものが少なく 配布・保存する資材を小さくできた 3 LambdaのOS保守を任せて Goの更新をビルド側にまとめられた
© 2026 Anti-Pattern Inc. 44
Goをデプロイしてみた感想 Goのデプロイは楽だった! © 2026 Anti-Pattern Inc. 45
More Decks by 穴田竜大
See All by 穴田竜大
手作り個人ブログの苦労話
ryudai
0
86
0から作らない、CDKのはじめかた
ryudai
1
410
Other Decks in Technology
See All in Technology
会社説明資料_最新版
demaecan
0
32k
令和の今、あらためて IAM を考える。アクセスキーを「無くせない現実」との向き合い方
kazzpapa3
0
610
思考過程から秘密が漏れる:Amazon Bedrock上のKimi K3を5つの方法で攻めたら、25回中22回漏洩した話
yama3133
1
130
AI Agent 時代のデータ基盤: ClickHouse で実現する 超高速分析とコスト削減の両立
jozono
0
230
Agent Harnessはどう作る?事例から学ぶAI Agentの設計思想
sergicalsix
0
260
Kiro アップデート 2026 年 11 月号 (11 月 8 日時点) | 目指せ Kiro マスター アップデート編
inariku
PRO
2
100
Shared Signals Framework 仕様解説
oidfj
0
370
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.9k
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
620
公共分野での生成AI活用
toru_kubota
1
320
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
400
レガシーコードに対する loop engineering的なAI開発プロセス導入について
kubell_hr
0
340
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
520
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Being A Developer After 40
akosma
PRO
92
590k
Documentation Writing (for coders)
carmenintech
77
5.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
980
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
330
Building a Scalable Design System with Sketch
lauravandoore
464
34k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Navigating Team Friction
lara
192
16k
Color Theory Basics | Prateek | Gurzu
gurzu
1
520
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.9k