【2025年最新】AWSの通知 LINEに送信する方法
はじめに
AWSの通知を、個人のLINEで確認するための構築について説明します。
今回はAWS初学者向けに使用料金を通知する想定で説明しますが、
Budgets部分を変えることで他のサービスでも通知が可能です。
想定読者
- AWS初学者の方
- AWSの通知全般を個人LINEに通知したい方
構成図
処理概要
- 「Budgets」でコスト情報を取得
- 「SNS」でコスト情報を「Lambda」に通知
- 「Lambda」の処理開始
- 「Systems Manager Prameter Store」からLINEのAPI情報を取得
- 「公式LINE」へAPI情報を使用し通知
- 「Lambda」の処理終了
- 「公式LINE」を友達登録している個人LINEでメッセージ確認
サービス選定
下記2点について説明します。
LINE Developer
元々はLINE Notifyが使用されていたようですが、2025年3月でサービス終了しています。
LINE Messaging APIを使用するため、LINE DeveloperからAPI情報を取得します。
Systems Manager Prameter Store
API情報を保護するために使用しています。
AWS上で情報を保護するのにつかわれるサービスとして「Secrets Manager」があります。
今回は、どちらを使用するか悩みましたが下記理由から「Prameter Store」を選定しています。
■理由
外部API情報のため自動ローテーションができないため使用しません。
また、今回は無料で構成するため、Parameter Store(Standard)を使用しています。
項目 | Parameter Store (Standard/Advanced) |
Secrets Manager |
---|---|---|
💰 使用料金(API呼び出し) | - Standard: 無料 - Advanced: 10,000回/$0.05 |
10,000回/$0.05 |
💾 保存料金 | - Standard: 無料 - Advanced: $0.05/月 |
$0.40/月(1シークレット) |
🔄 ログローテート | ❌ 非対応 | ✅ 自動ローテーション対応 |
🔐 暗号化対応 | ✅ AWS KMSで暗号化可能 | ✅ AWS KMSで暗号化可能 |
費用
常に無料枠(Always Free)の範囲で完結します。
AWS 料金表
サービス名 | 料金 | 無料枠の内容 |
---|---|---|
AWS Budgets | 無料 | 基本機能は無料 |
Amazon SNS | 無料 | 月 100 万件の API リクエストまで無料 |
AWS Lambda | 無料 | 月 100 万リクエスト、320 万秒の実行時間まで無料 |
Systems Manager Parameter Store | 無料 | 月 10,000 件の API リクエストまで無料 |
LINE Messaging API | 無料 | 月 1,000 通まで無料 |
合計金額 | 無料 | ※想定条件下ではすべて無料枠内に収まる |
必要なもの
- AWSアカウント
- 通知を確認するLINE
- 通知する公式LINE ※こちらについては、作成方法を記載しております。
LINE側手順
2025年7月に作成しています。
UIや文言が変更になってわからない場合は、下記公式ドキュメントを参照してください。
Messaging APIを始めよう
名前等は指定して進めますが、任意なので自身のお好きな名前等を入れて下さい。
変更してはいけない箇所は注意書きとして記載します。
1.公式LINEの作成
- LINE Businessにアクセス
ログイン画面 - 「LINEアカウント」>「QRコードでログイン」の順にクリック
- 個人LINEで友達追加のQR読み込みを使用しログイン
- 左側のアカウントタブから「作成」をクリック
- アカウント情報を入力し、「確認」をクリック
- 入力内容の確認し「完了」をクリック
- 「LINE Official Account Managerへ」をクリック
2.Messaging API情報の確認
- 公式LINEの作成の7.で移動した画面右上の「設定」をクリック
- 設定から左の「Messaging API」をクリック
- 「Messaging APIを利用する」をクリック
- プロバイダーを作成の項目に「AWS」を入力し「同意する」をクリック
- プライバシーポリシーと利用規約で何も入力せず「OK」をクリック
- 情報を確認し「OK」をクリック
- LINE Developersコンソールへ移動
LINE Developersコンソール - 左のプロバイダーから「<使用するプロバイダー名>」をクリック
- 公式LINEの作成にて作成したアカウントをクリック
- Messaging API設定>チャネルアクセストークン(長期)から「発行」をクリック
- 下記でMessaging API情報の確認
- アクセストークン:Messaging API設定>チャネルアクセストークン(長期)
- ユーザーID :チャンネル基本設定>あなたのユーザーID
AWS側リソース作成手順
名前等は指定して進めますが、任意なので自身のお好きな名前等を入れて下さい。
変更してはいけない箇所は注意書きとして記載します。
1.Prameter StoreへAPI情報保存
- 上部の検索から「パラメータストア」を入力しクリック
- 「パラメータを作成」 をクリック
- 下記画像の情報を入力して、「パラメータを作成」 をクリック
値コード
{
"LINE_ACCESS_TOKEN": "<アクセストークン>",
"LINE_USER_ID": "<ユーザーID>"
}
- ARNの確認
2.Lambdaの作成
- 上部の検索から「Lambda」を入力しクリック
- その他のリソースから「レイヤー」をクリック
- 「レイヤーを作成」をクリック
- 下記画像の情報を入力して、「作成」をクリック
requests-layerの説明
AWS LambdaでPythonのrequestsライブラリを使うためのレイヤー用ファイルです。
requestsライブラリは、Webサイトからデータを取得したりAPIに情報を送ったりできるライブラリです。
6. 上部の検索から「Lambda」を入力しクリック
7. 「関数の作成」をクリック
8. 下記画像の情報を入力して、「関数の作成」をクリック
9. コードタブに下記コードを貼り付け「deploy(Ctrl+Shift+U)」をクリック
コード
import boto3
import json
import requests
import logging
from typing import Tuple, Dict, Any
# ログレベルは WARNING に固定
logger = logging.getLogger()
logger.setLevel(logging.WARNING)
def get_line_credentials() -> Tuple[str, str]:
"""
AWS Systems Manager Parameter StoreからLINEの認証情報を取得
"""
ssm = boto3.client('ssm')
response = ssm.get_parameter(Name='/line/MessagingAPI', WithDecryption=True)
secret = json.loads(response['Parameter']['Value'])
return secret['LINE_ACCESS_TOKEN'], secret['LINE_USER_ID']
def send_line_message(access_token: str, user_id: str, message: str) -> None:
"""
LINE Messaging APIを使って指定ユーザーにメッセージを送信する
"""
url = 'https://api.line.me/v2/bot/message/push'
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {access_token}'
}
body = {
'to': user_id,
'messages': [{
'type': 'text',
'text': f'AWS通知:\n{message}'
}]
}
try:
response = requests.post(url, headers=headers, data=json.dumps(body))
response.raise_for_status()
logger.warning("LINE送信成功")
except requests.exceptions.RequestException as e:
logger.warning(f"LINE送信失敗: {response.status_code}")
raise Exception("LINE APIエラーが発生しました") from e
def lambda_handler(event: Dict[str, Any], context: Any) -> None:
"""
AWS Lambdaのエントリーポイント
"""
try:
# SNSイベントからメッセージを取得
message = event['Records'][0]['Sns']['Message']
# 認証情報の取得
access_token, user_id = get_line_credentials()
# LINEメッセージ送信
send_line_message(access_token, user_id, message)
except Exception:
logger.error("Lambda処理中にエラーが発生しました")
raise
- 上部に下記表示がされていれば更新されています。
- ARNの確認
3.SNSの作成
- 上部の検索から「Simple Notification Service」を入力しクリック
- トピック名を入力し「次のステップ」をクリック
- 下記情報で「トピックの作成」をクリック
4. ARNの確認
4.Budgetsの作成
- 上部の検索から「Budgets」を入力しクリック
- 「予算の作成」をクリック
- 下記画像の情報を入力して、「予算を作成」をクリック
AWS側サービスの連携
1.ポリシーの作成
- 上部の検索から「IAM」を入力しクリック
- 左のアクセス管理から「ポリシー」をクリック
- 「ポリシーを作成」をクリック
- 「JSON」をクリック
- ポリシーエディタに下記コードを入力し「次へ」をクリック
コード
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ParameterStoreAccess",
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters"
],
"Resource": "●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●"
},
{
"Sid": "KMSDecryptAccess",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": "ssm.ap-northeast-1.amazonaws.com"
}
}
},
{
"Sid": "CloudWatchLogsAccess",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Sid": "SNSInvokeAccess",
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "*"
}
]
}
6. ポリシー名を入力し「ポリシーの作成」をクリック
2.IAMロールの作成
- 左のアクセス管理から「ロール」をクリック
- 「ロールを作成」をクリック
- 下記画像の情報を入力して、「次へ」をクリック
- AWS側サービスの連携2.で作成したポリシーを選択し「次へ」をクリック
- ロール名を入力し、「ロールの作成」をクリック
3.Lambda設定
- 上部の検索から「Lambda」を入力しクリック
- AWS側リソース作成手順2.で作成したLambda名をクリック
- 「+ トリガーを追加」をクリック
- 下記画像の情報を入力して、「追加」をクリック
5. 「設定」>「一般設定」>「編集」の順にクリック
6. 下部にある既存のロールでロールを選択し「保存」をクリック
4.SNS設定
- 上部の検索から「Simple Notification Service」を入力しクリック
- 「トピック」>「トピック名」の順にクリック
- 「編集」をクリック
- アクセスポリシーに、下記を入力し「変更の保存」をクリック
コード
{
"Sid": "AllowBudgetsToPublish",
"Effect": "Allow",
"Principal": {
"Service": "budgets.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:budgets::123456789012:*"
}
}
}
5.Budgets設定
- 上部の検索から「Budgets」を入力しクリック
- 「予算名」をクリック
- 右上の「編集」をクリック
- 下部の「次へ」をクリック
- 「▶Amazon SNS アラート - オプション」をクリック
- Amazon SNS ARN を選択に、AWS側リソース作成手順3.4.で確認したSNSのARNを入力
- 「次へ」をクリック
- 「次へ」をクリック
- 「保存」をクリック
テスト
- 上部の検索から「Simple Notification Service」を入力しクリック
- 「トピック」>「トピック名」の順にクリック
- 右上の「メッセージの発行」をクリック
- 下記画像の情報を入力して「メッセージの発行」をクリック
- LINE側手順1.で作成した公式LINEでメッセージが送信されるか確認
まとめ
この構成を応用すれば、AWSの通知をLINEに集約して管理できるようになると思います。
ぜひ、使用してみてください。
わかりずらいところ、うまくいかないなどがあれば、どんどんコメントで聞いていただければと思います。
また、アドバイス等もお待ちしております。
余談ですが、今回の構成で料金が超えると下記のように通知が飛びます。
独り言と今後の予定
今回は手順の順番や画像を入れるか入れないかなど、とても悩み疲れました💦
今後は手順少な目で書いていくかもしれません。
とりあえずZennを始める前に書きたかったことは、ひと段落しましたので
次回は、自己学習のためにIaCやTerraformについて情報をまとめようかと思います。
Discussion