- 0.1. 2023/07 GlueとStepfunctions①(全体像の把握編)
- 0.2. 100台超のEC2自動停止をAIに聞いて3分で実装してみた!
- 0.3. API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。
- 0.4. NestJSをAPI Gateway + AWS Lambdaで構成する(その2)- NestJS実行用のローカル環境構築
- 0.5. Serverless Express rootディレクトリのPOSTメソッドで403発生
- 0.6. CORS対応localhost:3030Node.js(Express)からAPIGateway
- 0.7. Lambda(Node.js18) SystemParameter(SDK v3)
- 0.8. NestJSをAPI Gateway + AWS Lambdaで構成する(その1)
- 0.9. 自分用です
- 0.10. 【AWS CDK】Pythonで動くLambdaレイヤーをCDKでデプロイする方法
- 0.11. API Gateway + CognitoでWebサイトからバックエンドの処理を呼び出す
- 0.12. Apache+PHPサーバーのWebサイトをAWS Lambdaで動かす
- 0.13. 【This is My Architecture3ヶ月チャレンジ-2】Ancestry: Building a Real-time and On-demand Logging System on AWS
- 0.14. KinesisトリガーのLambdaに入ってくるデータが突然空になった
- 0.15. AWS Lambda + Python でログ出力がうまくいかない件
- 0.16. AWS LambdaでPython+Flask環境を作成する
- 0.17. Lambdaの無限ループが一部対策されたみたいなので試してみた!
- 0.18. AWSのS3のURLをLambdaで取得する(Python)署名付きじゃないやつ。
- 1. S3の画像URLをLabdaで取得したいだけ
2023/07 GlueとStepfunctions①(全体像の把握編)
# 執筆にあたって
弊社では、S3に保存されているデータをRDS(MySQL)にimportする際に、LambdaやECSを用いておりました。
この作業をAWSのサービスの一つである「Glue」で行うように変更することが決まりました。
それに伴って情報のキャッチアップを行なっていたのですが、Stepfinctionsと合わせて運用されている記事で、lambdaを使って実装されていたり(今回は直接実行をしたい)、古めの記事や内容のものが多かったので、新しい情報を纏めようと思いました。
※現在は検証段階なので、記事の内容が「全て正しい」、あるいは「ベストプラクティスである」というわけではありません。
※以下、本記事においては、RDSはMySQLと同義とします。# この記事におけるGlue活用の目標
S3に保存されているデータをRDSにimportする際に、lambdaやECSを使わずに、GlueとStepfunctionsだけを用いて完了させることを目標としています。
以下、具体的にimportに必要なGlueの操作をまとめます。・Glue crawlerの作成
・Glue cra
100台超のEC2自動停止をAIに聞いて3分で実装してみた!
EC2の自動停止(メンテ不要Version)
—以前の執筆記事でLambdaでのEC2の自動停止について
ご紹介しました。
[EC2の自動停止について](https://qiita.com/fukuchan_milk/items/64c924f8fa3fd4342ba8)上記は超入門編で、AWSを初めて利用する方でも
行えるように記載しました。さて、前回のコードでは課題にも記載した通りEC2の数が増減した場合にLambdaコードの修正が必要となってしまうため管理が煩雑になっています。
今回はメンテナンスフリー(EC2が増減してもLambdaの修正が不要!)な
コードでEC2の自動停止を実現します。今回もAIに質問しながらコードを実装しました。
Q1)東京リージョンで稼働するすべてのEC2を日本時間の午前1時に停止したいです。LambdaでPythonコードを書くとどうなりますか
—A1)EC2インスタンスを停止するPythonコードをLambdaで実行することができます。以下のコードは、東京リージョンで稼働するすべてのEC2インスタンスを日本時間の午前
API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。
# はじめに
AWSが運営している[AWSブログ](https://aws.amazon.com/jp/blogs/news/)を流し見していたところ、ちょうどこんなシステムを作ってみたいと思い描いていた内容と合致するソリューションが手順・サンプル付きで紹介されていたので、少しハマったところも含めて手順をまとめてみようと思います。– [AWS のサーバーレスと Amazon S3 署名付き URL、クライアントサイド JavaScript で大きなサイズの複数ファイルの一括アップロード・ダウンロード機能を実現する方法](https://aws.amazon.com/jp/blogs/news/large-size-files-transferring-by-serverless-s3presignedurl-and-clientside-javascript/)
# 紹介するソリューションについて
S3の機能で一時認証キーを使って一定期間のみアクセスを可能とする署名付きURLがありますが、署名付きURLを使ってCognito認証を行った上でアップロード・ダウンロードが行えるソリュ
NestJSをAPI Gateway + AWS Lambdaで構成する(その2)- NestJS実行用のローカル環境構築
# つづき、その2
– [その1 NestJSやLambdaでのnode.jsの話し](https://qiita.com/ssugimoto/items/988320d34022555401fb)## 動かし方
– REAEMEは、こちら https://github.com/serverless/examples/blob/v3/aws-node-typescript-nest/README.md
## 上記のREAMEだけではよくわからない場合に必要なものは
### Node.js実行環境
– コンテナを使うことを推奨
– 環境を汚さない、人ごとや環境依存しない、他のプロジェクトが動かなくなるようなことはない
– Node.js 16 または Node.js 18(18を使う方が良いです)
– バージョンやコマンド確認
“`
which node
node -v
npm -v
“`### serverless frameworkインストール、V3を使う
– V3
– グローバルインストール“`
npm install -g serverless
np
Serverless Express rootディレクトリのPOSTメソッドで403発生
# rootディレクトリのPOSTメソッドで403発生
### 結論
API Gatewayの特定のリソース配下にProxを配置してる場合、Expressでルートはproxyのルートを指定すること!
“`jsx
//account (POST)
|-//abc(GET/POST)
|-//efg(GET/POST)
“`![API Gatewayの設定](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5968e051-e33f-46e5-975c-a1a78beddfc3/Untitled.png)
API Gatewayの設定
“`jsx
a.app.use(‘/’, accountRouter);
b.app.use(‘/account’, accountRouter);
c.app.use(‘/abc’, abcRouter);
d.app.use(‘/efg’, efgRouter);
“`Q: 次のパスへのリクエストは、上記どのルーティング処理が実行されるでしょうか。
CORS対応localhost:3030Node.js(Express)からAPIGateway
■内容
ローカルで立ち上げたExpressからAPI Gateway経由でLambdaを実行しようとすると、下記エラーがレスポンスされる。
> Access to XMLHttpRequest at ‘[https://{hostname}/xx’](https://vtravelapi.dtai-entrancepoc.com/auth%27)
from origin ‘http://localhost:3030’
has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
>![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ed0d86d2-0d1d-4827-a3cd-d8b319809fde/Untitled.png)
FrontEnd ー> BackEnd
(Express) (AWS API
Lambda(Node.js18) SystemParameter(SDK v3)
# Lambda(Node.js18) SystemParameter(SDK v3)
### 注意書き
– AWSに関する説明は省略します。(Lambda、SystemParameterの実装/設定方法など)
– C#でLambdaの実装経験がありますが、Node.jsでのLambda作成が初めてでいろいろつまずいたので、備忘録として残しています。# やること
1. Node.js14ラインタイムのLambdaで、SystemParameterに登録したSecureStringを取得する
2. Node.js14→Node.js18ランタイムへのアップデート対応
3. SDKを利用せずに、SystemParameterから値を取得する (未対応)## 1.SDKを利用してSystemParameterの値を取得する(Node.js14)
“`jsx
const AWS = require(“aws-sdk”);exports.handler = async (event) => {
console.log(“Test”);// // 新規 A
NestJSをAPI Gateway + AWS Lambdaで構成する(その1)
# はじめに
– いくつかの記事に分けて投稿していく予定です
– NestJS + API Gateway で動かすことを目標にしていきます
– NestJSの使い方等も調べていきます
– [本題](#本題)## きっかけ
– AWS Lambda Node.js をTypescriptで開発するのはよくある。TypescriptではなくNode.jsそのまま使う場合もある
– AWS Lambdaを1つ1つのハンドラー(1つ1つのLambda function)だけでなく、共通コンポーネント 等が必要になる
– 複数人でバックエンドを作成していくと、手元で 気軽にsls deploy したりして 知らぬ間にhandlerは指定されているけどコードが無いとか、Lambda Layerが変わったとか、CloudFormation 等が壊れるんじゃないか?
– CICDに載せる前の段階で動作確認したい
– GitHub等にpushしていない段階でクラウドに反映したい
– GitHub等のfeatureブランチに対応した誰でも自由に使えるクラウドのENVが欲しい(
自分用です
`tree .`
“`
.
├── layer
│ └── wkhtmltopdf
│ └── wkhtmltox-0.12.6-4.amazonlinux2_lambda.zip
├── samconfig.toml
├── src
│ ├── app.py
│ ├── assets
│ │ └── fonts
│ │ ├── fonts.conf
│ │ └── ipaexg00401
│ │ ├── IPA_Font_License_Agreement_v1.0.txt
│ │ ├── IPA_Font_License_Agreement_v1.0.txt:Zone.Identifier
│ │ ├── Readme_ipaexg00401.txt
│ │ ├── Readme_ipaexg00401.txt:Zone.Identifier
│ │ ├── ipaexg.ttf
│ │
【AWS CDK】Pythonで動くLambdaレイヤーをCDKでデプロイする方法
# はじめに
仕事でLambdaレイヤーをCDKでデプロイする機会がありました。
その辺のナレッジが記載された記事があまりなかったので、
本記事ではLambdaレイヤーをCDKでデプロイする方法を記載します。
# 環境
OS:Windows 10# 前提
以下がインストール済み
CDK(ver 2.67.0)
Docker Desktop
yarnCDKの言語:TypeScript
AWS CLI:デフォルトプロファイルが設定済み
Docker DesktopはCDKでのデプロイを実行するときに使います。# 実装内容
Pythonで動くLambdaレイヤーと、レイヤーを使用するLambdaを実装します。
Lambdaのソースコードは以下です。
numpyライブラリのモジュールを使って、ランダムに乱数を生成するだけのシンプルな内容です。
Lambdaレイヤーには、numpyライブラリを含めて実装します。
“` index.py
import numpydef handler(event, context):
# 乱数を生成
print(numpy
API Gateway + CognitoでWebサイトからバックエンドの処理を呼び出す
# やりたいこと
前回の記事( https://qiita.com/mkttks/items/c30e993adb520869dbb4 )ではAWS Lambda と Amazon DynamoDB を使用してバックエンドの処理を実装しました。
今回はAPI Gatewayを使ってWebサイトからこのバックエンドの処理を使えるようにします。内容は引き続き下記の公式チュートリアルに沿ったものです。(※ただしチュートリアル通りに進めると権限まわりの設定で詰まります。)
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/# システム構成図
![api gatewayのシステム構成図](https://d1.awsstatic.com/Test%20Images/Kate%20Test%20Images/Serverless_Web_App_LP_assets_05.d1ecdfaab160d7dc00ddbc
Apache+PHPサーバーのWebサイトをAWS Lambdaで動かす
別チームでホスティングしていたWebサイトがあったのですが、いろいろと都合がありWebサイトのソースとドメインだけをもらい、自分のとこのチームでホスティングする機会があり、「いまさらサーバーとか持ちたくない! サーバーレスでやりたい! それにIaCしたい!」と四苦八苦したメモです。
## 受領したソース
受領したWebサイトですが、販売終了したけれど残しておかないといけない商品サイトとかをイメージしていただけるといいかと思います。アクセス頻度・更新頻度ともに多くはありません。
ファイル種別としては、以下のようなものが含まれます。古き良きCGI的な感じの動的サイトです。
– HTMLファイル
– PHPファイル、incファイル
– アセットファイル
– jsファイル
– スタイルシート
– 画像
– etc…容量的には全体で400MBくらいですが、そのほとんどはアセットファイルで、HTML,PHPは数MBです。PHPはヘッダーフッターを共通化したり、ニュースやブログ記事のXMLをCMSサーバーから取得・整形したりする用途で使われています。C
【This is My Architecture3ヶ月チャレンジ-2】Ancestry: Building a Real-time and On-demand Logging System on AWS
[前回](https://qiita.com/zun777/items/8fcac931dcd7ad039dff)に引き続きThis is My Architecture3ヶ月チャレンジの2回目。
今回は[Ancestry: Building a Real-time and On-demand Logging System on AWS](https://www.youtube.com/watch?v=igcnes0PI10)を聴いていく。# 目的
限られた時間で一気に以下をやりたい。– 英語のDictationとShadowing(リスニングとスピーキングUP)
– AWSサービスの勉強と実例
– インプットとアウトプット# まずは1回聞いてみる
Jimさんfrom アンセストリー。family history, DNA company. lots of data of connection.
real time ondemand logging system.
thoudthansa number of EC2 running, fargarte sending ma
KinesisトリガーのLambdaに入ってくるデータが突然空になった
# 起こったこと
突然Lambdaに入ってくるイベントが下の状態なってしまい、デコード時エラーで動かなくなってた。
“`javascript
{
Records: [
{
kinesis: {
data: “”, // <-- 本来はここにbase64エンコードされたテキストが入ってくる。 ... }, ... } ] } ``` 原因はIP固定にするためVPCに入れたこと。 分かったのはそれだけ。たぶんAWSのバグと思う。 # 対応1 とにかくVPCが悪さしてるのでVPCとトリガーを付け直す。 1. 一旦LambdaからVPC設定とKinesisトリガーを外してデプロイ。 1. VPC設定だけ付け直してデプロイ。 1. Kinesisトリガーを付け直してデプロイ。 1回で治らない場合があるのでこれを数回繰り返す… ### 結果 → 失敗 治っても次のデプロイでまたデータが入らなくなる。 # 対応2 KinesisトリガーとVPC Lambdaを分けてしまおうかとも考えた
AWS Lambda + Python でログ出力がうまくいかない件
AWS Lambda で Python 関数を作ったらログ周りでハマったのでメモ。
## 困りごと
こういう Lambda 関数を作って実行したが、ログが出力されない。“` python
import logging# ルートロガーのログレベルを設定する
logging.basicConfig(level=logging.INFO)logger = logging.getLogger(__name__)
def lambda_handler(event, context):
logger.info(“foo!!!”)
“`– 似たような Python スクリプトを普通の python コマンドで実行した場合は意図通り出力される
– Lambda の Python ランタイムだけでなく、 `public.ecr.aws/lambda/python` をベースに作った Docker コンテナでも同様の問題が発生する## 原因
Lambda の Python ランタイムでは、**あらかじめルートロガーに StreamHandler が設定されている**
AWS LambdaでPython+Flask環境を作成する
# AWS LambdaでPython+Flask環境を作成する
AWS Lambdaは、サーバーレスコンピューティングサービスであり、アプリケーションやバックエンドサービスをサーバーレスアーキテクチャで実行することができます。この記事では、AWS Lambdaを使用してPython+Flask環境を作成する方法を説明します。
## 前提条件
– AWSアカウントを持っていること
– Python 3.8以上がインストールされていること## 1. プロジェクトディレクトリの作成
まず、プロジェクト用のディレクトリを作成し、そのディレクトリ内で作業を行います。
“`bash
$ mkdir python-flask-lambda
$ cd python-flask-lambda
“`## 2. 仮想環境の作成
pipはPythonのパッケージ管理システムで、多くのPythonパッケージを簡単にインストールできます。pipがインストールされていることを確認し、次のコマンドを実行してvirtualenvをインストールします。
プロジェクトディレクトリ内で、Python
Lambdaの無限ループが一部対策されたみたいなので試してみた!
# はじめに
**Lambda**皆さん大好きですよね???僕も月並みには好きです。そんなLambdaですが、定期的に**無限ループ**による高額請求の記事やスライドを見かけます。
そんな問題に終止符を打つ1歩目のアップデートがありました。
>意図しないループの影響を軽減するために、Lambda は特定の種類の再帰ループを発生直後に検出できます。Lambda は再帰ループを検出すると、関数の呼び出しを停止し、通知します。https://docs.aws.amazon.com/lambda/latest/dg/invocation-recursion.html
現在は、**Amazon SNS・Amazon SQS**による無限ループの検知をサポートしているとのことです。
## 試してみる
以下の記事に記載のサンプルコードを参考に試してみる。
SAMを使用して、Lambda + SQSを使用した無限ループが行える環境を作成する。
https://github.com/aws-samples/aws-lambda-recursion-detection-sample#
AWSのS3のURLをLambdaで取得する(Python)署名付きじゃないやつ。
S3の画像URLをLabdaで取得したいだけ
やりがいことはAWSのS3に保存した画像URLをAWSのLambdaで取得してきて、そのURLをSNSやメールで投げたいだけ。
なお筆者はS3の画像URLがどれなのかで一番つまずいた。
Amazon S3>バケット>localstable(任意の名前)>mumumu.png(任意の名前)の中にある【オブジェクトURL】がまさにそれである。
恐らくそれだろうという目星は筆者もすぐについた。
だがクリックしても下記のようなよく分からないエラーが出る。
“`php:
AccessDenied
Access Denied
M9DEV
1ltHaEH/kZp5nol7r77C4xdwg0qt+Giq0quVh1HYsuJQvA==
“`S3+lambda+画像+取得などで検索すると署名付きURLの取得方法が書かれたものが大量
無認証の関数URL有効なAWS LambdaでHTTP APIエンドポイントを公開するときのTips
# はじめに
ちょっとしたAPIを作りたいとき、[関数URL](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-urls.html)(Function URLs)を有効化したAWS LambdaはHTTPエンドポイントを設定するためのAPI Gatewayを都度建てる必要がないので便利です。
一方で、リクエスト元がIAM認証に利用するSigV4署名付きリクエストの生成に対応できない場合は関数URLがサポートするのAWS_IAM認証機構は利用できないため、ある程度安心してエンドポイントを利用するには引き続きAPI Gatewayを前段に用意したうえでAPIキー認証の設定ないしオーソライザーを実装するか、関数側で独自のリクエスト検証機構を設定する必要があります。この記事ではセキュリティに関する要件があまり求められないシンプルなタスク向けに、Python実装の単一のLambda関数で簡易的なリクエスト検証機構を実装する例を紹介します。マネジメントコンソールで実装をコピペできるレベルのシンプルさをコンセプトとしています。
AWS Lambdaの環境変数をCodeエディタから見られるようになった
最近のAWS UpdateでAWS LambdaコンソールのCodeエディタから見られるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2023/06/aws-lambda-copying-environment-variables-console-code-editor/
今まではコンソールから環境変数を確認する際は「設定」→「環境変数」に見に行く必要があったのですが、今回のUpdateによりコード編集中にコンソールから移動する必要がなくなりました。
# やってみる
簡単ですが、試してみます。環境変数の設定自体は従来通り「設定」→「環境変数」から行います。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/060421f5-4c9e-961e-77df-70013463be6d.png)「コード」タブに移動し、「Tools」→「Show Environment Variables」を押下します。