SlideShare a Scribd company logo
1 of 49
Download to read offline
1
GAになったGolangでCDKを触ってみよう
BOOSTRY
Atsushi Umakatsu
2
2
horsewin
(Atsushi Umakatsu)
PdM / Frontend Engineer
Personality
l 金融システムのエンジニア
l 書籍の執筆にも積極的
l 最近興味があるのはNyantech
HorseVictory
horsewin
3
3
会社紹介
l BOOSTRY(ブーストリー)
l ブロックチェーンを中心とした先進的な技術を活用し、新しい
資金調達スキームを構築する
l ブロックチェーンを稼働させる基盤にAWSを利用
l 構築にCDK/Cloud Formationを利用
l Boost your try.
l 挑戦者を後押しするプラットフォームの構築
4
GAになったGolangでCDKを触ってみよう
5
GAになったGolangでCDKを触ってみよう
Golang ?
6
Golang → Go language → Go言語
Gopher by Renée French
7
7
Golangとは
l 2007年にGoogleによって開発されたプログラミング言語(*1)
l 各所に登場するGopher(*2)くんで知られるプログラミング言語
l クマにもみえますが「ホリネズミ」だそうです
l Gopherとは分散システムのテキスト検索のプロトコルでも(*3)
l Golangにおけるメリット
l シンプルな言語仕様
l シングルバイナリとして手軽に取り扱い可能
l パフォーマンス
l デフォルトで規定されるツールチェーン
l Etc...
(*1) https://go.dev/solutions/#case-studies
(*2) Gopher by Renée French
(*3) RFC1436として規定
8
GAになったGolangでCDKを触ってみよう
Golang CDK ?
9
9
CDKで利用できる言語
JavaScript
TypeScript
Python
Java
C#
〜 2021/04
10
どういったプロセスで新しい言語が追加される?
11
11
CDKはOpen-Source Software
l GitHub (https://github.com/aws/aws-cdk) でIssueやRoadmapを管理
l サポートする言語についてもIssueで管理(*1)
(*1) https://github.com/aws/aws-cdk/labels/language%2Fsupport
12
12
Golangについても同様にIssueでサポートが進行
l サポート対象としてほしいかを開発者にUpvoteしてもらう
l (細かいプロセスは不明)ロードマップ (*1) で “Working on it” となりDeveloper Previewにむけて開発
(*1) https://github.com/orgs/aws/projects/7
13
13
CDKで利用できる言語
JavaScript
TypeScript
Python
Java
C#
〜 2021/06
14
14
CDKで利用できる言語
JavaScript
TypeScript
Python
Java
C#
〜 2021/04
JavaScript
TypeScript
Python
Java
C#
Golang (DP)
2021/05〜
DP = Developer Preview、開発者プレビュー
15
15
CDKで利用できる言語
DP = Developer Preview、開発者プレビュー
JavaScript
TypeScript
Python
Java
C#
〜 2021/04
JavaScript
TypeScript
Python
Java
C#
Golang (DP)
2021/05〜
プレビュー期間が思った以上に長く・・・
16
17
17
CDK Day 2022にてGA発表
l AWSのドキュメントページ上は2022/07/06時点では追いついていないですが・・・
l GitHub上のREADMEではバッチリ利用可能として記載
(*1) https://github.com/aws/aws-cdk/labels/language%2Fsupport
18
18
JavaScript
TypeScript
Python
Java
C#
〜 2021/04
JavaScript
TypeScript
Python
Java
C#
Golang (DP)
2021/05〜
DP = Developer Preview、開発者プレビュー、GA=Generally Available、一般利用可能
JavaScript
TypeScript
Python
Java
C#
Golang (GA)
2022/05/22〜
CDKで利用できる言語
19
19
19
Golangで書くCDK
20
20
GolangにおけるCDKのドキュメント
l 従来のGoDocに代わる、パッケージ・モジュール情報サイトであるpkg.go.dev に公開
https://pkg.go.dev/github.com/aws/aws-cdk-go/awscdk/v2
21
まずはCDKプロジェクトの作成から(デモ)
22
代表的なリソースをつくってみます
23
Amazon ECS
Amazon VPC
24
Amazon ECS
・ネットワークリソースの作成にはかかせない
・CDKの抽象化コードのサンプルとしてよく利用される
・VPCだけでなく周辺リソースも作成するL3コンストラクト
Amazon VPC
25
25
VPCを含むネットワークリソース
26
VPCを含む
ネットワークリソース
数行のコードのみで生成可能
27
VPCを含む
ネットワークリソース
数行のコードのみで生成可能
jsii??
28
28
CDKでGolangを利用する際の特有の処理
l 内部的にはただのポインタ
l jsii.Number → func Number(v float64) *float64 { return &v }
l jsii.String → func String(v string) *string { return &v }
l GolangにはTypeScriptにおけるnull型やundefined型に相当するOptionalな型が存在しない
l nil という概念があるが型定義としては使えない
l Optionalな引数として指定するためにポインタとして渡す必要がある
l このような特徴は他のInfrastructure as CodeのGolang実装でも見られる(例:Pulumi)
29
VPCを含む
ネットワークリソース
(再掲)
結果を確認してみましょう
30
Amazon ECS
Amazon VPC
31
Amazon VPC Amazon ECS
・コンテナワークロードを動作させる基盤
・Fargateを使うと運用が非常に楽な存在
・VPC同様にL3コンストラクトも利用可能
32
32
ECSを利用するコンテナワークロード
33
ECSを利用した
コンテナ基盤
自動設定にまかせることで
シンプルなコードに
34
Amazon ECS
Amazon VPC
35
35
35
Golangの言語特性からの考察
36
36
少しGolangらしくないエラーハンドリング
l GolangのエラーハンドリングではFuncの結果として実行結果とエ
ラーオブジェクトを取得する事が多い
37
37
少しGolangらしくないエラーハンドリング
l GolangのエラーハンドリングではFuncの結果として実行結果とエ
ラーオブジェクトを取得する事が多い
l CDKのGolangでは実行結果のみを受け取る
38
38
少しGolangらしくないエラーハンドリング
l GolangのエラーハンドリングではFuncの結果として実行結果とエ
ラーオブジェクトを取得する事が多い
l CDKのGolangでは実行結果のみを受け取る
39
39
少しGolangらしくないエラーハンドリング
l GolangのエラーハンドリングではFuncの結果として実行結果とエ
ラーオブジェクトを取得する事が多い
l CDKのGolangでは実行結果のみを受け取る
l Cloud Formationへの変換層としてCDKを位置づけており、リソースを生
成するCloud Formationからのエラーを受け取るわけではない
l ランタイムレイヤのエラーハンドリングはあまり意識していない?
40
40
少しGolangらしくないエラーハンドリング
l `cdk deploy` 時にエラー発生時はpanicをさせる
l `go build` はコンパイルするだけなので検知されない
l これによりエラー発生箇所の検知が可能
l たしかに変換層としてはこれでも十分な感じもする
l エラーハンドリングにコストを掛けないという印象
41
41
オプショナル項目を取り扱うためにjsii.XXXによるラップ処理
l ドキュメントにも明確に記載(*1)
l (再掲)このような特徴は他のInfrastructure as CodeのGolang実装でも見られる
l Optional引数/デフォルト引数などは言語仕様として利用できない
l Functional Options Pattern(*2) を利用して設定も可能
l CDKの実装としてPrimitive typesであってもポインタとして扱う
l これによりRequiredな項目が急遽Optionalになった場合であってもコードベースは動作することを保証
l 一貫性を保つために自身で拡張したコードについても同様の方針としたほうが読み手の負荷が下がる
(*1) https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/work-with-cdk-go.html
(*2) https://github.com/uber-go/guide/blob/master/style.md#functional-options
42
42
ゴルーチンのようなGolang特有の処理は使わない
l あくまでシンプルな言語仕様部分を利用
l これはTypeScriptの場合と同様
l 小さいコードベースの場合では並列処理によるパフォーマンス向上を意識しないためと推察
43
43
43
TypeScriptに対する違い
44
44
なれている人はTypeScriptの方が優勢か
l 言語仕様
l CDKで記述するTypeScript自体もあまりTypeScriptの複雑は型パズル利用なし
l 双方ともに、あくまでシンプルな言語仕様部分を利用するため大きな差異なし
l ドキュメント
l TypeScriptの方が検索もしやすく見やすい(主観)
l エラー発生箇所の特定
l TypeScriptではthrowされてきたエラーオブジェクトを伝搬して特定
l GolangではPanicによる大域脱出
l その他
l IDEの恩恵はいずれも同様に十分に教授可能
l コンテナ上で動くバックエンドアプリはGoが強い(主観)ためアプリケーションコードと
言語セットを揃えることができる強み
45
45
45
まとめ
46
46
ようやくGolangでCDKが胸を張ってかけるようになりました
l GAまでの経緯
l Developer Previewから1年ほどのロングジャーニー
l CDK DayにあわせてGAというAWSらしい盛り上げる演出
l シンプルな言語仕様と型制約を生かしたInfrastructure as Codeの実現
l アプリケーションと同一の言語を採用したDevOpsの加速の手助け
l Goらしさが少し欠ける場所でGolangエンジニアは少し違和感を感じるかも?
l まだまだGAされたばかりなので深堀りして楽しんでいきたい
l Golang上級者は是非いろいろやっていきましょう!
47
47
最後に
BOOSTRY では、日本の金融を加速させる
プラットフォームを作る仲間を募集しています
興味がある方は、是非お声がけください!
48
48
最後に
BOOSTRY では、日本の金融を加速させる
プラットフォームを作る仲間を募集しています
興味がある方は、是非お声がけください!
Thank you :D
49

More Related Content

Similar to GAになったGolangでCDKを触ってみよう

2019 kotlin-rejected-fest-doyaaaaaken
2019 kotlin-rejected-fest-doyaaaaaken2019 kotlin-rejected-fest-doyaaaaaken
2019 kotlin-rejected-fest-doyaaaaakenKoyama Kenta
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)Akihiro Suda
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!Minoru Naito
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!Masaki Muranaka
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~Hideki Takase
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
DockerのネットワークについてNobuyuki Matsui
 
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Kazuto Kusama
 
BOSH-lite で 1VM Cloud Foundry
BOSH-lite で 1VM Cloud FoundryBOSH-lite で 1VM Cloud Foundry
BOSH-lite で 1VM Cloud Foundryi_yudai
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Masahito Zembutsu
 
とある会社のエンジニアたちのAndroidへのフリーダムな取り組み
とある会社のエンジニアたちのAndroidへのフリーダムな取り組みとある会社のエンジニアたちのAndroidへのフリーダムな取り組み
とある会社のエンジニアたちのAndroidへのフリーダムな取り組みKei Nakazawa
 
ライトニングノードをたててみよう
ライトニングノードをたててみようライトニングノードをたててみよう
ライトニングノードをたててみようtakayaimai
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in TokyoKyosuke Inoue
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets herokuKyosuke Kameda
 
BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)Akihiro Suda
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016lestrrat
 

Similar to GAになったGolangでCDKを触ってみよう (20)

2019 kotlin-rejected-fest-doyaaaaaken
2019 kotlin-rejected-fest-doyaaaaaken2019 kotlin-rejected-fest-doyaaaaaken
2019 kotlin-rejected-fest-doyaaaaaken
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
Keep a diary
Keep a diaryKeep a diary
Keep a diary
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
Dockerのネットワークについて
 
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較
 
2018 07-19dist
2018 07-19dist2018 07-19dist
2018 07-19dist
 
BOSH-lite で 1VM Cloud Foundry
BOSH-lite で 1VM Cloud FoundryBOSH-lite で 1VM Cloud Foundry
BOSH-lite で 1VM Cloud Foundry
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
とある会社のエンジニアたちのAndroidへのフリーダムな取り組み
とある会社のエンジニアたちのAndroidへのフリーダムな取り組みとある会社のエンジニアたちのAndroidへのフリーダムな取り組み
とある会社のエンジニアたちのAndroidへのフリーダムな取り組み
 
ライトニングノードをたててみよう
ライトニングノードをたててみようライトニングノードをたててみよう
ライトニングノードをたててみよう
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in Tokyo
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 
BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016
 
OpenStack on Softlayer
OpenStack on SoftlayerOpenStack on Softlayer
OpenStack on Softlayer
 

GAになったGolangでCDKを触ってみよう