- 1. 【Python】LambdaからのAPI呼び出しを並行処理・並列処理で実装して処理時間を比較してみた
- 2. BoltでSlackアプリを作る際につまづきやすいこと
- 3. Lambda (Python) で EBS ボリュームのスナップショットを削除してみる
- 4. Lambda (Python) で EC2 のイメージ (AMI) を作成してみる
- 5. Lambda (Python) でメールを送信してみる
- 6. pip installしたライブラリをLambda layerする
- 7. 【AWS】高額請求にはもううんざり!RDSの自動起動で知らないうちに課金される状況の回避策を考えてみる。
- 8. Amazon Connect で自動認証を利用したコールフローを実装
- 9. python3.7でローカルからLambda関数をデプロイする手順
- 10. CloudFormationでEC2インスタンスがALBのヘルスチェックに合格したらスタックの更新を続行する方法
- 11. ALBのリスナールールを自動で切り替えて、更新中だけメンテナンス画面を表示する方法
- 12. ALBのリスナールールを自動で切り替えるLambda関数
- 13. Lambda関数のCloudwatchEventsトリガー一覧を取得する
- 14. AWS Amplify + API gateway + Lambda + Dynamodb でシンプルなサーバレスWebアプリを作ってみた
- 15. CloudWatch Logsで特定の文字列を検知したらLambdaでメール通知する
- 16. 【AWS】API Gatewayでカスタムなステータスコードを返す方法
- 17. GoとGinとLambdaでSlack botを作成する
- 18. Xamarin.Forms+AppSync+Lambdaでデータを取得してみる
- 19. LINEで肌状態管理できるチャットボットを作る
- 20. AWS LambdaでqrcodeとPillowを利用したQRコード生成(カスタムレイヤーを利用)
【Python】LambdaからのAPI呼び出しを並行処理・並列処理で実装して処理時間を比較してみた
## はじめに
Pythonで記述したLambda関数からAWSのAPIを呼び出す処理で、いまいち処理性能が出ないという課題があったので、並行処理・並列処理を実装して処理の効率が上がるのか検証してみました。並行・並列処理とは?とうい方は以下の記事に分かりやすく説明されているので参考になさってください。
https://qiita.com/4_mio_11/items/7f418ca661d9f5a2a39d
## 前提
### 検証の内容
UUIDのリストを1000件分作成し、一件ずつSQSに登録します。
SQSに登録する処理を以下の三つの方法で実装し、それぞれの処理にかかる時間を比較します。* forループ
* 並行処理
* 並列処理「とりあえず動いて結果が比較出来るもの」を最短で作っていますのでコードの汚さには目をつぶっていただけると幸いです。
### 用意するもの
* Lambda関数
* リソース名:test-lambda
* ランタイム:Python 3.7
* メモリ:512MB
* タイムアウト:3分
* CPU
BoltでSlackアプリを作る際につまづきやすいこと
最近BoltでSlackアプリを作成しています。
何気にいろんなつまづきポイントがあったので、まとめて行こうと思います。## Slackアプリ作成時につまづきやすいポイント
### 送信データを処理してくれない!
モーダルを開くところまでは実装できても、送信ができない…というケースがありました。“`
url: (56) Recv failure: Connection reset by peer
“`何かの操作に対してアプリがアクションを起こすには、 `Interactivity & Shortcuts` をオンにして
Request先のURLを登録する必要があります。![スクリーンショット 2021-06-24 18.40.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441432/4bff9b4c-e126-1c8f-7815-222058181dc6.png)
### 特定の動作で弾かれる!
権限のスコープがうまく設定できていない可能性があります。
`OAu
Lambda (Python) で EBS ボリュームのスナップショットを削除してみる
# ■ はじめに
![963f9ca9395c096c234f891ad8877b28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/d838a89d-5dc1-d693-0517-add60ca2ce07.png)
ずいぶん昔に作成したものですが…
以下の処理に伴って、イメージを削除したものの、元の EC2 インスタンスの設定によっては、スナップショットが残ってしまうことがあるのでこちらで対応します。
– [Lambda \(Python\) で EC2 のイメージ \(AMI\) を作成してみる \- Qiita](https://qiita.com/kusokamayarou/items/83ed22802580ca09276f)
# ■ プログラムの流れ
1. EC2 インスタンスのイメージの一覧情報を取得
1. EBS ボリュームのスナップショットの一覧情報を取得
1. 上記二つの一覧情報から、削除されたイメージにも関わらず、残っているスナップショットを抽出
1. 抽
Lambda (Python) で EC2 のイメージ (AMI) を作成してみる
# ■ はじめに
![963f9ca9395c096c234f891ad8877b28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/d838a89d-5dc1-d693-0517-add60ca2ce07.png)
ずいぶん昔に作成したものですが…
特定の EC2 インスタンスについて、定期的にイメージを作成したかったのでやってみました。
# ■ プログラムの流れ
1. EC2 インスタンスのイメージの一覧情報を取得
1. 古いイメージを削除
1. EC2 インスタンスの一覧情報を取得
1. 一覧情報の内、特定の EC2 インスタンスについて、イメージを作成– イメージを作成する EC2 インスタンスの識別としては、今回は、Name タグの先頭文字列が「★」であれば、イメージを作成することに。
# ■ コード
コードは、以下。
“`python:MaintenanceEC2_Image.py
#!/usr/bin/env python
# -*- coding: u
Lambda (Python) でメールを送信してみる
# ■ はじめに
![963f9ca9395c096c234f891ad8877b28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/d838a89d-5dc1-d693-0517-add60ca2ce07.png)
Lambda からメールを送信したかったので、やってみました。
ほぼほぼ、こちらの記事の通りにやっただけですか…
– [【Python】メール送信をしてみよう! \| トモテク](https://develop.blue/2020/03/python-use-mail/)
ありがとうございました!
感謝 ♪♪♪?♂️?♂️?♂️
# ■ コード
コードは、以下。
“`python
import os
import json
import smtplib
from email import messagesmtp_host = ‘[メールホスト]’
smtp_port = [ポート番号]def lambda_handler(event, co
pip installしたライブラリをLambda layerする
lambda環境で実行するとpython3.8環境のsys.pathは以下でした。
“`
[
‘/var/task’,
‘/opt/python/lib/python3.8/site-packages’,
‘/opt/python’, // ここ
‘/var/runtime’,
‘/var/lang/lib/python38.zip’,
‘/var/lang/lib/python3.8’,
‘/var/lang/lib/python3.8/lib-dynload’,
‘/var/lang/lib/python3.8/site-packages’,
‘/opt/python/lib/python3.8/site-packages’
]
“`layerはopt以下に展開されるので、解凍して `python/モジュール` という構成になるzipを作ればよいです。
なので次のようにpythonディレクトリ以下にpipでライブラリをインストールすれば、layerで複数Lambda関数から利用できるようになります。`pip insta
【AWS】高額請求にはもううんざり!RDSの自動起動で知らないうちに課金される状況の回避策を考えてみる。
#はじめに
こんにちは。突然ですがAWSアカウントを検証用途などで自己保有していて、リソースの消し忘れで高額請求された経験のある方はいらっしゃいますか?
**わたしはあります。**しかも過去に2度も。。。
どちらもAuroraを終了ではなく停止にしていたことで、停止してから7日後に自動起動してしまい、請求が来た時に初めて課金額が高額になっていたことがわかった、という経緯でした。
私の場合はAWSの勉強をし始めたときに**「検証で利用したリソースは検証が終了したらすぐに削除すること」**と口酸っぱく言われていたのですが、「また使うかも?作り直すのも面倒だし、終了じゃなくて停止にしておこう」というもったいない精神が働いてしまって、2度も痛い目を見てしまいました。。
検証用リソースはすぐに削除するというのは大前提として、2度あることは3度あるとも言いますし、同じ失敗はしたくないのでリソースの削除を行わなかった場合の高額請求にならないための回避策を考えてみました。
#回避策
##構成図
回避策として、Auroraが起動したのをトリガーに、LambdaでAuroraを自動的に停止し
Amazon Connect で自動認証を利用したコールフローを実装
**本記事では、Amazon Connect を使用したコンタクトセンターを想定し、着信があった際に自動認証を行った上でCCPへ着信させる方法を記載する。Amazon Connect 上で用意する電話番号の取得、ユーザー、ルーティングプロファイルなどの作成は割愛する。**
構成は以下のようなイメージ
Amazon Connect / Lambda / DynamoDB / SNS を使用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/7cd801f7-6a7d-3bf5-cf8a-56a30e181d23.png)#仕組みについて
① ユーザーが Amazon Connect の電話番号へ発信
② DynamoDB 上にある発信者番号のレコードを特定した場合、自動認証としてオペレーターと繋がる。
③ DynamoDB 上に発信者番号のレコードが存在しない場合、SMS を送信し、ワンタイムパスワード認証を実施する。
④ 認証が通れば発信者番号に Dynamo
python3.7でローカルからLambda関数をデプロイする手順
# What’s this?
pipenvを利用してコマンド1発でローカル環境のソースコードをLmabda関数にデプロイする際の手順をまとめた記事です。# IAMからユーザー作成
最初にローカルからLambdaへのデプロイを実施するためのIAMユーザーを作成します。
IAM > ユーザー > ユーザーを追加からユーザーを作成します。今回はユーザー名「dev_user」で作成します。
アクセスの種類はプログラムによるアクセスにチェックします。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566229/54d51d8c-0850-5bb1-de34-d8b3da250dd9.png)
アクセス権限は後から付与できるので一旦スキップしてユーザーを作成します。
ユーザー作成ができるとシークレットアクセスキーが発行されるのでダウンロードしてておきます。作成されたユーザーに対してLambdaのデプロイに必要なアクセス権限を追加します。
アクセス権限 > インラインポリシーの追加
CloudFormationでEC2インスタンスがALBのヘルスチェックに合格したらスタックの更新を続行する方法
# 結論
[AWS::CloudFormation::Init](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-init.html)を使いましょう!
ということなのですが、ここで出てくる`cfn-init`やら`cfn-signal`にかなりハマったので、調査した結果と実際の使用方法を紹介します。# きっかけ
とあるプロジェクトで、
**「EC2がALBのヘルスチェックで`healthy`になるまで更新を一時停止したい」**
という目的がありました。## なぜ?
CloudFormationによるAuto Scalingグループの置換更新で起動したEC2インスタンスにアクセスできなかったためです。
問題は、
**「ALBのヘルスチェックの結果に関わらず、CloudFormationの更新が完了する」**
ということでした。
具体的には、新しく起動したEC2インスタンスに対するALBのヘルスチェックの結果が`unhealthy`なのに、古いAuto Scaling
ALBのリスナールールを自動で切り替えて、更新中だけメンテナンス画面を表示する方法
CloudFormationによるリリース時にメンテナンス画面とEC2のサイトを自動で切り替えるために、ALBによるリスナールールを使用しました。CloudFormationからでなくても自動切り替えは可能だと思うので、参考になれば幸いです。
# 経緯
Auto Scalingグループ内のEC2インスタンスが常時1台という要件のもと、CloudFormationによるリリース時に、一時的にALB配下に2台のEC2インスタンスが起動するタイミングがあり、新旧どちらのインスタンスにも接続できてしまう状況が発生しました。これを解決するために、リリース中(CloudFormationによる更新中)はメンテナンス画面を表示し、更新が完了したら新しいEC2に接続するという挙動を目指しました。更新が完了した時点で古いEC2インスタンスはALBから登録解除されているので、更新完了後は新しいEC2インスタンスにのみ接続されるようになります。# 構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1
ALBのリスナールールを自動で切り替えるLambda関数
[SetRulePriorities](https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/APIReference/API_SetRulePriorities.html) APIを使用して、ALBのリスナールールを自動で切り替える関数です。
CloudFormationからSNS経由で通知を受け取り、CloudFormationによる更新中はメンテンナンス画面を表示し、更新が完了したらEC2のサイトを表示するというルールの切り替えを行います。# 概要
– ランタイム:`Node 14.x`
– アクセス権限:
– `AWSLambdaBasicExecutionRole`
– `ELB v2 SetRulePriorities`(カスタムポリシーで選択する)
– 環境変数
– `LogicalResourceId` : 更新するCloudFormationスタック名
– `ForwardRuleArn` : ターゲットグループへの転送ルールのARN
– `MaintenanceRu
Lambda関数のCloudwatchEventsトリガー一覧を取得する
# はじめに
最近、Lambda関数のトリガー画面が少し変わりました。
以前まではCloudwatch Eventsをトリガーに設定していた場合は、そのトリガーが有効なのか、無効なのかが表示されていました。
現在はその有効・無効が表示されなくなったので、元々設定されていたトリガーの状態がひと目でわからなくなりました。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296479/318c1c75-30a7-96aa-1729-0d4ece5f3211.png)# AWSCLIからCloudwatchEventsトリガーの一覧を取得する
現在、どのトリガーが有効かをマネジメントコンソール上から判断できるのはできますが、Cloudwatch Eventsのルール数や元々設定していたトリガーが多いとかなり面倒です。[^1] [^2]
AWSCLIで有効なCloudwatchEventsトリガーの一覧は下記で取得できます。“`bash
aws events list-rule-nam
AWS Amplify + API gateway + Lambda + Dynamodb でシンプルなサーバレスWebアプリを作ってみた
AWSのお勉強、Webアプリのお勉強、その他もろもろを兼ねてサーバレスWebアプリを作ってみた。
アプリ自体は簡単なものなので、本記事ではAWSの構成を中心に記述する。# アプリ概要
フリー麻雀の成績、収支を管理するアプリ。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306681/4e30d3ca-4bcb-93a3-f257-778d694f25a7.png)入力モードでは店舗名と着順(例:113234244)、収支を入力し、データベースに記録する。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306681/b7b79b9a-8d59-c59b-5258-e8d891c672ba.png)
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306681/928eb492-461f-52eb-12c9-f
CloudWatch Logsで特定の文字列を検知したらLambdaでメール通知する
## 概要
CloudWatch Logsに出力しているサーバーとかアプリのログで、特定の文字列を見つけたらLambdaにそのログ行を渡してメール通知させる、というSyslogで例えればswatchみたいなことを実装してみた
## 方式・構成
1. CloudWatch Logsのサブスクリプションフィルター機能を利用して特定の文字列にマッチしたらそのログをLambdaに渡す
1. Lambdaは渡されたログデータを加工してAmazon SNSに渡す
1. Amazon SNSは指定されたトピックからメールで管理者に通知する![structure1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168524/0a6fb2b6-943c-ce35-9c96-634f415705e5.png)
## 作業の大まかな手順
1. SNSトピックを設定する
1. Lambda関数を作成する
1. Lambda関数のロールにIAM権限を設定する
1. Lambda関数のコードを作成・テストする
1.
【AWS】API Gatewayでカスタムなステータスコードを返す方法
ふと、API Gatewayで指定したステータスコード(404とか500とか)を返したいと思い、色々な記事を見ていたのですが、どうにも上手く行かない。
例えば、Lambdaで404のステータスコードを返す関数を作成し、API Gatewayでアタッチしたとします。
“`js
exports.handler = async (event, context, callback) => {
const myErrorObj = {
errorType : “Page not found”,
httpStatus : 404,
}
return callback(JSON.stringify(myErrorObj));
// リクエストをしても200が返ってくる
};
“`これで404のステータスを渡せるんじゃないの?と思う方も多いと思います。
ただ、これを実際にリクエストすると、200のステータスコードが返ってきます。
なんとも不気味ですね。
しかも厄介。
恐らくこの辺の設定は全て自分で行わなければいけないら
GoとGinとLambdaでSlack botを作成する
社内でgoの勉強会みたいなのをやっておりまして、それの事前調査的な意味でのやってみた系blog記事となります。
# やりたいこと
こんな感じです。
– goで何かつくる
– 何かフレームワーク使う(gin)
– Lambdaとapi gateway使う
– deployはsam使う
– slack botとして動かす# 環境
– 普通のmac(m1じゃない)
# まずはhello world
なんか公式っぽいライブラリがあります。
https://github.com/awslabs/aws-lambda-go-api-proxyこれ使えばgoとlambdaとginとsamが一気にやれる見込みです。
ひとまずhelloworldしてみましょう。
とは言ってもREADME通りにやるだけ。まずは当然これ。
“`git clone https://github.com/awslabs/aws-lambda-go-api-proxy“`あとはこんな感じで一気に。
ただ、makeの時にbuildのオプションがないとLambdaで`exec format error
Xamarin.Forms+AppSync+Lambdaでデータを取得してみる
# 背景
昨年、Xamarin.FormsでKudanARアプリをリリースしました。
[Xamarin.FormsでKudan ARを試してみる](https://qiita.com/takapi_cs/items/581654f38ddb06a8e81c)それから約1年が経過し、そろそろKudanARライブラリのAPIキーの使用期限が近づいています。
APIキーを切り替えるためだけに、都度アプリのリリースが必要になるのは面倒…
そこで、KudanARライブラリのAPIキーのデータだけLambdaで管理するよう切り離し、AppSyncを経由して取得することにしました。# 環境
|主に使用したライブラリ|バージョン|
|—|—|
|Xamarin.Forms|v5.0.0.2012|
|GraphQL.Client|v3.2.4|
|GraphQL.Client.Serializer.Newtonsoft|v3.2.4||主に使用したAWS機能|
|—|
|AppSync|
|Lambda|# 作成したもの
Lambdaからデータを返却し、AppSy
LINEで肌状態管理できるチャットボットを作る
スキンケアにハマって肌の水分量と油分量を計測するようになったので
LINEのチャットボットで気軽に計測結果を記録できるチャットボットを作りました。##使い方
チャットボットに向かってユーザーが「登録」とメッセージを送ります。
「登録」という言葉に反応して、チャットボットが水分量と油分量を聞いてくれるので
それに沿って回答していくと登録が完了します。
![IMG_1526.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1019704/4f4689a3-3e89-5068-3cbc-48fe92253acb.jpeg)##システム構成
![スクリーンショット 2021-06-19 19.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1019704/e37c9d71-1022-1413-3549-2c34590e4895.png)1. Line Messaging APIからAPI GatewayへP
AWS LambdaでqrcodeとPillowを利用したQRコード生成(カスタムレイヤーを利用)
AWS Lambdaでqrcodeとpillowを利用しQRコードを生成してみます。
実装自体は簡単なのですがLambadaのカスタムレイヤーの作成に手こずりました。
LambdaのランタイムにはPython3.8を利用します。## 利用ライブラリについて (qrcode/pillow)
qrcodeとpillowはLambda標準ライブラリに含まれていないのでカスタムレイヤーとして追加します。
pillowはOS依存があるのでレイヤー用のZipを作成する際はLambdaのPython実行環境と同じOSで作成する必要があります。
実行環境は言語やバージョンによって異なります。詳細は以下リンク先を参照ください。
[Lambda ランタイム](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html)今回はAWS SAM用に用意されたDockerコンテナを利用してレイヤーを作成します。
## 事前準備 Docker
今回はCloud9上でレイヤーの作成を行います。
Cloud9では標準でDock