AWS Lambdaは、Amazon Web Services(AWS)のサービスで、サーバーを管理せずにイベントに応じてコードを実行できるようにするものです。これは、アプリケーションを構築するためのシンプルでスケーラブルな方法です。

このチュートリアルでは、AWS Lambdaを他の3つのサービスと一緒に使用する方法を紹介します:

  • ファイル、画像、ビデオの保存にAmazon S3

  • 通知の送信にAmazon Simple Notification Service(SNS)

  • メッセージのスケジュール設定にAmazon EventBridge

すべての手順を一つずつ説明します。

最終的に、他のサービスを統合することで、目標達成引用アプリを構築し、ランダムなインスピレーションメッセージを送信して、モチベーションを保ち、目標に集中できるようになります。

前提条件

  • AWSアカウント:お持ちでない場合は、こちらからサインアップしてください。

  • GitHubリポジトリ:ソースコードの保存に使用します。GitHubアカウントをお持ちでない場合は、こちらで作成できます。

  • Visual Studio Code

    Sublime Textなどの統合開発環境(IDE)。

  • Web開発の基本知識と任意のプログラミング言語。このチュートリアルではPythonを使用しました。

  • Zenquote Random API

学習内容

  • Amazon S3バケットの作成方法

  • Amazon Simple Notification Service(SNS)の使用方法

  • Amazon Lambdaの使用方法

  • Amazon EventBridgeの使用方法

目次

  1. ステップ1: 開発環境のセットアップ

  2. ステップ2: Amazon Simple Storage Service (S3) の作成

  3. ステップ3: Amazon Simple Notification Service (SNS) の作成

  4. ステップ4: IAM ポリシーの作成

  5. ステップ5: Amazon Lambda 関数の作成

  6. ステップ6:EventBridgeを作成する

  7. ステップ7:コードをアップロードする

  8. 結論

ステップ1:開発環境をセットアップする

このステップでは、すべてをセットアップします。まず、AWSアカウントにサインインしてから、IDEにPythonがインストールされていない場合はインストールします。

ステップ2:Amazon Simple Storage Service(S3)を作成する

では、S3バケットの作成を開始する前に、まずAmazon S3とは何かを理解しましょう:

Amazon S3(Simple Storage Service)は、Amazonから提供されるサービスで、写真、ビデオ、ドキュメント、バックアップなど、必要なときに任意のデータの量や種類を保存およびアクセスできます。

Amazon S3の基本を理解したので、チュートリアルに戻りましょう。

S3バケットを作成

S3バケットを作成する方法はいくつかありますが、このチュートリアルでは、最も使い慣れた方法に応じて、Ubuntuコマンドライン(CMD)、ターミナル、またはAmazon CloudShellを使用します。

  • 関連するドキュメントのリストを表示するには、Web検索バーにboto3 s3と入力します。

  • 最初の結果をクリックします。

  • ドキュメントが開いたら、最初に見つかったコマンドをコピーします。

  • 選択したCMDまたはお好みのターミナルに貼り付ける前に、適切なディレクトリに”cd“することを忘れないでください。

  • ドキュメントをスクロールして、「create_bucket」をクリックします。

  • 開いたら、「Request Syntax」までスクロールして、バケット名バケット構成をコピーします。

  • リクエスト構文にリストされているその他の変数はオプションです。

  • これが完了したら、保存することを確認してください。

  • 戻り、スクリプトを呼び出します:
#python3 ファイル名
  • スクリプトを実行すると、Amazon S3にS3バケットが自動的に作成されます。

  • これで作成されたかどうかを確認するために、コンソールに移動できます。

ファイルをアップロード

バケットが作成されたので、コンソールを介してファイルをアップロードできるようになりました。プログラムを使ってファイルをアップロードしてテストする方法もあると思いますが、まだすべての方法をドキュメントで調査していません。

バケット名をクリックしてオブジェクトページにリダイレクトされます。ここでファイルをアップロードして保存します。

アップロードボタンをクリックしてファイルをアップロードします。ゴールマニフェステーション引用アプリケーションを作成していることを覚えておいてください。

ストレージバケットを設定したので、

  • Googleドライブ、MS Word、WPSなどのツールを開きます。

  • 達成したい目標を書き留めます。

  • ファイルをPDFまたはDOCX形式で保存します。

  • 文書を取ってAmazon S3にアップロードします。

正しいファイルかどうかを確認するには:

  • 「アクセス許可」タブに移動します。

  • 「パブリックアクセスのブロック」までスクロールします。

  • 編集をクリックして、チェックボックスを外します。

上記のように、現在は「オン」に設定されています。オフにするにはチェックを外してください。

  • 同じバケット設定ページでポリシーを変更します。

  • 下にスクロールすると、バケットポリシーが自動生成されていることがわかります。

  • ポリシーをコピーしてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
  • バケットポリシーエディタに戻り、ポリシーを貼り付けます。

これらの手順を完了すると、オブジェクトにはパブリックアクセスが許可されます。

オブジェクトタブに戻り、以下に提供されたオブジェクトURLをクリックしてください。

このURLを使用すると、アップロードが表示されます。

ステップ3: Amazon Simple Notification Service (SNS) を作成する

SNS は、AWSが提供する完全管理型のメッセージングサービスです。通知を送信することで、アプリケーション間またはユーザーと直接通信することができます。

SNSを作成するには、以下の手順に従ってください:

1. AWS管理コンソールにログインします

Amazon SNSに移動します。SNSダッシュボードに移動し、左側のメニューから トピック を選択します。

トピックを作成するには:

  • トピックの作成をクリックします。

  • トピックタイプを選択します: 標準(デフォルト)または FIFO (順序付きメッセージ用)。

  • トピックの名前を入力してください。(例:MyFirstSNSTopic)。

  • 暗号化、配信リトライポリシー、またはタグなどのオプション設定を構成します。

  • トピックを作成をクリックします。

2. サブスクリプションを追加:

トピックが作成されたら、詳細ページを開くためにそれをクリックします。そして、サブスクリプションタブを選択します。

サブスクリプションを作成をクリックし、以下を選択します:

  • プロトコルはメール、SMS、HTTP/S、Lambda、またはSQSが可能です。

  • エンドポイントはメールアドレス、電話番号、またはURLなどが可能です。

サブスクリプションを作成をクリックします。

3. サブスクリプションを確認:

メールまたはSMSを選択した場合、確認リンクまたはコードが指定されたエンドポイントに送信されます。サブスクリプションを確認するために、指示に従ってください。

これで完了したので、Amazon Lambda関数を作成しましょう。これにより、SNSがトリガーされ、メッセージがメールに送信されます。

ステップ4: IAMポリシーを作成する

このポリシーは、Amazon Lambdaがイベントをトリガーし、CloudWatchがアプリケーションのイベントを自動的に監視することを認可するために作成されます。

ポリシーを作成するには、次の手順に従ってください:

1. AWS Management コンソールにログインします。

左側のメニューからポリシーを選択します。その後:

  • ポリシーの作成をクリックします。

  • ビジュアルタブを選択し、SNSサービスを選択します。

  • 次に、選択タブをクリックしてカスタムポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:REGION:ACCOUNT_ID:goal_topic"
        }
    ]
}

次に、次のプレースホルダーを自分の情報で置き換えてください:

  • region: AWSのリージョン(例:us-east-1)。

  • account-id: AWSのアカウントID。

  • topic-name: あなたのSNSトピック名。

2. ポリシーを表示および作成する:

これを行うには、次の手順に従います:

  • レビューボタンをクリックします。

  • ポリシーに名前(例:LambdaSNSPolicy)を付け、オプションで説明を入力します。

  • ポリシーの作成をクリックします。

3. Lambda実行ロールにポリシーをアタッチ

次に、ポリシーをLambda実行ロールにアタッチする必要があります。これを行うには、次の手順に従います:

  • IAMコンソールのロールセクションに移動します。

  • 実行ロールを検索して選択します。

  • 次に、作成したポリシーを検索して選択します。

  • ポリシーをアタッチをクリックします。

両方のポリシーが自動的にアタッチされます。

ステップ5: Amazon Lambda関数を作成

Amazon Lambdaは、サーバーを管理せずにコードを実行できるAWSのサービスです。コードをアップロードすると、Lambdaは必要に応じて自動的に実行およびスケーリングします。

Amazon Lambda関数を作成する手順は次のとおりです:

1. AWS Management Consoleにログイン:

AWS Lambdaに移動します。

2. 関数を作成:

関数の作成をクリックし、スクラッチから作成オプションを選択します。

詳細を入力してください:

  • 関数名: ユニークな名前を入力します(例: SNSLambdaFunction)。

  • ランタイム: ランタイムを選択します(例: Python、Node.js、Javaなど)。

  • ロール: ロールを選択または作成します。既存のロールがある場合は、既存のロールを使用を選択します。それ以外の場合は、基本的なLambda権限を持つ新しいロールを作成を選択します。

  • 関数の作成ボタンをクリックします。

3. コードを貼り付け:

Lambda関数のページで、構成タブに移動します:

ここで、私たちは引用を取得しようとしています。作成したトピックのARNを追加し、APIキーを含めます。しかし、このチュートリアルでは、データを直接取得するためにAPIを使用します。

4. ラムダコードを書く:

ラムダ関数のコードタブに移動します。次に、IDEから入力されたSNSメッセージを処理するためのコードを書き込むか貼り付けます。

例:

以下がコードです:

import os
import json
import urllib.request
import boto3

def fetch_random_quote():
    """
    Fetches a random quote from the ZenQuotes API.
    """
    api_url = "https://zenquotes.io/api/random"
    try:
        with urllib.request.urlopen(api_url) as response:
            data = json.loads(response.read().decode())
            if data and isinstance(data, list):
                # 引用と著者のフォーマット
                quote = data[0].get("q", "No quote available")
                author = data[0].get("a", "Unknown author")
                return f'"{quote}" - {author}'
            else:
                return "No quote available."
    except Exception as e:
        print(f"Error fetching random quote: {e}")
        return "Failed to fetch quote."

def lambda_handler(event, context):
    """
    AWS Lambda handler function to fetch a random quote and publish it to an SNS topic.
    """
    # 環境変数からSNSトピックARNを取得
    sns_topic_arn = os.getenv("SNS_TOPIC_ARN")
    sns_client = boto3.client("sns")

    # ランダムな引用を取得
    quote = fetch_random_quote()
    print(f"Fetched Quote: {quote}")

    # 引用をSNSに公開
    try:
        sns_client.publish(
            TopicArn=sns_topic_arn,
            Message=quote,
            Subject="Daily Random Quote to help you stay motivated and inspired to achieve your goals",
        )
        print("Quote published to SNS successfully.")
    except Exception as e:
        print(f"Error publishing to SNS: {e}")
        return {"statusCode": 500, "body": "Error publishing to SNS"}

    return {"statusCode": 200, "body": "Quote sent to SNS"}

5. 保存:

保存するためにデプロイボタンをクリックします。

6. ラムダ関数をテスト:

テストタブに移動し、新しいテストイベントを作成します。

その後、テストを保存して実行します。成功した場合、メッセージが送信されます:

これは、メッセージが作成されたことを意味します。

最後に、このチュートリアルで使用したエンドポイントに応じて、メールまたはSMSを確認します。私の場合、メールを使用しました。

ステップ6: EventBridgeを作成

Amazon EventBridgeは、Amazon SNSやAmazon LambdaなどのアプリケーションとAWSサービスを接続するのに役立つサービスです。

Amazon EventBridgeルールを作成するには、以下の手順に従います:

1. EventBridgeに移動:

検索バーにEventBridgeと入力し、サービスリストから選択します。

2. ルールを作成:

EventBridgeコンソールで、左パネルのRulesをクリックします。その後、ルールの作成ボタンをクリックします。

3. ルールの詳細設定:

  • 名前: ルールに一意の名前を入力します。

  • 説明(オプション): このルールの目的を説明する説明を追加します。

4. イベントバスの選択:

デフォルトのイベントバス(または作成した別のイベントバス)を選択します。

5. イベントパターンまたはスケジュールの定義:

イベントパターンの場合:

  • イベントソースとしてAWSサービスを選択します。

  • 特定のイベントタイプ(たとえば、S3ファイルのアップロードまたはEC2インスタンスの状態変更など)を選択します。

スケジュールの場合:

  • ルールを一定の間隔(たとえば、5分ごと)で実行するためにスケジュールオプションを選択します。

  • 続行をクリックします。これにより、特定の詳細ページに移動します。ここで:

  • 下にスクロールしてcronスケジューラをクリックします。cronスケジューラはメッセージの送信時刻を指定します。

  • 柔軟な時間枠オプションには「オフ」を選択してください。

  • ルールの詳細を確認してください。

  • 「次へ」ボタンをクリックして「ターゲット」ページに進んでください。

    上記の画像はメッセージが送信される時間を示しています。

    • ターゲットページで、関数を起動するためにAWS Lambdaを選択してください。

  • スクロールして関数を選択して起動してください。

  • 「次へ」ボタンをクリックして進んでください。これにより設定ページに移動します。権限セクションで、「既存のルールを使用」を選択してください。

  • 最後に、確認してスケジュールを作成してください:

  • 次のページにはすべての詳細が表示されます:

EventBrige を使用してユーザーのためにスケジューラーを作成します。

ステップ 7: コードをアップロード

最後に、コードをGitHubにアップロードし、コードの動作を説明するための適切なドキュメントを含めてください。

わからない場合は、このドキュメントをチェックしてください:プロジェクトをGitHubにアップロードする

結論

これらの手順に従った場合、AWS Lambda、Amazon S3、Amazon SNS、およびAmazon EventBridgeを使用してゴールマニフェステーション引用アプリを作成することができます。このアプリはモチベーション引用を取得し、定期的に登録者に送信します。

リポジトリのリンクはこちらから見つけることができます。

進捗状況を共有したり、問題があれば質問したりしてください。

この記事が役に立った場合は、他の人と共有してください。

私のプロジェクトの最新情報は、TwitterLinkedIn、およびGitHubでフォローしてください。

読んでいただきありがとうございます 💖。

免責事項:
本文中に表示されているリソース(S3バケットおよびそのARNなど)は削除され、存在しません。スクリーンショットに表示されている詳細は、デモンストレーション目的でのみ使用されています。