- 1. 【AWS】高額請求にはもううんざり!RDSの自動起動で知らないうちに課金される状況の回避策を考えてみる。
- 2. Amazon Connect で自動認証を利用したコールフローを実装
- 3. python3.7でローカルからLambda関数をデプロイする手順
- 4. CloudFormationでEC2インスタンスがALBのヘルスチェックに合格したらスタックの更新を続行する方法
- 5. ALBのリスナールールを自動で切り替えて、更新中だけメンテナンス画面を表示する方法
- 6. ALBのリスナールールを自動で切り替えるLambda関数
- 7. Lambda関数のCloudwatchEventsトリガー一覧を取得する
- 8. AWS Amplify + API gateway + Lambda + Dynamodb でシンプルなサーバレスWebアプリを作ってみた
- 9. CloudWatch Logsで特定の文字列を検知したらLambdaでメール通知する
- 10. 【AWS】API Gatewayでカスタムなステータスコードを返す方法
- 11. GoとGinとLambdaでSlack botを作成する
- 12. Xamarin.Forms+AppSync+Lambdaでデータを取得してみる
- 13. LINEで肌状態管理できるチャットボットを作る
- 14. AWS LambdaでqrcodeとPillowを利用したQRコード生成(カスタムレイヤーを利用)
- 15. 【AWS】クライアント~API Gateway~Lambda~S3における、上手くいった型変換表および実装例
- 16. エッジ推論の信頼度が低いときに画像データを自動でS3にアップするLambdaの作成
- 17. 【Node.js】AWS LambdaからMySQL(AWS RDS)のレコードの個数を取得
- 18. 署名付きクッキーによるCloudFront配信コンテンツの保護
- 19. AWS LambdaでAmazon Cognitoユーザの作成とログインを行う
- 20. 【AWS初心者でも分かりやすい】Lambdaで作成した関数をAPI Gatewayでアタッチする方法
【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
【AWS】クライアント~API Gateway~Lambda~S3における、上手くいった型変換表および実装例
# 概要
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/lambda-proxy-binary-media.html
> AWS Lambda プロキシ統合からバイナリメディアを返すには、base64 で Lambda 関数からのレスポンスをエンコードします。
LambdaおよびLambdaプロキシ統合利用時(今回はAPI Gateway)は上記のように、base64にエンコードしておく必要がある。
このようなやり取りの作法にもとづきながらクライアント側から横断的に纏めた型変換特化ドキュメントを、半分自分用に掲載する。# 環境
“`
クライアント側nodejs:v14.15.5
Lambda:Node.js 12.x
“`# 本ドキュメント想定対象
* 自分。「こういう変換すれば上手くいきました」と他の人に見せたりコードを再確認する時。
* Lambdaプロキシ統合でバイナリファイルを取り扱おうとして躓いている人
* AWS構築時に「他の人のデータ型のやり取り成功例を見たい」
エッジ推論の信頼度が低いときに画像データを自動でS3にアップするLambdaの作成
# はじめに
ラズパイカメラで撮った画像を画像分類して、結果の信頼度が微妙だったときにS3バケットに自動でアップロードして再学習用の画像を簡単に増やす。今回はそんな仕組みの雛形をGreenGrassとLambdaで作ります。なおこの記事は以下の記事の続きです。
https://qiita.com/hdmn54321/items/4671624038d7eaae1548
# 今回作成するLambdaの全体像
![② ______ test. jpgec2 _____.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/9d3be794-a561-3e73-bbb6-f71e011e167d.png)# Lambdaの構成図
以下がLambdaの構成図。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/2d55ed29-62c2-1d00-44cd-f91e76069f32
【Node.js】AWS LambdaからMySQL(AWS RDS)のレコードの個数を取得
Node.jsで、AWS RDS(MySQL)のレコードの個数を取得するのに結構ハマったので、ここに記します。
##環境・システム構成
・node.js v14.5.0
・AWS Lambda から AWS RDS(MySQL)の情報を取得
##方法
SQL文でテーブルの中の数を取得するとき、
たとえば、 テーブル users の中の カラム userIDの数 を取得するには、以下のSQL文になります。“`
SELECT COUNT(*) from users where userId =’userID’;
“`これを、Lambda内にnode.jsで書くと
“`JS:index.js
‘use strict’;
const mysql = require(‘mysql’);exports.handler = function (event, context) => {
c
署名付きクッキーによるCloudFront配信コンテンツの保護
# やりたいこと
概要イメージです。
![署名付きクッキー _やりたいこと.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1509934/aa762ed0-d13c-e788-d48a-49fb03f4b741.png)社内システムをAWS内に配置することを想定したケースで、S3バケットからCloudFrontにより配信するコンテンツ(HTML、JavaScriptソースや画像等のリソース)を認可されたアクセス以外から保護します。
プライベートコンテンツ、というようですね。
[プライベートコンテンツ提供の概要 – Amazon CloudFront](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-overview.html)認証APIはAPI Gatewayに配置し、CloudFrontで配信されるコンテンツ(HTML・JS等)とAPIはクロスオリジンかつクロスド
AWS LambdaでAmazon Cognitoユーザの作成とログインを行う
AWS Lambda(python)を使い、Amazon Cognitoのユーザ作成とログイン処理を行ってみます。
以下の2つの機能を作成します。
1. Lambdaからユーザープールのユーザを作成する
2. ログイン処理。S3(HTMLログイン画面) -> APIGateway -> Lambda(ログイン処理)### Amazon Cognito概要
* Amazon CognitoはモバイルアプリやWebアプリに認証機能を提供するサービス。
* ユーザープールとIDプールのコンポーネントを提供。
* ユーザプールはIDやパスワードの認証情報を管理する「ユーザディレクトリ」を提供し、それらの情報を利用して「認証」を行う機能
* IDプールはAWSリソースへの一時的なAWS認証情報を提供し「認可」を行う機能
* ユーザープールではサービスへのアクセスを行うための「ユーザープールトークン」を発行
* ユーザープールは、Facebook、Google、Appleなどの外部のIDプロバイダー(IdP)と連携やSAML認証なども利用出来る.
* ユーザプールの「ユーザディレクトリ」は指
【AWS初心者でも分かりやすい】Lambdaで作成した関数をAPI Gatewayでアタッチする方法
今回はLambdaで作成した関数をAPI Gatewayを使用して、Lambdaで作成した関数をAPIとして使用する方法をお教えします。
特に細かい説明というよりかは、やり方だけを書いていくので、なにか気になる点があればご自身でお調べください。
また、そこまで設定も難しくないので、肩の力を抜いてご覧ください。
それでは早速説明していきます。
# はじめに
Lambdaで関数を作成している前提で話を進めていきます。
なので、まだLambdaで関数を作成していない方は作成してから本記事をご覧ください。
# API Gatewayの設定
まず、Lambdaで作成した関数をAPIとして使用するために、API Gatewayで設定を行わなければなりません。
まずはAPI Gatewayのコンソール画面へいきます。
・[https://ap-northeast-1.console.aws.amazon.com/apigateway/main/apis?region=ap-northeast-1](https://ap-northeast-1.console.aws.amazon