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

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

AWS Chalice Tips

## 公式ドキュメント
[Documentation — AWS Chalice](https://aws.github.io/chalice/index.html)

### 環境

– Python: 3.8
– Chalice: 1.26.6

## Chaliceでapp.pyの分割

chaliceでは`app.py`にエンドポイントを設定していくため、一つのプロジェクトで複数の管理をやらせようとすると肥大する傾向がある。

例:
“` python:app.py
from chalice import Chalice
app = Chalice(app_name=’foo-app’)

@app.route(‘/’)
def index():
return {‘hello’: ‘world’}

################
# 記事管理
################
@app.route(‘/articles’, methods=[‘GET’])
def getArticles():
# ~
# Something Code
#

元記事を表示

lambdaでセキュリティグループのインバウンドルールを変更する

AWSに構築したシステムのセキュリティ設計として、セキュリティグループでインバウンド制限をすることは珍しくないと思います。システムの利用者が増えた・減った場合、セキュリティグループを更新する必要があり、通常はAWSコンソールで変更すれば良いですが、諸事情により非エンジニアがAWSコンソールを使わずに変更できるようにする必要があったので、その方法をメモしておきます。

# はじめに
設定する人がエンジニアではない想定だったので、WEBでセキュリティグループのインバウンドを追加・削除できるようにしました。全体のアーキテクチャは下記のような感じなのですが、この記事ではlambdaにフォーカスしています。

![provDiagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989777/4c9dff3d-0b12-3990-03e8-3c8ee5cfe207.jpeg)

# lambdaでセキュリティグループの追加削除する
lambdaでboto3を使ってセキュリティグループへのIPアドレス追加、削

元記事を表示

Amazon Connectで、オペレーターが着信履歴からユーザー情報を確認する方法

# はじめに
電話をかけると、オペレーターに繋げるConnectシステム構築した際、オペレーターが電話に出られず、発信者が電話を切る場合があります。
その場合、オペレーターが折り返しの電話をする必要があり、かつ発信者の名前を知る必要がありました。

Connectのシステムは、事前に電話番号と名前をDynamoDBに登録したユーザーのみが使用できる仕様です。
そのため、`オペレーターが着信履歴からユーザー名などを確認できる仕組みを構築`しましたので、まとめます。

# 事前構築
下記のサービス構築を行いました。
DynamoDBでは、パーティションキーを`電話番号(user_phone)`にし、`family_name`と`given_name`を属性として加えます。
connectに発信すると、発信電話番号をLambdaが受け取り、Lambdaが発信電話番号から`電話番号(user_phone)`に一致する項目を取得し、`family_name`と`given_name`を返すようにします。

その後、オペレータにつなげる、というお問い合わせフローを作成します。
![スクリーンショッ

元記事を表示

AWS Lambdaを使ってSlack botを作る方法

# はじめに
AWS Lambdaを使って、簡単にSlack botを作られる方法をご紹介します。
– お昼ご飯を選ぶBot (ランダム)
![random.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531401/3b9bb9c9-97e5-e058-af45-afecbaa7d2df.png)
– 当番ローテーションBot (シーケンシャル)
![sequence.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531401/cb62cab4-50d9-2dd6-a6e9-fc64f7d03f8e.png)
# 前提
以下はすでに準備されている前提となります。
– AWSアカウント
# 手順
# 1. Slack
## 1.1 Slack App 作成
https://api.slack.com/

Slack APIからアプリを作ります。
![nagare1.png](https://qiita-image-

元記事を表示

AWS Cognitoを使って認証済みユーザーしか実行できないAPIを作成する

# 背景
ログインしたユーザーだけ実行可能なAPIを作って公開したので、その手順を記載する。
AWS Cognito, API Gateway, Lambdaを使って実現し、S3で公開する。

# 作るもの
– ユーザー目線
– ユーザーはウェブサイトにアクセスし、サインアップとログインする
– ログインすると、API呼び出しができるようになる
– システム構成
– S3の静的ウェブサイトホスティング機能でウェブサイトを公開する
– Cognitoでユーザー管理、認証、認可を行う
– API GatewayでCORS設定とユーザー認証、認可を行い、Lambdaを呼び出す
– Lambdaがなにか処理をする
– API Gatewayがレスポンスを返す

# Cognitoでユーザー管理
### ユーザープールの作成
Cognitoにアクセスして、ユーザープールを新規作成。今回はGoogleアカウント連携などはせず、Cognito自身でユーザー管理する。
![ap-northeast-1.console.aws.amazon.c

元記事を表示

Lexの環境ごとのエイリアス設定

# はじめに
LexとConnectでシステムを開発した際、Lexの本番環境と開発環境のエイリアス設定を調べましたので、まとめます
また、環境ごとのLexに合わせたLambdaも関連付けます。

# 事前構築
– LexとConnect、Lambdaを構築済み

# Lexの開発環境
## Lex
Lexを作成時に設定されている`ドラフトバージョン`を`エイリアス:TestBotAlias`に関連付けましょう。
おそらく、デフォルトで関連付けられていると思います。
![スクリーンショット 2022-03-13 18.55.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/0602fefd-df33-523f-38f0-1d34bdf11af2.png)

![スクリーンショット 2022-03-13 18.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/c99e158f-2cae

元記事を表示

aws-cdkのL1・L2・L3とは aws-cdk#3

# 概要
[前回の記事](https://qiita.com/KbSota/items/3d38f5e000696a47e38d)でのこの宣言通り
cdkのL1とL2(そしてなんとL3も)について書いていきます。
>もう少し深く(cdkのL1とL2について)書こうと思いましたが
予想より文量が多くなってしまったので次回に回そうと思います。
主にCfnとcdkの関係の話になります。

# 結論
一口にaws-cdkと言ってもその中には3つのレイヤーが存在します。
– L1:ほとんどそのままCfnのテンプレートを記述するもの→**書いたものがそのままリソースとなる**
– L2:設定しなくてもデフォルトで設定を**いい感じ**にしてくれる
– L3:単一のリソースではなくAWSが設定したタスク群を設定できる。

レイヤーが高くなるほど便利になる(コード量や設定箇所)一方、設定の自由度が下がると言ったイメージ。

# 環境
操作する環境は以下の通りです。
“`
% node -v //Node.jsのバージョン
v14.16.0

% tsc -v //TypeScriptのバージョン
V

元記事を表示

[python]importについて理解したい件―pytest, aws lambdaで使う

# TL;DR

`tests/conftest.py` でデプロイ用のlambdaディレクトリをpathに追加する必要がある。

“`graphql
sys.path.append(os.path.join(os.dirname(__file__), ‘../{lambdaコードのディレクトリ}’)
“`

# はじめに

pytestでテストを実行した際に、インポートエラーに遭遇した。
importについての理解が浅いせいで、アホみたいな勘違いをして時間を浪費したのでメモる。
`sys.path.append` は定義していたのだが、通すpathが間違っていたので苦労した。

# ディレクトリ構成

`test_app.ppy` で `[app.py](http://app.py)` をテストするときに `mypkg` をimportしたいケースを考えます。
パッケージ(ディレクトリ?)にはアンダースコア(_)は非推奨らしいので、 `lambadasrc` とした。また、ハイフン(-)を利用する場合、パッケージ化したときにimport文で読み込めなくなるので、命名について理解

元記事を表示

Golang + gorilla/mux + LambdaProxyIntegration + ServerlessFrameworkを動かすまで

# 概要
タイトル通り、GolangアプリケーションをLambdaプロキシ統合で動かします

## Lambdaプロキシ統合ってなに
ここに書いてある

https://docs.aws.amazon.com/ja_jp/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html

これを使うとLambda関数を小分けにしなくても、アプリケーション側でルーティングを振り分ける従来の開発方法でサーバーレスなアプリケーションが作れる

## 必要なもの
・AWSアカウント
・ServerlessCLI
インストール、認証情報の設定が必要です

公式ドキュメント

https://www.serverless.com/framework/docs/getting-started

## 実装
`sls create –template aws-go-mod –path go-test`
テンプレートから雛形を作ってもらいます
`go-test`の部分はお好きなプロジェクト名を入れてください

元記事を表示

AWS LambdaでS3イベントが発火しない

# はじめに
S3のアップロードイベントでAWS Lambdaを動かす、あるあるな構成でシステムを構築したところ、Lambdaが起動しない事態に直面しました。

# 結論
イベント設定のプレフィックスに不要な半角スペースが入っていた。

# コメント
動かないときはすべてを疑うとよいです。当たり前ですが。
私恥ずかしながらAWSは3年くらい携わってますが、ハマりました。
イベント設定するときに、マネジメントコンソールのS3の上のリンクみたいなところをコピってペーストしてたのですが、それがいけませんでした。
Lambdaの画面からイベント詳細確認しても、ぱっと見正しい(半角スペース入っていない)ように見えるんです。厄介。
ググっても結論にたどり着けなかったので今回記事にしておきました。
参考になった方、何かしらの反応いただけると嬉しいです(笑)

元記事を表示

レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話

こんにちは、家庭では休日の料理担当をしている二児の父です。

山本ゆりさんやリュウジさんなど有名レシピ作家さんのレシピをよく参考にするのですが、ブログ記事、Instagram、Youtubeなど皆さん複数のチャネルにレシピを公開してて探しにくいなぁと常々思っていたため、チャネル横断でレシピを検索できる、制作期間わずか3日の[トイアプリ](https://couch-potato.vercel.app/yuri-yamamoto)を公開してTwitterでお知らせしました。

すると山本ゆりさんご本人がリアクションしてくださり(!)、フォロワー数100人ちょっとだった自分のツイートにいいね!が止まらない状況に。これに気を良くして、さらに**近所のスーパーで安くなってる食材を調べて、関連レシピを検索できる機能**を追加してLINE Botにしてみたよ、という話です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201783/607570ad-0bfd-f3e9-b08d-685ee3d

元記事を表示

AWS lambda pythonでライブラリを読み込むまで

### AWS lambdaとは?
AWS環境下においてサーバーレス(EC2などを起動しない)でプログラムを実行できるサービス

### lambdaを使う利点

EC2と違って、サーバーレスなのでサービスを実行する時のみ課金される。
(コストを抑える利点がある)

### lambdaの使い方

AWSコンソールにてlambdaへ移動。

![lambda説明資料1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1928016/e502c9dd-f276-2464-a76b-6eb03afcf351.png)

右上の関数を作成ボタンをクリックして、関数を作成する画面へ飛ぶ。

関数の作成画面へ移行すると、関数の作成方法を求めてきます。

今回はユースケースなど使わず、一から作成を選択。

![lambda説明資料2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1928016/6c27e496-909c-9b00-

元記事を表示

40 代おっさんLambdaを使ってS3と連携

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## 構成図

![lambdaS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/6488bc11-1f6d-5b4e-9a8f-c5a13d71d8d7.png)

## Lambda関数を作る

### LambdaのGUIコンソールを開く

関数の作成をクリック

一からの作成をチェックを入れて

関数名を入れて

ランタイムにpython3.7を入れる(今回はpython使用するため)

アクセス権限は
基本的なLambdaアクセス権限で新しいロールを作成にチェック

できたら関数の作成をクリックしてください。

### コードを確認

‘statusCode’: 200
が return するようになっていると思います。
上にprint(event)を追加

“`

元記事を表示

S3バケットにあるgzipファイルを加工して再度gzipで出力

大したことない作業のようですが、若干つまりどころがあったので残しておきます。

## やりたいこと
とあるS3バケットにあるgzipファイル(中身はjson)が生成されるたびに一部加工して、別のバケットに再圧縮して出力したい。
図を書くほどのものでもないんですが、こんな構成になります。
![Blank diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852059/6b84716b-cd55-0cff-954b-e9ba1f9df0f3.png)

## どうやるか
Source BucketからSQSに通知してLambdaを呼び出すところは一般的な設定なので割愛します。
gzipを取り扱えるnpmパッケージは有名どころだと[node-zip](https://www.npmjs.com/package/node-gzip)などがありますが、zlibだけで出来ましたので今回のようなシンプルなケースだと外部パッケージは不要でした。
解凍・加工・再圧縮を行うLambdaは下記のようにな

元記事を表示

40 代おっさんLambdaを使ってみる

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## lambdaを使う

lambdaの作成画面に行ってください。

作成を押してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/85ca853c-5b13-9ada-3d44-f0b5f629862b.png)

左から

・一からの作成

・設計図の使用
あらかじめAWSで設計されているもの使用できる

・コンテナイメージ

・Serverless Application Repository

### 設計図の使用を選ぶ

hello-world-pythonと入れる

テンプレートが表示されるのでチェックボックスにチェックを入れて、左下の設定をクリック

### 関数名に名前を入れる

関数名をhello-pythonにしました(わかる名前で

元記事を表示

lambdaをローカルで動かしてみよう

今回はlambda上に実装したアプリケーションをローカルで動かす方法を紹介します。
言語はpython3.8です。

## この記事の流れ
1. AWS SAM CLI のインストール
2. アプリの作成(lambda)
3. ローカルで挙動確認

## 1. AWS SAM CLI のインストール
下記、リンクを参考にインストールを行なってください。
[AWS SAM CLI のインストール](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)

## 2. アプリの作成(lambda)
ターミナルを立ち上げ、lambdaのプロジェクトファイルを作成するディレクトリに移動して下記コマンドを実行してください。

“`zsh
sam init
“`

 SAMテンプレートの作成が始まり、いくつか選択を要求されますので、下記を選択をしてください。
 ・ 1 – AWS Quick Start Templ

元記事を表示

CloudWatchAlarmの発砲テスト方法

# これは何?
CloudWatchAlarmからSNSへ連携されてLambdaがトリガーされる仕組みを作っていたのですが、
アラート発生のテストで毎回CPU使用率を上げるなど面倒だったが簡単な方法を見つけたのでメモです。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/US_AlarmAtThresholdEC2.html#cpu-usage-alarm-cli

https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/set-alarm-state.html

## CloudWatchAlarmテストコマンド
``をテストしたいCloudWatchAlarm名に変更して実行します。

“`
aws cloudwatch set-alarm-state –alarm-name –state-value ALARM –state-reason “test”
“`

##

元記事を表示

Lambda/SAM ログ出力方法 メモ

* Lambdaでのログ出力をsam cliを使って試したのでメモとして残しておく。

## 事前準備

* sam プロジェクト作成

“`shell
sam init
“`

※ランタイムはPython3.8を選択。

## コード

* `template.yml`

**ログレベル**を環境変数として設定する

“`yaml

Environment:
Variables:
LOG_LEVEL: !Ref LogLevel

Parameters:
LogLevel:
Type: String
Default: INFO
“`

* `app.py`

“`python
import json
import logging
import os
import requests

def lambda_handler(event, context):
logger = logging.getLogger()

# ログ

元記事を表示

40 代おっさんLambdaのイベントソースとlambda関数を学ぶ

## 本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## イベントソース

### イベントソースとは

lambda関数が呼び出されるきっかけとなるもの
lambda関数にはハンドラーなるものがあり、それでイベント受け取る

#### lambda関数を呼び出すタイプ

・同期
・非同期
・ストリーム
がある

イベントソースにより呼び出しのタイプが異なる。
それにより、aws側でリトライを実行されるのか、ユーザー側でリトライを実装するのかで変わる

## 最後に

またこの記事は AWS 初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。

元記事を表示

amplifyで発生した Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME の対処

# amplifyで発生した `Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME` の対処

– amplify cli version: 7.6.3
– AWSコンソール操作 : 2022/03/05 時点

amplify pushをしたところ以下のエラーが発生した

“`markdown
Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME
“`

このメッセージ単体だけで調査したところAWSの以下の記事が引っかかるが、解決の方法の一部でしかなかったので対処方法を残す。

[https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-stack-export-name-error/?nc1=h_ls](https://aws.amazon.com/premiumsupport/knowledge-center/cloudformatio

元記事を表示

OTHERカテゴリの最新記事