- 1. Lambda@Edge のリクエスト利用パターン集
- 2. Lambdaで、現在日時と特定の日付を容易に比較する (Node.js)
- 3. 【AWS】Lambdaのハンズオンで学んだことをまとめる。
- 4. AWS Lambdaで列車運行情報をLINEへ通知【Python】
- 5. AWS Lambda FunctionURLs触ってみる(JavaScript Hands-on)
- 6. 『Python サーバレスアプリ 開発入門』備忘録
- 7. ラジオ番組をAWSLambdaでS3へ
- 8. AWS利用料をDailyでメール通知するlambda関数
- 9. 定期的に全EC2サーバを停止する設定
- 10. CloudFront Functions の活用パターン集
- 11. AWS Lambda Function URLsでEverything(It’s you)をおうむ返しするLINE bot
- 12. Serverless アーキテクチャでWeb API を構築するハンズオンをRubyで実装してみた
- 13. AWS Lambda HTTP APIでPOSTデータを取得・デコードする関数(関数URL対応)
- 14. 【10分AWSハンズオン】ExpressをAWS Lambda+API Gatewayにデプロイする
- 15. 【初心者】AWS Lambda Function URLs (関数URL) を使ってみる
- 16. GuardDutyの脅威検出結果をSlack/Teamsに通知する
- 17. Cost Explorer API でアカウント毎に日別の請求額を取得する
- 18. 【Serverless Framework】AWS Lambda構築手順
- 19. lambdaでEventBridgeなどからJSONで渡された中身をチェックする
- 20. Runtime(ランタイム)とは?
Lambda@Edge のリクエスト利用パターン集
# はじめに
Lambda@Edge(以後、L@E)を様々なパターンで使用したため、まとめます。# CF2とL@Eの比較
CloudFront Functions に比べて、オリジンリクエスト、オリジンレスポンスで使用できる点や、リクエスト本文を修正できる点において、L@Eは優れているかと思います。| 1 | 2 | 3 |
|:-:|:-:|:-:|
| | CloudFront Functions | Lambda@Edge |
| ランタイムサポート | JavaScript(ECMAScript 5.1準拠) | Node.js、Python |
| 実行場所 | 218 以上の CloudFrontエッジロケーション | 13 の CloudFrontリージョンのエッジキャッシュ|
| CloudFront トリガー | ビューアリクエスト / ビューアレスポンス | ビューアリクエスト / ビューアレスポンス / オリジンリクエスト / オリジンレスポンス |
| 最大実行時間 | 1 ミリ秒未満 | 5 秒 (ビューアトリガー) / 30
Lambdaで、現在日時と特定の日付を容易に比較する (Node.js)
# はじめに
Lambdaで、現在時刻と、特定の期間を比較して、範囲内かどうか短いコードで判定する方法をまとめました。
面倒なので、ライブラリも使用しない方法になります。# 現在日時が特定の期間内かどうか判定
## 解説– `getTime()`は常にUTCでの値の取得になるため、現在日時もUTCで取得します。
– `content.from`と`content.to`に特定の日付を入れてください。
(必ず`”xxxx-xx-xxTxx:xx+09:00″`の形式になるようにしてください。)– UTCでの比較にはなりますが、`content`内の`”xxxx-xx-xxTxx:xx+09:00″`は、JSTにしております。
つまり、現在時刻は`UTC`、`content`内は、`JST`から`getTime()`によって`UTC`に変換され、`UTC同士で比較`されることになります。
下記の場合ですと、
日本時間で、`2022/5/5の12時`〜`2022/5/8の12時まで`の範囲に現在日時が入っているかどうか判定します。## コード内容
“`js
c
【AWS】Lambdaのハンズオンで学んだことをまとめる。
## はじめに
こんにちは、k_ukiです。
「AWSではじめるクラウド開発入門」の10章と11章を進めていきました。
そこでは、サーバーレスクラウドに関連する技術が取り上げられており、「Lambda」「S3」「DynamoDB」の3つの技術をハンズオン形式で学習しました。その中でも、今回は「Lambda」について学んだことをまとめていきます。
## 「Lambda」とは?
簡単にまとめるとサーバーレスコンピューティングにおいて、プログラムの処理を担う部分にあたります。
Lambdaを理解するにおいて、まずサーバーレスコンピューティングの概要について学ぶ必要があります。
### サーバーレスコンピューティングとは?
今回は、webアプリケーションを開発&デプロイするケースを例とします。
従来通りであればプログラムを実行するためのwebサーバが必要となります。また、そのwebサーバーを実行するためのOSサーバーの環境なども構築する必要があります。webアプリケーションを開発&デプロイする際に、実行環境の構築はかなり大変な
AWS Lambdaで列車運行情報をLINEへ通知【Python】
# 背景
この記事の処理内容を、スクレイピングからAPIでの情報取得へ変更したことを紹介します。
?https://qiita.com/_whitecat_22/items/1fc804847dce27d5fb94
# 1.環境
– Python 3.9.x
– AWS Lambda
– Amazon EventBridge …定期的に実行するため
– Amazon Simple Notification Service (SNS) …終了通知をCloudWatchへ渡すため
– Amazon CloudWatch …ロギング
– Amazon Simple Storage Service (S3) …Lambda関数のアップロード先
– [LINE公式アカウント](https://www.linebiz.com/jp/service/line-official-account/)# 2.開発
## 2.1.Pythonコード
– スクレイピングの処理を、公共交通オープンデータセンター 開発者サイトから登録すると利用可能なAPIへ変更しました。
※ユ
AWS Lambda FunctionURLs触ってみる(JavaScript Hands-on)
## はじめに
2022年4月頃からAWS LambdaでHTTP通信が可能になった!!今まで、RESTAPIを作ろうとすると、API Gateway + Lambdaで作らなくてはいけなかった。しかし、サービスアップデートにより、Lambdaから直接叩けるようになった。(感動)。LambdaでAPIを作った事がある人ならば、何でAPIGateWayわざわざ用意しないとHTTP通信できないんだ??っていうのは誰もが感じてた事。ようやく、その不満から解消することができるようになったようなので、今回触ってみることにした。## 所感
めっちゃ簡単。GUIのぽちぽちで1分で関数が作れるのがいい感じ。FunctionURlsという機能をONにすることでHTTP通信ができるようになっているようだ。ただ、色々と縛りがあるので、用途に合わせて利用するのが良さそうだ。本番環境で利用するには時期尚早って感じかな。LambdaでHTTP通信できる関数確かに簡単に作れた!!!1分以内にHelloWorldまで辿り着けるじゃん!!!(感動) pic.twitter.com/Gkn5GIXmW0
— カワムラコウジ@k.k.Factory (@kkfactory0705) May 3, 2022
### Hands-onスタート

大体ここで述べられています。途中から気づきました。=======================
__公式サイトで掲載されている誤植__
2022/4/27現在公式サイトに掲載されている通り、p93に1文字だけ間違いがあります。
“`:誤
AWS_ACCESS_KEY_ID = ‘AWS_ACEESS_KEY_ID’
“`
“`:正
AWS_ACCESS_KEY_ID = ‘AWS_ACCESS_KEY_
ラジオ番組をAWSLambdaでS3へ
# 話の概要
AWS lambdaでsh shellも実行できる。
shellが実行できれば、実行できるバイナリがなにがあるのかがわかる。
足りないバイナリはレイヤとして追加すれば、/opt/bin以下に入って、普通に動作する。
これらを足し算すると…
rec_radiko_ts.shをつかって、S3バケットに保存ができます…ともあれ技術的には
という話。話は
https://note.com/nyadorya/n/n0b7f6425fe60
とリンクしますので、そちらもどうぞ。
# 前提
rec_radiko_ts.shを最大限生かす。というか、いじりたくない。
というわけで、rec_radiko_ts.shは必須です。https://github.com/uru2/rec_radiko_ts
# lambdaで
経緯はnote側に記載してますので、こちらは技術的な話を。必要なことは以下のとおり。
1. 最終的に保存するバケットを作る
1. 必要最低限のロールを定義する
1. 必要最低限のポリシーを定義する
1. つくったロールにポリシーをアタッチする
AWS利用料をDailyでメール通知するlambda関数
# 内容
AWS利用料をDailyでメール通知するlambda関数です。# 設定
* SNS Topic作成
* Lambda用のロール作成
CostExploereへアクセス(ce:GetCostAndUsage)及びSNSのパブリッシュ(sns:Publish)権限
* Lambda関数作成
* EventBridgeからスケジュール設定# コード
“`python
import boto3
import datetime# SNS Topic
topicArn = ‘arn:aws:sns:ap-northeast-1:”account_id”:”topic_name”‘
# 1 days ago
date1 = (datetime.datetime.now() – datetime.timedelta(days = 1)).strftime(‘%Y-%m-%d’)
# 2 days ago
date2 = (datetime.datetime.now() – datetime.timedelta(days = 2)).strftime(‘%Y-%m-%d’)
定期的に全EC2サーバを停止する設定
# 内容
AWS検証環境でEC2の停止を忘れてしまうことがあるので、全EC2サーバを1日1回停止する運用をいれます。
EventBridgeの「EC2 StopInstances API呼び出し」を使用しようと思いましたが、全てのインスタンスIDを指定する方法が分からなくlambda関数を作成しました。# コード
同一AWSアカウント内で起動中の全EC2サーバを停止します。“`python
import boto3client = boto3.client(‘ec2’, region_name = ‘ap-northeast-1’)
def lambda_handler(event, context):
ec2_list = client.describe_instances()
for ec2_reservation in ec2_list[‘Reservations’]:
for ec2_instance in ec2_reservation[‘Instances’]:
ec2_instance_id = ec
CloudFront Functions の活用パターン集
# はじめに
CloudFront Functions(以後CF2)は、L@Eと異なり、軽量のため、L@Eより優先して使用を検討する必要がようなので、CF2について使用パターンをまとめました。
ビューアーレスポンスは使用しなかったため、ビューアーリクエストのみのパターンになります。
# CF2とL@Eの比較
| 1 | 2 | 3 |
|:-:|:-:|:-:|
| | CloudFront Functions | Lambda@Edge |
| ランタイムサポート | JavaScript(ECMAScript 5.1準拠) | Node.js、Python |
| 実行場所 | 218 以上の CloudFrontエッジロケーション | 13 の CloudFrontリージョンのエッジキャッシュ|
| CloudFront トリガー | ビューアリクエスト / ビューアレスポンス | ビューアリクエスト / ビューアレスポンス / オリジンリクエスト / オリジンレスポンス |
| 最大実行時間 | 1 ミリ秒未満 | 5 秒 (ビューアトリガー)
AWS Lambda Function URLsでEverything(It’s you)をおうむ返しするLINE bot
Lambda関数をHTTPSエンドポイントから実行可能になったとのことで、LINEおうむ返しbotを作って「Everything(It’s you)」してみました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-lambda-function-urls-built-in-https-endpoints/
## 必要なもの
1. AWSアカウント(Lambda作成)
2. LINE Developers登録## Lambda側
#### 関数の新規作成

こんな感じに作成されます。
をRubyに変えて作ってみました。
※ハンズオン内ではpythonを利用されています。# 前置き
ほとんどハンズオンの流れと同じため、AWS周りの流れは省略しています。# 1. Lambda 単体で使ってみる
LambdaからTranslateを呼び出して「おはよう」を「Good morning」へ変換しました。
[Module: Aws::Translate](https://docs.aws.amazon.com/sdk-for-ruby/v2/api/Aws/Translate.html)“`
require ‘json’
require ‘aws-sdk’def lambda_handler(event:, context:)
translate = Aws::Translate::Cli
AWS Lambda HTTP APIでPOSTデータを取得・デコードする関数(関数URL対応)
## HTTP APIや関数URLでもPOSTデータを受け取りたい
手軽に実装できてお財布にも優しいHTTP APIですが、POSTデータを受け取るのに一手間必要です。
リクエストbodyはbase64エンコードされた状態で取得できるため、 デコード & jsonパースしてあげる関数を使えばOKです。## コード
### Node.js
“`getBodyOnLambda.js
function getBodyOnLambda(event_body) {
let body_string_utf8 = Buffer.from(event_body, ‘base64’).toString(‘utf-8’);
//日本語が含まれる場合はdecodeURIする
//decodeURIComponentでは無くdecodeURIなのは、POSTされたデータの中に&が含まれているとJSON変換時にうまくいかないため
body_string_utf8 = decodeURI(body_string_utf8);
//パラメーター形式文字列のJSONへの変
【10分AWSハンズオン】ExpressをAWS Lambda+API Gatewayにデプロイする
# やること
Lambda 上の Express にアクセスできるようにする。
# 学べること
* サーバレス Express アプリケーションの作り方
* Lambda へのデプロイ
* API Gateway と Lambda の連携# 扱わないこと
* Infrastructure as Code
* TypeScript
* CI/CD# STEP 1 : Serverless Express
1-1. 適当なディレクトリに Node.js プロジェクトを作成し、必要なパッケージをインストールします。
“`sh
$ npm init -y
$ npm i express @vendia/serverless-express
“`:::note warn
`Node.js` がインストールされている必要があります。
`n` という Node.js のバージョン管理ライブラリを使用するのがおすすめです。
Mac を使用している方で、Homebrew がインストール済みの方は、以下のコマンドで Node.js をインストールできます。“`sh
【初心者】AWS Lambda Function URLs (関数URL) を使ってみる
# 1. 目的
– たまには新機能のキャッチアップもしないといけないと思い、ちょっと便利そうなAWS Lambda Function URLs(関数URL) を使ってみることにした。# 2. やったこと
– 「[PokeAPI](https://pokeapi.co/)」(ポケモンデータの検索ができる公開API)にアクセスしてデータを取得するLambda関数を作成し、関数URLの機能を有効にして、インターネットからアクセス可能なURL(関数URL)を設定する。
– 上記のURLに対してブラウザからアクセスする。Lambda関数が実行されて、ポケモンデータの取得が行われ、結果が表示できることを確認する。# 3. AWS Lambda Functions URLs とは(自分の理解)
– インターネット上にエンドポイント(関数URL)を作成し、そこをたたくことでインターネット経由(https経由)でLambda関数の実行が可能な仕組み。
– 従来は同様のことをやりたい場合、API Gatewayが必要だったが、場合によっては省略することができる。# 4. 構成図
![func
GuardDutyの脅威検出結果をSlack/Teamsに通知する
# 初めに
生産技術部で製品の検査工程を担当しているエンジニアです。AWSのセキュリティ対応のため、GuardDutyを利用しています。GuardDutyを利用することで、悪意のあるアクティビティや異常な動作を継続的にモニタリングすることができます。しかし、検知した結果に気が付かなければ意味がありません。チャットツールに結果を転送することで、早急な対応ができる体制を目指します。# Slack/Teamsへの通知方法
脅威を検知した結果は、自動的にEventBridge(旧Amazon CloudWatch Events)に送信されるため、EventBridgeでイベントをトリガします。* Slackを利用されている場合は、EventBridgeからSNSに転送します。SlackはChatbotとの連携が可能なため、ChatbotをSNSのターゲットにします。
* Teamsを利用されている場合は、LambdaをEventBridgeのターゲットとし、Lambdaで結果を加工してIncoming WebhookでTeamsに転送します。![guardduty-notifica
Cost Explorer API でアカウント毎に日別の請求額を取得する
## モチベーション
Cost Explorer API を使用してアカウント毎に DAILY の請求額を取得し、以下のようなデータを CSV で出力したい。|Account Id|Account Name|2022/4/1|2022/4/2|2022/4/3| …|2022/4/30|
|—|—|—|—|—|—|—|
|000000000000|account-0000|42.792716528|40.124716527|43.123416527|…|50.922465287|
|111111111111|account-1111|32.263379809|30.235379809|31.263353594|…|22.133798094|
|222222222222|account-2222|751.71034839|720.51234839|772.62033294|…|651.71042035|
|333333333333|account-3333|4.6428|5.1234|7.8765|…|6.2234|
|44444444
【Serverless Framework】AWS Lambda構築手順
# まえがき
業務でServerless FrameworkでLambdaを構築する必要ができたので、構築手順をメモ。
# Serverless Frameworkとは
・Node.jsで記述したデザイン/設計書をもとに、各プロバイダ(AWS/GCP/Azure)上でサーバレスなリソースを構築できるフレームワーク。
# 環境構築
参考にさせていただいた記事。https://serverless.co.jp/blog/25/
## Node.jsインストール
・Serverless Frameworkでは、Node.jsはv12以上が必要。https://nodejs.org/ja/download/
## Serverlessインストール
“`
npm install -g serverless
“`
インストールされていることを確認
“`
% npx serverless –version
Framework Core: 3.15.2
Plugin: 6.2.2
SDK: 4.3.2
“`
「serverless」は長いので「sls」と省略してもOK。
“`
lambdaでEventBridgeなどからJSONで渡された中身をチェックする
下記をセットして、ログ出力されたJSONを見ながら実装する感じ
“`python
import logging
import jsonlogger = logging.getLogger()
logger.setLevel(logging.INFO)def lambda_handler(event, context):
logger.info(json.dumps(event))
return
“`
Runtime(ランタイム)とは?
# 使い方
例えばAWS Lambda関数で言語(実行環境)を指定する時に使用する。“`
Function:
Runtime: python3.9
“`# 由来
ランタイムという言葉の由来は
ランタイムライブラリ
ランタイムパッケージ
ランタイムエンジン
ランタイムモジュール
とのこと。意味は**実行時に必要な物。**
略称として**修飾表現**が残ったから初見ではわかりにくいかも。# 日本語でも同じ?
日本語でも値があれば**修飾表現**で足りることもあるから考え方は似ていると思う。例えば
**帰宅時間 19:00**
**帰宅 19:00**個人的には後者の書き方が簡潔で好きかな。
結びつけるとランタイムという略称にも賛同するようになってきた。