Lambda関連のことを調べてみた2022年05月06日

Lambda関連のことを調べてみた2022年05月06日

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通信ができるようになっているようだ。ただ、色々と縛りがあるので、用途に合わせて利用するのが良さそうだ。本番環境で利用するには時期尚早って感じかな。

### Hands-onスタート
![スクリーンショット 20

元記事を表示

『Python サーバレスアプリ 開発入門』備忘録

『Python サーバレスアプリ 開発入門』ではFlaskをLambdaで動かす手法を学べます。一通り写経を終えたので、つまづいた点を書き留めておきます。

版:初版第1刷
環境:MacBookAir2020 BigSur11.6
本書での環境とちょっと違いvenvを使って仮想環境を作っています。

__(追記)まずは、公式githubをみて!!!__
[「動かして学ぶ!Pythonサーバレスアプリ開発入門」 サンプルコード](https://github.com/chaingng/shoeisha_serverless_python_tutorial#readme)
大体ここで述べられています。途中から気づきました。

=======================

__公式サイトで掲載されている誤植__

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 boto3

client = 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側

#### 関数の新規作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/cf90d3b5-78bc-336f-06ec-a6e137b5c94c.png)

こんな感じに作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/6cdef038-f

元記事を表示

Serverless アーキテクチャでWeb API を構築するハンズオンをRubyで実装してみた

# 概要
AWSが提供している、[翻訳Web APIのハンズオン](https://pages.awscloud.com/event_JAPAN_Hands-on-for-Beginners-Serverless-2019_Contents.html)を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 json

logger = 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**

個人的には後者の書き方が簡潔で好きかな。
結びつけるとランタイムという略称にも賛同するようになってきた。

元記事を表示

OTHERカテゴリの最新記事