- 1. RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した
- 2. ついにAPI Gatewayの統合タイムアウトが29秒の壁を超えられるように!実際に延長リクエストしてみた
- 3. SeleniumをAWS lambda python3.8以上で動かす[AWS SAM]
- 4. 【やってみた】Agents for Amazon BedrockでLambdaとKnowledge baseに振り分ける
- 5. Go(guregu)+lambda+dynamoDBでデータのやりとりをしよう
- 6. LambdaでSQS発行&受取り
- 7. Slack上で投稿された内容を集計
- 8. DiscordアプリをAWS SAMで作った話(概要・システム構成編)
- 9. GoのLambdaをGithub Actions + Terraformでデプロイする
- 10. AWS CDK – Lambda で既設の EFS マウント
- 11. Amazon SQS→Lambdaトリガー後の非同期処理
- 12. AWS SAM CLIでローカルAPIを起動してLambda関数をテストする方法
- 13. 【AWS】Lambdaから別のLambdaを同期的に呼び出す
- 14. 【AWS】BedrockのClaudeモデルを使用してLambdaからリクエストを送信する方法
- 15. 自分で考えるAWSサーバーレスアーキテクチャのハンズオンを作ってみた
- 16. EventBridge Scheduler→Amazon SQS→Lambda の連携
- 17. 毎日の電気量を通知する仕組みをLambdaで作った
- 18. terraform で作成した api gateway + lambda をローカル環境で動かす手法
- 19. Lambda でコンテナを動かすときのコールドスタート時間を計測する
- 20. AWS上で Swift の Lambda を動かしてみる
RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した
# 概要
`RDS`がフェイルオーバを行うと`Ruby on Rails`(以下、`Rails`)では、ダウンしたDBを参照する現象が発生します。この問題により、`DB`を参照出来ない為、`Rails`が動作しなくなります。今回は、`RDS`のフェイルオーバーが行われたら、`RDS`のイベントサブスクリプション、`SNS`、`Lambda`を使用して、`ECS`で起動している`Rails`の`puma`を再起動する処理を構築しました。今回は、その実装方法を記載します。# 前提条件
– `ECS`で`Ruby on Rails`の環境が動作している
– `Amazon aurora`(postgres)を使用している (RDSでも今回の実施は可能)
– `Terraform`を使用している (webコンソールから設定する事も可能)# Lambdaの処理を動かす為の技術選定
フェイルオーバーが行われた事を`Lambda`に通知する機能として、RDSの[イベントサブスクリプション](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/
ついにAPI Gatewayの統合タイムアウトが29秒の壁を超えられるように!実際に延長リクエストしてみた
# はじめに
こちらでははじめまして!
SimSta(しむすた)と申します。
普段は個人ブログ「しまがじ!」で、AWSのアップデートを毎週まとめるなどしています。**しまがじ! 〜ホワイトシマリス飼いのガジェットブログ〜**
https://alta-whitechip.name
※ガジェットブログなのにまだガジェット記事が1個しかありません
うちの子も見てってね。
![IMG_7908.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815817/3393f80e-589a-4d27-a09e-5e299d2fab9f.jpeg)
# API Gatewayのアップデート
早速ですが、2024/6/5に以下のアップデートがありました。
https://aws.amazon.com/jp/about-aws/whats-new/2024/06/amazon-api-gateway-integration-timeout-limit-29-seconds/
## 概要
API G
SeleniumをAWS lambda python3.8以上で動かす[AWS SAM]
# AWS LambdaでSelenium
webスクレイピングで便利なseleniumですが、サーバーレスと組み合わせると、APIやFTPが無くてもデータ連携させたりできるので、重宝しています。
ただLambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要で、バージョンによってはうまく(ほとんど)動かなかったりします。
とくにpython3.8以上ではLambdaのOSがAmazon Linux2で稼働するようになったため、seleniumがモジュール不足で動かなくなってしまい、従来のようにコード一式zipであげてといった方法が使えなくなりました。
私も業務で運用フローに組み込んでしまっているので、死活問題。python3.8だっていつまで使えるのか。(EOLを見よう)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
python3.8廃止は2024年10月14日、うん、すぐだね。:fearful:
というこ
【やってみた】Agents for Amazon BedrockでLambdaとKnowledge baseに振り分ける
# はじめに
こんにちは、もちもちMAXです。
先日、Agents for Amazon Bedrockを使って色々試す機会があったので、今回はその内容を記事にしていきたいと思います。## 作ったもの
今回作ったのは、Agentsを使って雑談とAWSに関する質問とを振り分けるシステムで構成図は下記の通りです。
\
![AWS_structure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/c176d89e-ba6b-4daf-3811-d3327677c87e.png)
\
現時点では、Agents for Amazon Bedrockはアクションベースとナレッジベースが登録できます。アクションベースはLambda関数を呼び出すことで目的に応じた処理をおこなえます。
今回は、Lambda関数からBedrockの基盤モデルを呼び出して雑談の返答をおこないます。
ナレッジベースはいわゆるRAGシステムです。今回はAWSに関する知識を読み込ませたナレッジベースを作成して
Go(guregu)+lambda+dynamoDBでデータのやりとりをしよう
## はじめに
この記事では、Go(guregu)を用いてLambdaを介し、DynamoDBとのデータのやりとりを紹介します。## lambdaを動かしてみよう
2023/12/31にLambdaのGoランタイムがサポート終了となりますが、buildしてLambdaへ渡すため、ランタイムは必要ありません。まずは簡単なコードから実行してみましょう。任意のディレクトリで以下のコマンドを実行して、プロジェクトを作成します。
まずは簡単なコードから実行していきましょう。
任意のディレクトリで
“`sh
$ mkdir go-lambda-test
$ cd go-lambda-test
$ go mod init test
“`
上から順に実行し、プロジェクトを作成していきます。
ディレクトリ直下にmain.goを作成し、以下のコードを記述します。
“`main.go
package mainimport (
“context”
“github.com/aws/aws-lambda-go/lambda”
)// ハンドラ関数を定義
func handler() (
LambdaでSQS発行&受取り
`Lambda`->`SQS`->`Lambda`をした。
SDK for JavaScript (v3)で構築。Web上にはv2の情報など多くあったので、探すのに時間かかったん。。
これしてたら半日終わった…orz## やりたかったこと
`Lambda1`から大量のキューを発行して`Lambda2`がキューを受け取って順序関係なく処理をする。## 前提
– Lambdaが使える
– SQSキューが作成されている
– Lambdaに実行ロール,アクセス権限が設定されている(SQSとか..)## 実際のコード
### `Lambda`から`SQSMessage`を発行
“`javascript:SQSMessage発行する側
import { SendMessageCommand, SQSClient } from “@aws-sdk/client-sqs”;// SQSキューを作成すると発行されるよ
const SQSQueueUrl = “https://sqs.ap-northeast-1.amazonaws.com/00002222244
Slack上で投稿された内容を集計
# 今回やりたかったこと
slack上で下記を実現したい
1. スラッシュコマンドでlambda呼び出し
1. 呼び出されたチャンネルで全ての投稿を取得
1. 投稿された内容をエクセルで出力し、コマンド実行ユーザに送付※この後別でやりたいこともあるので、まだ作成中。。できたら追記
# slack側での設定
設定詳細については省略。
特殊なことは実施しておらず、アプリケーションの作成とスコープの設定のみ実施。
スコープについては下記を設定した。
– channels:history
– chat:write
– commands
– files:write
– im:write
– users:read
# lambdaの設定
関数URLを設定。slack側のスラッシュコマンドで呼び出すURLに設定した。https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-configuration.html
layerにはexcelJsとslackのAPIをzip化したもの登録した。
また、スラッシュコマンドで呼び出したものについ
DiscordアプリをAWS SAMで作った話(概要・システム構成編)
## はじめに
作成したのは、マップ上をボタンコンポーネントで移動し、宝石を探すゲームです。
![play.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781648/f295ca1e-3c36-fd04-16a6-bdf8ab0d16ab.gif)
※ [ゲームインストールリンク](https://discord.com/oauth2/authorize?client_id=1229496306360123392)
最近[IEOなどで話題](https://gamebiz.jp/news/387484)になった[ブリリアントクリプト(Brilliantcrypto)](https://discord.gg/brilliantcrypto)というゲームのDiscordコミュニティに、発表当初から参加しています。
2023年末のβテスト後、リリースや各種情報解禁までの間、コミュニティが閑散とした時があったのですが、その時にネタ的に作り始めたファンゲームです。
Brilliantcryptoは
GoのLambdaをGithub Actions + Terraformでデプロイする
# はじめに
Terrformを使ってインフラ管理しているのですが、Lambdaのデプロイにちょっと手間取ったので、記録を残しておきます。# 実現したいこと
– Github Actions + TerraformでLambdaをデプロイしたい
– LambdaコードはTerraformコードとは別ディレクトリで管理(同じリポジトリではある)
– 言語はGo
– Lambdaのコードに変更があった場合と、Terraform側のコードに変更があった場合のみデプロイが実行されるようにしたい# Github ActionsでTerraformを扱えるようにする
OIDCを使って、Github ActionsでTerraformを扱えるようにする記事は色々ありますので、細かい説明は割愛させていただきます。
# Terraform
terraformの階層と違う階層にLambdaのファイルを保存したいと思いますので、その前提で以下のようなコードになります。“`terraform
resource “terraform_data” “build_lambda” {
//
AWS CDK – Lambda で既設の EFS マウント
# AWS CDK – Lambda で既設の EFS マウント
久しぶりに記事を書きます。
IaCとしてAWS CDKを採用して開発をはじめ、その運用・保守が約2年になろうとしています。
アプリケーションエンジニアを自負していたのに、すっかりインフラエンジニアっぽくなってきました。当初ローンチから追加で生えてきたマイクロサービスをLambdaで追加していましたが、一部リソースは手動でコンソールから準備して参照するような構成にしていたりして一部ちぐはぐなところがありました。
そういったちぐはぐさは解決するべき課題として残り続けるとして、少しでも良くしようと考えるわけです。LambdaでEFSをマウントしてファイル操作をあれこれするという処理があって、Lambdaから既に存在するEFSをマウントしてリソース管理するCDKを書く必要がありました。この時思いのほかハマったので記事にしました。
意外とドンピシャの記事がなくて苦労しました。こういった方法がアンチパターンなんでしょうか?
もし同じことでお困りの人がいたら参考にしてください。ネットの波を泳いで
Amazon SQS→Lambdaトリガー後の非同期処理
# 前回と前々回
https://qiita.com/remonga/items/b865126b580aa79607e2https://qiita.com/remonga/items/0b0ac02c5e88441039c0
#### EC2 → Amazon EventBridge → Amazon SQS → Lambda
という処理の流れをこれまで構築してきました。
これで時間差で実行したい処理を疎結合気味に実行することができます。問題はこのLambda以降の流れになります。
## Lambdaについて
SQS → Lambda
のようなAWSサービスをトリガーにしてLambda関数が実行される仕組みのことをイベントソースマッピングといいます。https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-concurrency.html
そしてこのイベントソースマッピングによるLambda関数の同時実行数が1000と記述があります。
それ以上のLambdaイベントが失われてしまいますので結構
AWS SAM CLIでローカルAPIを起動してLambda関数をテストする方法
# はじめに
本記事ではaws sam cliを使用しローカルからLambdaを作成・デプロイする方法を記載します。# AWS SAM CLIとは?
> The SAM Command Line Interface (CLI) lets you locally build, test, and debug serverless applications defined by AWS SAM templates. SAM CLI provides a Lambda-like execution environment locally and helps you catch issues upfront.AWS SAM テンプレートで定義されたサーバーレスアプリケーションをローカルでビルド、テスト、デバッグするためのcli ツール。
https://aws.amazon.com/jp/serverless/sam/faqs/
# 環境
– python:Python 3.12.2# AWS SAM CLIのインストール
下記ページを参考に任意のOSのインストーラをダ
【AWS】Lambdaから別のLambdaを同期的に呼び出す
# はじめに
本記事ではLambdaから別のLambdaを同期的に呼び出す方法について備忘録も兼ねてまとめたものになります。# 環境
– python: 3.12# 関数を呼び出す側のLambda
Lambda > 関数 > 関数の作成から呼び出す側のLambdaを作成します。
今回は名前を`call_lambda`としています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/75b0097e-7a0e-1ed6-86ed-21934d3a4d5a.png)
別のLambda関数を呼び出すのにデフォルトのロールだけだと権限が足りないので追加します。
設定タブ > アクセス権限 > ロール名をクリックしIAMに移ります。
IAM側では許可を追加 > インラインポリシーを作成します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/8c5960
【AWS】BedrockのClaudeモデルを使用してLambdaからリクエストを送信する方法
# はじめに
本記事は、Amazon BedrockのClaudeモデルを使用してLambda関数からリクエストを送信し、生成されたレスポンスを取得する方法について備忘録も兼ねてまとめたものです。# 環境
Python 3.12# 前提
– Bedrockのclaude2.1が使用できる状態であること# Lambda関数の作成
マネジメントコンソールからLambda関数を作成します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/4d00c7f2-fb53-94c3-7b43-409c0ef12a99.png)
デフォルトの権限ではIAMポリシーが不足しているため権限を追加します。
今回はBedrockのフルアクセス権限付与しておきます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/73aff17f-d5e0-77cc-4af0-fa5d
自分で考えるAWSサーバーレスアーキテクチャのハンズオンを作ってみた
# はじめに
あまりAWS触ったことがない人向けに、サーバーレスアーキテクチャの勉強会をすることになりました。座学だけやっても身につかないことはここ1年で感じていましたし、AWS日本語ハンズオンやQiita/Zennは全体的に説明が丁寧すぎて苦労しないので、独自のハンズオンを作ってみようと思いました。
## この記事の趣旨
そこで本記事では、**初学者が苦労して学ぶ**ハンズオンを目指しています。
自分で調べて、トライ&エラーして知識を学んでいくという感じです。初学者向けの研修としても、チューターが何人かいればサポートしながら動くものが作れることで、知識だけでなく達成感も得られると思います。
:::note
この記事は勉強会の結果をフィードバックして、更新していきたいと思います。
:::# ハンズオン要件編
## 要件
今回のハンズオンでは**図書貸出アプリ**を作ります。
イメージしやすいと思いますが、図書館で管理する本を利用者に貸し出す、返却するなどを行います。基本的な要件は以下とします。
* 利用者は、図書館で扱う本の一覧を取得できる
* 利用者は、貸出
EventBridge Scheduler→Amazon SQS→Lambda の連携
# 前回
https://qiita.com/remonga/items/b865126b580aa79607e2前回はEC2上のプログラムからAWS SDKを使って、スケジュールタスクを作るというところまで作りました。!
システムなのでその後、実行したい何かがあるはずです。
次のロジックに繋がる出口の部分をAmazon SQS とLambdaを使って構築しました。# Amazon SQS
基本情報技術者試験で学ぶようなキューという概念だったりFIFOというものが活躍します。
![Screenshot 2024-06-09 213340.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507211/7e502da7-ae78-0d7e-5425-9cbd615f18af.jpeg)
何かプロセスが始まると別完了するまではプロセスの発行元は処理を待つ必要があります。
また、直接的な繋がりが発生してい
毎日の電気量を通知する仕組みをLambdaで作った
## 目的
最近電気使用料が高くなってますよね?
サイトにログインして、前日使用した電気量を確認することが日課となっていましたが
面倒くさいバッチ処理で毎日LINEに通知してくれたら楽だし
そういった仕組みのようなものを作ったこともなかったので
勉強になるかな~と思ってそれっぽいものを作ろうと重い腰を上げました
この記事はその備忘録的な感じです## 構成図
仕組みとしては簡単です![tokyo-gas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785830/39aeb223-3074-8271-7dc2-b34071734be6.png)
## LINE NOTIFYの設定
こちらのサイトのやり方を拝借しました。簡単簡単
https://zenn.dev/protoout/articles/18-line-notify-setup問題なくテスト通知できました
[ ]で囲われているのはトークン名です
![image.png](https://qiita-image-store.
terraform で作成した api gateway + lambda をローカル環境で動かす手法
api gateway + lambda の構成を作成したらローカルで動かして動作確認をしたいですよね。
今回は、terraform で作成した上記リソースをローカルで動かす方法をまとめました。
意外と癖が強くて、動くようになるまで苦戦しました。そのあたりについても書いていこうと思います。# はじめに
AWS は公式で AWS SAM というサーバレス環境構築ツールを提供しています。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html
こちらは宣言した内容をそのままAWSにデプロイできる上、dockerを使えばローカルで動作させることも可能な優れものです。ただ、リソースを作成するために書くSAMテンプレートはなかなか癖があり、学習コストも少し高めです。
公式もそれを意識しているのか、2年ほど前に terraform で作成したコードからSAMテンプレートを作成してくれるツールが発表されました。https://aws.ama
Lambda でコンテナを動かすときのコールドスタート時間を計測する
# はじめに
Lambda でコンテナを使って動かすことができます。このときに、コールドスタートの時間がどれくらいになるか自信がなかったので、手元で簡単に試してみる記事です。コールドスタートの試行回数は数回程度なので、しっかりした検証ではない点を理解したうえで、この記事を活用ください。また、時期によってもパフォーマンスは変わってくると思うのでその点もご留意ください。
# 検証結果
個人的な意見ですが、コールドスタートでも、起動がかなり高速だと思いました。ざっくり以下の 2 パターンの検証です。
– コンテナイメージサイズ : 以下の 2 種類
– 100 MB
– 10,000 MB (約 10 GB)
– コンテナイメージ内のアプリケーション : bash script を実行
– Lambda 関数のメモリ : 1024 MB
– VPC : VPC 外で実行![image-20240608180505909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/23
AWS上で Swift の Lambda を動かしてみる
サーバー系は苦手なのに、必要に迫られて AWS で APIを実装する必要性に迫られた。別に、Node.jsやJavaを使えば、もっと簡単に実装できるかもしれないけれど、やはり Swift での実装にこだわってみた。
## 情報収集
まずは「aws、lambda、swift」くらいで検索してみる。このあたりがトップででてくる。
https://github.com/swift-server/swift-aws-lambda-runtime
https://www.swift.org/blog/AWS-lambda-runtime/
このあたりも気になる。
https://developer.apple.com/videos/play/wwdc2020/10644/
## Projectを作成
“`sh
mkdir mylambda
cd mylambda
“`次の構造のようにファイルを構成します。
“`
$ tree .
.
├── Package.swift
└── Sources
└── mylambda
└── main.swif