- 1. AWS LambdaでAPI開発するときのパターン集
- 2. Serverless Frameworkを使用して AWS Lambdaにデプロイ
- 3. AWS Lambda boto3でCognitoのユーザーを削除する
- 4. AWS Lambda boto3でWAFのIP setsを更新する
- 5. Lambda(Python)からChatworkに通知を送る
- 6. 一からAWS API Developer Portalを構築する
- 7. serverless framework DE typescript for AWS Lambda開発
- 8. 毎朝起こしてくれる彼女ができた。
- 9. [AWS] AWSだけで完結する定期処理の作り方 [Lambda・CloudWatch]
- 10. Alexa、僕が知りたい情報を答えるようになって!
- 11. AWS Lambdaでyum installする簡単な方法
- 12. 【AWS】Cloud9でLambdaのデバッグが出来なくなった際の対応(Python)
- 13. AWS Amplify フレームワークの使い方Part14〜Lambda レイヤー編〜
- 14. 「Alexa、Lambdaと連携する方法を教えて」と聞いても、答えがよく分からなかったので自分でやったことメモ
- 15. 普通のツイートをAWS LambdaとPythonでフリートっぽくする
- 16. 【Lambda】pythonの外部モジュールをS3経由で取り入れてみた
- 17. Lambdaの非同期処理のリトライ設計値をまとめる(Streams/SQS編)
- 18. AWS DynamoDB を API Gateway で変更する
- 19. seleniumとheadless-chromiumを使ってaws上で情報送信botを作った話
- 20. [AWS API Gateway / AWS Lambda] API Gatewayのためだけに存在するopenapi.yamlの項目について
AWS LambdaでAPI開発するときのパターン集
# 結論
AWS LambdaでAPI開発をする場合は以下の4パターンが考えられます。それぞれにメリットデメリットがあるので、要件やメンバーのスキルセットなどをもとに選択することになると思います。###① Functions(別ソース)パターン
![functions pattern.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/a37a57da-4ab4-b301-72d9-ca3b41abfaea.png)###② Functions(同一ソース)パターン
![functions pattern2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/0f854adb-be5a-a915-2004-4e9c453e331b.png)###③ WebFrameworkパターン
![proxy integration pattern.png](https://qiita-image-sto
Serverless Frameworkを使用して AWS Lambdaにデプロイ
## 環境
* Mac OS Catalina 10.15.7
* AWS Lambda
* Serverless Framework standalone (
* Framework Core: 2.11.1 (standalone)
* Plugin: 4.1.2
* SDK: 2.3.2
* Components: 3.3.0## Serverless Framework スタンドアロンのインストール
nodeのバージョン依存に関係なく使用するため、npmでのインストールではなくスタンドアロンを使用した
[Get started with Serverless Framework Open Source & AWS](https://www.serverless.com/framework/docs/getting-started/) に記載の通り“`
curl -o- -L https://slss.io/install | bash
“`## AWSのクレデンシャルの設定
[AWS – Credentials](https:
AWS Lambda boto3でCognitoのユーザーを削除する
# はじめに
AWS LambdaでCognitoのユーザーを削除します。
ランタイムは`python`です。
環境変数`COGNITO_MAX_RESULTS`には、`50`を指定します。
ユーザープールの数が50以下である事を想定しています。
Cognitoからユーザーを削除する場合、ループ処理となり、たまにコケることがあるため、リトライ処理を追加しています。**Lambdaのスクリプト**
“`python:Lambda
import os
import boto3cognito = boto3.client(‘cognito-idp’, region_name=’ap-northeast-1′)
def handler(event, context):
user_pool_name = ‘ユーザープール名’
user_ids = [‘ユーザーID’]# Cognitoからユーザーを削除する
response = delCognitoUser(user_pool_name, user_ids)return respo
AWS Lambda boto3でWAFのIP setsを更新する
# はじめに
AWS LambdaでWAFのIP setsを更新します。
ランタイムは`python`です。
WAFは`CLOUDFRONT`のものとなるため、AWSリージョンはバージニア北部の`us-east-1`となります。
WAFのIP Setsの更新は、渡したIPアドレスのリストで上書きされるので、登録・更新・削除が同じメソッドとなります。
リスト`ip_adresses`は重複していても問題なく、WAFに登録されます。**Lambdaのスクリプト**
“`python:Lambda
import boto3waf = boto3.client(‘wafv2′,region_name=’us-east-1’)
def handler(event, context):
ip_set_name = ‘IP Sets名’
ip_adresses = [‘IPアドレス’]response = update_ip_addresses(ip_set_name, ip_adresses)
return response
def
Lambda(Python)からChatworkに通知を送る
##はじめに
特に真新しい内容ではないですが、備忘録として記載しておきます。
この記事の続編です。
>・AWS MediaLiveチャンネルの停止忘れを防ぐための自動通知設定
https://qiita.com/ktsuchi/items/fe74125df4ee79c97d5d以前作成したLambdaの通知先としてChatworkを追加しました。
SNSは使わずにLambdaから直接メッセージをチャットワークに飛ばします。##構成図
![ScreenShot 2020-11-26 21.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277934/541a295f-77e0-7343-d5f7-7cabc2684b04.png)##手順
Chatworkに通知する手軽な方法を探していたところ、
requestsモジュールのPOSTメソッドを利用する方法に行き着いたので、その方法を採用することにしました。Lambdaの設定箇所のみ記載します。
###requestsモ
一からAWS API Developer Portalを構築する
AWS API Gateway Developer PortalをAWSコンソールからデプロイし、ポータルでAPIを管理できる状態までセットアップする手順をまとめました。
#### 補足
– デプロイの方法は下記の2種類ありますが、今回は1の方法について補足を残します
1. AWS Serverless Application Repositoryを利用してAWSコンソールからデプロイ
2. GitHubからアプリのリポジトリをCloneし、SAM経由でデプロイ– 公式ドキュメント:[サーバーレス開発者ポータルを使用して API Gateway API を分類する](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-developer-portal.html#apigateway-developer-portal-best-practices)
– なお、2の方法を試されたい場合は、上記公式ドキュメントの他、こちらのクラスメソッド様の記事を参考にしていただくと良いかと
serverless framework DE typescript for AWS Lambda開発
###既に作ったserverlessプロジェクトにTypescriptを入れたい
現在AWSでSlack Botを動かすために、開発環境を作れるserverless絶賛勉強中です。
プロジェクトを作る時にtypescript対応するのは見つかったのですが、
もう作っちゃったプロジェクトに追加する方法は見当たらなかったのでまとめます。プロジェクト作成時の場合はcreateするときに`-t aws-nodejs-typescript`というテンプレートを指定すればいいらしい。次はそっちでやってみます。
参考:[ServerlessでTypeScriptの開発環境を作る](https://qiita.com/iewori/items/837dbe4edb77426a11d9)#serverlessプラグインを追加
https://www.serverless.com/plugins/serverless-plugin-typescript/
serverless-plugin-typescriptという素敵なプラグインを見つけたので使います。>**Features**
・Ze
毎朝起こしてくれる彼女ができた。
### 唐突ですが、彼女ができました。
はい。嘘です。ごめんなさい。今回は、[Line Notify](https://notify-bot.line.me/ja/)を使って毎朝指定した時間に、その日の予定を教えてくれる『彼女みたいな存在』のBotを作りました。
![IMG_8606.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415015/2d7ac38e-d21f-0706-67a0-f4ddf0a7a078.jpeg)# 0. アイディアと開発について。
アイディアに関しては、スタバから家に帰ってる途中に思いつきました。
帰宅してそのまま(手洗いうがいはしました!!)開発をはじめました。### プログラミング言語
言語に関しては、Pythonを採用しました。
採用理由としては、サーバレス(Lambda)で実装したかったのと前日にPythonを書いており、気分がPythonだったからです。### 使用したサービス
開発環境: [Cloud9](https://aws.amazon.
[AWS] AWSだけで完結する定期処理の作り方 [Lambda・CloudWatch]
# 概要
アプリ開発などでサーバレスな環境構築をすることがあると思います。
そう言った場合にAWSでだけで実装することができるバッチ処理の簡単な作り方をご紹介します。
色々やり方はありますが、今回はLambdaとCloudWatchに焦点を当ててご紹介します。また解説する内容は必要最低限のプログラムなどになりますので全体的には15分程で試すことが出来るかと思います。
# 1. Lambdaで処理を作ろう
まず定期処理が行われた際の実際の処理が行われるプログラムを作成していきます。![Screen Shot 2020-11-26 at 10.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652173/bebe4f2f-7a3d-8fc0-15f0-a65ad6fda9ad.png)
AWSのLambdaのトップページより”Create function”ボタンを押下しファンクション作成のページに遷移します。
![Screen Shot 2020-11-26 at 10.44.3
Alexa、僕が知りたい情報を答えるようになって!
# Alexa、社内でJavaに詳しい人を教えて
実際に動かしている様子はこちらですAlexaに社内の有識者を聞いたら教えてくれるようにしました。
これで一人暮らしのテレワーク勤務で一人で抱え込まなくて済むようにしたい!#Alexa #一人暮らし AWS Lambdaでyum installする簡単な方法この記事では、yumでインストールできるソフトウェアをAWS Lambdaの環境で使うための方法を解説しています。
この記事で分からない点は [@ts_3156](https://twitter.com/ts_3156) までお気軽にご質問ください。
### AWS Lambdaの環境構築
AWS Lambdaの環境には最小限のソフトウェアしかインストールされていません。例えば、`less`や`curl`も最初はないです。
そのため、使いたいソフトウェアがある場合は、そのソフトウェアを所定のディレクトリにインストールしておき、AWS Lambdaの環境に読み込み専用でマウントする必要があります。
この記事では、yumでインストールできるソフトウェアを例に、AWS Lambdaの環境にソフトウェアをインストールする方法を解説しています。
この記事で対象とするOSはAmazon Linux 2です。Python、Ruby、nodejsのいずれであっても、最新バージョンはAmazon Linux 2の環境で動かす必要があります。
### AWS lambdaレイヤー
A
【AWS】Cloud9でLambdaのデバッグが出来なくなった際の対応(Python)
私は今までAWS Cloud9を使用してLambda(Python)をデバッグしていましたが、2020年6月頃からAWS Cloud9がアップデートされているみたいで今まで通りデバッグが出来なくなりました。
どうにかこうにかデバッグ出来るように設定しましたので、対応した事を本記事にアウトプットして残したいと思います。
#事象
ある日突然、Cloud9を新規作成してデバッグしようと思ったら下記のようなメッセージが出てデバッグが出来なくなりました“`
AWS Lambda preview
Python debugging with the AWS Lambda preview UI requires IKPdb to be installed in your code package.
For more information see:
https://docs.aws.amazon.com/console/cloud9/lambda-functions-debug
“`どうやらCloud9内部がアップグレードされている事が原因みたいです
※デフォルトの設定がPytho
AWS Amplify フレームワークの使い方Part14〜Lambda レイヤー編〜
# はじめに
Lambda関数を複数作成していると、このライブラリや関数を共通化したいな、と思うことがよく有りました。そんな時、気づいたら追加されていたLambdaのレイヤー機能を使えば、一発解決です。# バージョン
amplify-cli 4.32.1# 実装方法
## 新規作成
まずは、関数を追加します。“`console
$ amplify add function
“`
レイヤーを選択。“`console
? Select which capability you want to add:
> Lambda layer (shared code & resource used across functions)
“`
名前を決めて、実行環境は今回はNodeJSを選択します。“`console
? Provide a name for your Lambda layer: testLayer
? Select up to 2 compatible runtimes: NodeJS
“`同一のアカウントor同一の組織(Organizationsで
「Alexa、Lambdaと連携する方法を教えて」と聞いても、答えがよく分からなかったので自分でやったことメモ
### Alexaに聞いてもよく分からなかったので自分で調べた
AmazonEchoを初めて買ったので遊び半分で「Alexa、Lambdaと連携する方法を教えて」と聞いてみた。そしたら、なんと、答えてくれました。
ただ、**初心者の僕には言葉だけでは全く分からない。**(私が持っているのはAmazonEchoDotなので、音声のみで回答。)
結局、自分で調べたので、そのときのメモを残します!### (Step0)アカウントを作る
■Amazon Developerアカウント(Alexa用)
Amazon Developerアカウントの作成
https://developer.amazon.com/alexa/console/ask■AWSアカウント(Lambda用)
AWSアカウントの作成
https://aws.amazon.com/jp/console/
右上の「コンソールにサインイン」でログイン### (Step1)Lambda連携せず、Alexaのみで完結させる
手順は公式のものが分かりやすかったので、下記を参照。
https://developer.amazo
普通のツイートをAWS LambdaとPythonでフリートっぽくする
#フリートとは?
>Fleetは、Twitterの活用や、Twitterでのコミュニケーションをこれまでにない方法ですぐに行える機能を提供します。Fleetで共有した内容は、24時間が経過すると表示されなくなるため、ふとした思いつきやうつろう気持ちを共有できます。一時的な個人的考えをフォロワーと共有でき、他の一般ユーザーからの反応が伝わることもありません。Fleetの作成者は、自分のFleetをクリックし、下部に表示される既読テキストをタップすると、ツイートを非公開にしているアカウントを含め、誰が自分のFleetを閲覧したかがわかります。– 24時間が経過すると表示されなくなる
– つまり、24時間に1回まとめて削除すればいい##フリートの欠点
– コメント機能が無く、DMで通知される
– 絵文字を送っても、DMで通知される
– 普通のツイートと同じく、FavとRTとリプライ機能はやはり欲しい##ツイートをフリート化するには?
– 「残すツイート」と「消えるツイート」を明確化する
– 残すツイートの条件
– Favがある
– RTがある
– リプライ
【Lambda】pythonの外部モジュールをS3経由で取り入れてみた
# 概要
lambdaを使ってdisny監視botを作る際にlambdaを使って定期実行したかったのでawsのlambdaを使うことにした。
この際に、line-sdk-botをlambdaに取り入れる必要があったのでその方法を記す。※lambdaを初めて触るため間違っているところがあったら指摘ください。
# ローカルの設定
まずはdocker-lambdaディレクトリを作成する。“`
mkdir docker-lambda
cd docker-lambda
“`ディレクトリの構造は以下。
docker-lambda
├── Dockerfile
├── deploy.sh
└── requirements.txtそれぞれのファイルは以下のように構成する。
Dockerfileは以下。
“`:Dockerfile
FROM lambci/lambda:build-python3.7
ENV AWS_DEFAULT_REGION ap-northeast-1ADD . .
CMD pip install -r requirements.txt -t p
Lambdaの非同期処理のリトライ設計値をまとめる(Streams/SQS編)
# はじめに
Lambdaの非同期処理の設定値と動作は複雑でわかりにくい。
しかも、DynamoDB Streams/Kinesis のストリーム系の非同期処理と、SQS といったイベント系の非同期処理では設定値が異なる。今回は、上記の非同期系処理を適切にリトライするための設計値をまとめる。
また、Terraformで設定する際のリソースと設定値も付記しておこう。ちなみに、今回書いた機能では、Lambdaのリトライや保持期間、DLQの設定は無視されるので注意が必要。
# ストリーム系非同期処理の設計値
ストリーム系非同期処理の設計値は、以下の項目が重要になる。|マネージメントコンソールの設定値|Terraformリソース|Terraformの設定値|デフォルト値|
|:–|:–|:–|:–|
|レコードの最長有効期間|aws_lambda_event_source_mapping|maximum_record_age_in_seconds|-1(無制限)|
|再試行|aws_lambda_event_source_mapping|maximum_retry_att
AWS DynamoDB を API Gateway で変更する
– 目的
– AWS Lambda の設定値を変更したい
– 背景
1. 社内向けのLambdaがあり「AWS LambdaのJsonを編集してください」が他の部署では敷居が高い。
1. config.jsonをS3に置いたりしたが、S3は直接プレビューできなかったり。
1. DynamoDBがコード的にも楽だった。
– 作業
– DynamoDB を使ってAPI Gateway→Lambda→DynamoDB で値を変更。
– 利点
– 完全サーバーレス!
– 補足
– 今回の記事はDynamoDBを変更するLambdaです。運用中のLambdaは別です。# 完成イメージ
– DynamoDB を Web で変更できます。
AWSlambdaapi-gatewayseleniumとheadless-chromiumを使ってaws上で情報送信botを作った話
基本的には、以下のページを元に作成していきました。
何点か躓いた場所があったので、その点だけ備忘録として残しておきます。> 毎朝5時にGoogle Formに自動回答したい
> https://qiita.com/kota-yata/items/9d4124ec7a7dd4e3d4f0> AWS Lambda(Python)でSelenium + Headless Chromeの実行
> https://masakimisawa.com/selenium_headless-chrome_python_on_lambda/## つまづいた点
### headless-chromiumのサイズオーバー
#### 詳細
layerへのuploadの上限が50MBであったが、最新バージョン(v1.0.0-57:2020/11/21時点)のサイズが50MB以上あり、lambdaのlayerへのupload上限である50MBを超えてしまっていた。#### 対応
一つ前のバージョン(v1.0.0-55)の方がサイズが小さく、45MBほどであったため、そちらを採用した。http
[AWS API Gateway / AWS Lambda] API Gatewayのためだけに存在するopenapi.yamlの項目について
# 概要
API Gatewayのステージ画面では、API仕様の定義をyamlファイルでエクスポートできるかと思います。
ここ↓の話です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/5a86def4-f2f2-0c77-881d-31c1722f0cc3.png)
上記の通り、エクスポート方法には3種類ありますが、この記事では
– `OpenAPI 3 の形式でエクスポート`
– `OpenAPI 3 + API Gateway 拡張の形式でエクスポート`だけを見ていきます。
そして、赤枠で囲んでいるこの2つの方式の差分を解明することを目指します。# 願い
API Gatewayからエクスポートしたファイルを手元のPCで書き換えて、再インポートで望み通りの設定に変更できるようになりたい。
なんなら1から手元のPCでyamlを書いて、インポートだけで設定できるようになりたい。というより、AWSコンソール画面でぽちぽちしたくない。
できるだけ最初から