ようこそ 第4日 の デジタルオーシャンの12日間 へ!昨日、私たちは誕生日リマインダーサービスにTwilio SMS通知を追加しました。これにより、今日の誕生日のためにテキストメッセージを送信できるようになりました。🎂
今日は、デジタルオーシャンファンクションズ にスクリプトをデプロイすることで次のステップに進みます。これにより、専用サーバーを必要とせずにサービスがクラウドで動作するようになり、アプリが軽量でスケーラブルになり、自動化の準備が整います。
この設定により、コンピューターがオフになっているか、インターネットに接続されていない場合でも誕生日リマインダーを受け取ることができます。もはやマシンでスクリプトを手動で実行する必要はありません。🎉
✨ なぜデジタルオーシャンファンクションズなのか?
時には、定期的に実行されるシンプルなスクリプトだけで十分なこともあります。そのためのインフラ管理は過剰になることがあります。そこで Functions が登場します。これはサーバーレスプラットフォームで、必要なときだけ実行されるコードをデプロイでき、使用した分だけ支払えば済みます。誕生日を確認し、毎日リマインダーを送るという私たちのユースケースに最適です。
🚀 学べること
今日の終わりまでに、以下のことができるようになります:
- DigitalOceanの
doctl
CLIツール を設定する。 - サーバーレス ネームスペース(DigitalOceanが関数を整理する方法)を作成し、接続する。
- あなたの誕生日リマインダーサービスを DigitalOcean Functions にパッケージしてデプロイする。
- クラウドでデプロイした関数をテストする。
🛠 必要なもの
開始する前に、次のものを準備してください:
- DigitalOceanアカウント。
- PostgreSQLデータベースの資格情報とTwilioの資格情報を含む
.env
ファイル
🧑🍳 4日目のレシピ: DigitalOcean Functionsへのデプロイ
ステップ1: doctl
CLIの設定
もしすでにあなたのマシンにdoctlを設定しているなら、このステップはスキップできます。設定が必要な方は、以下の手順に従ってください:
始める前に、doctl
について簡単に説明しましょう。これはDigitalOceanの公式コマンドラインインターフェースツールで、ターミナルから直接クラウドリソースを管理することができます。私たちはこれを使って、名前空間(サーバーレス関数用のフォルダー)を作成し、Pythonスクリプトをデプロイし、関数をテストします。
設定は簡単です:
-
doctl
をインストールします: お使いのオペレーティングシステムのためのインストールガイドに従ってください。 -
doctl
を認証します: 以下を実行してDigitalOceanアカウントに接続します: - インストールを確認します: 以下を実行してすべてが正常に動作しているか確認します:
成功した場合、このコマンドはあなたのDigitalOceanアカウントに関する詳細情報、例えばメールアドレスやアカウントIDを返します。
ステップ2: サーバーレスソフトウェアのインストール
DigitalOcean Functions はサーバーレスサポートソフトウェアを必要とし、これをインストールする必要があります。これは一度だけの設定ですので、インストールが完了すれば、今後のプロジェクトでは再度行う必要はありません。
以下のコマンドを実行してください:
インストール状況を確認するには:
以下のようなエラーが表示された場合:
心配しないでください—それはまだネームスペースを作成または接続していないだけです。それは次のステップで対処します。
ステップ3: ネームスペースの作成と接続
ネームスペースは、サーバーレス関数を整理するためのフォルダーのようなものです。私たちの誕生日リマインダーサービスのために、1つ作成しましょう:
-
新しいネームスペースを作成:
-
ネームスペースに接続:
-
接続を確認:
ネームスペースに接続されていることを確認するメッセージが表示されるはずです。
プロのヒント: 利用可能なすべての名前空間のリストを表示するには、次のコマンドを使用します:
これは、複数のプロジェクトを管理している場合や、作成したばかりの名前空間を確認したい場合に便利です。
ステップ4:プロジェクト構造の初期化と設定
DigitalOcean Functionsは、サーバーレスデプロイメントのために特定のプロジェクト構造を期待しています。この構造はdoctl serverless init
を使って開始するか、手動で作成するか、またはスターターレポをクローンすることができます。シンプルに保つために、doctl serverless init
を使用して設定します:
-
プロジェクトを初期化するには、次のコマンドを実行してください:
これにより、次のデフォルト構造を持つ
my-birthday-reminder-service
という名前のローカルプロジェクトディレクトリが作成されます: -
プロジェクトディレクトリに移動します:
-
フォルダの名前をユースケースに合わせて変更します:
-
必要なファイルを作成する:
- プロジェクトのルートに空の.envファイルを作成します:
このファイルには、データベースとTwilioの認証情報が含まれます。このファイルは
my-birthday-reminder-service
フォルダのルートに配置されます。requirements.txt
ファイルをbirthdays
フォルダに作成します:
このファイルには、関数に必要なPythonの依存関係がリストされます。
packages/reminders/birthdays
の下に配置されます。build.sh
ファイルをbirthdaysフォルダに作成します:
build.sh
スクリプトは、外部依存関係を持つ関数をデプロイするために必要です。chmod
コマンドは、スクリプトがMac/Linuxシステムで実行可能であることを確認します。
更新された構造:これらの手順を完了した後、プロジェクトの構造は次のようになります:
プロのヒント:フォルダーの名前を誤って付けた場合は、再度コマンドを実行するか、ファイルエクスプローラーで手動で名前を変更できます。
ステップ 5: ファイルを更新する
構造が整ったので、必要なファイルで埋めていきましょう。お気に入りのコードエディタで my-birthday-reminder-service ディレクトリを開きます。
1. project.yml
を更新する
project.yml
ファイルは、サーバーレスプロジェクトの構造、環境変数、および関数を定義する設定ファイルです。内容を以下に置き換えてください:
このファイルはリマインダー用パッケージを設定し、環境変数をDigitalOcean Functionsにマッピングします。各変数は、データベースとTwilio統合に必要な認証情報に対応します。
2. .envファイルを更新する
1日目:誕生日リマインダーのためのPostgreSQLデータベースの設定を参照してデータベースの認証情報を取得し、3日目:誕生日の確認とSMS通知の送信を参照してTwilioの認証情報を取得し、以下の値を入力してください:
注意: .env
ファイルは、機密情報を安全に保存するために使用されます。これらの値は、project.yml
ファイルによって読み込まれ、デプロイメント中にサーバーレス環境にマッピングされ、クラウド内の関数でアクセス可能になります。
3. 依存関係を追加
次の依存関係を requirements.txt
ファイルに更新してください:
pg8000
: ピュアPythonのPostgreSQLクライアントライブラリ。
python-dotenv
: .env
ファイルから環境変数を読み込むために使用されます。
twilio
: SMSメッセージを送信するためのTwilioのPythonライブラリ。
4. build.sh
build.sh
ファイルに次のスクリプトを追加してください:
このスクリプトは、すべての依存関係が関数と一緒に正しくパッケージ化されることを保証します。ステップ4の chmod +x
コマンドは、実行可能であることを確認します。
5. __main__.py
を更新
これは、あなたの誕生日リマインダーサービスの主要なスクリプトです。基本的に、誕生日通知を送信するためにDay 3で構築したスクリプトを使用しています。しかし、DigitalOcean Functionsと互換性を持たせるために、いくつかの小さな調整が必要です。
次の内容で __main__.py
ファイルを更新してください:
変更点は以下の通りです:
-
追加された
main(params)
関数: DigitalOcean Functions では、params
引数を受け取るmain
という名前のエントリポイント関数を期待しています。ここが関数の実行が開始される場所です。 -
スクリプトのロジックを
main
関数内に移動:
Day 3 のコードは、この要件に合わせてmain
関数内にラップされました。 -
その他はすべて同じです:
データベース接続ロジック、誕生日チェック、SMS通知ロジックは変更されていません。
ステップ5:パッケージ化とデプロイ
すべてが整ったので、プロジェクトをDigitalOcean Functionsにデプロイします:
- プロジェクトをデプロイする:
関数がネームスペースに正常にデプロイされたことを確認するには:
- DigitalOceanコントロールパネルにアクセスし、左側のバーからFunctionsに移動します。
- ネームスペースを見つけます(例:my-birthday-reminder-namespace)。
- 関数がネームスペースの下に表示されていることを確認します。通常は
reminders/birthdays
としてリストされています。 - 関数名をクリックして、ログ、設定、呼び出し履歴などの詳細を表示します。
ステップ6:デプロイした関数をテストする
関数がデプロイされたら、テストする時です。関数を手動で呼び出して、期待通りに動作することを確認できます。これを行う方法は2つあります:
オプション 1: DigitalOcean CLIを使用
すべてが正しく設定されていれば、あなたの関数はクラウドで実行され、今日の誕生日を確認してSMS通知を送信します。
オプション 2: DigitalOceanダッシュボードを使用
- DigitalOceanコントロールパネルに移動します。
- Functionsに移動し、リマインダー/誕生日関数を見つけます。
- 手動で実行するにはRunをクリックします。
- 出力とログをコンソールで直接表示します。
この方法は、視覚的なインターフェースを好む場合や、クリーンで読みやすい形式でログを確認したい場合に特に役立ちます。
テストのヒント
関数を呼び出すと、今日の日付に一致する誕生日をチェックします。一致するものがあれば、詳細を含むテキストメッセージが届きます。関数を効果的にテストするには:
- 現在の日付に一致する誕生日をデータベースに1つ以上追加してください。
- コンソールまたはCLIログを確認して、関数が正常に実行されたことを確認してください。
🎁 まとめ
今日達成したことは次のとおりです:
✅ doctl
を設定し、プロジェクトのための名前空間を作成しました。
✅ デプロイのためにPythonスクリプトをリファクタリングしました。
✅ 誕生日リマインダーサービスをDigitalOcean Functionsにパッケージ化してデプロイしました。
✅ CLIとDigitalOceanダッシュボードを使用して、クラウドで関数をテストしました。
次のステップ:これは大きな前進ですが、まだ関数を手動で実行しています。次の投稿では、誕生日リマインダーサービスが特定の時間に自動的に毎日実行されるようにこのプロセスを自動化します。指一本動かさずにテキストリマインダーで目覚めることを想像してみてください—それを明日実現しましょう!🚀