メインコンテンツに移動
デベロッパーのためのクラウド活用方法

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

2023-03-20 | Author : 杉 達也

はじめに

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

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

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


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。 

今すぐ登録 »

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

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

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

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

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

bash
sam sync --stack-name [Stack name]

デプロイ機能に関する補足

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

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

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

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

A diagram illustrating the workflow between a local development environment and AWS serverless cloud services. It shows how developers use their local environment and SAM Accelerate tools to sync code and view logs between local and AWS Lambda execution environments. The diagram contains Japanese labels detailing the development, syncing, testing, and log checking processes.

監視コマンド

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

ローカルの更新状況の監視とクラウドのログ状況の監視

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

bash
sam logs --stack-name [Stack name] --include-traces --tail

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

開発フローの図式化

これによって、ローカル環境とクラウドとの間を同期化させながら修正・テストをタイムリーに実施できます。この繰り返しの開発フローを図式化すると次のようになります。
A workflow diagram illustrating the local development process for AWS SAM serverless applications. It shows the steps: sam init, sam sync --watch, test, iterate, and sam logs --tail, connected in a feedback loop for local iteration and testing. Includes a mascot illustration.

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

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

bash
am delete --stack-name [Stack name] 

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

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

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

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

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

ビルドとデプロイのコマンド

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

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

デプロイ後の作業

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

まとめ

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

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

さらなるステップ

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

CI/CD が初めての方向け

CI/CD の一連の構成をウィザード形式で作成できる機能があります。 こちらの記事 をご参照ください。

CI/CD についてご存じの方向け

SAM Pipeline によって CI/CD パイプラインを構成できます。

テストについて考える

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

筆者プロフィール

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

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

A portrait of a man with short black hair, wearing round glasses and a dark jacket, standing outdoors with a blurred cityscape background.