- 0.0.1. [ネタ]AWS Step Functionsはローコードなのか?
- 0.0.2. 【Python】GitHub ActionsとOpenID Connectを使ってLambdaを自動デプロイしよう!
- 0.0.3. AWS Lambda + Quarkusで、AuroraにアクセスするAPIを作成する
- 0.0.4. AWS Lambda + QuarkusでのREST API作成
- 0.0.5. aws-lambda-power-tuningのS3payloadを利用する
- 0.0.6. 【serverlessフレームワーク】eventsを設定したのにエンドポイント設定されない
- 0.0.7. AWS CloudFormation: 06. Lambda関数を作成して、S3/EventBridge/SQS から呼び出す
- 0.0.8. Pythonでラムダ式を使う
- 0.0.9. 【serverlessフレームワーク】イベントを設定したのに反映されない
- 0.0.10. [AWS Lambda + Python + NHK番組表API]自分好みの番組リストをSlackメッセージで受け取るものを作った
- 0.0.11. Serverless FrameworkとDockerでLambda環境を構築する
- 0.0.12. WebページのSorryページをALBとLambdaのみで自動切替できるようにしてみた
- 1. Webサイト名を入力
- 1.0.1. Lambda(Node.js)でBox Platform APIを使用する
- 1.0.2. NestJSをAPI Gateway + AWS Lambdaで構成する(その8) AWSへのデプロイ
- 1.0.3. EC2にエラーがあった際にSlackに通知
- 1.0.4. Lambdaで自動でEC2の起動・停止
- 1.0.5. Lambda(Node.js)で Secrets Manager を使用する
- 1.0.6. TerraformでAWS Lambdaのauto scaling(provisioned concurrency)を設定してみた
- 1.0.7. [備忘録] Error: spawnSync docker ENOENTの解消
- 1.0.8. 【データ基盤構築/AWS】Lambda Layerを使ってLambdaでpandasライブラリを使用する方法
[ネタ]AWS Step Functionsはローコードなのか?
こんにちは。Kaneyasuです。
先日、広島のこちらのイベントでLTさせていただきました。
https://it-deep-talk.connpass.com/event/292746/
本記事はこの時のLTをブログ化したものです。
# このネタを思いついた背景
私はAWSを使ったお仕事をさせていただいていて、最近はAWS Step Functionsをよく使います。
とても便利なサービスだと思うのですが、前々からちょっと気になっていることがありました。https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-StepFunctions-2022-reg-event.html
このように、AWS Step Functionsがローコードの仲間として扱われていることです。
ローコードには厳密な定義はなく、AWSなりの基準でこれがローコードならば、納得せざるを得ないのですが、個人的に少々違和感を感じたので、ゆっくり考えてみたら、危機感を覚えたというのが本記事のお話です。このお話は、疑問を投げかける
【Python】GitHub ActionsとOpenID Connectを使ってLambdaを自動デプロイしよう!
## 概要
GitHub Actionsを使ってPythonの必要なパッケージとソースコードをzipファイルに圧縮してLambdaに自動デプロイする方法について解説します
また、今回はOpenID Connectを使ってデプロイするのでIAMロールの設定等についても解説します## 前提
– 言語・パッケージはPythonを使用
– Pythonのパッケージ管理にPoetryを使用
– GitHub ActionsおよびLambdaに関する基本的な知識を有していること## ディレクトリ構成
ファイル構成は以下のとおりです
“`
❯ tree
.
├── .github
│ └── workflows
│ └── lambda-deploy.yml
└── application
├── lambda_function.py
├── poetry.lock
└── pyproject.toml
“`## OpenID Connect
OpenID Connectを使用することでAWSの
– シークレットキー
– アクセスキーを使わ
AWS Lambda + Quarkusで、AuroraにアクセスするAPIを作成する
# はじめに
当記事では、別記事「[AWS Lambda + QuarkusでのREST API作成](https://qiita.com/hisato_imanishi/items/487f6914ab9a1c9fc692)」で作成したAPIに対して、Amazon Aurora(PostgreSQL)にアクセスする機能を追加する手順を示します。手順にはAuroraのプロビジョニングを含みます。また、LambdaからAuroraへのアクセスは、RDS Proxyを間に置く構成とします。
# 前提環境
当記事では以下を前提とします(ツールのバージョンは一致しなくても実施は可能)。– 別記事「[AWS Lambda + QuarkusでのREST API作成](https://qiita.com/hisato_imanishi/items/487f6914ab9a1c9fc692)」記載の内容の実施が完了していること
– Quarkus CLI 3.2.3 Final
– Maven 3.8.7
– AWS CLI 2.13.10# 実施手順
Aurora(PostgreSQ
AWS Lambda + QuarkusでのREST API作成
# はじめに
QuarkusはコンテナファーストのJavaフレームワークですが、AWS Lambdaにも対応しています。当記事では、AWS Lambda上で、QuarkusベースのREST APIを作成・動作させる手順を説明します。# 前提環境
当記事では以下を前提とします(ツールのバージョンは一致しなくても実施は可能)。– AWSアカウントを保有していること
– Quarkus CLI 3.2.3 Final
– Maven 3.8.7
– AWS CLI 2.13.10# 実施手順
基本的には、[Quarkusのドキュメント](https://ja.quarkus.io/guides/amazon-lambda)をベースに進めていきます。## Mavenプロジェクトの作成
まず、Mavenでプロジェクトを作成します。“`bash
mvn archetype:generate \
-DarchetypeGroupId=io.quarkus \
-DarchetypeArtifactId=quarkus-amazon-lambda-a
aws-lambda-power-tuningのS3payloadを利用する
## 背景
Lambda Power Tuningの設定には、`input` フィールドにテストケースを含めることができますが、制約としてテストケースのサイズは262144バイト以下である必要があります。そのため、base64エンコードされた画像データをそのまま含めることは難しいかもしれません。この制約を回避するためには、input` フィールドに **payloadS3** というパラメータを利用します。
## 設定すべき項目
1.**Lambda Power Tuning**をデプロイする時、アプリケーションの **payloadS3Bucket** パラメータに **バケット名**(eg.your-bucket) を設定します。Lambda Power Tuning アプリケーションの設定には、S3 バケットの情報が含まれているはずです。もしこのパラメータが誤っている場合、アプリケーションは正しいバケットにアクセスできません。2.ステートマシンのロールに、S3バケットにアクセスする権限を与えます。
3.`input` フィールドを設定します。
“`
{
“l
【serverlessフレームワーク】eventsを設定したのにエンドポイント設定されない
# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。serverless flameworkの学習にて起きた問題の解決メモになります?
`serverless-api-gateway-throttling`を使用し、
serverless.ymlに、AWSのLambdaのAPIをインターネットに公開するeventsを記載したのに、npx serverless deployにてデプロイしてもエンドポイントが作られない問題が発生し、解決しました?
(超凡ミスでした…)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/99b4d609-b9d1-40e6-bef0-0958469511c1.png)
# 結論
serverless.ymlのインデント設定ミスでした…## 誤
“`serverless.yml
hello:
handler: src/hello
AWS CloudFormation: 06. Lambda関数を作成して、S3/EventBridge/SQS から呼び出す
# 本記事について
– AWS CloudFormationを用いて、色々なアーキテクチャを構築していきます。テンプレートのコピペ元としてご活用いただければ幸いです
– [01. 仮想ネットワークの構築](https://qiita.com/iwatake2222/items/d19bd983391a292345af)
– [02. アプリケーションサーバーの構築と踏み台サーバー経由でのアクセス方法](https://qiita.com/iwatake2222/items/45822e5ef9b56df42069)
– [03. S3バケットの作成とポリシー・アクセス許可の設定](https://qiita.com/iwatake2222/items/d9c977e740ec1ee16b9c)
– [04. S3 (+ CloudFront + OAC) による静的ウェブサイトのホスティング](https://qiita.com/iwatake2222/items/ac4392c11f83af2f320a)
– [05. S3 + CloudFront + Cog
Pythonでラムダ式を使う
Pythonでラムダ式の使い方をまとめました
※ラムダ式は英語で”lambda”と表記されますが、AWSのLambdaとは異なりますPythonのラムダ式は無名関数で、通常はdefで関数名を定義しますが
ラムダ式は引数と式などで構成されます具体的にコードの違いを見てみましょう
defの場合
“`python
def add_function(x, y):
return x + y
“`ラムダ式の場合
“`python
add_value = lambda x, y: x + y
“`# メリット
+ シンプル
1行で処理が記載できるので簡潔にコードを書けます
filter()などの高階関数(関数を引数として受け取る関数)と組み合わせるとよりコードが短く書けます+ 関数(メソッド)が減らせる
先ほど示したようにdefで定義してメソッド化する手間が減ります# 高階関数を使用したラムダ式
+ filter
配列の数字の中から偶数の数字を抽出する処理
“`python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9,
【serverlessフレームワーク】イベントを設定したのに反映されない
# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。serverless flameworkの学習にて起きた問題の解決メモになります?
serverless.ymlに、AWSのLambdaを定期実行するcronを記載したのに、npx serverless deployにてデプロイしてもLambdaの関数にトリガーが設定されていない問題が発生し、解決しました?
(超凡ミスでした…)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/c24d41be-6afe-535b-9052-7d7a2472ca7d.png)
# 結論
eventsと記載すべきところを、eventと単数形を記載していました…## 誤
“`serverless.yml
costNotifier:
handler: src/costNotifier.handler
event: #
[AWS Lambda + Python + NHK番組表API]自分好みの番組リストをSlackメッセージで受け取るものを作った
# はじめに
カジキはテレビはほぼNHKしか見ませんが、テレビ視聴に関してはわがままです。
まず、– **自分が興味のある番組は見逃したくないわ…**
と思うものの、番組表をじっくり眺めて絞り込む時間はあまりありません。また、他にやるべきことがある時は、
– この時間は集中したいから、**むしろ面白そうな番組がやってることは知りたくないわ**…
ということを思って、特定の日や時間帯についてはテレビを敢えて見ないようにしている時もあります。
そんな超絶わがままな現代カジキは、テレビと仲良く賢く付き合うために、今回、– 自分が見る番組の候補を絞り込むアプリケーション
を作成してみました。
# どういうものができますか?
こんな感じの、`カスタム番組リスト`が毎日投稿されます。後述する抽出加工を実施し、
– `特定の時間帯`の、
– `特定のジャンル`の番組
– 自分の場合、ジャンルは`ドキュメンタリー`、`動物`、`紀行`などで絞っていますのみがリストアップされて投稿されます。
![Untitled.png](https://qiita-image-st
Serverless FrameworkとDockerでLambda環境を構築する
## 概要
Lambdaを今まであまり使ってこなかったので勉強ついでにローカル実行とデプロイまで一通りできる環境を構築したいと思います。## 前提条件
– Dockerがインストール済みであること
– Awsアカウントを作成済みでアクセスキー、シークレットキーを発行済みであること## コンソールから関数を作ってみる
まずはどんなものかコンソールから関数を作ってみる。### 1. 関数の作成
Lambda > 関数に遷移 > 関数の作成![スクリーンショット 2023-08-15 20.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254217/9fe51b47-f20d-ac97-80b3-125b5979d8c1.png)
ランタイム: Node.js 18.x
アーキテクチャ: arm64で作成しました。
### 2. コード作成
“`javascript
export const handler = async (event) => {
// TODO
WebページのSorryページをALBとLambdaのみで自動切替できるようにしてみた
目的
—
– ALB配下のEC2が全停止したらSorryページを表示上記を実装するにあたり色々調べたが一か所に集約されていなかったため
記事にまとめてみようと思う。前提
—
– 既に運用中のWebサイトがある
– WebサイトをAWSで構築している利用するサービス
—
– ALB
– Lambda
– CloudWatch実装方法
—– ALB
まずALBのリスナールールに通常のWebサイトを
ターゲットとするルールに加えて、メンテナンスページ用のルールを
追加する。①リスナールールの作成
→条件に「パス」=「*」
→「固定レスポンスを返す」を選択
→レスポンスコード:503
→メッセージの形式:text/html
→レスポンス本文:以下参照“`html
Sorry Page
Webサイト名を入力
現在、メンテナンス中です。以下の時間帯ではサービスがご利用いただけません
Lambda(Node.js)でBox Platform APIを使用する
## APIを実行するBOXユーザアカウントについて
管理対象ユーザ(通常のBoxユーザ)とBox Platformユーザがあります。
管理対象ユーザを特定の個人と関連づけられないユースケースで使用することは禁止されています。APIを使用してバッチ処理を行う場合などは必ずBox Platformユーザを使用します。– [Fair Use Policy | Box](https://www.box.com/legal/fairusepolicy)
– [ユーザータイプ – Box Developerドキュメント](https://ja.developer.box.com/guides/getting-started/user-types/)## カスタムアプリの作成
Box Platform APIを使用するにはBoxでマイアプリを作成する必要があります。1. Boxの開発者コンソールにアクセスする。
– 初回は[こちら](https://ja.developer.box.com/)の「開発者コンソールに移動」からアクセスする。一度アクセスすると、Box UIの左下に
NestJSをAPI Gateway + AWS Lambdaで構成する(その8) AWSへのデプロイ
#
– [その1 NestJSやLambdaでのnode.jsの話し](https://qiita.com/ssugimoto/items/988320d34022555401fb)
– [その2 NestJSのサンプルを動かす、Hello World.](https://qiita.com/ssugimoto/items/557e7a7cce5111bf5de7)
– [その3 コントローラーを追加する](https://qiita.com/ssugimoto/items/fcfbc9a176bcf41d7b45)
– [その4 DTOを使う](https://qiita.com/ssugimoto/items/613b8ab54bd6f8de043c)
– [その5 CRUD generatorを使い modules,controller, service, dto を生成する](https://qiita.com/ssugimoto/items/64a9c3cd5cb33e06f4c9)
– [その6 インターセプタ](https://qiita.com/ssugimoto/it
EC2にエラーがあった際にSlackに通知
「CloudWatch」でEC2を監視しアラームが発生すれば「Slack」に通知方法について学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。
# 事前にやっておくこと
・Slackのアカウントを作成
・通知する「チャンネル」を作成# 学習内容
対象のEC2インスタンスを「CloudWatch」で監視し、「Lambda関数」でアラームが発生すればSlackにアラームが発生したことを通知します。# Lambda関数の作成
検索で「Lambda」>「関数の作成」をクリック
`一から作成`
関数名:`任意の名前`
ランタイム:`Python3.8`
アーキテクチャ:`x86_64`
上記を設定し作成。作成後、作成した「Lambda関数」の詳細に入り「コードタブ」の「pyファイル」に以下の記載しました。
“`
import urllib3
import jsonhttp = urllib3.PoolManager()
def lambda_handler(event, context):
url = “【SlackのWeb
Lambdaで自動でEC2の起動・停止
Lambdaについて学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。
# 事前にやっておくこと
・EC2インスタンス作成しておく# IAMロールの作成
検索で「IAM」に入り「ポリシー」>「ポリシーを作成」をクリックし上部の「JSON」を選択し以下の権限が記述されたコードを記載しました。“`
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,
“logs:CreateLogStream”,
“logs:PutLogEvents”
],
“Resource”: “arn:aws:logs:*:*:*”
},
{
“Effec
Lambda(Node.js)で Secrets Manager を使用する
[AWS Parameters and Secrets Lambda Extension](https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/retrieving-secrets_lambda.html)を使用して、Lambdaからシークレットマネージャーの値を取得します。
シークレットがキャッシュされるので、SDKで取得するより高速かつコスト削減になります。## AWS CDK
“`typescript:lib/sample-stack.ts
import { Construct } from ‘constructs’;
import * as cdk from ‘aws-cdk-lib’;
import * as lambda from ‘aws-cdk-lib/aws-lambda’;
import * as lambdaNodeJs from ‘aws-cdk-lib/aws-lambda-nodejs’;
import * as sm from ‘aws-cdk-lib/aws-secre
TerraformでAWS Lambdaのauto scaling(provisioned concurrency)を設定してみた
# はじめに
AWS Lambda + SpringNativeでWebAPIを構築したときに、
SpringNativeといえどもコールドスタートが発生するため、
provisioned concurrencyを設定していました。ただしprovisioned concurrencyを固定値にしていたので、
auto scalingに変更しました。# TL;DL
比較的簡単にできました。
ソースは[ここ](https://github.com/swdevsmz/lambda-autoscale)に置いてあります。# やったこと
## Lambda関数の作成
Lambda関数を作成します。
関数は複数個作ることを想定しているため、
関数のパラメーターをリスト化しています。パラメーターの中に予約実行を設定するかのフラグを持たせています。
また予約実行をする場合に`スケジュールされたオートスケール`か`ターゲット追跡のオートスケール`かを設定するようにしています。これらのパラメーターを使い、lambdaのリソースを作るときにfor_eachで関数を作成するようにして
[備忘録] Error: spawnSync docker ENOENTの解消
# はじめに
AWS CDKで Lambda を作成、デプロイしようとしたところ下記エラーが発生した。“`
% cdk deploy
Error: spawnSync docker ENOENT
at Object.spawnSync (node:internal/child_process:1111:20)
at spawnSync (node:child_process:814:24)
at dockerExec (/Users/user/Documents/app/node_modules/aws-cdk-lib/core/lib/private/asset-staging.js:1:3385)
at Function.fromBuild (/Users/user/Documents/app/node_modules/aws-cdk-lib/core/lib/bundling.js:1:4085)
at new Bundling (/Users/user/Documents/app/node_modules/aws-cdk-lib/a
【データ基盤構築/AWS】Lambda Layerを使ってLambdaでpandasライブラリを使用する方法
# 今回の課題
AWS Lambdaでpandasライブラリを使用したかった。
それにあたり、pandasが入った自作のLambda Layerを使用してLambdaを実行したのだが、
エラーが発生してしまったので解決する手順を記事にした。## 躓いた箇所
以下の手順でLayerを作成して、Lambdaを実行してみた。
すると、依存関係系のエラーが発生してしまった。### Layerを作成した手順
1. ローカルに`python`フォルダを作成
1. `python`フォルダ内で、`$ pip install -t . pandas`コマンドを実行してpandasをインストール
1. `$ zip -r9 layers.zip`コマンドを実行して`python`ファイルをzipファイルに圧縮
1. zipファイルをLayer作成画面でアップロード![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/f5612627-ab67-26b3-5d76-f82facb719a7