- 1. 【AWS】Lambdaのハンズオンで学んだことをまとめる。
- 2. AWS Lambdaで列車運行情報をLINEへ通知【Python】
- 3. AWS Lambda FunctionURLs触ってみる(JavaScript Hands-on)
- 4. 『Python サーバレスアプリ 開発入門』備忘録
- 5. ラジオ番組をAWSLambdaでS3へ
- 6. AWS利用料をDailyでメール通知するlambda関数
- 7. 定期的に全EC2サーバを停止する設定
- 8. CloudFront Functions の活用パターン集
- 9. AWS Lambda Function URLsでEverything(It’s you)をおうむ返しするLINE bot
- 10. Serverless アーキテクチャでWeb API を構築するハンズオンをRubyで実装してみた
- 11. AWS Lambda HTTP APIでPOSTデータを取得・デコードする関数(関数URL対応)
- 12. 【10分AWSハンズオン】ExpressをAWS Lambda+API Gatewayにデプロイする
- 13. 【初心者】AWS Lambda Function URLs (関数URL) を使ってみる
- 14. GuardDutyの脅威検出結果をSlack/Teamsに通知する
- 15. Cost Explorer API でアカウント毎に日別の請求額を取得する
- 16. 【Serverless Framework】AWS Lambda構築手順
- 17. lambdaでEventBridgeなどからJSONで渡された中身をチェックする
- 18. Runtime(ランタイム)とは?
- 19. LambdaでDropboxにファイルアップロード
- 20. LambdaをDockerコンテナイメージで動かす場合、rootユーザで実行されないらしい
【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. 構成図
を呼ぶ形で実装します。以前書いた[PHPでDropbox APIを使ってアップロードする記事](https://qiita.com/tksnino/items/bcbde6eddcb553446f63)の応用となります。
### 利用するLambdaランタイム
– Python3.8## 1. csvファイルを出力する
まずはデータベースから抽出したデータを整形してcsvとして出力する部分です。
`csv`ライブラリでさくっと。
“`python
import csv
#import osfile = ‘/t
LambdaをDockerコンテナイメージで動かす場合、rootユーザで実行されないらしい
ここにも記載されているが、`sbx_user1051`というユーザで実行しているらしい。
https://dev.classmethod.jp/articles/check-os-layer-because-change-amazon-linux-2/
(しかも`$HOME`などは設定されていない)そのため、自前のDocker環境でroot権限を使用してコマンドが成功しても、Lambdaで起動時にエラーになる場合がある。
私が現在seleniumでchrome動かそうとしてこの問題にぶち当たっている。