- 1. 【python】S3上のcsvファイルから、dynamoDBのするAWS lambdaのサンプルコード
- 2. Amazon EventBridge の 使い方
- 3. 【Serverless Framework】S3アップロードしたらLambda実行できるようにする。
- 4. AWS Lambda(EC2のシェル)を毎月営業日◯日に実行したい
- 5. Slack AppでリクエストURLにLambda(Node.js)の関数URLを指定してYour URL didn’t respond with the value of the challenge parameterが出た時の対応
- 6. 【Rails 6】ActiveJob + S3 + Lambda + Slack で実現する非同期 CSV ダウンロード
- 7. ClickUpのイベントをLambdaで取得してみた
- 8. stepfunctionsでのDynamoDBを使用した多重実行制御
- 9. GoでLambda Function URLs ハンズオン
- 10. 【個人開発】今スーパーで安い食材と関連レシピをラインで探せるボットの友達が1000人超えたのでログを晒していく
- 11. Windows環境でゼロからRuby + Lambda + API GatewayでAPI作って公開するまでの記事
- 12. 【EC2】LambdaでEC2インスタンスを自動起動・停止
- 13. [Python] DynamoDBをLambdaから使ってみる
- 14. API Gateway+LambdaのAPI実行時にMissing Authentication Tokenとなった場合の確認観点
- 15. AWS Lambda Powertoolsで実現する快適Lambda生活
- 16. 【AWSハンズオン】サーバーレスクラウドを利用してSNSアプリを実装する。
- 17. AWS Lambda 実践ガイド 第2版でつまずいたところまとめ
- 18. Error: Failed to parse template: ‘utf-8’ codec can’t decode byte 0x83 in position XXX: invalid start byteの対処法
- 19. Lambda 関数 URL
- 20. Lambda@Edge のオリジンリクエストで、bodyの内容を書き換えてレスポンスを返す方法 [sync-request]
【python】S3上のcsvファイルから、dynamoDBのするAWS lambdaのサンプルコード
こちらでスプレッドシートをcsvに変換してS3に保存したので、csvからdynamoDBのテーブルを作成しました。
https://qiita.com/at_sushi/items/8b71927e72ac2a7465d5
サンプルコード
–“`python
import os
import boto3
import pandas as pds3_client = boto3.client(“s3”)
dynamodb = boto3.resource(“dynamodb”)
table = dynamodb.Table(“任意のテーブル名”)def lambda_handler(event, context):
bucket_name = os.environ[‘bucket_name’]
prefix = os.environ[‘prefix’]s3 = boto3.client(‘s3’)
obj = s3.get_object(Bucket=bucket_name, Key=prefix)
df = pd.read
Amazon EventBridge の 使い方
Cloudwatch alertを使って、[EC2のオートリカバリ](https://qiita.com/kazwata/items/feea966dbb4b76eedc37)や、SNS -> lambdaを介してSlack通知など、便利に使っていたのですが、連携できるサービスが限られているため、EventBridgeを使ってみます。
# EventBridgeとは
EventBridgeは、AWS外のSaaSやAWSサービスで発生した様々なEventを受け取って、LambdaやStep Functions などの指定したターゲットにEventを連携することができるサーバレスのマネージドサービスです。EventBridgeという名称そのままな感じですが、Eventソースとターゲットの自由度がかなり高いので、アイデア次第で色々できそうな感があります。# EventBridgeの設定方法
「Cloudwatch alertのイベントを受け取って、lambdaに連携する」というEventBridgeを作成してみます。まずは、Amazon EventBridge > ルール > ルールを
【Serverless Framework】S3アップロードしたらLambda実行できるようにする。
# この記事のゴール
・Serverless Frameworkの基本的な使い方を学ぶ。
・ESLint × PrettierでTypeScriptのソースコードを自動整形できるようにする。
・S3アップロードイベントで実行されるLambda関数を作成してみる。
→ 実用性がありそう&応用が効きそうなケース![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653955/4885ce4b-1d1e-a113-691f-91daed51734d.png)
# もくじ
o1. Serverless Frameworkプロジェクト基盤作成
o2. S3アップロード時にLambdaが発火するようにする。
o3. CSVファイル読込
o4. mysqlインポートhttps://github.com/daisuketakakuwa/serverless-practice
# o1. Serverless Frameworkプロジェクト基盤作成
## プロジェクトフォルダ作成&`npm i
AWS Lambda(EC2のシェル)を毎月営業日◯日に実行したい
### AWSのカレンダー機能を使って、毎月の営業日◯日目にEC2のシェルを実行する(Lambda関数を実行する)
AWS EC2上に構築したHulftの集信コマンド(utlrecv)を「月初〇〇営業日」に実行したい
…といった問題に当たりました。以下の機能を使って実装しました。
・AWS Systems Manager(Change Calendar)機能
→ (シェル や Lambda)を実行した日時を管理
・Amazon EventBridge機能
→ Calenderの状態を確認し、条件を満たしたら、ssm経由でLambda関数を実行する
・AWS Systems Manager(ssm)機能
→ Lambdaから(EC2のシェル)をキックする(※きれいに作る場合、Calenderに祝日や土日を設定して、その日が営業何日目かを判断したりする必要があると思いますが…今回は、実行する日時のみをCalenderに登録し、定期的にメンテナンスする前提で作成しました)
### ①カレンダーの作成
まずはカレンダーを作成します。
![image.png](https:/
Slack AppでリクエストURLにLambda(Node.js)の関数URLを指定してYour URL didn’t respond with the value of the challenge parameterが出た時の対応
## はじめに
Slackアプリの Event Subscriptions -> Enable Events -> Request URLでURL設定時にタイトルのエラーが出た場合の対応方法を整理します。
## エラー内容
“`
Your URL didn’t respond with the value of the challenge parameter.
“`– 内容としては`challenge` パラメータを指定してレスポンスを返していない、という意味です。
## 結論
Lambda(Node.js)の場合、以下のようなコードを書けばOKです。
`challenge` のみを含むレスポンスを返却するのがポイントです。“`index.js
exports.handler = async (event) => {
// TODO implement
console.log(`event=${JSON.stringify(event)}`);
const event_body_json = JSON.parse(event.body)
【Rails 6】ActiveJob + S3 + Lambda + Slack で実現する非同期 CSV ダウンロード
## 概要
– 大容量の CSV を出力をしようとした際、レスポンスが返ってくるまでの待ち時間が苦痛
– 最悪、タイムアウトエラーになりかねない
– とりあえずレスポンスだけ先に返しておき、実際の CSV 出力処理はバックグラウンドで非同期処理するみたいな事がしたい
– ActiveJob + S3 + Lambda + Slack を使う事でそれが実現できそう軽めの CSV 出力であれば何ら問題無いのですが、サービスの運用が長続きしてたくさんのデータが蓄積すると、それらを一気に出力するのはなかなか骨が折れたりします。
実際、自分が担当しているサービスでも先日ついに処理に時間がかかりすぎてタイムアウトエラーになるといった事象が発生しました。
もちろん、 SQL の見直しだったり根本的な部分においては他にも色々やるべき事はあるかもしれませんが、とりあえず手っ取り早く対応するために非同期での CSV ダウンロードを実装してみました。
### 同期処理の場合
![同期.gif](https://qiita-image-store.s3.ap-northeast
ClickUpのイベントをLambdaで取得してみた
## はじめに
業務でClickUpを使用していますが、タスクのコメントが追加された際にSlackに通知できるようにしたいと思いました。
まずは、Lambdaでイベントを受け取る方法についてまとめました。## 準備
### Lambda
– 関数を作成する
– 今回は簡易性のためにAPI Gatewayは使わずに関数URLを使う### ClickUp
– 以下に記載の順序でAccessトークンを取得する
> Finding your token:
> Navigate to your personal Settings
> Click Apps in the left sidebar
> Click Generate to create your API token
> Click Copy to copy the key to your clipboardhttps://docs.clickup.com/en/articles/1367130-getting-started-with-the-clickup-api
– 以下コマンドでWebhookを作
stepfunctionsでのDynamoDBを使用した多重実行制御
# はじめに
AWSのEventBridgeを使用して定期実行などを行う際、最低1回の実行が保証されている([参照](https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-troubleshooting.html))。
しかし、処理によっては多重実行が望まれないものもある。
そこで今回は、DynamoDBを用いて、stepfunctionsの多重実行を制御する方法を考えた。# 実装
今回は、日次で1回のみ行う処理をイメージした。ステートマシンの構造は以下の通りである。– DynamoDBに実行日を表す値(yyyymmdd)を入れる
– 上の処理が正常に動作したらメインの処理が走る、エラーが起こったらステートマシンを終了する## DynamoDBのテーブル作成
今回はtestというテーブル名で、パーティションキーをyyyymmddとするテーブルを作成した。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/
GoでLambda Function URLs ハンズオン
# はじめに
この記事はGoでLambda Function URLsをハンズオンしてみる内容となっています。
筆者がLambdaでGoを扱うこと自体が初めてだったため備忘録として簡単に環境構築からデプロイまでの手順も載せています。# 環境
MacBook Air M1# ハンズオン
ランタイム Go1.xを選択後、
Lambdaの関数の作成画面で詳細設定を開き “関数URLを有効化”をチェックします。
(認証はパブリックな利用を想定してNONEを設定しました。)
![function_urls.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1391445/8b50af02-81e4-6645-cfa6-748df1ee3db9.png)ランタイム設定のハンドラが`hello`となっているので適当な名前に変更します。
![runtime_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1391
【個人開発】今スーパーで安い食材と関連レシピをラインで探せるボットの友達が1000人超えたのでログを晒していく
以前「[レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話](https://qiita.com/kazukinagata/items/e40dd5ecc143532329e8)」という記事で紹介させていただいたラインボットの友達が1,000人を超えていたので、ユーザーの利用状況をログから分析して晒していきます。
![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201783/db8c51e1-3700-efc1-1a16-49351d2fa767.png)
※ラインボットやスクレイピングなどの技術的な話は前記事に譲って、本記事では技術については触れません。
## どんなボットなのか
1. イオン、イトーヨーカ堂、西友3社のネットスーパーから、今安くなってる食材を検索できる
2. 食材名から、リュウジさんや山本ゆりさんなど著名な料理研究家さんの関連レシピを探せるというのが主な機能です。
Windows環境でゼロからRuby + Lambda + API GatewayでAPI作って公開するまでの記事
# 概要
この記事では、Windows環境でゼロからRubyの開発環境を作って、ローカルで作成したコードをLambdaにアップし、API Gatewayを通して公開するまでの手順を記載します。# 対象
・細かいことは良いから、とりあえずRubyでAPI作ってWeb公開したい人
・Lambdaとやらを使ってとりあえず何か動くものを作りたいが、何から初めて良いか分からない人# 環境
– windows10
– Ruby 2.7# 目次
– 開発環境を作る
– Lambda関数を作る
– ローカルのコードをLambdaにデプロイする
– API GatewayでWeb公開する# 開発環境を作る
まずはRubyの開発環境を作ります。### Rubyのインストール
以下からRubyをインストールします。
■Ruby
https://rubyinstaller.org/downloads/RubyはRuby+Devkitのver 2.7をDLして下さい
ver 2.7なのは、Lambda上で動くRubyが2.7なので環境を合わせるためです。
+Devkit版なのは、VSC
【EC2】LambdaでEC2インスタンスを自動起動・停止
## EC2インスタンスを自動停止させたい
社内利用用のEC2インスタンスなど夜間や日中だけは停止させておきたいEC2インスタンスがあり、Lambdaスクリプトで実現させました## EC2インスタンのタグ付け
EC2インスタンスにタグを付けて、そのタグを付けたインスタンスを自動で停止させるようにします。
タグはなんでもいいのですが
keyにAutoStop
valueにtrue
といれておきます## Lambdaスクリプト
前提としてLambda関数にはEC2のstart・stopとdescribeの権限をIAMロールに付与する必要があります。“`python
import boto3
region = ‘ap-northeast-1’
ec2 = boto3.client(‘ec2’, region_name=region)def lambda_handler(event, context):
custom_filter = [{
‘Name’:’AutoStop’,
‘Values’: [‘true’]}]
[Python] DynamoDBをLambdaから使ってみる
# はじめに
Boto3の公式ドキュメントを参考にしてLambdaからPythonを使ってDynamoDBを読み書きしてみます。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html
## DynamoDBでテーブルの作成
テーブル名とパーティションキーだけ指定して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83224/5777a24b-542f-2bac-8ac7-f0f5a7231963.png)
## Lambdaで権限設定
実行ロールをクリックして編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.a
API Gateway+LambdaのAPI実行時にMissing Authentication Tokenとなった場合の確認観点
## はじめに
API Gateway + LambdaでAPIを作成して、アクセスした際にタイトルのエラーが発生したので、その際の確認観点を記載します。## エラー内容
– ステータスコード: 403
– エラーメッセージ: Missing Authentication Token## 試したこと
### Missing Authentication Tokenで検索
– 認証情報周りは特に問題なさそうでした。### 403のステータスコードの意味を検索
ウィキペディアによると、以下と書いてあります。> ページが存在するものの、特定のアクセス者にページを表示する権限が付与されず、アクセスが拒否されたことを示すもの。また、サイトの制作者側の設計ミスによる障害やサイトが非常に混雑している時、URLが間違っている場合にも表示されることがある。
Ref:https://ja.wikipedia.org/wiki/HTTP_403
> URLが間違っている場合にも表示されることがある。
とあったので、この観点で確認してみました。
## 原因
– 上記の通り、APIのエン
AWS Lambda Powertoolsで実現する快適Lambda生活
# TL:DR
AWSでサーバレス開発を初めて早1年強、毎回関数コードにLoggerやX-Rayのコードを埋め込むのに疲れ始めていました。
そんな折に発見したLambda Powertools(Python)が非常にお手軽かつ便利そうだったので使ってみました。# AWS Lambda Powertoolsって何?
[GitHubのProject](https://github.com/awslabs/aws-lambda-powertools-python)より引用
> A suite of Python utilities for AWS Lambda functions to ease adopting best practices such as tracing, structured logging, custom metrics, and more. (AWS Lambda Powertools Java and Typescript is also available).上記からも分かるように、Lambda関数実行時のトレーシング、ロギングをベストプラクティスに沿う
【AWSハンズオン】サーバーレスクラウドを利用してSNSアプリを実装する。
こんにちは、k_ukiです。
現在、「AWSではじめるクラウド開発入門」という書籍の12章を進めています。
ここでは、10章,11章で学習したサーバレスクラウド(Lambda,S3,DynamoDB)を使用し、シンプルなWebアプリを実装するという内容でした。今回のハンズオンで学んだことをここにまとめていきます。## アプリの説明
### アプリの概要
利用者が考えて作った俳句を投稿し、ユーザがいいねできるようなSNSアプリです。
また、アプリ名を”Bashoutter”としています。
機能要件は以下の通りです。
– 俳句の一覧を取得
– 俳句を新規投稿する。
– 俳句にお気に入り表を一つ入れる
– 俳句を削除する
### API上記の機能要件を満たすための最小限の設計として4つのREST APIを実装しています。
GET/haiku 俳句の一覧を取得 POST/haiku 俳句を新規投稿する。 PATCH/haiku/{ite AWS Lambda 実践ガイド 第2版でつまずいたところまとめ
AWS Lambda 実践入門 第2版でつまずいたところを忘備録的にまとめておく。
# 1. 書籍のとおりにカスタムドメインのマッピングをやるとアクセスに失敗
図6-102のとおりにLambda関数をカスタムドメインにマッピングすると6-9-5が以下のエラーをCloudWatchで吐くようになって失敗する。
“`
The IAM role configured on the integration or API Gateway doesn’t have permissions to call the integration. Check the permissions and try again.
“`原因は、図6-102で「パス(オプション)」を設定しているため。ここに文字列を指定すると、関数を呼び出すためのURLで関数へのルートの前にこのパスが付与されてしまうため。つまり、図6-102のとおりに進めると以下のようなURLを生成してしまうことになる。
“`
https://api.aws-bookexample.com/userregistFunction/userError: Failed to parse template: ‘utf-8’ codec can’t decode byte 0x83 in position XXX: invalid start byteの対処法
## はじめに
sam local invoke時に題記のエラーが発生したので、対処法を調べてまとめます。“`bash
sam local invoke –skip-pull-image –event .\devfiles\event.json –template .\devfiles\template.yaml
Error: Failed to parse template: ‘utf-8’ codec can’t decode byte 0x83 in position 734: invalid start byte
“`## 対処方法
template.yamlがUTF-8でなかったので、UTF-8で保存し直しました。## 参考
https://teratail.com/questions/120137Lambda 関数 URL
# 概要
従来は、HTTP(s)経由で、API Gateway –→ Lambda とアクセスしていたが、関数 URL がサポートされた事で、API Gateway なしででアクセスできるようになった。
パブリックに公開するAPIや、簡易な認証実装でも差し支えの無いAPIの場合は、AWSLambdaで実装する場合には、関数 URL の利用を検討するとよい。
# 認証タイプ
「認証タイプ」には**AWS_IAM**と**NONE**があります。
– **AWS_IAM** : 認証された IAM ユーザーとロールのみがアクセス可能。
– **NONE** : パブリックにアクセス可能。# CORS
CORS を使用して、任意のドメインから関数 URL へのアクセスを許可することも可能。
# 参考URL
https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/
#
Lambda@Edge のオリジンリクエストで、bodyの内容を書き換えてレスポンスを返す方法 [sync-request]
# はじめに
Lambda@Edge(以後、L@E)で、bodyの一部を書き換えてレスポンスを返す方法についてまとめました。
L@Eでbodyを書き換えるには、ビューアーリクエストもしくはオリジンリクエストで可能です。2つの違いは以下になります。
>ビューワーリクエスト
>- CloudFront がビューワーからリクエストを受け取ると、リクエストされたオブジェクトが CloudFront キャッシュにあるかどうかを確認する前に関数が実行されます。>オリジンリクエスト
>- CloudFront がリクエストをオリジンに転送したときにのみ、関数が実行されます。リクエストされたオブジェクトが CloudFront キャッシュ内にある場合、関数は実行されません。
L@Eでbodyを書き換える際の制限は他にもあり、下記のドキュメントに記載されています。https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html#lambda-at
関連する記事
OTHERカテゴリの最新記事
- 2024.11.09
iOS関連のことを調べてみた
- 2024.11.09
JAVA関連のことを調べてみた
- 2024.11.09
JavaScript関連のことを調べてみた
- 2024.11.09
Rails関連のことを調べてみた
- 2024.11.09
Python関連のことを調べてみた
- 2024.11.09
Lambda関連のことを調べてみた