- 1. AWS Lambdaレイヤー設定ガイド:Lambdaレイヤーの活用で外部ライブラリの管理を効率化する方法
- 2. Lambda + Golang + Dockerで通知システムを構築してみた
- 3. LambdaもAPI GatewayもDynamoDBも画面が激変してるので、ハンズオンの動画を勝手に再収録したよ
- 4. 【AWS】Lambdaから固定IPで他システムをアクセスする
- 5. Lambdaを使用したRDSの操作
- 6. Rust製バッチ処理をLambdaとECSのどちらでも実行できるようにするためのCargo/Docker活用術
- 7. HTMLをPDFに変換するAPIサービス|PDF生成の課題を解決
- 8. 初心者のAWS lambda学びまとめ
- 9. Slack から AWS CLI を実行し ECS or EC2 をスケーリングする
- 10. Lambdaで処理できないバッチ処理をAWS Batchで便利に実行しよう
- 11. 【AWS】LocalStackでLambda関数の作成
- 12. Lambdaからシークレットマネージャーにある認証情報を取得
- 13. CDK+LambdaでTypeScript+TypeORMが使えるまで【苦労】
- 14. DynamoDB GSIに対してLambdaからクエリを実行し特定の属性値を取得する
- 15. Terraform勉強-第31回:SQSをトリガーにしてLambda関数を実行し、CloudWatchでログを確認する
- 16. 【アップデート】AWS Transfer Family SFTP コネクタ は、ファイル転送操作のステータスをリアルタイムで表示するようになりました
- 17. フォローしているQiitaユーザが作成した記事を1日1回、スラックに通知してみた ~AWS100本ノック~ 13/100
- 18. 【超入門】Pythonで動くAWS LambdaのHelloWorld API
- 19. LambdaをVPCに配置するかの検討ポイントを調べた
- 20. [Amazon Web Services]クロスアカウントロールで複数のLambdaランタイムを一括更新
AWS Lambdaレイヤー設定ガイド:Lambdaレイヤーの活用で外部ライブラリの管理を効率化する方法
## はじめに
AWS Lambdaでは、複数のLambda関数間で共通のコードやライブラリを共有するためにLambdaレイヤーを使用します。:::note
**Lambdaレイヤーを正しく設定することは、再利用可能なコードを効率よく管理できるため、システムの健全性を保つために非常に重要です。**
:::しかし、Lambdaレイヤーが正しく設定されているかを確認する方法は意外と見落とされがちです。
私も普段からLambdaレイヤーを使う経験がほとんどなかったので、自分への備忘録として記事を整理しました。
## Lambdaレイヤーについて
Lambdaレイヤーは、AWS Lambda関数で使用するライブラリやコードを管理するための一種のアーカイブです。
![スクリーンショット 2024-11-14 21.12.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0a1e0909-6a77-5f62-92bb-fe24f5ca85a6.png)
引用画像:https://a
Lambda + Golang + Dockerで通知システムを構築してみた
# LambdaとGolangで通知システムを作成
Lambda + Golang + Dockerで通知システムを構築してみたので
ドキュメントにまとめてみましたLambdaって聞くと結構難しく感じてたのですが
今回の目的を達成するための実装だとGolangとDockerの知識で意外となんとかなりました。
(最初はLambdaの関数をゴリゴリで使うもんだと思ってましたが,,,,)
## やりたいこと– CloudWatchから送られてきたパラメータを元にLambdaで処理を実行、その後LambdaからAPIにリクエストを送りレスポンスの内容によって振る舞いを変える処理を実装したい
処理フローにすると以下のようになります。
### 処理の流れ
![スクリーンショット 2024-11-14 13.15.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705510/21c14649-a413-4ba2-dc2f-a92ff0ddc841.png)①CloudWatchからLambdaが起
LambdaもAPI GatewayもDynamoDBも画面が激変してるので、ハンズオンの動画を勝手に再収録したよ
AWSをこれから始める方に超おすすめなAWSコンテンツに「AWS Hands-on for Beginners」というシリーズがあります。
AWSアカウントの作り方から始まり、マルチAZやサーバーレス、コンテナ、IaC、分析、IoTなど、様々なハンズオンコンテンツが用意されています。
https://aws.amazon.com/jp/events/aws-event-resource/hands-on/
ひとつずつが3時間ぐらいでできるので、手を動かして体験するにはとても良いきっかけになると思います。
すべてのコンテンツがハンズオンの実演動画付きなので、超絶わかりやすいのですが、**マネジメントコンソールが最新のものに追いついていません。。** 日々変化するので、これは仕方がありません。。
今回、「AWS Hands-on for Beginners 〜Serverless #1〜」を久しぶりに行ったのですが、せっかくなので画面を録画しながら実施しましたので、これからハンズオンを実施される方はぜひ参考にしてください。
## AWS Hands-on for Beginne
【AWS】Lambdaから固定IPで他システムをアクセスする
AWS Lambdaから他システムにアクセスしたいが、相手側がホワイトリストやACLをかける場合、AWS LambdaのIPを固定しないといけません。ここではその設定方法をまとめてみます。
# 概要
完成図は以下になります。![vpc.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491433/2d3f66f2-8e6f-0d10-da4b-ba00030e7f25.png)
# 用語
1. [VPC(Virtual Private Cloud)](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-subnet-basics.html)
AWS専用の仮想ネットワーク。
1. [インターネットゲートウェイ](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html)
VPCをインターネット接続できるように
Lambdaを使用したRDSの操作
## はじめに
AWS上でRDSでのDB操作をする場合、踏み台サーバ(EC2)等からRDSに接続し操作をするのが一般的かと思います。
ただし、この場合サーバの管理などが必要になるため不要なコストが発生する可能性があります。
Lambdaを使用してDB操作をする場合はサーバの管理が不要なため、簡単なデータ参照や登録、更新、削除などを行いたいときはLambdaを使用するのも一つの選択肢になるかと思います。
本記事ではLambdaからRDSの操作を行う際の各種設定手順とエラーポイントについてまとめていきます。## 前提条件
・コンソール操作で各種リソースを作成
・データベースの作成における、エンジンのタイプなど一部の設定値に関しては要件に応じて読み替えてください。## RDSの作成
①VPCの作成
・作成するリソースで「**VPCなど**」を選択
・VPCエンドポイントで「**なし**」を選択
・その他の設定はデフォルト②DBサブネットグループの作成
・①で作成したVPCを選択
・①で作成したVPCのサブネットが存在するAZを2つとも選択
・①で作成したVPCのプライベート
Rust製バッチ処理をLambdaとECSのどちらでも実行できるようにするためのCargo/Docker活用術
## 背景
筆者はアプリケーションのバッチ処理を基本的にRustで実装しています。そうしたバッチ処理は以下の記事で書いたようにLambdaで実行する場合が多いです。
https://qiita.com/Yuki_Oshima/items/860a859fb85365a609fc
ただし、実行に15分以上かかるような処理はLambdaで実行できないので以下の記事で書いたようにECS/AWS Batchで実行します。
https://qiita.com/Yuki_Oshima/items/bb020e6a7702750d4f66
バッチ処理の実行時間は事前に予想できない場合が多く、また運用する中で処理時間が長くなっていくこともあります。そのためあらかじめLambdaでもECS/AWS Batchでも実行できるようにしておくと状況に応じて処理基盤を選択できて便利です。
## 概要
この記事ではRustでLambdaとECS/AWS Batchの両方で実行可能なバッチ処理を実装する方法を解説します。
具体的な内容は以下の通りです:
1. **Cargoを使った複数バイナリの作
HTMLをPDFに変換するAPIサービス|PDF生成の課題を解決
# TLDR
– HTML から PDF を生成する API サービスを開発しました。
– PDF 生成の際の環境構築不要、日本語フォント完備、アセットファイルのホスティング可能、開発中のプレビュー機能あり。PDF(HTML)の中身の開発に集中できます。
– 1 回の生成あたり約 0.3 円。固定費なしの完全従量課金。https://pdfg.net/ja
# 背景
アプリケーションの開発をしていると、度々「PDF を生成する」という要件に遭遇します。例えば以下のようなケースです。
– **帳票出力**: 請求書、領収書、納品書、契約書、証明書など、公式な書類を PDF 形式で出力する必要があるケース
– **レポート作成**: 売上レポートやアクセスログ解析など、グラフや表を含むデータを綺麗にレイアウトして共有したいケース
– **チケット発行**: イベントチケットや搭乗券など、スマートフォンでの表示・保存や印刷が必要なケース
– **マニュアル配布**: 製品マニュアルや操作手順書など、デバイスに依存せず同じレイアウトでの表示が重要なケース特に作成時点のもので後
初心者のAWS lambda学びまとめ
## 概要
仕事でAWS lambdaを使う機会があったので、学んだことや注意事項のまとめです。
初心者で同じような境遇の人の参考になれば嬉しいです。## 使ったサービス
– lambda
– API Gateway
– cdk (lambda, API Gatewayのコードを管理)## lambda自体の設定
### ライブラリを使う
lambdaのコード内で、Python標準ではないライブラリを使いたい場合は、ライブラリのコードもどこかに保持しておく必要があります。以下2つの選択肢があるようです。(他にもあるのかもしれません。)– lambdaレイヤーに入れる
ライブラリをzipにしてlambdaレイヤーというところにアップロードする方法です。わかりやすかった記事:
https://qiita.com/__DASHi__/items/268062f0dba0e93170f2
[注意]
zipにするフォルダ名は注意が必要です。(pyhonのライブラリなら、`python` にする)
– その時にはまって書いた記事:https://qiita.com/sioi
Slack から AWS CLI を実行し ECS or EC2 をスケーリングする
# はじめに
何かしらサービスに障害が発生した際、大体が EC2 or ECS をスケーリングすることで問題が解消することが多くあった。
これは、アクセスが集中する想定外のイベントが発生することが原因。
当然 AutoScaling するような構成にはなっているが、それでも追いつかないほどの負荷がかかってしまうことがあり、そうなった場合は基本的には SRE の方で一気にスケーリングすることで対応していた。しかし先日、勤務時間外に障害が発生し、初動対応が遅れてしまったことをきっかけに運用体制を見直すことになった。
そこで、休日でも外出先でも、スマホで Slack から簡単に、でも安全にスケーリングできたらいいね。という話になり作った構成のお話。# 目標
– Slack から AWS リソースを操作し EC2 or ECS をスケーリングできる
– AWS リソース操作は最小権限で
– 承認フロー付き
– 実行できる Slack チャンネルは一つのみ
– 複数 AWS アカウントのリソースを操作できる# 先に構成図
初見ではなんのこっちゃ状態だと思うのでそれぞれ詳細は後述。
Lambdaで処理できないバッチ処理をAWS Batchで便利に実行しよう
## 概要
この記事ではSQS + Lambda構成で処理できない長時間のバッチ処理のためにAWS Batchを利用する方法について解説します。AWS Batchの概要、設定方法や実際にジョブを登録して実行する方法について説明していきます。
このユースケースでのAWS Batchの利点は以下の通りです。
– ✅ サーバーレスでバッチ処理を行うことができる
– ✅ Lambdaの15分制限を超える長時間の処理を行うことができる
– ✅ ジョブのスケジューリングやリトライを自動で行ってくれる
– ✅ ジョブの並行実行数を制御することができる
– ✅ ジョブの失敗時の通知を設定することができるまたこの記事ではAWS CDKを利用しながらAWS Batchの設定方法を例示するので、お手元の環境でサンプルコードそのまま実行して試してみることができます。
## 目次
– [背景](#背景)
– [AWS Batchの概要](#aws-batchの概要)
– [AWS Batchの使い方](#aws-batchの使い方)
– [ジョブ定義](#ジョブ定義)
– [コンピューティ
【AWS】LocalStackでLambda関数の作成
# 環境
https://qiita.com/shutamo/items/c1ea90f623cabc8002cc“`cmd
// dockerを起動
docker-compose up -d
“`# Lambda関数の作成
zipファイルを使って関数を作成する方法で実施。### 1.コードファイルの作成
“`js:index.mjs
export const handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`
ローカルで作ってください。
AWS Lambda作成時に生成されるコードそのままコピペした。### 2.zipに圧縮
右クリックorコマンド### 3.Lambda関数のデプロイ
以下コマンドでデプロイします。
“`cmd
aws —
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