- 1. LambdaでSQS発行&受取り
- 2. Slack上で投稿された内容を集計
- 3. DiscordアプリをAWS SAMで作った話(概要・システム構成編)
- 4. GoのLambdaをGithub Actions + Terraformでデプロイする
- 5. AWS CDK – Lambda で既設の EFS マウント
- 6. Amazon SQS→Lambdaトリガー後の非同期処理
- 7. AWS SAM CLIでローカルAPIを起動してLambda関数をテストする方法
- 8. 【AWS】Lambdaから別のLambdaを同期的に呼び出す
- 9. 【AWS】BedrockのClaudeモデルを使用してLambdaからリクエストを送信する方法
- 10. 自分で考えるAWSサーバーレスアーキテクチャのハンズオンを作ってみた
- 11. EventBridge Scheduler→Amazon SQS→Lambda の連携
- 12. 毎日の電気量を通知する仕組みをLambdaで作った
- 13. terraform で作成した api gateway + lambda をローカル環境で動かす手法
- 14. Lambda でコンテナを動かすときのコールドスタート時間を計測する
- 15. AWS上で Swift の Lambda を動かしてみる
- 16. AWS LambdaでBedrock APIを呼び出す
- 17. 【続】LINEメッセージをAWS Lambdaで送受信してみたお話
- 18. 【メモ】Labmdaの作成済みレイヤー
- 19. DynamoDBストリームって何?
- 20. ECS タスク定義ファミリーの古いリビジョンを削除
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
AWS LambdaでBedrock APIを呼び出す
[link-1]: https://qiita.com/MhalTeddy/items/5fe8d8ace7b48e1fadec “Amazon Bedrock APIの基本”
[link-2]: https://qiita.com/MhalTeddy/items/b8917f72a32ca5d389dc “AWS CLI”
[link-3]: https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html “Lambda Permissions”## はじめに
生成AIのRAGシステムを構築する前段階として、AWSのLambdaから生成AIモデルを呼び出してみました。
実行ロールの割り当てに引っかかって時間を使ったので、やり方をまとめました。## Amazon Bedrockの事前準備
まず、AWS CLIをインストールして認証します。
方法は[AWS CLIを使い始めるまで][link-2]に書いています。次に、Bedrockへのモデルアクセスとトークンの発行を行います。
こちら
【続】LINEメッセージをAWS Lambdaで送受信してみたお話
## はじめに
業務にてLINE MessagingAPIを利用したLINEでのコミュニケーションツールを作成したので、技術共有と自分の備忘録もかねて書いていきます。
今回は[前回の投稿](https://qiita.com/inacyc_k/items/709f6670d1f0b5ad3677)の追加機能実装となります。以前までのテキストメッセージ以外にも画像の送受信実装を行います。## 前回の振り返り
前回はLINE公式アカウントを作成し、テキストメッセージの送受信を行いました。
いわゆるこんな感じ。
まずはLINEからユーザーがメッセージを行うと、同じテキストを返信する、というもの。そしてAPIを叩くことで、テキストメッセージを送信するです。
【メモ】Labmdaの作成済みレイヤーhttps://github.com/keithrozario/Klayers?tab=readme-ov-file
一にも二にもここ。
pythonのrequestsライブラリーひとつ、自分のローカル環境でpip install -t . してzipを作って、、ってやるのは大変面倒です。上のgithubでは作成済みのレイヤーが公開されています。その中から選んで、Lambdaのレイヤー設定「ARN を指定」で入力することで、必要なライブラリがセットアップされます。
有名ライブラリしか載っていませんが、かなり重宝します。
DynamoDBストリームって何?
# はじめに
DynamoDBのストリームについて学ぶ機会があったので、備忘録として記事を書きます。# DynamoDBストリームとは
DynamoDBストリームとは、DynamoDBの機能の一つで、**テーブルのデータ変更(アイテムの作成、更新、削除)をリアルタイムにキャプチャし、それに基づく処理をトリガーするためのものです**。
DynamoDBストリームを有効にすると、テーブル内のアイテムに対する変更がストリームに記録されます。これにより、変更の内容を順次取得して、様々な用途に利用することができます。
「Stream」の「流れ」という意味の通り、**テーブル内のデータ変更(作成、更新、削除)の連続的な流れをキャプチャし、保存する機能**ということです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2613586/0645c6f1-66b3-381d-f771-6da345c11f69.png)
https://docs.aws.amazon.com/ja_jp/amazo
ECS タスク定義ファミリーの古いリビジョンを削除
# issue
* タスク定義のリビジョンが溜まりすぎている# 対策
* ライフサイクルがないようでまたもやLambda出動# Lambda
“`python:lambda_handler Python3.12
import json
import time
import boto3def list_all_task_definitions(ecs_client):
paginator = ecs_client.get_paginator(‘list_task_definitions’)
task_definitions = []for page in paginator.paginate(status=’ACTIVE’):
task_definitions.extend(page[‘taskDefinitionArns’])return task_definitions
def list_task_definition_revisions(ecs_client, task_definition_family)