- 1. AWS S3のobject createを感知してlambda関数を実行する(EventBridge使用)
- 2. AWS S3のobject createを感知してlambda関数を実行する(EventBridge不使用)
- 3. BentoMLのAWSへのデプロイ
- 4. 【SSTことはじめ】SST(Serverless Stack)のLive Lambda Devで、ローカルでも動作確認できるAWS Lambda開発を体感してみる
- 5. 【AWS CDK】AWS CDKを触ってみる with TypeScript。Part1: API Gateway & Lambda
- 6. 【Amazon Connect】初心者がLambdaとの連携でひっかかったこと
- 7. 【Amazon Lex】トリガーとなる質問なしでインテントを呼び出す
- 8. Amplifyを使用してReact(Figma)とLambdaアプリケーションを爆速で作る
- 9. エンジニアインターン13日目
- 10. Lambdaのトリガーでフィルタリングを使う
- 11. AWSのIAMの変更イベントをLambdaで処理する
- 12. パラメータストアからの値の取得でハマった件
- 13. AWS lambdaに付与するロール
- 14. エンジニアインターン12日目
- 15. REST APIでDynamoDBのテーブルを操作
- 16. 想定外のメール大量送信によるSNSサブスクリプションの非アクティブ化に対処する
- 17. CloudWatchログアラームの作成が面倒なので、Excelから設定値を読み込んで作成できるようにしてみた。
- 18. AWS Lambdaに固定IPを付与する時の考慮事項(NAT Gatewayは0.062ドル/時、月約45ドル)
- 19. エンジニアインターン10日目
- 20. AWS Lambda + Python で並列処理
AWS S3のobject createを感知してlambda関数を実行する(EventBridge使用)
# 概要
– S3の特定のバケットにオブジェクトがアップロード(create)されたことを感知して、そのオブジェクトの内容をconsole.logに出力するlambda関数を実行する方法をEventBridgeを使い実装してみる。
# 注意
– 本作業を実施することでAWSにて料金が発生する可能性があります。
– 料金アラートなどを予め設定し高額請求にはくれぐれもご注意ください。
– 筆者は一切の責任を負いかねます。# 前提
– 下記記事の内容は実施済みのものとして話をすすめる。
https://qiita.com/miriwo/items/4ab4dd1ca49bfa7c9387
– 条件は上記の記事と全く同じで任意のバケット(筆者の場合miriwo-testバケット)にinフォルダを作成し、そこにファイルアップロードイベントが発生した場合lamba関数でキャッチし、ログに出力する。
# 準備
– IAMロール、S3、lambdaはすでに前提の記事で設定済みのものを使用する。
| 項目 | 内容 | 備考 |
| — | — | —
AWS S3のobject createを感知してlambda関数を実行する(EventBridge不使用)
# 概要
– S3の特定のバケットにオブジェクトがアップロード(create)されたことを感知して、そのオブジェクトの内容をconsole.logに出力するlambda関数を実行する方法をEventBridgeを使わず実装してみる。
# 注意
– 本作業を実施することでAWSにて料金が発生する可能性があります。
– 料金アラートなどを予め設定し高額請求にはくれぐれもご注意ください。
– 筆者は一切の責任を負いかねます。# 準備
## IAMロール
1. 下記の情報でIAMロールを作成する。
| 項目 | 内容 | 備考 |
| — | — | — |
| 信頼されたエンティティタイプ | AWSのサービス | |
| ユースケース | Lambda | |
| 許可ポリシー | AWSLambdaBasicExecutionRole
AWSXRayDaemonWriteAccess
AmazonS3FullAccess | |
| ロール名 | get-s3-object-lambda-ro
BentoMLのAWSへのデプロイ
# はじめに
最近Model ServingのOSSとして[BentoML](https://github.com/bentoml/BentoML)に注目しています。BenteMLではクラウド環境へのデプロイをサポートする[bentoctl](https://github.com/bentoml/bentoctl)というOSSも合わせて公開しています。https://github.com/bentoml/bentoctl
現在サポートされているデプロイ先のクラウドは以下になります。
– AWS Lambda
– AWS SageMaker
– AWS EC2
– Google Cloud Run
– Google Compute Engine
– Azure Container Instances
– Heroku今回はAWSのLambdaとSageMakerへのデプロイを試してみました。
# 前提
## 環境
クラウドはAWSを利用します。操作するローカルPCは以下のような環境です。
– OS: Ubuntu 20.04(Windows WSL2)
– Docker 20
【SSTことはじめ】SST(Serverless Stack)のLive Lambda Devで、ローカルでも動作確認できるAWS Lambda開発を体感してみる
## SST(Serverless Stack)ってなに?
SST(Serverless Stack)は、モダンなフルスタックアプリケーションをAWSにデプロイする便利なフレームワークだよ。SSTには2つの側面があって、
1. CDKを内包しており、CDKを上回る簡潔さでAWSのインフラをコードで定義できるIaCツールとしての側面
2. Live Lambda DevやSSTコンソールによる開発支援ツールとしての側面の2つの機能を有しているんだ。
https://github.com/serverless-stack/sst
今回は後者の `Live Lambda DevやSSTコンソールによる開発支援ツールとしての側面` を体験すべく、SSTの雛形アプリを動かしてみるよ。
## 筆者プロフィール
Kenpal株式会社でITエンジニアとして色々いじってる faable01 です。
https://www.kenpalinc.com/
ものづくりが好きで、学生時代から創作仲間と小説を書いたりして楽しんでいたのですが、当時はその後自分がIT技術者になるとはつゆ程も思って
【AWS CDK】AWS CDKを触ってみる with TypeScript。Part1: API Gateway & Lambda
## 環境情報
* 作業環境はAWS Cloud9を利用
* cdk versionは2.63.2## 作成イメージ
AWS CDKを利用してAmazon API Gateway経由でコールできるLambdaサービスのデモを作成していきたいと思います。作成するデモイメージは以下です。
![hello-arch.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/b7005fea-515a-a3d7-7e41-a02a8b342742.png)
では早速手を動かしていきましょう。## CDK新規プロジェクトの作成
今回の作業環境はAWS Cloud9を利用しています。タイトルにもある通り、今回はTypeScriptでプロジェクトを作成していきます。
まずは今回使用していくプロジェクト用のディレクトリを作成します。
“`
mkdir cdk-workshop && cd cdk-workshop
“`
TypeScriptのCDKプロジェクトを作成します。(ちょっと時間かか
【Amazon Connect】初心者がLambdaとの連携でひっかかったこと
みなさんこんにちは!
早いものでそろそろ社会人一年目になろうとしている新卒エンジニアです。現在の部署に配属されてはじめに行ったのがAmazon ConnectとLambdaの連携だったのですが当初は思ったようにいかないことが多く、
近い未来で自分が後輩に教える立場になったときに過去の自分がどこで躓いていたかを記録したいと思い今回この記事を作成することにしました。使い慣れている方にとっては当たり前の内容ばかりになるとは思いますが、これからLambdaを触ってみたい方、同じような躓きをしている方の参考になれば幸いです。
ちなみに、Lambdaを初めて触った時点での私のスペックを簡単に紹介します。
– AWS自体入社後の新人研修で初めて触ったレベルの初心者
– Amazon Connectは研修で一度簡単なコールセンターを作成した経験あり
– Python歴は独学で3年程度、主に機械学習などの目的で使用していた
– Python3エンジニア認定基礎試験取得済(別記事に合格体験記があります)上記の理由から今回Lambdaの記述にはある程度使い慣れているPythonを使用すること
【Amazon Lex】トリガーとなる質問なしでインテントを呼び出す
# やりたいこと
* Amazon Connectの問い合わせフローでAmazon Lexを呼び出し、名前を質問する
* 質問自体はAmazon Connectのプロンプトで再生する
* 初めから聞く内容が決まっているため、Lex上で「ご用件はなんですか?」「予約をしたいです」というような最初の質問を必要としない
![会話例_トリミング.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728375/45e4464d-9d29-262b-df13-f6e8ba99906e.jpeg)
# ①Amazon Lex
インテント名は**CheckName**に設定しました。#### スロット
![01_スロット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728375/3d34b528-c309-3ae1-30f0-0708c9a04fbb.jpeg)
今回このプロンプトは再生されませんが必須項目のため仮の文章を入力して
Amplifyを使用してReact(Figma)とLambdaアプリケーションを爆速で作る
# 事前準備
1. AWS CLIのインストール
– [【Windows/Mac/Linux(Ubuntu)】AWS CLIインストール方法](https://qiita.com/ryome/items/efd37c3a49b54859ba68)
2. AWS IAMアカウントの作成とaws configureの設定
– [AWS IAMアカウントの作成とaws configureの設定](https://qiita.com/ryome/items/ff2804be600cd5dcd61a)
3. AWS CodeCommit の HTTPS Git 認証情報を生成
– [AWS CodeCommit の HTTPS Git 認証情報を生成](https://qiita.com/ryome/items/066d2deea3e6fbe577ad)
4. Linuxコマンドが使用できる環境構築
– [wsl2にUbuntu環境を構築する【windows】](https://qiita.com/ryome/items/240f36923f5cb989da27)
エンジニアインターン13日目
lambdaの関数urlを使ってDBから一定の情報だけを取って配列に渡す機能を実装しようとした。apiの知識も食い込んできて難しかった。先輩エンジニアが何回も優しく説明していただきとても助かった。しかし、完成まではいかなかった…また次チャレンジだ!エンジニアインターンも約1ヶ月の期間が過ぎた。1ヶ月間で学んだことはエラーの解決法やwordpress,awsなどの新しい技術をたくさん学ぶことができた。まだまだできないことだらけだが、自分に新しい技術を任せていただき、課題にぶつかりながら成長できる環境だと思う。毎日感謝を忘れずに一生懸命にやっていきたい。
Lambdaのトリガーでフィルタリングを使う
# Lambda のイベントフィルタリング
Lambdaをトリガーする際、イベントに含まれるデータをフィルタリングしてトリガーを制御できる。https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-eventfiltering.html
# Dynamodb Streamのイベントをフィルタリング
DynamoDBに新規レコードが追加された場合、下記の3つのイベントが発生する。
– INSERT – a new item was added to the table.
– MODIFY – one or more of an existing item’s attributes were modified.
– REMOVE – the item was deleted from the tablehttps://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/APIReference/API_streams_Record.html
今回は新規登録(INSE
AWSのIAMの変更イベントをLambdaで処理する
# 一般的な方法
[前記事](https://qiita.com/hayayu0/items/5d3a176a130e3221408f) の最後で言及したのですが、一般的な方法は、
【米国東部(バージニア北部)リージョンの EventBridge ルール】
↓
【米国東部(バージニア北部)リージョンの SNSトピック】の2つのサービスの連携があって、そのうち、【SNSトピック】の代わりに【Lambda関数】にすれば、連携できます。
手順は、[AWSドキュメント – AWS アカウントに IAM の変更が加えられたときに通知を受け取るにはどうすればよいですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-eventbridge-sns-rule/) に記載がありますので、このリンク先に従って進めていき、SNSのところだけLambda関数にすれば実装できます。
# 別リージョンのLambda関数にイベントを渡す方法
上記の例では、Lambda関数はIAMのイベントを拾えるリージョンと同じ
パラメータストアからの値の取得でハマった件
# Lambda Extension
Lambdaで処理を行う際に、将来変更が予測される値をパラメータストアにセットされていて、そこから値を取得するケースは良くあると思います
今年の10月にAWSから[Lambda Extension](https://aws.amazon.com/jp/blogs/compute/using-the-aws-parameter-and-secrets-lambda-extension-to-cache-parameters-and-secrets/)が発表され、SDKを使わずに、このLambda Extensionを使う方が多くなっているのではないでしょうか# ハマったところ
`/` のエンコードです
パラメータストアの名称は `/` で階層化組織化を行っているかと思います
Lambda Extensionは、httpでリクエストを飛ばすので、パラメータストア名にもエンコードが必要となります
ただ、`/`は普通にUrlの区切り文字ですので、一工夫必要となりました“`example.py
from urllib.parse import q
AWS lambdaに付与するロール
# 概要
– lambdaに付与するロールを作るときのマネージドポリシーの組み合わせをまとめる。
# 前提
– 下記のIAMロールはロール作成時の「ユースケース」で「lambda」を選択しているか、「IAM」→「ロール」→「当該ロール」と移動し「信頼関係」のタブの「信頼されたエンティティ」を見たときにPrincipalで下記の様にlambdaが設定されていること。
“`json
“Principal”: {
“Service”: “lambda.amazonaws.com”
},
“`– 信頼されたエンティティの例
“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Service”: “lambda.amazonaws.com
エンジニアインターン12日目
今日は前回苦戦したDBからurlを引っ張ってくることに成功した。handle_functionを正しく入力したおかげで動くようになった。引っ張ってきたurlを使ってクローリングもできるよつになった。動くようになった時はとても嬉しかった。次のタスクとしてurlのパラメータを変更してなるべく軽い仕組みを作ることだった。先輩エンジニアに説明を聞いたものの実際コーディングしていると全くわからない状態だった。この課題は次に解決することにした。
今日はとても頭を使った。疲れた。でももっと頑張らないとこれの繰り返しだ…がんばろ!
REST APIでDynamoDBのテーブルを操作
## 概要
REST APIでAWS上のDynamoDBのテーブル操作を行う方法を記載
CURLでAPI GatewayにデプロイしたAPIを叩いてDynamoDBと通信## 目次
1. REST APIとは
1. DynamoDBのテーブルを作成
1. ロールの作成
1. Lambda関数を作成
1. API GatewayでAPIをデプロイ
1. CURLによる動作確認## 1. REST APIとは
REST APIは、REST(Representational State Transfer)の原則に基づいて設計されたAPIのことを指し、HTTP通信によって、データの作成/読み取り/更新/削除の機能を実行できます。要求されたリソースに関する情報を提供し、以下の4つのメソッドを使用してリソースの処理方法を記述します。
GET:リソースを取得
POST:リソースを作成
PUT:リソースを更新
DELETE:リソースを削除
また、リソースを様々な形式(HTML/XML/JSON/バイナリ)で表現できるようになっています。## 2. DynamoDBのテーブルを作成
一連の手
想定外のメール大量送信によるSNSサブスクリプションの非アクティブ化に対処する
# はじめに
Amazon SNSには、Eメッセージの配信レート(1秒あたり10件)の上限を超過した場合に、SNSサブスクリプションを非アクティブ化させる仕様があります。
参考URL: [Amazon SNS サブスクリプションを手動で無効にしたことを示す E メールが AWS から届いたのはなぜですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/sns-email-subscription-disabled/ “AWS公式ドキュメント”)つい先日この問題を対処したことがあったため、投稿しました。
# 発生ケース
![SNS_AWS構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1046178/e622da65-f3d9-5901-52d6-b39189ccdc72.png “SNS_AWS構成図.png”)1. CloudWatch Logsのロググループにサブスクリプションフィルターを設定
1. サブスクリ
CloudWatchログアラームの作成が面倒なので、Excelから設定値を読み込んで作成できるようにしてみた。
# はじめに
こんにちは、山田です。
今回は、CloudWatchログアラームをExcelから作成する方法について記載していきます。
よろしくお願いします。
# 概要図
概要図は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1096361/54c80c37-30f4-620f-a821-a86a723978cb.png)
①:Lambdaを用いて、Excelファイルを作成してS3にアップロードします。
②:作成されたExcelファイルをダウンロードします。
③:ダウンロード後、Excelファイルを記入してアップロードします。
④:Lambdaを用いて、Excelファイルを読み込みCloudWatchアラームを作成します。
# エクセルファイル作成用Lmabdaのフローチャート・コード
エクセルファイル作成用Lmabdaのフローチャート・コードはそれぞれ以下になります。
## フローチャート
フローチャートは以下の通りです。
![フローチャート (1).png](http
AWS Lambdaに固定IPを付与する時の考慮事項(NAT Gatewayは0.062ドル/時、月約45ドル)
AWSの請求書を見たら想定外に高かったので調べたらNAT Gatewayでした。
t4g.xlarge(vCPU:4、メモリ:16GB)を借りられる(3年予約)料金じゃないか・・・。[![Image from Gyazo](https://i.gyazo.com/79c797e8431503a4fbc82fd6a53ca65d.png)](https://gyazo.com/79c797e8431503a4fbc82fd6a53ca65d)
これは、ある外部システムとの連携機能をAWS Lambdaで実装したのですが、IP制限に対応するために固定IPを持たせる必要があったため。
不覚にも発生する料金はElastic IPだけだと思いこんでました。涙
反省。
エンジニアインターン10日目
今日はpythonを使ってスクレイピングをした。Beautifulsoupを使ってDOM要素を取り、得た情報を配列に渡して、DBに保存する仕組みだった。複数のページからスクレイピングをしたかったため、urlを配列に渡して、ページごとに正しい値を取るようにした。lambda上でtestをしてエラーを解決しながら進めた。やはり、初心者だと、エラーを解決するのに時間がかかってしまったり、工夫がまだまだ足りていない。そこで、先輩エンジニアに質問することでエラーに対する工夫の仕方や考え方などを教えていただくことができる。自分で検索して探すことももちろん大切であるが、いつでも質問できて、改善させてくれるような環境を持つこともとても大切であると考えた。そろそろインターンを初めて1か月を立とうとしている自分にもタスクに対する責任感も出てきて、日々成長した姿を証明していきたいと思う。しかし、まだまだ分からないことの方が多い。失敗を恐れず、チャレンジを辞めずに成長していきたい。
AWS Lambda + Python で並列処理
AWS Lambda で Python の multiprocessing を扱おうとしたら少しハマったのでメモしておく。
:::note warn
この記事内のコードはすべて AWS Lambda の Python 3.9 ランタイムで実行する想定で書かれています。
:::## 例題
例えば、以下のような Lambda 関数があるとする。“` python:main.py
from time import sleepdef square(n: int) -> int:
“””1秒かけて入力値の2乗を返す関数”””
sleep(1)
return n ** 2def handler(event, context):
return [square(i) for i in range(5)]
“`この関数の実行には5秒かかってしまうため、 `square` 関数を並列処理して実行時間を短縮したい。
## asyncio 版
まずはシンプルにイベントループで非同期処理できないか考える。Python の非同期処理と言えば `a