- 1. Lambdaからシークレットマネージャーにある認証情報を取得
- 2. CDK+LambdaでTypeScript+TypeORMが使えるまで【苦労】
- 3. DynamoDB GSIに対してLambdaからクエリを実行し特定の属性値を取得する
- 4. Terraform勉強-第31回:SQSをトリガーにしてLambda関数を実行し、CloudWatchでログを確認する
- 5. 【アップデート】AWS Transfer Family SFTP コネクタ は、ファイル転送操作のステータスをリアルタイムで表示するようになりました
- 6. フォローしているQiitaユーザが作成した記事を1日1回、スラックに通知してみた ~AWS100本ノック~ 13/100
- 7. 【超入門】Pythonで動くAWS LambdaのHelloWorld API
- 8. LambdaをVPCに配置するかの検討ポイントを調べた
- 9. [Amazon Web Services]クロスアカウントロールで複数のLambdaランタイムを一括更新
- 10. 【リスト内包表記】ラムダ式と組み合わせたら困った話
- 11. 【AWS】AWS Lambda Function URLsを検証!
- 12. NestJSによるLambdaとRDS Proxyのピン留め回避とプロキシ分割
- 13. Next.jsをLambda Web Adapterでサーバレスに動かしてみた[AWS SAM]
- 14. AWS Lambda+SNSのメール配信におけるエラーハンドリングを実装する
- 15. シェルスクリプトで AWS Lambda 用 docker イメージ の動作チェックと ECR にプッシュする
- 16. Amazon Connectのフローで呼び出したLambdaのレスポンスを使用する方法
- 17. LambdaをVPC内に作成する際、IAMロールに対するポリシーが足りずにエラーになった
- 18. EventBridgeからLambdaに起動日時を連携する
- 19. 別アカウントのLamdbaをinvokeする際の注意点
- 20. LambdaからRDSにアクセスができない理由
Lambdaからシークレットマネージャーにある認証情報を取得
# ①SecretsManagerでシークレットを作成
RDSなどAWSリソースのシークレット情報を保存する場合はそのリソースを選択しますが、今回は軽い動作確認するだけなので「その他」を選択します。保存したいシークレット情報を「key-value」で入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/c66410ba-bde9-5ac4-5211-1b7ab2de12fd.png)
シークレット名をtestにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/ced33876-3cea-66be-2713-639f7d4bf6f1.png)
動作確認するだけなので、今回はローテーションをしません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c
CDK+LambdaでTypeScript+TypeORMが使えるまで【苦労】
# 背景
Typescriptでお馴染みのORMの一つーーTypeORMですが、AWS CDK・LambdaでRDS接続できるまで一苦労しましたので共有していきたいと思います。
使用環境:
– CDK: 2.154.1
– Typescript: 5.5.3
– TypeORM: 0.3.20# 結論
CDKがデフォルトでesbuildを使うトランスパイルをする[^1]ため、TypeORMに必要なデコレーターはトランスパイルの過程でなくなります(現時点、2024年11月では)。デコレーター設定を有効化するために、以下のようなオプションをLambda関数に付け、tscで予めトランスパイルし、生成した.jsをLambda環境に読み込ませる必要があります。
“`typescript
const fn = new NodejsFunction(this, “typeorm-lambda”, {
//…// enable emitdecoratormetadata
bundling: {
preCompilati
DynamoDB GSIに対してLambdaからクエリを実行し特定の属性値を取得する
# はじめに
本記事ではDynamoDBのGSI(Global Secondary Index)を作成し、Lambdaからクエリを実行する処理を実装していきます。# ゴール
DynamoDBのGSIに対してLambdaからクエリを実行し、パーティションキーとソートキーの条件に一致する項目から、特定の属性値のみを取得します。
下記のようなGSIを作成し、`user1` の `user_status:active`を取得する処理を実装します。▼GSI例
| userId(パーティションキー) | timestamp(ソートキー) | user_status |
|——–|————-|————-|
| user1 | 2024-11-07 | active |
| user2 | 2024-11-08 | active |# 作るもの
– DynamoDBのテーブル:1つ
– GSI:1つ
– Lambda:1つ# 書かない事
IAMの権限については本記事では記載しておりません。# 1. Dy
Terraform勉強-第31回:SQSをトリガーにしてLambda関数を実行し、CloudWatchでログを確認する
githubリポジトリ:”https://github.com/shu130/terraform-study31.git”
## SQSキューとLambda関数を連携させ、メッセージの処理やログの管理を行う仕組みをTerraformで構築する
“`bash
.
├── provider.tf
├── sqs.tf
├── lambda.tf
├── sqs_message_batch_send.sh
├── src
│ └── lambda_function.py
├── terraform.tfvars
└── variables.tf
“`## 1. `provider.tf`ファイル
今回は`provider.tf`のなかで**AWSアカウントID**を動的に取得する
“`hcl:./provider.tf
# terraformとawsプロバイダのバージョン
terraform {
required_version = “>= 1.6.2, < 2.0" required_providers { aws = { sou
【アップデート】AWS Transfer Family SFTP コネクタ は、ファイル転送操作のステータスをリアルタイムで表示するようになりました
# はじめに
こんにちは。株式会社ジールの[@yakisobapan](https://qiita.com/yakisobapan)です。AWS Transfer Familyにて、**ファイル転送操作のステータスをリアルタイムで確認**できるようになりましたので、試してみました!
# 目次
– アップデート内容
– やってみた
– 所感# アップデート内容
AWS Transfer Family は、SFTP コネクタを使用して開始されたファイル転送のステータスをリアルタイムで表示するようになりました。
この機能により、ファイル転送操作の現在の状態を簡単に監視し、転送後のアクションを調整して、AWS のマネージドファイル転送 (MFT) ワークフローを自動化できます。SFTP コネクタは、リモート SFTP サーバーと Amazon S3 間でファイルを転送するためのフルマネージド型ローコード機能を提供します。これで、どのファイル転送が完了したか、進行中、キューに入っているか、失敗したかなど、ファイル転送操作のステータスをオンデマンドでクエリできるようになりました
フォローしているQiitaユーザが作成した記事を1日1回、スラックに通知してみた ~AWS100本ノック~ 13/100
# はじめに
Qiitaにはユーザのフォロー機能がありますが、フォローしている人が投稿した記事を確認するには、`フォロー中のユーザ`タブで記事を一覧表示して、当日の記事を確認するしか現状なさそうです 😥
まぁ、それでもいいっちゃいいんですが、せっかくなら日常で使っているコミュニケーションツールに通知してくれた方が良いなーと思い、自動で通知する機能を作ってみました!
![スクリーンショット 2024-11-05 153409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87924/9acf3762-1985-2c11-1796-051d53f8075f.png)
# 試してみる
では、さっそく試してみます。
Qiita APIを利用して情報を取得し、Slackに通知します。
※公式のQiita APIリファレンスは[こちら](https://qiita.com/api/v2/docs)全体像としては以下になります。
![フォローしているQiitaユーザの投稿をスラックに通知.d
【超入門】Pythonで動くAWS LambdaのHelloWorld API
## はじめに
個人開発始めたての方やAWS、webアプリの勉強してる方向けに、まず挫折しない超シンプルなAPIをAWS環境にPythonで作ってみました。PostmanでHTTPリクエストを送ると’helloworld’が返ってくるというだけのものです。
ぜひ参考になれば。## インフラ構成
まずさっくりしたインフラ構成図はこちらです。
私はmacを使っていますがPostmanのインストール手順が少し変わるだけで環境差分はほぼないです。
AWSのいいところですね。![インフラ構成図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762025/f073bf00-89f5-4ded-0a66-33bfcb9bb1e9.png)
## 事前準備
– AWSアカウントを発行済みであること
– Postmanがインストール済であること
⇨DLサイトhttps://www.postman.com/downloads/## 構築の流れ
次にStep by StepでAPI構築の流れを
LambdaをVPCに配置するかの検討ポイントを調べた
# VPC内リソースへのアクセス要件
LambdaがRDSやElastiCache、Amazon Redshift、Neptune DB clusterなど、VPC内部に配置されたリソースにアクセスする必要がある場合、Lambdaも同じVPCに配置する必要があります。(RDS Proxyなどほかの手段を取らない前提)これにより、Lambdaはプライベートなサブネットにアクセスできるようになります。
# セキュリティ要件
セキュリティが重視されるシステムや、外部からのアクセスを防ぎたい場合には、LambdaをVPC内に配置することが推奨されます。これにより、Lambdaの実行環境はパブリックインターネットから隔離され、アクセスコントロールが強化されます。
# インターネットへのアクセス要件
LambdaをVPCに配置すると、インターネットアクセスがデフォルトで無効になります。VPCに配置されていないLambda関数は、インターネットに直接アクセスできるため、外部APIやWebサービスへの接続が容易です。
もしLambdaがインターネット経由で外部APIなどにアクセスする
[Amazon Web Services]クロスアカウントロールで複数のLambdaランタイムを一括更新
Python3.9のサポート期限が迫り、Lambdaランタイムを更新する必要があります。
自分の環境では複数のAWSアカウントを所有しており、マネジメントコンソールによる各Lambdaランタイムの更新は非常に手間がかかると感じました。そこで今回は、IAMRole,Lambda,StepFunctios,という要素を使い、
クロスアカウントロールで複数のLambdaランタイムを一括更新してみました。## システム構成図
今回のシステム構成図は以下になります。
基本は下記記事を参考にさせていただいており、IAM権限設定やlambdaRunTimeUpdate関数処理内容をカスタマイズし、クロスアカウントでのLambdaランタイム更新をしていきます。
https://qiita.com/hirosys-biz/items/58465b5221e3e60b576a![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822026/f7788470-a24e-e299-c974-8fbb66
【リスト内包表記】ラムダ式と組み合わせたら困った話
## 目次
– [はじめに](#はじめに)
– [問題について](#問題について)
– [解決方法](#解決方法)
– [考察](#考察)
– [結論](#結論)
– [最後に](#最後に)
## はじめに
リスト内包表記でのラムダ式の使用中に、期待と違う動作をされて困ったので、備忘録として解決策を置いておこうと思います。考察もしていますが、厳密な説明ではなく、あくまで筆者の解釈です。## 問題について
“`python
l = [‘apple’, ‘grape’, ‘lemon’]
l2 = [lambda:[i, id(i)] for i in l]
for j in l2:
print(j())>>>
[‘lemon’, 2409481603056]
[‘lemon’, 2409481603056]
[‘lemon’, 2409481603056]
“`
このように、リスト内包表記の中でラムダ式を使うと、リストの要素が全て最後の要素と同じになってしまうので、これを解消する方法を紹介したいと思います。## 解決方法
先に結論を言っておくと、以下のコードを
【AWS】AWS Lambda Function URLsを検証!
## はじめに
この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。今回はAWS Lambdaの機能として提供されたAWS Lambda Function URLs(以下、Function URLs)を検証してみます。
## この記事で伝えたいこと(Point)
– AWS Lambda Function URLsを使うとAPI Gatewayを使わずにLambdaの機能だけでAPIエンドポイントURLを作成できるよ
– AWS Lambda Function URLsの特色はどこかについて説明しているよ## LambdaがURLを発行するようになったね
[AWS Lambda Function URLs の提供開始: 単一機能のマイクロサービス向けの組み込み HTTPS エンドポイント – Amazon Web
NestJSによるLambdaとRDS Proxyのピン留め回避とプロキシ分割
## 問題
Lambda + RDS Proxy + Aurora構成のアプリケーションで、Lambdaの同時接続数がたびたび上限(1000)を突破することがありました。サービスクォータで同時接続数の上限を引き上げてみたものの、Auroraの接続上限(`db.r6g.xlarge`で2000)を超える設定をしても意味がないので、根本的な解決にはなりませんでした。https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html
RDS Proxyのメトリクスをみたところ、DB接続上限の80 %(= 1600)に設定しているはずなのに4000を超えるほどの`DatabaseConnections`がありました。あきらかにおかしい挙動だったので、ピン留めを疑いました。
### ピン留めによる接続数増加の原因
RDS Proxyのドキュメントをみたら以下の記載がありました。
> ステートメントのテキストサイズが 16 KB を超える場合、プロキ
Next.jsをLambda Web Adapterでサーバレスに動かしてみた[AWS SAM]
# はじめに
こんにちは。elephantnodeと申します。普段は都内で社内情シス+Web系エンジニアとして業務しています。
勤め先で**Next.js**を使ったWebサイトを**AWS Lambda**と**Lambda Web Adapter**を使ってサーバレスに動かしてみたので、構築した手順についてご紹介します。
AWSへのデプロイには**AWS SAM**を利用します。
またデプロイしたあとに**CloudFront**で**OAC(オリジンアクセスコントロール)**と**WAF**を利用して、Lambdaを保護しながら公開する方法もやってみましたのでそちらもご紹介します。
# AWS Lambda Web Adapterとは
**LambdaでWEBアプリを実行するためのオープンソースソフトウェアツール**です。
https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/
AWS Lambda Web Adapterは、「Webフレームワークで作ったアプリ」を入れたコンテナを、
AWS Lambda+SNSのメール配信におけるエラーハンドリングを実装する
# はじめに
本記事ではAWSのLambdaとSNSを使用したメール送信において、エラーハンドリングを実装していきます。# ゴール
下記の2点を確認することをゴールとします。1. Lambda→SNS段階のエラーを検知し、エラーメールを送信できてる事
2. SNS→メール配信段階のエラー検知し、エラーメールを送信できてる事# 処理フロー
“`
【正常系】
Lambda → SNS → メール配信【エラー系1: Lambda→SNS段階】
Lambda → エラー発生 → エラーメール送信【エラー系2: SNS→メール配信段階】
SNS → エラー発生 → CloudWatchメトリクスで検知 → アラーム状態 → エラーメール送信
“`# 作るもの
– AWS Lambda:1つ
– Amazon SNS:1つ
– Amazon CloudWatch:1つ# 1. SNSトピックの作成
## トピック・サブスクリプションの作成
トピックとサブスクリプションの作成手順については、次の記事に記載されてる方法を参照ください。
https://qii
シェルスクリプトで AWS Lambda 用 docker イメージ の動作チェックと ECR にプッシュする
以下の内容で、ドッカーイメージを構築し、ローカルで動作確認後、ECRのリポジトリにイメージをプッシュする。
### 変更履歴
2024/10/31: シンプルな処理内容に修正
2024/11/03: ログイン認証する行を追記### こんな感じの内容
作成するイメージ名: simple_lambda_function
コンテナ名: simple_container
タグ名: 今日の日付+イメージ名
Lamda関数名: simple_function
テストに用いるデータ: json形式前準備:
・ECRにsimple_lambda_functionのリポジトリを作成する。テストデータ:
“`json
{“input”: “Are you Okay”}
“`### Windows上のWSLで実行可能なシェルスクリプトの用意
“`bash
#/bin/bash# あなたのAWSアカウントID
export AWS_ACCOUNT_ID=’012345678910′# リポジトリ名
export REPOGITORY_NAME=’simple_lambda_f
Amazon Connectのフローで呼び出したLambdaのレスポンスを使用する方法
# はじめに
Amazon Connectのフローには、`Invoke Lambda Functionブロック` があります。
このブロックからLambdaを呼び出し、そのレスポンスをConnectのフロー内の属性に保存する事で、フロー内でLambdaのレスポンス値を使用することができます。
本記事では、Lambda関数からのレスポンスを `Play Promptブロック` に設定してテストチャットからフロー内で表示されるところまで実装していきます。# 対象の方
– ConnectのフローからLambdaを呼び出す方法を知りたい方
– Connectのフローから呼び出したLambdaのレスポンスをフロー内で使用したい方# ゴール
`Invoke Lambda Functionブロック` で呼び出したLambdaから下記のレスポンスを返します。Connectのフローを使用してテストチャットした際に、`おはよう`、`こんにちは`、`こんばんは` が順番に表示されることを確認します。“`:Lambdaの返り値
{
‘test1’: ‘おはよう’,
‘test2
LambdaをVPC内に作成する際、IAMロールに対するポリシーが足りずにエラーになった
# 開発環境
– Lambda
– VPC# 前提
VPC内にLambdaを作成しようとしたところ、IAMロールに対してポリシーが不十分だよと指摘された。
# 発生したエラー
“`basic
The provided execution role does not have permissions to call CreateNetworkInterface on EC2
“`# 内容
このエラーメッセージは、AWS Lambdaや他のサービスがEC2インスタンス上にあるネットワークインターフェース(ENI:Elastic Network Interface)を作成しようとしているが、アタッチされているIAMロールにその操作を行うための適切な権限がないことを示している。この場合は、IAMロールに適切なポリシーが付与されていないことによるエラーメッセージとなる。Lambda関数がVPC内のリソース(例えば、RDSやEC2)にアクセス または作成される際、ネットワークインターフェースを作成するためにこの権限が必要。
VPC内で動作するLambdaはネットワークイン
EventBridgeからLambdaに起動日時を連携する
# はじめに
EventBridgeからLambdaを起動する場合、EventBridge⇒Lambdaに日時情報を連携できないか 気になったので実際にリソースを作って調べてみました。# 結論
EventBridgeから起動されたLambdaでは、`event` パラメータにEventBridgeのイベントの起動時刻(time)が含まれるためこれを利用できそうです。“`:event
{
~~~
‘time’: ‘2024-10-29T15:30:00Z’,
~~~
}
“`# ゴール
EventBridgeから起動したLambdaで、イベントの起動時刻を取得できることを確認します。# Lambdaの作成
簡単なLambdaを準備します。
“`python:lambda_function.py
def lambda_handler(event, context):
event_time = event[‘time’]
print(event_time)
“`# EventBrige
下記の手順でEventBrig
別アカウントのLamdbaをinvokeする際の注意点
## やりたいこと
今回はECSから別アカウントのLambdaをinvokeする際に少し沼ったので注意点を挙げたと思います!## やり方
### 権限の設定#### 1. 呼び出し先のLambdaでの設定
**Lambdaのアクセス許可ポリシーの追加**
– Lambda関数に対して呼び出し元のアカウントから呼び出しを許可するためのリソースベースのポリシーを設定します。(Lambdaの実行ロールなどはいじる必要はありません!)
– AWS CLIでする場合は以下のコマンドを参考にしてください!“`bash
aws lambda add-permission \
–function-name my-function \
–statement-id AllowInvokeFromAccount \
–action lambda:InvokeFunction \
–principal arn:aws:iam:::root
“`– `my-func
LambdaからRDSにアクセスができない理由
初めまして!CREとしてエンジニアをやってますkazuです🦌
業務では、社内システム自動化プロジェクトに携わってましてその中でLambdaから RDSへのアクセスがなぜできないのかという疑問が湧いてきたので、それぞれの役割と関係性について調べました。# そもそも、LambdaからRDSに接続することになったワケ
本プロジェクトは、要件定義から開発まで一貫して担当しているプロジェクトであり、これまで社内において手動でやっていたのものを自動化する事が目的です。最終的にはLambdaからRDSにアクセスをし、本番DBの値を更新する事でその結果をSlackに通知する事を目指しています。
正直なところAWSに関する知識は乏しく、「Lambdaを呼び出して実行すれば、本番DBを更新できるだろう」と考えていました。
しかし、インフラ構成図をもとにフィードバックを受ける中で、LambdaからRDSへのアクセスが簡単ではないことを知り、その理由について疑問が湧いてきたので調べることにしました。
# なぜ、LambdaからRDSへ接続ができないのか
– “`RDSの作成場所がVPC内である