
2025.08.01
災害大国・日本に求められる“命しか守れない防災”からの脱却 最長2週間先の気象災害予測による対応策
AWS CDK と AWS SAM 実は仲良し!一緒にローカルで開発しませんか(全1記事)
リンクをコピー
記事をブックマーク
藤原麻希氏(以下、藤原):私からは、CDKを使う時にSAMも一緒に使ってあげるといいのではないかというTips、小ネタを話そうと思っています。よろしくお願いします。
(スライドを示して)株式会社ゆめみの藤原麻希です。ふだんはサーバーサイドエンジニアをしていて、PHPを20年近くやっています。最近だと仕事はEC2になぜか乗っているdockerをFargateに移行したりしています。
ついこの間、資格が1つ増えました。近々1個が切れるので、もう1個取ろうかなとがんばっています。
先ほどSAMの話を出したのですが、CDKと一緒に使ったらいいんじゃない? というツールがいくつかあるので、それを紹介していこうと思っています。
想定視聴者は、今日のCDKの話を聞いてきて、サクッと開発環境を作るぐらいは理解していて、CDKがCloudFormationのテンプートに変換されて、それをデプロイするというのを押さえている人です。
あとは、LambdaとAPI GatewayでAPI1本ぐらいはみなさん作ったことがありますよね? という前提でやりたいと思います。それからNodeやnpm runを、少しやったことがあるぐらいわかっていればいいかなと思います。
TypeScriptは私もほとんどやっていなくて、CDKの時にTypeScriptだと補完がすごく強力なので使ってみた、ぐらいの経歴でやってがんばっています。
(スライドを示して)CDKと一緒に使える日本でメジャーなツールを持ってきました。AWSから出ているSAMとAmplify、右側はTerraform、LocalStackです。LocalStackは本当にこの名のとおり、ローカルで使うツールです。では1個ずつ見ていきます。
(スライドを示して)まずAmplifyです。2021年のre:Invent直前の1週間でドドドッと出たものです。Amplifyの設定で一部オーバーライドするのをCDKで書けるというのが1つです。
例えば、RDSを追加したい場合は、持っていないのでどこか別のところで作る必要があります。RDSで追加したとか、レコグニションで顔認識したいなど、別のリソースを入れたい時に、Amplifyのリソースをここで管理すると、エクスポートしてCDKに統合させられるようになりました。AmplifyはCDKとすごく仲良くしたいようです。
(スライドを示して)それから次は、Terraformです。私はあまり使えていないのですが、このあと発表があると思うので楽しみにしています。CDKをやろうと思った時に、「いや、でも会社でみんなTerraformをやっているんだよな」とどうしても思ってしまっていたのですが、どうもCDKで書いたコードをTerraformのステートファイルに書き出せるらしいので、これはちょっと楽しみにしています。
(スライドを示して)これもサラッといきます。LocalStackです。ローカルで開発する時に、Lambdaはこのあと出てくるSAMコマンドで動かせるのですが、それ以外の、例えばDynamodbやCognito連携など、わりとサーバーレス方面に寄ってはいるのですが、ローカル開発やテスト、CIで使うようなサービスの、モックと言ったらいいのか、正しい呼び方がちょっとわかっていないのですが、AWS非公式のツールです。
Dockerコンテナのかたちで提供されるので、わりとサクッと立てて、そこに対して、データを入れたり書いたりして使えます。これは意外と知らなかったという声をJAWS-UGのハッシュタグで見かけたので、紹介しておきます。
(スライドを示して)いよいよAWS SAMです。SAMはServerless Application Modelの頭文字を取っているらしいです。基本はCloudFormationベースです。LambdaだったりAPI Gatewayや、ステートマシンなど、よくサーバーレスで使われるサービスをCloudFormationで書くとやはりけっこうな量になるのですが、すごくギュッとまとめて、必要なところだけを簡潔に書けるようになっているものです。
「cdk synth」をすると、CloudFormationのテンプレートに変換されるというのがあったと思うのですが、その変換されたテンプレートをSAMから読み込むことができます。「sam local ナンタラ」とするとLambdaを動かせます。
(スライドを示して)これは、SAMを使ってアプリケーションを作る時の話です。SAMのインストールを、サクッとしてもらって、initしています。通常だとsam buildをすると、テンプレートファイルをCloudFormationに変換してくれます。
そこにさらにローカルで開発用のコマンドとして、sam localシリーズのコマンドがいくつかあって、invokeというファンクション名で、このファンクションをこのイベントの内容で実行してくれます。
このイベントは、どんなものが入ってくるの? と私はいつも困って、とりあえずログを仕込んでCloudFormation? CloudWatch? CloudWatch Logsで見てからどうしようと考えることがよくありました。
実はこの「sam local generate-event」は、ここのサービス名のところに、このあたりに書いてあるいろいろなものを指定できます。例えば、このalexa-skills-kitはどんなイベントが飛んでくるかぜんぜんわからないのですが、これをやるとJSONの形式で生成してくれるので、それをファイルに保存して、ここで使うことができます。
これはファンクションをそのまま実行するタイプなのですが、「sam local start-api」でポート番号とやると、httpサーバーをこのポート番号で立てて待ち受けられます。そこでデプロイする前にローカルでエンドポイントに対してポストしたり、テストをすることができます。
藤原:CDKの場合はどうだったかというと、まずbootstrapします。ここのlanguageはなんでも大丈夫です。buildすると、cdk synthをやったあたりでCloudFormationのテンプレートが出てくるので、ここでサブコマンドが登場します。このあたりで使うものだと思ってください。
一緒に使う時は「sam local invoke」、イベントを渡すのは一緒ですが、これがCDKだと(スライドを示して)このあたりにテンプレートが出てきます。それをFTで指定して、最後に実行したいファンクションを渡す感じになります。
同様に「local start-api」でまたテンプレートを渡すと、ここに含まれているファンクションを全部APIで待ち受けてくれます。
(スライドを示して)それで何ができるかというと、読み方にちょっと自信がないのですが、エングロックでしたっけ。例えば、slackから受けるWebhookのAPIを作ろうかなと思う時に、ローカルでテストできないとAPI GatewayとLambdaをデプロイして、そこにポストさせて動かしながら開発していたと思うのですが、1回デプロイするのに何十秒とかかかると、けっこう開発が大変でした。
それがどうなるかというと、エングロックにポストして、それをNATの下にあるお家のマシンで受けて実行できて、ログもその場でターミナルに表示される状態なので、すごく開発がしやすくなるかなと思っています。
藤原:(スライドを示して)最後に、SAMがすごくいいなと思っているのですが、CDKとどう使い分けたらいいんだろうというところを考えてみました。良くも悪くもSAMは単一のYAMLファイルです。なので、YAMLファイルでどのぐらいだったらAPIを書き連ねられるだろうと考えた時に、やはりLambdaの10個ぐらいが限度ではないかなと思います。ですから、ある程度大規模になってくるとCDKかなという気はしています。
あと、ポリシーテンプレートがあるので、本当にWebhookがいけるぐらいのAPIを1本2本作るとか、そういう小規模なものだとSAMでサクッと作るのは楽なのですが、お仕事でやるようなAPIを何10本作るのなら、やはりCDKなのではないかなと思っています。
CDKを使うのだけど、ローカル開発は先ほど紹介したようにsamコマンドは使えるので、ちょっと使ってみてください。というわけでCDKとSAMは、意外と仲良しですよという話でした。以上です。
吉田真吾氏(以下、吉田):ありがとうございました。
新井田晃史氏(以下、新井田):ありがとうございました。
藤井貴昭氏(以下、藤井):ありがとうございました。
吉田:新井田さん、質問は来ていますか。
新井田:質問は来ていなかったのですが、Twitterではけっこういろいろ盛り上がっています。僕自身はSAMのリソースとCDKをどう使い分けようかみたいなところがやはりちょっと気になっていたので、その話が聞けてすごくよかったなと思います。
けっこうサーバーレスフレームやSAMを使っているとそのあたりは迷うところだと思います。
★動画よりキャプチャ
藤原:そうですね。このあとのTerraformの話もすごく興味深いので、楽しみに聞きたいと思っています。
吉田:sam localは、CDKの間でSAMを使って生成をして、連携をして、かつ、ローカルでのテスト……先ほど言っていたのはLambdaの処理だけでしたが、それだけではなくてsam localを使えば、Lambdaのテストはsam localでできるんですね。ただそれだと……。
藤原:httpサーバーをかける。
吉田:httpのほうがそうですね。
藤原:うん。
吉田:それでもIAM権限がついているかどうかは見られないですよね。
藤原:そうですね。
吉田:他も完全にクラウド側でのインテグレーションテストするしかないなという感じですよね。なるほど。
藤原:そうですね。
吉田:そのあたりの用法と用量を考えるのが肝かなというところですかね。
藤原:はい。私はもともとPHPerなので、動かないとは言わないですが、基本的にLambdaにPHPはないじゃないですか。
吉田:そうですね。
藤原:なので、一番慣れている言語ではない、例えばTypeScriptやPythonでがんばっているのですが、シンタックスエラーになったりと、まだ慣れていなくてつらいなというところを、いかにデプロイ回数を減らして早く開発するかというのを考えていたら、あ、いいのがあるじゃんと気づいたので、紹介したいなと思いました。
★動画よりキャプチャ
吉田:ありがとうございました。藤井さん、いかがですか。
藤井:はい。私も興味があるところだったので、楽しく聞かせてもらいました。今サーバーレスの環境をどういうふうに作ろうかなと、ちょっと比較していて、私たちの中ではサーバーレスフレームワークを、使っていたりとかするのですが、使ってみないとやはりわからないところがけっこうあります。ああ、SAMはこんなことができるんだなというのが、すごく羨ましく見ていました。
私が見ている感じだと、ホットデプロイはたぶんサーバーレスフレームワークだとできないのではないのかなというので使えていません。なので、そこは大きな違いだなとしみじみ感じていますが、もう動きが始まってしまったので、このままがんばるしかないっていう。
一同:(笑)。
藤井:こういう情報はすごくありがたいです。時々変わっていたりしますし、ありがたく聞かせてもらいました。
藤原:SAMは、けっこうできる子なので、使ってみてください。
吉田:はい、ありがとうございました。
続きを読むには会員登録
(無料)が必要です。
会員登録していただくと、すべての記事が制限なく閲覧でき、
スピーカーフォローや記事のブックマークなど、便利な機能がご利用いただけます。
すでに会員の方はこちらからログイン
名刺アプリ「Eight」をご利用中の方は
こちらを読み込むだけで、すぐに記事が読めます!
スマホで読み込んで
ログインまたは登録作業をスキップ
関連タグ:
2025.09.08
部下が不幸になる上司のNG行動5選 マネジメントは「自律と統制」のバランスでうまくいく
2025.09.10
人生の差は20代で決まる “指示待ち人間”で終わらないために積むべき4つの経験
2025.09.16
日本人が英語学習で苦戦する根本的原因 「言いたいことの順番」が真逆になる英語と日本語
2025.09.10
「やりたいこと」はないが「課題解決」自体を楽しめる人 Googleの「優秀なエンジニア」の定義
2025.09.04
「管理職になりたくない問題」の原因は上司にもある 部下の昇進意欲を削ぐ行動
2025.09.16
“できる仕事のキャパが10倍になった” 東証上場社長を変えた習慣「ピッパの法則」の効果
2025.09.11
自分の得意・不得意がわかるワーク 人生を再設計する「ライフキャリア」の見つけ方
2025.09.17
英語ネイティブは「would」をどう使っているか? 「Do you like〜」と「Would you like〜」の違い
2025.09.12
“起業が向いている人”と”経営が向いている人”は違う DMM亀山会長が語る、新規事業の生み出し方
2025.09.09
“指示待ち社員”から「自分で考え、動く社員」に育てる方法 セルフリーダーシップの発揮に重要な3つのアプローチ
管理職は罰ゲームではなかった!マネジメントスキル、リーダーシップは財産に!
2025.07.31 - 2025.07.31
後回しを断ち切り“すぐやる人”になる最速メソッド|東証上場社長実践の後回し撲滅法
2025.06.24 - 2025.06.24
「因数分解! 売れない理由は、“売り方”じゃなく “見方”にある」 ~マーケティング×ビジネス数学で、売上を動かす本質をつかむ~
2025.08.06 - 2025.08.06
【板挟みに苦しむ管理職へ】忙しさから“本当に抜け出す”唯一の方法
2025.07.09 - 2025.07.09
「英語OS」を身につけよ! −思考プロセスをアップデートし、英語学習の遠回りを終わらせよう!
2025.07.05 - 2025.07.05