見出し画像

AWS の IaC ツール CDK を Go で書いてみよう (Developer Preview)

AWS をお使いのみなさんも、そうでないみなさんもこんにちは。今回はデザミスで IoT・インフラ領域を担当するエンジニアより、AWS のインフラ構築を手軽にする方法の紹介をしたいと思います。

IoT・インフラ領域」とは一体どんな仕事をしているのかと気になった方もいるかもしれません。なんとなく想像つく方も「それって幅広すぎない?」と感じるでしょう。実はデータの分析プログラムの実装から牧場での LAN ケーブル作りまで何でもやる部隊なのです!物理層もアプリケーション層も全部やる、これぞフルスタックエンジニアです (あれ?ちょっと違う?)。

インフラストラクチャ as コード

IoT もインフラもたくさんの技術スタックを積み上げて仕事をこなさないといけません。しかしクラウドを活用することで、そうしたたくさんの仕事のうちいくつかは自動化することができます。その切り札が IaC (Infrastructure as Code) です。そして AWS ユーザーならぜひ使っておきたいのが AWS 謹製のツール CDK (Cloud Development Kit) です。

画像1

CDK そのものの紹介は公式の開発者ガイドはじめ良質なドキュメントが多数存在しますのでここでは割愛し、今回はそんな CDK をプログラミング言語 Go で書けるようになった新機能 (ただし現在 Developer Preview) を実践してみます!

ライトニングトーク

実は、このテーマで先日 LT (Lightning Talk) をしてきましたので、内容は資料を御覧ください。とても5分で流したとは思えないスライド枚数になっていますが、本当に5分で喋りました!

2021年6月現在、本機能は Developer Preview なので、ここで紹介した内容は今後大きく変わる可能性がある点はご了承ください。

Go CDK の使い心地

CDK の素晴らしいところは、VS Code などの IDE と組み合わせると補完機能を使いながらスラスラとインフラの定義やパラメーターを組み立てていけるところです。特に静的型付け言語との相性がとても良く、私はこれまで主に TypeScript で CDK を書いていました。しかし今後は Go で開発しているバックエンドコードと同じ言語でインフラの定義が書けることになります。そして、最初からトリッキーなコードが書けないように設計された Go なら、安心してインフラのレビューができる点も魅力として挙げられるでしょう。

社内での活用

Developer Preview ながら、すでに社内の実験用データ収集プログラムのデプロイなどに Go CDK を活用しています。たとえば、これも割と最近登場した時系列データベース Amazon Timestream の DB・テーブルを作成するコードはこんな感じです:

db := awstimestream.NewCfnDatabase(stack, jsii.String("TimestreamDemo"), &awstimestream.CfnDatabaseProps{
	DatabaseName: jsii.String("TimestreamDemo"),
})
awstimestream.NewCfnTable(stack, jsii.String("Measurements"), &awstimestream.CfnTableProps{
	DatabaseName: db.DatabaseName(),
	TableName:    jsii.String("Measurements"),
})

もちろん作っただけでは Lambda 等のプログラムからアクセスできません。でも CDK ならポリシーの追加もらくらくです。

lambdaFn.AddToRolePolicy(awsiam.NewPolicyStatement(&awsiam.PolicyStatementProps{
	Effect:    awsiam.Effect_ALLOW,
	Resources: &[]*string{jsii.String("*")},
	Actions:   &[]*string{jsii.String("timestream:*")},
}))

このような感じで、足りないものはサクサク追記していき、 cdk diff などのコマンドで実際の変更点を確認しながらインフラを構成していくことができます。楽しい!

エンジニア募集中

さて、デザミスでは現在エンジニアの採用を進めています。募集職種と主な要件は以下の通りです:
・フロントエンドエンジニア (React, Vue.js 等のフレームワークを用いた開発および運用の経験がある方)
・バックエンドエンジニア (RDBMS の基礎知識と Ruby on Rails を用いた開発および運用の経験がある方)
・IoT エンジニア (OS とネットワークの十分な知識と Go, C, Python 等を用いた開発経験がある方)
・データエンジニア (統計の基礎知識と Pandas, NumPy, scikit-learn 等を用いた分析経験がある方)
ご興味がありましたら、カジュアル面接からでも可能ですので、希望を添えてお気軽にご応募ください!現在全部のステップをオンラインで実施しており、地方からでも参加可能です。エンジニア一同お待ちしております!

この記事が気に入ったらサポートをしてみませんか?