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

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

LambdaからDynamoDBを操作する

# 背景・目的
– 以前、「[VPC内のLambdaからインターネットに接続する](https://qiita.com/zumastee/items/21c77e66156a8d26856e)」と「[DynamoDBを試してみた](https://qiita.com/zumastee/items/ef8a5c855161f9e4ba92)」で作成したLambdaとDynamoDB(以降、DDBという。)を使用してQiitaの記事一覧を取得し、その内容をDDBに登録する。

# 内容
## 前提
### DynamoDBテーブル
– DDBのテーブル名は「qiita_user_articles」、各項目は以下の通りとする。

| 項目名 | キー/インデックス | タイプ| 例|
|:— | :—- | :—- | :—- |
| user_id | パーティションキー| 文字列 |test|
| article_id | ソートキー | 文字列 |00001|
| title | グローバルセカンダリーインデックス | 文字列|test title|
| url |

元記事を表示

Lambdaを定期実行する

# 背景・目的
– [VPC内のLambdaからインターネットに接続する](https://qiita.com/zumastee/items/21c77e66156a8d26856e)で作成したLambda関数を定期的に実行する。
– 定期実行には、EventBridge Ruleを利用してみる。

# 内容
## 実装
### 1. EventBridgeルールの作成
– EventBridgeのルールをクリックしトップ画面から、「ルールを作成」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/768de97d-5740-9d9b-52a7-8d8ba39fc58b.png)

### 2. ルールの詳細
– 名前と説明、イベントパス、ルールタイプ「スケジュール」を選択して「次へ」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6

元記事を表示

Pythonの組み込みhash関数を使ってバグを作った話

# 経緯と問題

DynamoDB で効率よいシャーディングの実施のために、キーの末尾に特定の識別子を付与する方法はベストプラクティスとして公式でも紹介されている。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-partition-key-sharding.html#bp-partition-key-sharding-calculated

今回は、このシャーディングを行うためにユーザー固有のID (文字列) を元に識別子を計算したいと考えた。 その対策として、以下のようなコードを書いた。

“`python:バグありなのでこのコードは利用しないこと!
def primary_key(uid: str) -> str:
num = hash(uid) % 10
return f’SampleData.{num:02d}’
“`

[`hash` 関数](https://docs.python.org/ja/3/library/functions.html#hash

元記事を表示

VPC内のLambdaからインターネットに接続する

# 背景・目的
インターネット上のAPIを呼び出して、データを取得したい。
これを、Lambdaで実現する方法を試す。

# 内容
## 概要
– [Qiita API](https://qiita.com/api/v2/docs#get-apiv2tags)の“/api/v2/items“を使用して記事の一覧を作成日時の降順で取得する。

## 前提
– ネットワーク(VPC、サブネット、ルートテーブル)、インターネットゲートウェイ、NATゲートウェイなど正しく設定されているものとする。

## 実践
### Lambda関数の作成

– 上記の他に、予め作成したVPC、サブネット、セキュリティグループを指定する。

### コード
– 以下のコードを書いて、Deploy&Testを実行。
“`
import ur

元記事を表示

S3に格納されたファイルを検知し、EC2上のシェルを自動実行する

### S3に格納されたファイルを検知して、EC2上のシェルを自動実行する(&SNSにて、結果をメールに送信する)

(やった手順)
1.(EC2上)シェルの作成
2.(EC2上)シェルの動作確認
3.(AWS)S3バケットの作成
4.(AWS)Lambdaの作成 & IAMの設定
5.SNSの設定(トピックの作成 & サブスクリプションの作成)
6.動作確認

(省略していること)
・EC2へのsshの接続手順(teratermなどで、接続済みの状態で記載してます)
・EC2のインスタンス名などは、知っている状態で記載しています

### 1.(EC2上)シェルの作成【test.sh】
(※今回は環境の都合上、「hulft」ユーザで作成しています。)
(※合わせる必要がある箇所は、※表記していきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518095/9e13d193-f6c9-ba13-ecde-0e56a09e630b.png)

(【test.sh】の中身)
“`

元記事を表示

【AWS】【Salesforce】CTIフローからLambda関数を呼び出す

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

今回は少し応用として、**CTIフローからLambda関数を呼び出す方法**について記事にしたいと思います。
以下の記事の内容を組み合わせて、CTIフローからApexクラスのメソッドを、
ApexクラスのメソッドからLamda関数を呼び出すことで実現します。

https://qiita.com/Aichi_Lover/items/7d7e865a8c0ab85ef7e5

https://qiita.com/Aichi_Lover/items/30d58a7213caf8df14cc

この記事がAWSやSalesforceについて勉強中の方の参考になれば幸いです♪
(*^^)v

# 2.用語の説明

## 2.1.Apexとは
Apexとは、JavaベースのSalesforce独自のプログラム言語です。

Salesforce内のオブジェクトの検索や作成をするメソッド等が提供されており、
それらを組み合わせて処理を記述することができます。

Apexクラスとは、オブジェクト指向におけるクラ

元記事を表示

Annotations Frameworkを使って、C#でのAWS Lambda 関数実装をもっと楽にしよう

# はじめに

Visual Studio で AWS Lambda の新しいプロジェクトを作成しようとしたら、`Annotations Framework` という見慣れないプロジェクトがありました。今回はこの子がどういったものであるかを確認していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/563bbcc8-1aa8-fe4b-e74d-7ac82ce28db2.png)

# Lambda Annotations とは?

AWS Labmda Dotnet の Lambda Annotations に関する [README](https://github.com/aws/aws-lambda-dotnet/blob/master/Docs/lambda-annotations-design.md) を確認すると、下記のような説明があります。

> ラムダ注釈デザインは、.NET ラムダ関数を記述するための新しいプログラミングモデルです。大まかに言うと、新しい

元記事を表示

AWS Lambda /tmp領域が10GBまで拡張できるようになったのでディスク読書速度を測定してみた。

# はじめに
いままでLambdaのエフェメラルストレージ(以下/tmp)は512MBまでだったが、2022年3月24日から10GBまで拡張できるようになった。

https://aws.amazon.com/jp/blogs/aws/aws-lambda-now-supports-up-to-10-gb-ephemeral-storage/

そこで512MBと10GBでディスクの読み書きスペックに違いがあるかを確認してみた。

# 結論から
/tmpサイズ増減によるディスク読書速度は変化は見られない。
Lambdaメモリを増やすとディスク読書速度は大幅に向上する。
ファイル読み書きサイズが大きい処理ならばLambdaメモリは大きくする。

# 計測方式
ddコマンドによる簡易的な計測
Amazon linux2からddコマンドコピーおよびzipファイルにしてLambda Layerに登録。

tmp領域のサイズによって書き込みサイズを変化させる。
` 512MBの場合     448MB書き込み = bs=64K count=7k`
`10240MBの場合    9600MB書き込

元記事を表示

【Ruby】Googleカレンダーに服薬記録をつけるAlexaスキル作ってみた

# 背景

最近買ったEcho Show 5で、頓服薬の服薬記録をつけられたら便利だなと思ったことがきっかけです。

– 既存の服薬記録系Alexaスキルだと、Echo Showやスマホの画面で記録を確認することが難しそう
– スマホからの記録の表示や変更・削除はできるだけ楽に実現したい(できれば開発したくない)ので、記録をGoogleカレンダーに予定として入れたい
– 利用者(家族)が使いやすいよう、できるだけシンプルな操作で記録をつけたい
– Alexaのデフォルトカレンダーとして設定しているGoogleカレンダーと、服薬記録用のGoogleカレンダーを別IDに分けたい

という理由で、自分でスキルを作ることにしました。

# 概要
スキルを呼び出すと、話しかけた内容によって下記3つの挙動をします。
1. 「アレクサ、[スキル名]を開いて、記録をつけて」
→Googleカレンダー上に、現在時刻〜5分後の予定(=服薬記録)を作る
2. 「アレクサ、[スキル名]を開いて、記録を見せて」
→画面に当日の服薬記録を表示する
3. 「アレクサ、[スキル名]を開いて」
→利用方法の案内を

元記事を表示

AWS LambdaによるBolt for Pythonの話

# 今回のお話
AWS Lambda環境でBoltを動かしてみた話と動かすまでのアプローチの方法について書いていきます。

下記記事のコード部分のみ参考にさせていただきました。

https://dev.classmethod.jp/articles/bolt-lambda/

Boltに関してはWindowsのvenv環境でpip installしたライブラリで問題ありません。

# API Gatewayについて
概ね参考記事の通りで、公式の通りSlackアプリとLambda環境を整えていきます。

さて、API Gatewayですが、諸々諸事情により使い始めた頃から、プロキシの統合の使用を使わずマッピングテンプレートなるものを使ってました。

正確ではないかと思いますが、指定のContent-Typeでリクエストが来た場合にヘッダーを取り除いたり、Bodyの部分をJSONに整形したりなどLambdaに渡す前にデータを変換してくれるものです。

あまりちゃんと調べて使っていたわけでないので、Boltに渡すデータ形式とは?という所で躓きました。

結論はリクエストペイロードはそのまま

元記事を表示

Cost Explorer API でアカウントおよびサービスプロバイダ毎に請求額を取得する

## モチベーション
2022 年 2 月 1 日以降、AWS Inc. に代わり AWS Japan が日本国内の AWS サービスの契約当事者となりました。(請求書払いアカウントは 2021 年 11 月 1 日 以降)

https://aws.amazon.com/jp/legal/awsjp/

そのためほとんどのサービス利用料については現在 AWS Japan が請求元になっているのですが、AWS Marketplace および、Amazon SES, SNS, Connect などの AMCS LLC が販売する一部のサービスについては引き続き請求元は AWS Inc. となっています。

Cost Explorer API を使用してアカウントおよび、請求元の法人 (サービスプロバイダ) 毎に請求額を取得し、以下のような CSV で出力する機会がありましたので紹介します。

“`
Account Id,Account Name,Legal Entity,Amount (USD)
000000000000,account-0000,Amazon Web Services

元記事を表示

make(旧integromat)を使ってLambdaを実行する〜EC2の起動・停止篇

## 1.はじめに
makeからLambdaを呼び出し、EC2の起動・停止を行う手順です。

前回の記事はこちら。この記事で作ったリソースをそのまま流用します。

https://qiita.com/okome-chan/items/f0359139b2e72daf686c

## 2.今回やること
こんな感じのパイプラインを作ってLambdaを実行します。
Slackのチャンネルに投げたメッセージをトリガーにして、OutgoingWebhooksからmakeのWebhooksを呼び出す。
メッセージは`{ key:value }`でLambdaに渡して、EC2の起動・停止の判定に利用します。

![スクリーンショット 2022-03-28 14.36.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/19d01da8-bc67-1165-56d9-2299b8efc6b8.png)

## 3.アプリの設定
### 3-1.Slack
今回は`Start`と`Stop`をトリガーにする

元記事を表示

GoogleAPIを実行してデータを取得するAPIをAWSのLambdaとAPI Gatewayでつくる

# 記事の概要

非公開のGoogleスプレッドシートの情報を取得する関数をLambdaで作成
API Gatewayで呼び出すところまでの手順を記録

– 利用サービス
– Google Cloud APIs
– AWS Lambda
– AWS API Gateway

# 前提

– javascriptで何かしらの開発した経験がある
– Google Cloud Platformアカウントを所持している
– AWSアカウントを所持している

# 作業手順目次

1. Google Cloud APIs
1. プロジェクトの作成
1. Google Sheets API ライブラリの有効化
1. 認証情報の追加
1. 鍵の作成
1. Lambda
1. 関数の作成
1. node_modulesのLayers登録
1. 環境変数の登録(Googleの認証情報)
1. API Gateway
1. APIの作成
1. リソースの作成
1. メソッドの作成
1. APIのデプロイ

元記事を表示

Lambda (golang)でOpenSearchのドメインを定期的に名前解決し、ALBのターゲットを更新(プライベートサブネットのみ)

# 初めに
生産技術部で製品の検査工程を担当しているエンジニアです。工場のデータを見える化するために、工場で使わなくなったサーバを利用して、オンプレミス環境に[The Elastic Stack](https://www.elastic.co/jp/elastic-stack/)(Elasticsearch、Kibana、Logstash、Filebeat、Metricbeat)でサービスを構築しました。

しかし、本業である生産技術業務の傍らで、生産量増加に伴うサーバ負荷対応や故障対応といったサーバの管理を行う事は難しいため、AWSのマネージドサービスの利用を検討しています。AWSを利用する目的は管理面の課題解消だけでなく、AWSで提供される多様なサービスとの連携や、パブリッククラウドを利用する事による他事業部との連携を視野に入れて検討しています。

# AWSで検討している構成
会社のネットワークから[AWS Direct Connect](https://aws.amazon.com/jp/directconnect/)(専用線接続サービス)を利用し、接続しています。セキュリティ

元記事を表示

Lambda Authorizer 概要 メモ

## Lambda Authorizerとは

* Lambda 関数を使用して API へのアクセスを制御する API Gateway の機能。
* クライアントが API リクエストを送信すると、API Gateway は Lambda Authorizerを呼び出す。
* トークンやリクエストパラメータを入力として受け取り、IAM ポリシーを出力として返却する。

## 認証の流れ

![lambda_authorizer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586535/bb545e3a-41b2-9143-dab8-9d9b7b402043.png)

**① クライアントは、API Gatewayに対してAPIリクエストを行う。**
※API Gateway は、対象APIメソッドに対してLambda Authorizerが設定されているかを確認する。

**② Authorizerが存在する場合、API Gateway は Lambda 関数を呼び出す。**

**③

元記事を表示

LambdaでFastAPI + NuxtJSなアプリ環境を構築してみる

気軽にWebアプリが作れて、ローカルでの検証もしやすくて、本番デプロイも簡単。
そんな構成を目指して、FastAPIとNuxtJS(SPA)がLambda上で動作するアプリ環境をServerlessFrameworkで構築してみました。

![structure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/382c0b75-055a-bd19-a9b1-8567300cfced.png)

ソースコードはこちら

https://github.com/ng3rdstmadgke/sls-fastapi-nuxt-sample

# 前提条件
ServerlessFrameworkを使います。
nodejsとpython3.8とdockerをインストールしておいてください。

# ServerlessFrameworkインストール & プロジェクト作成
ServerlessFrameworkをグローバルにインストールして、プロジェクトを新規作成します。

“`bash
# Serverl

元記事を表示

AWS LambdaとAPI Gateway・簡単で早いAPIデプロイ

### Tactico

 私は先日、[趣味とビジネスが半々のプロジェクトTactico](https://www.tactico.jp/)をβリリースしました。
 これは株価の表示とスクリーニングのためのツールで、こんなスクリーンショットです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59073/df2a0cd9-17de-3951-6ef9-4fa4335a0914.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59073/b6c22080-3d77-b88b-3c79-e8a88f03c085.png)

 こいつのバックエンドはAWSで、主に **Lambda** と **API Gateway** で構成されてますが、これはAWS入門者向けにちょうどいい記事になりそうなので整理して書いてみることにしました。このグラフィックも自信作なんですがそれは別の話として

元記事を表示

[AWS SAM] 1つのtemplate.ymlから複数環境へのデプロイ

# 方針

– 参考にさせて頂いた記事によると、1ソース(1つのtemplate.ymlなど)から複数環境にdeployしたい場合次の通りとしたほうが良いと判断
– 環境ごとのAPI Gateway
– 環境ごとのLambda Application & Function
– (初めは1つのAPI Gatewayで複数ステージを作れば良いと思ってたがSAMがそのやり方に対応していないらしい)

## 参考

[AWS SAMにおける環境管理のベストプラクティス | 株式会社CyberOwl](https://www.cyberowl.co.jp/blog/technology/1634#7mw8fyo9)

# 作業後のイメージ

– devとprodの2つの環境でdeployする想定

## API Gateway

– dev-XXXとprod-XXXの2つが作成される

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490917/f414e1cd-2b06-8

元記事を表示

AWS SNSでeメールを送信する

### はじめに

前々から、AWS SNSについて学ぼうと思っていたので、今回記事にしてみました。

### AWS SNSとは

フルマネージド型のプッシュ型メッセージングサービス。
フルマネージド型サービスとはサービス提供以外にもAWS側が管理しているサービス。
サービスを利用することだけ考えればいいので、管理が楽。

### AWS SNSを実装する
まずはAWSのコンソール画面からSNSを検索。

![AWS-SNS説明資料1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1928016/c2cdfdcc-2ead-208e-3d6b-2ce4237833d5.png)

SNSの画面に遷移したら、トピックの作成をクリック。

>Amazon SNS トピックは、通信チャネルとして機能する論理アクセスポイントです。

![AWS-SNS説明資料2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1928016/

元記事を表示

PyCharmのPYTHONPATHが上書きされてしまう

docker-compose環境をinterpreterに設定しています。
interpreterの設定で環境変数に `PYTHONPATH=/library_path` を指定しています。
PyCharmのGUIからunittestをrunするとPYTHONPATHで設定したパスのライブラリを見つけることができません、どうやらPYTHONPATHが上書きされている様子。

回避方法は2つある。
* site-packagesにもライブラリ入れておく→ちょっと2重管理になって気持ち悪い
* GUIでの実行を諦めてコマンドラインにてテスト実行→今回はこれを採用

lambda layerにpipライブラリ群を入れているためこのような状況になってます。
lambda layer便利だけど、このあたりのlambdaの実行環境とローカルの開発環境を差を吸収する部分でちょっと工夫が必要。
あまりスッキリした解決方法ではないのも悩ましい。

元記事を表示

OTHERカテゴリの最新記事