1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

無料+(ほぼ)ノーコードできるAWSを使った自動化体験

1
Last updated at Posted at 2025-10-12

対象者

AWS初学者

目的

AWSの概要をつかみ、複数のサービスを連携させて自動化をすることで理解を深める

AWSの概要と利点

AWSとは

AWS(Amazon Web Services)は、Amazonが提供するクラウドコンピューティングサービスのプラットフォームです。企業や個人がインターネットを通じて、さまざまなコンピューティングリソースを利用できるようにするサービスです。

AWSを利用するメリット

  • 迅速な導入: インフラの導入にかかる時間を大幅に短縮でき、数分でサービスを立ち上げることができます。
  • 柔軟性: 各種サービスを組み合わせて、ニーズに応じたカスタムソリューションを構築できます。
  • 自動化: AWSでは、インフラの自動化や管理タスクの簡素化が可能です。これにより、運用効率を向上させることができます。
  • スケーラブルなインフラ: ビジネスの成長に合わせてリソースを拡張し、効率的に運用できます。

まとめると、さまざまなリソースを部品のように組み合わせて、柔軟かつ効率的にシステムを構築でき、使った分だけ課金されるため、無駄なコストがかからない

AWSの無料枠について

AWSは、新規ユーザーに対して「無料利用枠」を提供しており、これを利用することで、初期費用をかけずにAWSのさまざまなサービスを試すことができます。無料枠には、以下のような特徴と内容があります。

特徴

  • 12ヶ月間無料枠: アカウント作成から12ヶ月間、特定のサービスを無料で利用できる枠が提供されます。
  • 常時無料枠: 一部のサービスは、12ヶ月を過ぎても継続的に無料で利用できる枠があります。

無料枠の利用にあたっての注意点

  • リソースの制限: 無料枠には、リソースの使用量や時間に制限があります。制限を超えると、通常の料金が発生しますので、使用量を管理することが重要です。
  • 無料枠の適用期間: 12ヶ月の無料枠は、アカウント作成からの期間で計算されます。12ヶ月を超えると、無料枠が終了し、通常料金が適用されます。

Tips
下記記事を参考にAWS Budgetsを設定しておけば、予算を超えた時に通知をしてくれるので、便利です。
https://qiita.com/moritalous/items/92a30b9cb72d30478fe6

自動化体験準備

アカウント作成

アカウント未作成の方はまずこちらに従って作成してください
https://aws.amazon.com/jp/register-flow/

自動化体験:AWSを使ったリマインダーシステムの構築

自動化概要

タスクをDBに入力すると、設定した時間にリマインダーとしてメールをしてくれる

処理フロー

  1. 開始
  2. EventBridge
  3. Lambda関数 (DynamoDBからデータ取得)
  4. DynamoDB
  5. Lambda関数 (SNSで通知)
  6. SNS
  7. 終了

サービスの概要

1. Amazon DynamoDB (NoSQLデータベース):

サービス概要 高速で柔軟なNoSQLデータベースサービス。構造化データを保存するために使用され、スケーラブルで高可用性を提供します。今回のリマインダーシステムでは、ユーザーが設定したリマインダー情報(メッセージ、スケジュール時間など)を保存するために使用します。
  • 今回使う属性:
    • ReminderID: リマインダーの一意の識別子
    • Event: リマインダーの内容やイベント名
    • Time: リマインダーがトリガーされる予定の時間
  • 無料枠:
    • 25GBの標準ストレージ(常時無料枠)。
    • 25読み取り/書き込みリクエスト単位/秒(12ヶ月間無料枠)。

2. Amazon SNS(Simple Notification Service) (通知サービス):

サービス概要 メッセージングサービスで、特定のイベントが発生したときにメールやSMSで通知を送信します。リマインダーシステムでは、設定された時間に基づいてリマインダーを送信するために使用されます。SNSは信頼性が高く、迅速に多くの受信者にメッセージを配信できます。
  • 無料枠:
    • 月間1,000,000件のプッシュ通知が無料(12ヶ月間無料枠)。

3. AWS Lambda (ラムダ関数):

サービス概要 サーバーレスコンピューティングサービス。つまり、サーバーを管理する必要がなく、コードをアップロードするだけで自動的に実行されます。このシステムでは、DynamoDBからリマインダーのデータを取得し、SNSを使って通知を送信する処理を行います。Lambdaはリクエストがあるときだけ実行されるため、効率的でコストも抑えられます。
  • 無料枠:
    • 月間1,000,000リクエストまで無料(常時無料枠)。

4. Amazon EventBridge (スケジュール管理):

サービス概要 イベント駆動型のサービス。定期的に特定のアクションを実行したり、イベントが発生したときに処理をトリガーしたりします。このリマインダーシステムでは、定期的にLambda関数をトリガーし、リマインダーのチェックと通知の送信を行います。EventBridgeを使用することで、バッチのように時間に応じた自動処理を簡単に設定できます。
  • 無料枠:
    • 無料でスケジュールされたイベントを作成可能(常時無料枠)。

手順

Tips
AWSは様々なリージョン(地域)でリソースを作成できます。
別のリージョンで作成したリソースは表示されないため、どこのリージョンで作成したかを認識しておく必要があります。
スクリーンショット 2024-09-02 23.22.25.png

1. DynamoDBテーブルの作成

  • 操作:
    1. AWSコンソールで「DynamoDB」を選択
      image.png
    2. 「テーブルの作成」をクリック
      スクリーンショット 2024-09-03 0.01.11.png
    3. 「テーブル名」にRemindersを入力
    4. 「パーティションキー」にReminderID 数値を指定
      スクリーンショット 2024-09-03 0.03.48.png
    5. ページ下の「テーブルの作成」クリック
      image.png
    6. テーブルが作成されている
      スクリーンショット 2024-09-03 0.18.27.png

Tips
DynamoDBはNoSQLデータベースなので決まったスキーマ(構造)がない

2. SNSトピックの作成

  • 操作:
    1. AWSコンソールで「SNS」を選択
      スクリーンショット 2024-09-03 0.19.16.png
    2. 左のハンバーガーメニューより「トピック」をクリック
      image.png
    3. 「トピックの作成」クリック
      image.png
    4. 「タイプ」をスタンダード・「名前」をReminderNotificationsにして、ページ下の「トピックの作成」クリック
      image.png
    5. トピックが作成されたら「サブスクリプションの作成」クリック
      image.png
    6. 「プロトコル」をEメール・「エンドポイント」を通知させたいメールアドレス(※社用のメールアドレスは使わない)入力し、ページ下の「サブスクリプションの作成」クリック
      ※後程使うので「トピック ARN」を控えておく
      image.png
    7. 入力したアドレスにAWSから確認メールが来ているので「Confirm subscription」を押し確認する
    8. ステータスが確認済みになっていることを確認
      image.png

Tips
SNSでは、トピックに対して、サブスクライブ(このトピックから送られてくるメッセージを受け取りたい)登録することで通知します。

3. Lambda関数の作成

  • 操作:
    1. AWSコンソールで「Lambda」を選択
      image.png
    2. ハンバーガーメニューより「関数」をクリックし「関数の作成」をクリック
      image.png
    3. 「一から作成」を選択し、「関数名」をSendReminder・「ランタイム」をPythonに設定し、ページ下の「関数の作成」クリック
      image.png
    4. 作成されたことを確認
      image.png
    5. 「コード」を選択し、「コードソース」の「lambda_function」の既存コードを消し、以下のPythonコードを貼り付ける
      image.png
import boto3

dynamodb = boto3.resource('dynamodb')
sns = boto3.client('sns')

def lambda_handler(event, context):
    table = dynamodb.Table('Reminders')   
    response = table.scan()
    reminders = response['Items']
    
    for reminder in reminders:
        sns.publish(
            # 作成したTopicのARNを入力する
            TopicArn='',
            Message=f"イベント: {reminder['Event']}, 時間: {reminder['Time']}"
        )

TopicArn=''は控えておいた「トピック ARN」を設定

# 例
TopicArn='arn:aws:sns:ap-northeast-1:1111111111:ReminderNotifications'

  6. 「Deploy」クリック
image.png

Tips
・「Deploy」の左の「Test」ボタンで、テストイベントを作成でき、関数のテストを行うことができます。
・LambdaはJavaやNode.jsなどもサポートしています

EventBridgeのスケジュール設定

  • 操作:
    1. AWSコンソールで「EventBridge」を選択
      image.png

    2. ハンバーガーメニューより「スケジュール」を選択し、「スケジュールを作成」をクリック
      image.png

    3. ルール名をScheduleTimeで入力
      「定期的なスケジュール」・「cronベースのスケジュール」を選択し、cron式を記入
      「フレックスタイムウィンドウ」をオフに設定し、ページ下の「次へ」クリック
      例:
      (0 9 * * ? *) 毎日9:00AMに起動する設定
      (0 */1 * * ? *) 1時間毎に起動
      image.png

    4. 「ターゲットAPI」を「AWS Lambda」に設定
      image.png

    5. 「Invoke」で先ほど作成した「SendReminder」関数を選択し、ページ下の「次へ」クリック
      image.png

    6. 次のページでは何もいじらず「次へ」クリックし、次のページもいじらず「スケジュールの作成」クリック

    7. スケジュールの作成を確認
      image.png

Tips
EventBridgeはスケジュール以外に、AWSサービスからのイベントをトリガーにできます
例: AWS Lambdaで関数のデプロイが成功したとき。

IAMでの権限管理

ここまででサービスの連携が完了しましたが、権限の設定がまだです。
AWSではIAMというサービスで権限を管理することが多いです。

ユーザーとロール

IAMではIAMユーザーIAMロールにポリシーという権限を付与することで認証をしています。
少し難しい概念ですので、一旦下記で認識していただければ良いです。

IAMユーザー

主にユーザーに権限を付与する。

概要 主にAWSにアクセスする「人」や「アプリケーション」のために作成されます。それぞれが自分専用の認証情報を持ち、特定のAWSリソースに対してアクセス権限を持っています。
  • 具体例: 「Aさん」がAWSの管理コンソールにログインして、EC2インスタンスを操作する場合、AさんのためにIAMユーザーを作成します。AさんのIAMユーザーには、EC2インスタンスを起動・停止するための権限が付与されます。Aさんは、このIAMユーザーを使って、AWS管理コンソールやCLIからEC2インスタンスにアクセスし、必要な操作を行います。

IAMロール

主にリソース自体に権限を付与する。

概要 AWSリソースが他のリソースにアクセスするために使用されます。ロールを使用することで、特定の状況で一時的に必要な権限を取得できるため、より柔軟でセキュアなアクセス管理が可能になります。
  • 具体例: ある「Lambda関数」がDynamoDBテーブルにデータを読み書きする場合、Lambda関数にはDynamoDBにアクセスするための権限が必要です。このためにIAMロールを作成し、そのロールに「DynamoDBへの読み書き権限」を付与します。Lambda関数は実行時にこのロールを引き受け、一時的にDynamoDBにアクセスできるようになります。

今回は、Lambda関数に、DynamoDBを読み取る権限とSNSにアクセスする権限をつけたいので、IAMロールを使用します。

1. ロール作成

  • 操作:
    1. AWSコンソールで「IAM」を選択
      image.png
    2. 左側のハンバーガーメニューから「ロール」を選択し、「ロールを作成」をクリック
      image.png
    3. 「信頼されたエンティティタイプ」をAWSのサービス・ユースケースを「Lambda」に選択し、「次へ」クリック
      image.png
    4. 「検索」にsnsと入力し、候補の中からAmazonSNSFullAccessをチェック
      image.png
      5.AmazonSNSFullAccessをチェックしたまま、「検索」にDynamoDBと検索し、候補の中から、AmazonDynamoDBFullAccessをチェックし、「次へ」をクリック
      image.png
    5. 「ロール名」をreminderなどわかりやすい名前にし、「ロールを作成」をクリック
      image.png
    6. ロールが作成されたことを確認
      image.png

2. Lambda関数にロールをアタッチ

  • 操作:
    1. AWSコンソールで「Lambda」を選択し、メニューから「関数」を選択。
    作成したSendReminderを選択
    image.png
    2. 「設定」タブを選択し「一般設定」の中の「編集」をクリック
    image.png
    3. ページ下の「既存のロール」から先ほど作成した「reminder」ロールを選択し、「保存」をクリック
    image.png

これで権限の設定は完了です。

Tips
今回はFullAccessポリシーを付与しましたが、これは推奨されません。
最小の権限を付与することが、AWSのベストプラクティスとなってます。

体験

前準備

設定は整ったので、Dynamo DBにタスクを入れて、メールを受信することを確認しましょう

操作:
1. AWSコンソールで「DynamoDB」を選択
image.png
2. 「テーブル」より作成した「Reminders」テーブルを選択
image.png
3. 「アクション」より「項目を作成」を選択
image.png
4. 「新しい属性の追加」より「文字列」を選択し、「属性名」にEvent・「値」に任意の予定を入れる
同様ににTime属性を追加して、「項目を作成」をクリック
スクリーンショット 2024-09-03 7.26.45.png
5. 項目が追加されていることを確認
image.png

※同様の手順で複数の項目をテーブル内に作成すると項目の数だけ、メールが届きます。

結果

EventBridge起動時間ごとに下記のようなメールを受信している!!
image.png

※EventBridge起動時間はEventBridgeの「スケジュール」から作成した「ScheduleTime」を選択して、「編集」をクリックで変更できます。

cron式を変更することで任意のタイミングで起動するように変更できます。
テスト用に5分ごと(*/5 * * * ? *)に変更するなど柔軟に変更してください。
image.png

後片付け

リソースの削除について

今回は無料ですが、思わぬ費用がかかる時があるため、使用しないリソースは削除しましょう
作成したときと逆の順で削除していくと良いとされています
手順としては、作成したリソースのページまで行き、選択して削除するだけなので、EventBridgeの削除手順のみ紹介します。

EventBridgeのスケジュール削除

  • 操作:
    1. AWSコンソールで「EventBridge」を選択
      image.png
    2. ハンバーガーメニューより「スケジュール」を選択して、作成したスケジュールをチェックし、「削除」をクリック
      確認されるので、「削除」をクリック
      image.png

さらに自動化を進めるには、、、

S3とAPI Gatewayを活用したDynamoDBへのデータ登録

今回はDynamoDBに直接レコードを入れましたが、DBを直接修正するのは取り返しがつかないミスをしてしまうことがあるため推奨されません。
S3でUIを作成し、フォームからAPI Gatewayを使って、タスクを追加し、アプリっぽくすることもできますので興味のある方はやってみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?