AWS SAM で動作確認するときは sam sync が便利
はじめに
こんにちは、山本 翔大です。
前回のブログでは、AWS SAM の開発環境の構築方法について紹介しました。
しばらく同様の環境で実行していたのですが、コードのテストをするたびに sam build → sam deploy の手順を踏むのが面倒に思えてきました。
特に細かい変更が連続する場面では、毎回のデプロイに 30 秒から 60 秒ほどかかることもあり、かなりテンポが悪く感じます。
そこで今回は、sam sync について紹介したいと思います。
sam sync とは
公式ドキュメントには、以下のように書かれています。
sam sync コマンドは、ローカルアプリケーションの変更を AWS クラウドに同期します。
つまり sam sync は、ローカルで行った変更を AWS 環境へ反映するためのコマンドです。
コード修正のたびに sam build と sam deploy を毎回実行する代わりに、より素早く変更を反映しながら開発を進めたいときに便利です。
ただし、sam sync は sam deploy の置き換えというよりは、用途の異なるコマンドです。
実際に実行してみるとわかりますが、sam deploy は反映前に変更内容を確認しやすい形で進むのに対し、sam sync はより素早く変更が適用されます。
そのため、以下のように使い分けるとわかりやすいと思います。
- 開発中の簡単な動作確認:
sam sync - 最終的なデプロイ:
sam deploy
ちなみに、CDK を使用したことがある方は cdk watch をイメージしてもらうとわかりやすいと思います。
オプション
sam sync を使用すると、1 回だけ AWS 環境に同期を行います。
ただし、samconfig.toml にスタック名が設定されていない場合は --stack-name オプションの指定が必要です。
# samconfig.toml に設定済みの場合
sam sync
# samconfig.toml が未設定の場合
sam sync --stack-name <スタック名>
この場合は、アプリケーション全体を対象に、その時点のローカル変更を AWS に同期します。
sam sync はオプションなしだとアプリケーション全体を対象に同期しますが、--code オプションを付けることで、Lambda 関数や Layer などのコードリソースだけを対象に同期できます。
sam sync --code
コードだけを素早く反映したい場合には便利ですが、テンプレート変更や設定変更のような変更は対象外になる点には注意が必要です。
ファイル変更のたびに自動で同期したい場合は、--watch オプションを付けることで継続的に監視できます。
sam sync --watch
--watch を使うと、ローカルファイルの変更を監視し、保存後の差分を自動で AWS 環境へ同期してくれます。
そのため、開発中に何度もコード修正と確認を繰り返す場合は、こちらのほうが使いやすいです。
動作確認
実際に手元の環境で試してみました。
sam sync
まずは Lambda のタイムアウト時間を 30 秒から 60 秒に変更して sam sync を実行します。

すると少し時間をおいて Lambda の変更が反映されました。ターミナルを見ていると、sam deploy と違って、デプロイ前に変更内容を確認するような流れを挟まず、そのまま変更が適用されていることがわかります。

次に、コード内のコメント部分を変更してみます。
変更後に sam sync を実行すると、先ほどよりかなり早く Lambda に変更が適用されました。

sam sync --code
同様の検証を sam sync --code でも行ってみます。
Lambda のタイムアウト時間を 60 秒から 30 秒に戻して sam sync --code を実行すると、すぐに処理が終了しました。
ただし、Lambda のタイムアウト時間は変わっていませんでした。sam sync --code は Lambda のコードなど、コードリソースのみを同期するため、タイムアウト時間やスタック構成のような設定変更は同期対象になりません。

一方で、コード内のコメントだけを変更すると、すぐに変更が適用されました。
sam sync --watch
最後に sam sync --watch の動きを確認します。
sam sync --watch を実行すると、ターミナル上では変更待機状態になります。
この状態でコード内のコメントを変更すると、sam sync --code を実行したときと同様に、すぐに変更が反映されました。

次にタイムアウト時間を変更すると、こちらもすぐにターミナルが動き出し、少し待つと変更が反映されました。
なお、この変更待機状態は Ctrl + C で終了できます。

おわりに
以上で、動作確認は終了です。
sam sync は変更をすぐに適用できるため、開発中の動作確認にはとても便利だと感じました。(sam sync を知ったのは開発の終盤だったため、もっと早く知りたかったです。)
一方で、sam deploy と違って、変更内容を事前に確認しながら慎重に進める用途にはあまり向いていません。
そのため、最終的なデプロイには sam deploy を使い、sam sync は開発中のテストや確認用として使うのがよさそうです。
なお、sam sync は通常 1 回限りの同期ですが、samconfig.toml ファイルにある default.sync.parameters の watch を true に設定することで、sam sync 実行時の動作を --watch と同じ状態にすることも可能です。頻繁に利用する場合は、こちらも試してみてください。
参考資料
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました







