対象者
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に入力すると、設定した時間にリマインダーとしてメールをしてくれる
処理フロー
-
開始
↓ -
EventBridge
↓ -
Lambda関数 (DynamoDBからデータ取得)
↓ -
DynamoDB
↓ -
Lambda関数 (SNSで通知)
↓ -
SNS
↓ - 終了
サービスの概要
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は様々なリージョン(地域)でリソースを作成できます。
別のリージョンで作成したリソースは表示されないため、どこのリージョンで作成したかを認識しておく必要があります。
1. DynamoDBテーブルの作成
- 操作:
Tips
DynamoDBはNoSQLデータベースなので決まったスキーマ(構造)がない
2. SNSトピックの作成
-
操作:
- AWSコンソールで「SNS」を選択
- 左のハンバーガーメニューより「トピック」をクリック
- 「トピックの作成」クリック
- 「タイプ」を
スタンダード・「名前」をReminderNotificationsにして、ページ下の「トピックの作成」クリック
- トピックが作成されたら「サブスクリプションの作成」クリック
- 「プロトコル」を
Eメール・「エンドポイント」を通知させたいメールアドレス(※社用のメールアドレスは使わない)入力し、ページ下の「サブスクリプションの作成」クリック
※後程使うので「トピック ARN」を控えておく
- 入力したアドレスにAWSから確認メールが来ているので「Confirm subscription」を押し確認する
- ステータスが
確認済みになっていることを確認
- AWSコンソールで「SNS」を選択
Tips
SNSでは、トピックに対して、サブスクライブ(このトピックから送られてくるメッセージを受け取りたい)登録することで通知します。
3. Lambda関数の作成
- 操作:
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'
Tips
・「Deploy」の左の「Test」ボタンで、テストイベントを作成でき、関数のテストを行うことができます。
・LambdaはJavaやNode.jsなどもサポートしています
EventBridgeのスケジュール設定
- 操作:
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. ロール作成
-
操作:
- AWSコンソールで「IAM」を選択
- 左側のハンバーガーメニューから「ロール」を選択し、「ロールを作成」をクリック
- 「信頼されたエンティティタイプ」を
AWSのサービス・ユースケースを「Lambda」に選択し、「次へ」クリック
- 「検索」に
snsと入力し、候補の中からAmazonSNSFullAccessをチェック

5.AmazonSNSFullAccessをチェックしたまま、「検索」にDynamoDBと検索し、候補の中から、AmazonDynamoDBFullAccessをチェックし、「次へ」をクリック
- 「ロール名」を
reminderなどわかりやすい名前にし、「ロールを作成」をクリック
- ロールが作成されたことを確認
- AWSコンソールで「IAM」を選択
2. Lambda関数にロールをアタッチ
-
操作:
1. AWSコンソールで「Lambda」を選択し、メニューから「関数」を選択。
作成したSendReminderを選択

2. 「設定」タブを選択し「一般設定」の中の「編集」をクリック

3. ページ下の「既存のロール」から先ほど作成した「reminder」ロールを選択し、「保存」をクリック
これで権限の設定は完了です。
Tips
今回はFullAccessポリシーを付与しましたが、これは推奨されません。
最小の権限を付与することが、AWSのベストプラクティスとなってます。
体験
前準備
設定は整ったので、Dynamo DBにタスクを入れて、メールを受信することを確認しましょう
操作:
1. AWSコンソールで「DynamoDB」を選択

2. 「テーブル」より作成した「Reminders」テーブルを選択

3. 「アクション」より「項目を作成」を選択

4. 「新しい属性の追加」より「文字列」を選択し、「属性名」にEvent・「値」に任意の予定を入れる
同様ににTime属性を追加して、「項目を作成」をクリック

5. 項目が追加されていることを確認

※同様の手順で複数の項目をテーブル内に作成すると項目の数だけ、メールが届きます。
結果
EventBridge起動時間ごとに下記のようなメールを受信している!!

※EventBridge起動時間はEventBridgeの「スケジュール」から作成した「ScheduleTime」を選択して、「編集」をクリックで変更できます。
cron式を変更することで任意のタイミングで起動するように変更できます。
テスト用に5分ごと(*/5 * * * ? *)に変更するなど柔軟に変更してください。

後片付け
リソースの削除について
今回は無料ですが、思わぬ費用がかかる時があるため、使用しないリソースは削除しましょう
作成したときと逆の順で削除していくと良いとされています
手順としては、作成したリソースのページまで行き、選択して削除するだけなので、EventBridgeの削除手順のみ紹介します。
EventBridgeのスケジュール削除
- 操作:
さらに自動化を進めるには、、、
S3とAPI Gatewayを活用したDynamoDBへのデータ登録
今回はDynamoDBに直接レコードを入れましたが、DBを直接修正するのは取り返しがつかないミスをしてしまうことがあるため推奨されません。
S3でUIを作成し、フォームからAPI Gatewayを使って、タスクを追加し、アプリっぽくすることもできますので興味のある方はやってみてください。

















