Lambda関連のことを調べてみた2023年09月25日

Lambda関連のことを調べてみた2023年09月25日
目次

AWS Signerを使って既存のLambda関数をコード署名してみた

## これは何?
最近ですが[AWS Signer](https://docs.aws.amazon.com/ja_jp/signer/latest/developerguide/Welcome.html)によってLambdaなどにコード署名をくわえることができるるのか検証する機会があったので、今回はその検証した内容についていろいろ記載していきたいと思います。

シナリオとしては、未署名のCloudformationで管理しているLambda(Python3.11)関数を、コード署名するまでの流れを検証してみました。

## 1. 事前準備

コード署名の設定していない関数をコード署名を有効化し、コードの改竄防止を確認しようと思います。
この章では、事前準備としてコード署名設定をしていないLambda関数の作成までをしようと思います。

### フォルダ構成
Cloudformation を用いてデプロイしようと思うため、以下のようフォルダ構成になります。
“`
./
├── event.json
├── function/
│ └── main.py
└── template

元記事を表示

【備忘録】AWSのセキュリティ対策について学んだことまとめ ~リソース編 リソースの暗号化~

今回はリソースの暗号化についてです。
AWSには保存しているリソースが外部から不正アクセスされたとき
内容が暗号化によって権限がない人が見れないようにする仕組みがあります。

例としてS3, DynamoDB, Systems Managerのパラメータストア, Lambdaの環境変数などで
保存した値を暗号化することができます。
詳しくは以下で説明します。

## S3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/e1e36d2d-8d20-7b17-7375-143f91b93ed6.png)
バケット作成時に暗号化のタイプを選択することができます。
以下、公式サイトから2023年1月5日以降はデフォルトで
バケットが暗号化されるようになったとあります。
以前は暗号化しない選択もできたようです。
ちょっと注意なのは、2023年1月5日より以前にバケットの暗号化をなしに設定していた場合は
既存のバケットの中のオブジェクトは暗号化されていないようです。
ただし既存のバケ

元記事を表示

API GatewayのJWTオーソライザーでGoogle IDトークンを検証してみた

– toCアプリの認証認可ソリューションを選定する場合、OpenID ConnectやOAuth2.0等の技術を利用したソーシャルログインの実装が候補に上がることが多いのではないでしょうか。
– 今回はAmazon API GatewayのJWTオーソライザーを利用して、Googleアカウントで認証済み利用者への認可処理を実装してみました。

## 環境構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562653/38d33f32-8cac-43de-f8b1-f830ff5c978f.png)

## 設定手順

### Google OAuth 2.0をセットアップする

※事前にGoogle Cloud Platformでプロジェクト作成が完了していることを想定しています。

– Google Cloud Platformの「APIとサービス」にアクセスします。
– 左メニューから「認証情報」を選択した後、「認証情報を作成」を押下します。
![Untitled.png](ht

元記事を表示

【備忘録】AWSのセキュリティ対策について学んだことまとめ ~インフラ編④ Lambdaにおけるアクセス制御~

今回はAWSのサーバレスサービスを利用したインフラの構築におけるセキュリティについて
記事を書いていこうと思います!
Lambdaにおけるセキュリティについてのみの投稿のため基本的な
Lambdaの実装方法については記載しないのであしからず。

# Lambdaとは
まず、基本的なことですがLambdaとはAWSが提供する
サーバーレスコンピューティングサービスです。
[前の記事](https://qiita.com/Yukimaru_Rutla/items/6325db36b7584b7d3730)ではEC2インスタンスを構築したネットワーク環境に配置して
管理していましたが、Lambdaは自前でアプリを動かすためのサーバーの構築や運用を
AWSに任せてクラウド上に作成したプログラムさえ置けば動かすことができる優れものです!
初めて触ったときは概念の理解がイメージしにくかったのですが触れば
とても便利なものと分かります。

# サーバーレスにおけるセキュリティとは
前述で説明したようにサーバレスとはサーバーの構築・管理の一斉をクラウドサービスに
お任せできるため物理的な管理は不要にな

元記事を表示

S3EventからLamdaコンテナを動かす

## 今回やること
S3 EventでLambdaジョブ(コンテナ)を実行させる

– 入力: csvファイル
– 出力: jpgファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54100/7a32469d-334a-41d1-b160-bf8499f80922.png)

### やりたかったこと
S3のPutObjectに応じたS3イベントを使って、
Python(Maplotlib/Pandas)を動かして、生成物を再度S3へ保存。

#### 経緯
– S3 EventとLambdaを組み合わせて簡単に作ろうとした。
– Maplotlibのボリュームが大きく、レイヤーの容量上限250MBにどうしても入りきらない。
– Lmadaコンテナを使う

## やってみる

やった結果:

https://github.com/bd8z/s3event

### Step1 S3イベントの確認する
print(event)だけするLambdaとS3インベントをつないで、
実行

元記事を表示

[備忘録] AWS CDKでRDS,RDS Proxy,Lambda を構築

AWS CDK を学習していく過程を記録する。

# はじめに
[[備忘録]AWS CDKでAPI Gateway, Lambda を構築](https://qiita.com/m-chan/items/0e3869afd193b92dd79a)にて、API GatewayをトリガーにLambdaを実行することで、LambdaがRestAPIとして外部ネットワークから利用可能になることを確認した。
今回は、RDS、RDS Proxy を構築し、Lambda の中の処理を書き換えて、API Gateway から Lambda 経由で mysql に接続できることを確認したい。

### RDS とは
> Amazon Relational Database Service (Amazon RDS) は、AWS クラウド でリレーショナルデータベースを簡単にセットアップし、運用し、スケーリングすることのできるウェブサービスです。

つまり、サーバの設定やOSのインストールなどすることなくすぐにDB構築が可能なサービスであり、RDSでは mysql、Oracle Database、Mic

元記事を表示

Serverless Days Tokyo 2023に参加してきました!(前編)

日比谷のクラスメソッド社さん会場に100名以上が集結するオフラインイベントです!

https://tokyo.serverlessdays.io/

※リアルタイムの走り書きのため、誤り等あればお知らせください?

![IMG_0020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/7ea79241-278c-a2e6-829e-352c291e13be.jpeg)

# KEYNOTE / Alex Debrie (AWS Data Hero)

有名なDynamoDB Bookを執筆された方です!

![IMG_0022.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/fbf6e64b-b81c-18d4-2219-b3196372539d.jpeg)

### サーバーレスの歴史

– オンプレミス〜EC2の登場〜Lambda登場の変遷
– Herokuから始まった12-Fa

元記事を表示

【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.sh

Dockerfile
基本イメージは、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を使わ

元記事を表示

OTHERカテゴリの最新記事