サーバーレスのローカル開発環境を整備する ~後編

2023-03-20
デベロッパーのためのクラウド活用方法

Author : 杉 達也

「サーバーレスのローカル開発環境を整備する」というテーマでの連載も今回で最終回となります。

ローカル環境に閉じた形での開発・デバッグを経て、開発フェーズの中盤以降では、実際にクラウドで他のサービスと連携した機能テストを行うことになります。本記事ではそのフェーズで役に立つ SAM の機能をご紹介します。

この連載記事のその他の記事はこちら

選択
  • 選択
  • サーバーレスのローカル開発環境を整備する ~前編
  • サーバーレスのローカル開発環境を整備する ~中編
  • サーバーレスのローカル開発環境を整備する ~後編

Step 4 - クラウドと連携した開発・テスト

コードや構成を一定レベルまで開発できたら、クラウドにデプロイして、ローカルの開発環境と連携しながら実行テスト、コード修正、修正の反映確認を行います。

この作業は繰り返し起こります。その都度、ビルドとデプロイを実施するのは時間がかかりますし、実行状況をログ等で確認するのも手間です。2022/06 に公開された SAM Accelerate がこれに対する機能を提供します。

クラウドの開発・テスト用アカウントへの最初のデプロイ

ターミナルから、対象プロジェクトの template.yaml があるディレクトリ (前述の例では sample-java または HelloWorldFunction) に移動します。このサーバーレスアプリケーションを示す名前 (スタック名) を指定して実行します。

sam sync --stack-name [Stack name]

この sam sync によるクラウドへのデプロイ機能は、AWS Toolkit の Visual Studio Code 版および IntelliJ IDEA 版では部分的に 実装 されています。しかし、以降で紹介している、繰り返しのデプロイ・テスト実行 (同期化のウォッチ) には対応していません (SpecIssue)。そのため、以降の作業へのつながりを考慮し、この先では、ツールの機能を使うのではなく、コマンド入力による手順を中心に紹介しています。

クラウドへの繰り返しのデプロイとテスト実行

「コード修正 → (クラウドへの) 変更の適用 → テスト実行 → (クラウドでの) 結果やログの確認 → 再度、コードを修正 → ・・・」という作業の繰り返しにおいて手間と時間の要因になる、“クラウドへの変更の変更” と “クラウドでの結果/ログの確認” の部分を自動化するプロセスを利用できます。

次の図のようなイメージになります。

ローカルマシン上のターミナルを個別に開き、次に示す 2 つのコマンドをそれぞれのターミナルから実行し、そのプロセスを起動状態のままにしておきます。これらが、ローカルの更新状況の監視とクラウドのログ状況の監視を行う機能として稼働します。

sam sync --stack-name [Stack name] --watch
sam logs --stack-name [Stack name] --include-traces --tail

これによって、ローカル環境とクラウドとの間を同期化させながら修正・テストをタイムリーに実施できます。この繰り返しの開発フローを図式化すると次のようになります。

クラウドの不要リソースの整理・削除

クラウド上の開発・テスト用アカウントでの一連の作業の後、テスト用に作成したリソースを最終的には削除したいと思うでしょう。一つ一つリソースを判断して削除するのは手間です。sam delete コマンドを使って、スタックとしてデプロイしたセットをひとまとめで削除できます。

sam delete --stack-name [Stack name] 

本ステップにおける一連の機能 (sam syncsam logssam delete) については こちらの記事 も参考にしてください。


Step5 - クラウドの AWS アカウントへのデプロイ

最終的に、クラウドの本番アカウントにアプリケーションをデプロイします。

SAM CLI コマンドでのデプロイ

開発・テスト用アカウントと本番アカウントで別の運用をされている場合、アプリケーションをデプロイする前に、ローカル環境から本番用 AWS アカウントへの接続設定を追加し、その接続に切り替えてデプロイするる必要があります。接続プロファイルの追加方法については、前述の記載 をご参照ください。

間違ったアカウント先への作業とならないように、開発環境から直接操作するのは開発・テスト用アカウントのみとし、本番用アカウントはターミナルからのコマンドにする (コマンドをスクリプト化しておく) というように使い分けの習慣づけをしておくのも一つの手法です。

ターミナルから、テスト対象としたいプロジェクトの template.yaml があるディレクトリ (前述の例では sample-java または HelloWorldFunction) に移動し、以下のコマンドを実行します。

sam build
...(中略)
sam deploy --guided --profile [prodAccountProfile]

あとは、対話的にスタック名、リージョンを指定すると、デプロイ処理が始まります。なお、継続的な開発やデプロイを行う際には、こうしたコマンドによるデプロイではなく、一連の作業を自動化する CI/CD パイプラインをご検討ください。特にチーム開発を行うケースでは強くお勧めします。こちらについては、この後の「さらなるステップ」のセクションで少し触れています。


まとめ

本シリーズを通して、サーバーレスアプリケーションの開発とデバッグをローカル開発環境で進める方法、およびクラウドと連携して完成度を高める手順についてご紹介しました。テストやチーム開発など、さらに充実したサーバーレスアプリ開発体制のためのトピックもあります。

次の「さらなるステップ」についても参照ください。


さらなるステップ

チーム開発の整備: CI/CD

テストについて考える

こちら をご参照ください。

この連載記事のその他の記事はこちら

選択
  • 選択
  • サーバーレスのローカル開発環境を整備する ~前編
  • サーバーレスのローカル開発環境を整備する ~中編
  • サーバーレスのローカル開発環境を整備する ~後編

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます


筆者プロフィール

杉 達也
アマゾン ウェブ サービス ジャパン合同会社
シニア サーバーレススペシャリスト 事業開発マネージャ

Serverless Specialist / BD として AWS Japan に勤務。
サーバーやインフラのことをあまり考えたくない、気にしたくないので、サーバーレスは魅力的です。サイジングやキャパシティプランニング作業からも開放されます。
早く、サーバーレスの世界を体験してもらいたい、そう思いつつ、日々その伝え方を考えています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する