- 1. 【AWS Amplify】functionのリトライ回数を変更したい
- 2. Next.js 13とAWS CDK + Amplify Hosting + Cognito + DynamoDB + Lambdaを使ってTODOアプリを作る
- 3. kintone-rest-api-client を使ってkintoneアプリを自動更新する
- 4. DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた
- 5. pythonの引数にlambda関数を使うと便利だった
- 6. AWS Lambda Node.js dockerイメージでmecab (+neologd)を実行する
- 7. [備忘録]AWS CDKでAPI Gateway, Lambda を構築
- 8. serverless framework を使ってHelloWorld
- 9. PythonでSlackのチャンネルにメンション付き投稿
- 10. Amazon EventBridge Schedulerのイマイチだったところ
- 11. AWS Secrets ManagerとLambdaを使ってローテーションする際に「シークレットをローテーションできませんでした」とエラーが出た時の対象法
- 12. サーバレス環境構築(APIGateway+Lambda)
- 13. ServerlessFramework を使い AWS Lambda Python のローカル開発
- 14. AWS Lambda ( Node.js 18.x ) で AWS System Manager (SSM) パラメータストアのSecureStringの値を利用する
- 15. SEO対策の一貫で画像の動的リサイズシステムを実装した
- 16. AWS – Terraformで作成した Lambda関数で実行時エラー ( lambda_handler is undefined or not exported ) ( node.js )
- 17. AWS Lambdaのruntimeがgo1.xになっているLambdaをprovided.al2に変更する
- 18. Windows&Docker開発環境で作ったImageをそのままAWS Lambdaにのせる方法
- 19. AWS CDK(Typescript) で LambdaEdge を使う
- 20. ねえ、みんな幸せ?~ハピネススカウターを使わせていただいてカスタムした~
【AWS Amplify】functionのリトライ回数を変更したい
## この記事の対象となる方
– AWS Amplifyを使用中
– S3のCreateObjectやSQS等に反応するLambda(function)を作成し、デプロイしている
– カスタムリソース(`amplify add custom`)を追加して、S3のCreateObjectのトリガやSQSを定義し、上記のLambdaと関連付けている
– デフォルトのリトライ回数は2だが、要件によって回数を変えたい (多分「0にする」を最も要求されそう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267110/97052a32-6a8c-b66c-c9cb-6fe00f434099.png)
– ↑↑ この「再試行」です## どうすればリトライ回数を変更できるか
### 結論
CloudFormation(`[functionName]-cloudformation-template.json`)に加筆するしかありません。
– `Resources`に以下を追加し
Next.js 13とAWS CDK + Amplify Hosting + Cognito + DynamoDB + Lambdaを使ってTODOアプリを作る
[株式会社Never](https://neverjp.com/)のshoheiです。
株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/# 概要
自社開発でどうしてもAWSを使う事情があり、扱う技術を一通り触ったので備忘録として記録します。
自分の勉強も兼ねてNext.js 13とAWS CDK + Amplify hosting + Cognito + DynamoDB + Lambdaを使ってTODOアプリを作ります。
弊社内のメンバー向けなので、細かい説明は割愛します。
# 構成
| 種類 |技術スタック |
|—|—|
|フロントエンド |Next.js + SSR |
|ウェブホスティング | Amplify Hosting |
|API |API
kintone-rest-api-client を使ってkintoneアプリを自動更新する
## はじめに
以前書いた記事「[DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた](https://zenn.dev/collabostyle/articles/3ed9b3440c7d09 “DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた”)」の、Lambdaの処理でkintone-rest-api-clientを利用しています。## kintone-rest-api-clientとは
kintone-rest-api-clientは、KintoneプラットフォームのためのREST APIクライアントライブラリです。このライブラリは、Pythonで書かれており、Kintone REST APIを呼び出すための簡単な方法を提供します。
kintone-rest-api-clientを使用すると、Kintoneアプリケーションを操作するPythonスクリプトを簡単に作成することができます。たとえば、kintone-rest-api-clientを使用して、データレコードの作成、更新、削除、検索などを行
DynamoDB StreamをトリガーにLambdaを実行する処理をCDKで書いてみた
## はじめに
* DynamoDB StreamとLambdaを使ってDynamoDBのデータに変更があった場合(追加、編集、削除)に、その変更内容を別アプリに自動で反映する処理を実装しました。
* 自動化した処理をCDK化しました。## DynamoDB Streamとは
DynamoDB Streamは、Amazon Web ServicesのDynamoDBサービスに含まれる機能の一つで、DynamoDBテーブルの変更をリアルタイムでキャプチャし、変更を処理するアプリケーションとの間でデータを配信するためのサービスです。DynamoDB Streamを使用することで、アプリケーション開発者は、DynamoDBテーブルの変更を非同期的に受信し、変更を処理することができます。この機能は、サーバーレスアーキテクチャを使用する場合に特に有用であり、システムの拡張性と柔軟性を高めるのに役立ちます。## やりたいこと(イメージ図)
1.DynamoDBに対する項目の追加、編集、削除をDynamoDB StreamのイベントとしてLambdaに渡す
2.イベントを受け取ったLam
pythonの引数にlambda関数を使うと便利だった
numbers = [[‘1′, ’40’], [‘4′, ’13’], [‘3′, ’14’], [’25’, ’30’], [’17’, ’20’], [’21’, ’22’]]
# リストの要素をキーとして最大値のリストを取得
– リストの1つ目の要素をキーとして最大値のリストを取得
“`
m = max(numbers, key=lambda x: int(x[0]))
print(m)
“`
> [’25’, ’30’]– リストの2つ目の要素をキーとして最大値のリストを取得
“`
m = max(numbers, key=lambda x: int(x[1]))
print(m)
“`
> [‘1′, ’40’]# リストの要素をキーとして昇順に並び替える
– リストの1つ目の要素をキーとして昇順に並び替える
“`
s = sorted(numbers, key=lambda x: int(x[0]))
print(s)
“`
> [[‘1′, ’40’], [‘3′, ’14’], [‘4′, ’13’], [’17’, ’20’], [’21
AWS Lambda Node.js dockerイメージでmecab (+neologd)を実行する
試験的にmecabが必要になったのですが、PHP8に対応していないので、EC2ではなく、Lambdaにインストールして、EC2のPHPから叩くようにしました。neologdができるようにしたのはおまけ。pythonがわからないので、nodeでイメージを作成しています。neologdの辞書まで含めた場合、数GB程度になりますが、LambdaのECRイメージデプロイは、10GBまで対応しているので、問題なくデプロイ、実行できました。Dockerなので、ローカル確認もできます。
ファイル構成
Dockerfile
app.js
docker-compose.yml
package.json
deploy.shDockerfile
基本イメージは、public.ecr.aws/lambda/nodejs:18 2023年9月17日現在、20は出ていませんでした。
makeに必要なライブラリをインストールして、makeする形。
ipadic-neologdは、gitプロトコルでcloneすると鍵の問題解決が難しそうだったので、https:からのclone。
cdコマンドも、Docke
[備忘録]AWS CDKでAPI Gateway, Lambda を構築
AWS CDKを学習していく過程を記録する。
# はじめに
[[備忘録] AWS CDK プロジェクトの作成](https://qiita.com/m-chan/items/011a93e40f26230df135)にて、CDK プロフェクトの作成とデプロイまでできたので、今回はAWS CDKでAPI GatewayおよびLambdaを作成してみる。
また、API GatewayをトリガーにLambdaを実行することで、LambdaがRestAPIとして外部ネットワークから利用可能になることを確認する。#### Lambdaとは
> AWS Lambda は、サーバーをプロビジョニングまたは管理せずにコードを実行できるようにするコンピューティングサービスです。つまり、「サーバレスにインターネットを通じてプログラムを実行することができるサービス(Faas:Function as a Service)」である。
#### API Gatewayとは
公式サイトでは
> Amazon API Gateway は、あらゆる規模の REST、HTTP、および WebSocket
serverless framework を使ってHelloWorld
# はじめに
この記事では、Serverless Frameworkの基本的な使い方を説明します。Serverless Frameworkは現在、サーバーレスアーキテクチャを効率的に構築するための主要なツールの一つです。
# Serverless Frameworkとは
Serverless Frameworkは、サーバーレスアーキテクチャを簡単に、効率よくデプロイ・運用するためのオープンソースのツールです。このツールは、AWS Lambda, Azure Functions, Google Cloud Functionsなど、多くのクラウドプロバイダに対応しています。# チュートリアル
## ディレクトリ構成
“`
.
├── Dockerfile
├── README.md
├── assets
│ └── index.html
├── docker-compose.yml
├── functions
│ └── hello
│ └── handler.py
├── package-lock.json
├── package.json
└── ser
PythonでSlackのチャンネルにメンション付き投稿
## はじめに
この記事では、PythonでSlackのチャンネルにメンション付きで投稿する方法を載せています。
ローカル環境での実行だけでなく、ローカル環境で作ったイメージをAWS ECRリポジトリにUploadして、そのイメージを使って作ったAWS Lambdaでも実行出来るようにしています。## 背景
Webスクレイピングなどをしていると、結果をslackやメールに送りたくなる時があります。
slackについてはメンション付きだと気付きやすいので、今回は、slackのチャンネルにメンション付きで投稿する方法についてまとめました。## 目次
– [環境](#環境)
– [前提条件](#前提条件)
– [構成図](#構成図)
– [フォルダ構成](#フォルダ構成)
– [手順](#手順)
– 1:[GitHubよりcloneする](#1githubよりcloneする)
– 2:[Slackの設定](#2slackの設定)
– 3:[ローカル環境でSlackに投稿する](#3ローカル環境でslackに投稿する)
– 4:[AWS LambdaでS
Amazon EventBridge Schedulerのイマイチだったところ
## はじめに
本記事はAmazon EventBridge Schedulerのイマイチな部分を説明する予定でしたが、
投稿日時点では改善されていて良い機能になっているという内容になります検証をすることにした経緯も書いていますが、結論だけ読みたい方はスキップしてください
## Amazon EventBridge Schedulerを検証することになった経緯
とある業務システムを構築している際に、指定の時間になったらLambdaを実行する機能を実装することになりました。
繰り返し実行するのではなく、1回のみ実行することになります
簡単に説明すると、スマホのアラームのように、WEB画面から時刻を入力し、その時刻になればLambdaを実行させるシンプルな機能です時刻の登録は画面から行うため、AWSコンソールでポチポチ設定することができません
WEBアプリとして一連の流れを実現させる必要がありましたアーキテクチャとしては、本記事の投稿時点では、Amazon EventBridge Schedulerが発表されていますが、それ以前に実装を行なったため、Amazon Even
AWS Secrets ManagerとLambdaを使ってローテーションする際に「シークレットをローテーションできませんでした」とエラーが出た時の対象法
## 概要
AWS Secrets Manager内でキーローテーションの設定をしてうまくいかなかった際に下記画像のように
`シークレットをローテーションできませんでした`
としか表示されずに困ったのでその原因と対処法について解説します![スクリーンショット 2023-09-13 14.14.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/dac7b8c9-abd6-b85b-a218-26262ce69bc4.png)
## 原因
結論から言うとリソースベース(今回だとSecerts Manager)のポリシーステートメントが足りてなくてローテーションができませんでしたリソースベースのポリシーステートメントについては下記の通りです
> 関数は、その実行ロールから AWS リソースに対する許可を受け取ります。AWS SDK を使用して AWS のサービスを呼び出すには、そのサービスの API オペレーションへのアクセスを許可するポリシーをロールに追加します。
Lambda コ
サーバレス環境構築(APIGateway+Lambda)
# はじめに
Cloudfront + S3 + APIGateway + Lambda を使い、初めてサーバレス環境を構築しました。
自身の備忘録として記述しますが、どなたかのお役に立てたら光栄です。
(不足が多々あるかと思いますがご容赦ください!)※本記事は以下の「サーバレス環境構築(CloudFront+S3)」に続く作業となります。
https://qiita.com/mtsunezawa/private/4c1cdfa8f569d5523d2b## 構成について
* CloudFront Functions を利用し、特定のIPアドレスのみアクセスを許可
* 静的コンテンツは S3 Bucket へ保存
* 動的コンテンツは API Gateway を利用
* Lambdaはデフォルトの”Hello Lambda” を利用
ServerlessFramework を使い AWS Lambda Python のローカル開発
Serverless Frameworkを使い AWS Lambda のPython用のローカル環境の作成と実行について記載した内容です
AWSマネジメントコンソールでプログラミング・コーディングするのでなく、ツールを使い開発者体験をよくしていきたい。## はじめに
– [Dockerで Serverless Framework 環境構築](https://qiita.com/seiichi_akiba/items/d42bda576f3fc6ac5117) の記事のようなことをします
– https://qiita.com/ssugimoto/items/ebe5b2ab5efbb6c6e541 の記事はdev container(旧、リモートコンテナ)を使った場合として位置づけていますので、今回の内容とは異なります
– [Developing inside a Container](https://code.visualstudio.com/docs/devcontainers/containers)ではなく(.devcontainer/devcontainer.jsonを使わ
AWS Lambda ( Node.js 18.x ) で AWS System Manager (SSM) パラメータストアのSecureStringの値を利用する
# 公式
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ps-integration-lambda-extensions.html
# SSM ( AWS Systems Manager ) のパラメータを作成しておく
ここでは
“`
testparam
“`
というキー名で登録する# Lambda関数を作成する
AWS上のlocalhostの固定のポートにGETリクエストするという仕組みのようだ
– URLパラメータとしてSSMのパラメータ名を渡す `name=testparam`
– 秘密値のDecryptのために `withDecryption=true` をURLパラメータとして渡すリクエストヘッダに `AWS_SESSION_TOKEN` を付与する必要があるが
これはLambda実行ではデフォルトで設定される環境変数のようだ
なので自分で何かを設定する必要はない## コード例
`index.mjs`
“`js
export const handler
SEO対策の一貫で画像の動的リサイズシステムを実装した
こんにちは。サーバーサイド/webフロントエンジニアをやっている @kapibara です。
今回は https://www.sakeai.com/ のSEO対策をするにあたって画像の動的リサイズシステムを実装したので、そちらについて紹介しようと思います。# モチベーション
Sakeaiはユーザーが飲んだ日本酒の口コミを投稿するプラットフォームです。アプリでは口コミを投稿/閲覧することができ、Webでは投稿された口コミを閲覧することができるようになっています。当然、口コミを表示する際にはユーザーがアップロードした画像も一緒に表示するわけですが、近年のスマホの進化によりユーザーがアップロードする画像の解像度はとても高いです。Webでこれをこのまま表示してしまうと画像のレンダリングに時間がかかり、SEO観点で非常によろしくあ
AWS – Terraformで作成した Lambda関数で実行時エラー ( lambda_handler is undefined or not exported ) ( node.js )
# エラー
Lambda実行時にこんなエラーが起こる (node.js)
“`
index.lambda_handler is undefined or not exported
“`スクリプトは
“`js
export const handler = async(event) => {
// …
}
“`# 解決
– ファイル名を index.js / index.mjs にする
– 関数名を lambda_handler にするで解決した
“`js
export const lambda_handler = async(event) => {
// …
}
“`ファイル名と関数名を揃える必要があるみたいだ
# Terraform
Terraformではhandlerをこのように指定していた
“`
resource “aws_lambda_function” “xxx” {
handler = “index.lambda_handler”
}
“`# チャットメンバー募集
何か
AWS Lambdaのruntimeがgo1.xになっているLambdaをprovided.al2に変更する
## AWSからの変更
Lambdaは、2023年12月31日に予定されているAmazon Linux 1のサポート終了に伴い、`go1.x`ランタイムを廃止します。
AWSから記事が出てます:
https://aws.amazon.com/jp/blogs/compute/migrating-aws-lambda-functions-from-the-go1-x-runtime-to-the-custom-runtime-on-amazon-linux-2/> 現在、LambdaでGoを使用するお客様は、`go1.x`ランタイムを使用するか、`provided.al2`ランタイムを使用することができます。今後、`go1.x`ランタイムは、現在2023年12月31日に予定されているAmazon Linux 1のサポート終了に合わせて非推奨となる予定です。
それで生のGoファイルのサポート無きなります。それで生のGoファイルを利用してるLambdaが使えなくになりますので移行する必要があります。
## 移行する方法
Goのruntimeが全部なくなりますのでruntime
Windows&Docker開発環境で作ったImageをそのままAWS Lambdaにのせる方法
## はじめに
この記事では、ローカル環境(Windows&VSCode&Docker開発環境&Python)で開発したImageをそのままAWS Lambdaで動かせるようにする方法を載せています。
例として、S3にファイルをアップロードすることを目指します。
Windows環境で確認しています。
未確認ですが、前提条件以外の部分は多分Macでも同じかと思ってます。## 背景
– ローカル環境のWindows環境&Pythonで動いても、それをAWS Lamdbaにのせるのが大変。それに無事にAWS Lamdbaにのせることが出来ても、改修しにくい。
⇒ ローカルで出来たことをLambdaにそのまま反映したい!!
– プログラムによってはzipしてAWS Lambda Layer作らないといけないのが大変
⇒ Layerとか作りたくない!!そんなわけで、希望が叶う手順を作りました。
環境を作るまではちょっと大変です。## 目次
– [環境](#環境)
– [前提条件](#前提条件)
– [参考サイト](#参考サイト)
– [構成図](#構成図)
– [フォルダ構成](#
AWS CDK(Typescript) で LambdaEdge を使う
# 想定
1. クロスリージョンスタック(複数リージョンのスタックを連携)
2. [NodejsFunction](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda_nodejs.NodejsFunction.html)を使っている(ts で書いたハンドラーをそのままデプロイできる construct)# 結論
“`cdk.ts
#!/usr/bin/env node
import * as cdk from “aws-cdk-lib”;
import “source-map-support/register”;
import { LambdaEdgeStack } from “../lib/lambda-edge-stack”;
import { SampleStack } from “../lib/sample-stack”;const app = new cdk.App();
const account = process.env.CDK_DEFAULT_ACCOUNT;
exp
ねえ、みんな幸せ?~ハピネススカウターを使わせていただいてカスタムした~
発端はこちら
https://qiita.com/keeey999/items/7ce7c4bc342ca2ec7319
うお~つくってみてえ~と思いきっかけを待っていましたが、なかなか~~余興を頼んでくれる友人の調達が難しく~~そのタイミングがなく時が経ってしまっておりました。
実際作るとなってもAWSもLINE BotもPythonも触ったことがないのでハードル高すぎよな~なんて思ってました。その2年後、独自で作成し解説記事を投稿してくださった神が現れます
https://qiita.com/ymd65536/items/f1d50596cdd1d76d1c7b
しかし自分が余興を頼まれることもなく時は過ぎ、ひょんなことから自分の式(格式ばったものでないですが…)を開催することになりました。
久しく開発もしていなかったですがこれはやるしかないなと、重い腰を上げました。# 準備編
基本は上記記事を参考に作成し、不明点はChatGPTに質問しながら進めました。
ChatGPTがなかったら諦めてたと思います、わからなすぎですAWS。
PythonもPHPと似てるらし