Lambda関連のことを調べてみた2022年11月07日

Lambda関連のことを調べてみた2022年11月07日
目次

Lambdaコンソールに直書きしていたコードをAWS SAMに対応させる

## 概要
以前、LambdaをEventBridgeで定期実行するバッチを作ったのだが、
その際、Lambdaのコードをコンソール上に直書きしていた。

そうしたところ以下の問題が発生した
・デプロイの際、手動でコンソール上のコードを書き換える必要がある(めんどくさい&ミスする)
・テストがローカル環境でできない

この問題を解消するため、既存のLambdaのコードををAWS SAMに対応させてみる
本記事にはその際の手順を載せる

### 今回SAM対応させるアプリケーションの構成
LambdaをEventBridgeで定期実行しているだけ
![スクリーンショット 2022-11-05 17.21.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/813353/b9193cae-b949-7c2e-4ccf-02259971b50a.png)

## 対応後の感想(メリット)
– Serverless Landで多数のサンプルが用意されている
– Lambda関数をローカルでテストできる

元記事を表示

CDK で Hello Lambda

# 小話

最近見つけた grape の「[缶詰ウォーマー](https://shop.grapee.jp/products/flo-002-set)」が気になって仕方がないこの頃です。何より小鍋も嵌るサイズ感なのが良い。ミニおでんでも仕立てて 日本酒をしっぽり飲みながら夜を過ごすのもいいじゃないですか。

めっちゃ使ってみたい反面、お試しとばかりに色々な缶詰をスタックしそうで…。うーん、、気分は商品棚の前を何往復もウロウロしてるような感じです。

さて今回は缶詰をスタック、、、ではなく、AWS CDK を使って CloudFormation のスタックで管理された Lambda を作ってみるチュートリアルをしたいと思います。

# 対象者と前提条件

こんな方を対象にしています。

* AWS を触っているけど構築を自動化したい
* EC2 以外のことにチャレンジしたい
* CloudFormation のテンプレート直書きや SAM を使ってるけど限界を感じてきた
* Infra as Code (IaC) に興味がある

前提として既に AWS アカウントがあり、Node.js

元記事を表示

S3にあるファイルを公開する方法3種

# この記事の経緯

同僚にS3にあるファイルを公開したいので、方法を教えてほしいと言われました。(知識として持っておきたいので、構築作業はご本人で実施したいとのことでした)

ぱっと思いついた方法が3つあり、口頭で説明するよりかは資料として説明した方が理解しやすいだろうと思い、かつ、外部公開しても問題ない内容なので、記事にします。

同僚への説明資料のため、詳細なやり方までは記載しておりません。各やり方のメリット、デメリットを記載していますので、ご自身の要望に沿う方法の選定に役立てて頂ければと思います。

# S3にあるファイルを公開する方法3種

今回は`S3のWEBホスティング` `CloudFront + S3` `Lambda + S3` の3パターンを考えます。
それぞれの特徴を簡単に纏めると以下となります。

項目|`S3のWEBホスティング`|`CloudFront + S3`|`Lambda + S3`
—|—|—|—
SSL|x|○|○|○
独自ドメイン|○|○|x|
手間|◎|x|△|
パフォーマンス|x|○|x|
アクセス制御|△|○|△|

元記事を表示

cdkでLambda Layerを作成するときは、zip化しないでOK

# はじめに
レイヤーを使うLambdaを、cdk(python)で作成したいことってありますよね。
そのとき、ちょっとはまったので共有します。

# 内容
cdkでの文法などは
https://medium.com/geekculture/deploying-aws-lambda-layers-with-python-8b15e24bdad2
ここなど参考にどうぞ。

問題は、cdkで作成したディレクトリ直下に配置するlayerを格納するディレクトリ(ここではlambda-layersとします)についてです。
一般的にLambdaのレイヤーには、zipで固めたファイルをインポートしますが、**zip化はcdkがやってくれる**のでやる必要はありません!というよりむしろ、**やってはいけません**!!
(これをやってしまい、エラーが発生していました・・・)

lambda-layersにいる状態で
“`bash
$ mkdir python
$ pip install -t python requests
“`
これでOKです。安心して、cdk deployしましょう(裏でcdk君

元記事を表示

3分でAWS Lambda Function URLをSAM使ってデプロイする

## これは何

[SAM(Serverless Application Model)](https://aws.amazon.com/jp/serverless/sam/) を使って関数URLを設定したLambdaをデプロイします。
関数URLだけ使いたい(APIGatewayは使いたくない)というケースでテンプレの参考になればと思いました。
内容は比較的薄いです。

経緯

10000000年程前にAWS Lambda Function URLが提供されました。[記事](https://aws.amazon.com/jp/blogs/news/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/)
これはLambdaをHTTPで直接起動できる機能です。

今まではAPI Gatewayを経由しないといけなかったのですがLambda単体でできるようになって便利になりました。こ

元記事を表示

[AWS.5] DynamoDB プログラミング概要

# 1. 概要
AWS SDKは、アプリケーションから DynamoDBへアクセスするためのインタフェースを三つ用意しています。
* 低レベルインタフェース
* ドキュメントインタフェース
* 高レベルインタフェース

プログラミング言語によって利用できるインタフェースは異なりますが、.NET では3種すべてを利用可能です。

:::note info
AWS DynamoDB プログラミングのオンラインマニュアルの図では「高レベルインタフェース(High-Level Interface)」と記述されていますが、解説上は「オブジェクト永続性インタフェース」とされています。
:::
:::note info
AWS DynamoDB プログラミングのオンラインマニュアルでは、「ドキュメントインタフェース」と「オブジェクト永続性

元記事を表示

AWS Lambda から自社 API サーバーへのリクエストに Amazon Cognito による認証機構を実装する

AWS Lambda (以降、Lambda) から自社 API サーバー (以降、API サーバー) へのリクエストに Amazon Cognito (以降、Cognito) による認証を実装した際の話をまとめました。
Cognito の OAuth 2.0 サービスのうち、Client Credentials Grant を使用することで Lambda を認証できるようにしています。

これは M2M (Machine to Machine) 認証と呼ばれるものを Cognito で実装した例です。
Cognito を使用する例については情報が少ない気がしたので、ワード検索時の一助になればと思い記事にしました。

## この実装に至った背景
今回の最終的な要件は、Lambda から API サーバーへのリクエストに Cognito による M2M 認証機構を実装することです。

上記要件に至った背景を記載します。
長めなので具体的な実装だけ知りたい方は [実装内容](#実装内容) までスクロールしてください。

### リリースフローの自動化を推進
現在弊社では開発及び運用で必要にな

元記事を表示

EC2, RDS, LambdaなどAWSのサービスを監視して一画面で全ステータスをチェックする

SaaSのSite24x7で実現する方法を共有します。
以下はサインアップ後の手順です。

流れ

  1. Site24x7でIDを表示(30秒)
  2. AWS IAMでロールを作成(2分)
  3. Site24x7にAWSを連携(1分~)
  4. しきい値を設定(1分~)

手順

1. Site24x7でIDを表示(30秒)

ホーム画面で「監視の追加」をクリックします。

EC2, RDS, LambdaなどAWSのサービスを監視して一画面で全ステータスをチェックする手順01

元記事を表示

Snowflakeの外部関数からLambda関数を実行する

## <はじめに>
**API統合**を使うことで、Snowflakeの**外部関数**からAWSのLambda関数を呼び出すことができます。

SnowflakeからAPI Gatewayを経由してLambda関数を呼び出し、関数の実行結果をSnowflakeに返します。

今後のSnowflakeの運用を踏まえ、API統合によるLambda関数の実行を検証してみました。
今回の検証では、LambdaのPythonプログラムからAmazon Comprehendを呼び出し、外部関数の引数に対して感情分析させました。

## <アーキテクチャ>
Snowflakeの外部関数でLambda関数を呼び出し、Comprehendの感情分析を行う処理フローは以下①~⑧になります。
①SnowflakeでSQLから**外部関数**を実行する。
②外部関数から**API Gateway**が呼び出され、関数の引数が連携される。
③API Gatewayが**Lambda関数**を呼び出す。
④Lambda関数がPythonのコードを実行し、**Comprehend**に引数を渡す。
⑤Compre

元記事を表示

AWS Lambdaで現在日時(処理年月日時)を取得したい

# 経緯
Lambdaで処理年月日時を取得する際につまづいたので記述する。

# datetimeモジュールのオブジェクト
– datetime :日付と時刻を扱う
– date:日付を扱う
– time:時刻を扱う
– timedelta:時間差を扱う

# 間違った例 1
~~~python:Python
from datetime import datetime
# 処理年月日を取得
processingDate = datetime.datetime.today()
# エラー文
AttributeError: type object ‘datetime.datetime’ has no attribute ‘datetime’
~~~
そもそも
– from — import ~~~文を理解してなかった
– モジュールとオブジェクトの概念もよくわかってなかった

ため適当に書いてた(笑)
※from datetime import datetimeと書いたら ___メソッドの先頭は省略できる。(むしろ省略しないと怒られる)___
_

元記事を表示

Python & AWS(Lambda/API Gateway)によるLINE Bot作成

# Python & AWS(Lambda/API Gateway)によるLINE Bot作成
 LINEは日本人口の70~80%が利用しており、生活に必要不可欠な通信インフラと言っても差し支えないほど、若い世代から高齢の世代まで日常的に利用している。その中でサービスを展開している企業やお店が、LINE公式アカウントを通じて、顧客とコミュニケーションを可能にするサービスがMessaging APIである。今回は、LINE Messaging APIを用いて、LINE公式アカウントとAWS上に作成したWebアプリと連携することで、LINE Botを作成する方法を紹介する。

## 1. LINE Developersにログインして、Messaging API用のチャネルを作成する
下記LINE Developersのサイトのコンソールにアクセスして、自身のLINEアカウントなどでログインする。

https://developers.line.biz/ja/

次に、コンソール画面からLINEアプリ作成のため、Messaging API用のチャネルを作成する。

1. Create a

元記事を表示

CodeCommitへpushと同時にLambda関数に反映 前編

## はじめに
初めまして、株式会社ジールの山崎 です。
AWSを使ったデータ分析基盤関係の業務に従事しております。
その中で得たノウハウをQiitaをとおして発信していきたいと思います。

今回の記事は
CodeCommitでバージョン管理しているLambda関数のソースコードを、CodeCommit・Lambda・S3を使用して、CodeCommitへpushすると同時にその内容をLambda関数へ反映する方法を紹介する記事の前半パートです。

前半パートの内容は
前準備とCodeCommitへpushした情報から更新種別を仕分けをする処理(言語:python)までとなっております。
***
**因みに**
CodeCommit・CodePipeline・CodeBuild(通称:Code三兄弟)を用いた方法は下記サイトが参考になります。
[【aws】CodeCommitにpushするだけでlambda関数をデプロイするパイプラインを作る【CodePipeline】](https://ishidalog.com/?p=475)
***
  

## 利用環境
– Windows 1

元記事を表示

サーバレスとAWS Lambdaについてまとめてみた

# はじめに
このブログはサーバレスとAWS Lambaについて自身が学習した内容のまとめ記事となります。
自身が理解しやすいように平易な表現を使って構成しているため、著しく正確性に欠ける情報がありましたらご指摘いただけると筆者は大変喜びます。

# サーバレスについて
釈迦に説法かもですが、Lambdaを理解する前にサーバレスについて大きくまとめました。
サーバレスという言葉で調べると「Google Cloud Functions」や「Azure Functions」など各社類似したサービスや説明がありますが、本記事では「AWSにおける」を枕詞として読み進めてください。

## サーバレスとは
アプリ開発者がサーバーを意識せずにアプリを開発・運用できることを指します。
サーバレスでは、サーバーの構築・保守・負荷対策までをサーバーレスの提供会社が担います。実際にはサーバ自体は存在するため、サーバレスという言葉は「アプリ開発者」目線に立った表現という理解でいるとわかりやすいと思います。

## 従来通りサーバを所有すると
通常アプリの開発・運用にはサーバを用意し、必要に応じたOSや

元記事を表示

cdk-nag(python)で特定ルールを対象外(サプレス)とする方法

# はじめに
皆様、AWS CDK(以後、cdk)はご利用されているでしょうか。
AWS公式が出しているIaCということでリソースのアップデートも早く、便利ですよね。
そのcdkのチェックツールとして**cdk-nag**というツールがあります。cdkで作成するリソースがAWSのベストプラクティスなどのルールに則っているかをチェックしてくれるツールです。
(例:S3のバケットはSSEの暗号化がされていること)

https://aws.amazon.com/jp/blogs/news/manage-application-security-and-compliance-with-the-aws-cloud-development-kit-and-cdk-nag/

このcdk-nagはcdk deployコマンドを打つと自動でチェックしてくれますが、どうしても**特定のルールはチェック外にしたい**ということがあると思います。そんなとき、python版のcdk-nagだとどのように記載すればよいかを調査しました。

# やりたいこと
– python版のcdk-nagで、IAM4のルー

元記事を表示

Brefを使いPHPのコードをLabmdaにデプロイする

# はじめに
はじめまして!
ジョージと申します。
先日PHPで書かれた業務委託先のサブシステムを既存サーバーからLambdaに移行する作業を行いました。
その時にPHPでLambdaにデプロイしている記事が少ないように感じたため、今回の記事を書こうと思いました。

# 前提
今回は[bref](https://bref.sh/docs/)というライブラリを使用するため以下の公式ページの手順を事前に行う
– [イントール手順公式ドキュメント](https://bref.sh/docs/installation.html)
– サーバーレスをインストールする
– AWSのアクセスキーを作成する
– Brefをインストールする

# 初期化
次のコマンドを打ってファイルを作成する
“`cmd
vendor/bin/bref init
“`

以下のように聞かれるため今回は「0」をコマンドで打つ
“`cmd
What kind of lambda do you want to create? (you will be able to add more functions

元記事を表示

【AWS】作成から一定期間経過したSnapshotを自動削除する仕組みを導入してみた

# 前提
メンテナンス時など、バックアップを取る際にスナップショットを手動で取得している。

# 課題
メンテナンスが問題なく完了した後、不必要になったスナップショットの削除を行う運用ルールがなく、無駄なコストが発生していた。

# 目的
スナップショット作成から一定期間経過したものは削除する仕組みをLambdaに関数登録し、トリガーとしてCloudWatch Eventsで日時実行する。
原則AMIに登録されているスナップショットの削除は行わない。

# ソース
~~~powershell:auto_delete_snapshot.py
import boto3
from datetime import datetime, timedelta
import dateutil.tz

########## 変数定義 ##########
# AWSアカウントID
acountId = “xxxxxxxxxx”
# 何日前以前を削除対象とするか指定 default=7
days = 7

########## 削除処理 ##########
def lambda_handler(even

元記事を表示

AWS CDK初心者が爆速でLambda Layerにpythonライブラリを入れた裏技

# はじめに
AWS CDKについて初心者用にまとめた記事はこちら

https://qiita.com/besmero628/items/dbab08287a8bc2d1893a

# 概要
最近AWSCDKを使用してpythonベースのlambdaを書いたのですが、pandasやらboto3やら使用する必要がありました。

もちろん素のpythonには入っていないライブラリなのでlambdaにパッケージごと入れる必要があるのですが、いちいちzipで固めて入れるのはめんどくさい。。。

AWSCDKをpythonで書き進めている記事もネットには少なくどうしたものかと思っていたのですが、色々調べていくうちに先人の知恵を借りられそうだったのでメモしておきます。

# 手順
:::note info
cdk languageはpythonを選択しています。
:::
## ① lambdaの作成
手始めにlambdaを作成します。
“`python:stack.py
from aws_cdk import(
aws_lambda as _lambda
Stack
)

class

元記事を表示

【初心者】【Lambda】ログについて確認し原因をしっかり追究してみた

# はじめに
どうもAWS初心者です。
今回Lambdaについて学習を行いました。
S3を利用して画像のリサイズを行う事を目標に関数を作成しました。
S3バケットを2つ用意し1つ目のバケットに画像をアップロードした際に、2つ目のバケットにリサイズした画像を上げるといった動きです。
作成しテストまでは上手くいったのですが、実際に適当な画像を上げた際に動作しませんでした。
その事について記事にしてみようかと思います。

# 原因の予測
テストで使用したファイルと同じ拡張子のファイルを利用しました。
2つのファイルの違いはサイズであり、そこに原因があると思い、サイズの小さいファイルをアップロードしてみたら成功しました。
なのでファイルが大きいことが原因だと考えました。

# 原因の解明
クラウドウォッチのログを確認することで原因の解明をしようと思いました。
しかしログを見てもエラーはありませんでした。
エラーとしては出ていなかったのですが1つ1つよく見ていく中で原因が分かりました。
![スクリーンショット 2022-10-29 21.36.01.png](https://qiita-imag

元記事を表示

【Lambda】SAMではまったこと【Node.js】

SAMを触ってみてはまったことなどをメモします。

## Roleのエラー 1
`sam init`でHello Worldプロジェクトを作成し、
`sam build` と `sam deploy`がうまくいくところまで確認できた後、
template.yamlにRoleを追加したらエラーになりました。

“`yaml
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
Role: “arn:aws:iam::xxxxxxxxxx:role/xxxxxxxxxx” # ここを追加
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs16.x
Timeout: 120
Architectures:
“`

buildはできましたがdeployでエラーです。
“`
Waiting for changeset to b

元記事を表示

【C++】 Lambda関数のimmutableとは?

# Lambda関数のImmutableについて
公式ドキュメントでLambda関数はdefaultで引数がImmutable(不変)と書いてあったがよく分からなかったので、実際に試してみました。

* []の中の値がキャプチャと呼ばれていて、以下のようなCopyキャプチャは変数を変更不可能(Const)らしいですね。

“`
int x = 100;
auto hoge = [x]() {
x = 3; // compilation error
};
hoge();
“`

* ()の中の値がパラメーターと呼ばれていて、普通の関数同様に変数xに値を代入できます。
“`
auto hoge = [](int x) {
x = 3;
};
int num = 100;
hoge(num);
“`

* 普通の関数同様にconstをつければちゃんとerrorを吐いてくれます。
“`
auto hoge = [](const int x) {
x = 3; //comp

元記事を表示

OTHERカテゴリの最新記事