- 1. Challiceを使用し、Lambdaのコードを管理 ①
- 2. 標準ライブラリurllib request と 外部モジュールrequests をLambdaのコードでそれぞれまとめた
- 3. 【ServerlessFramework】serverless.ymlで利用できる変数のまとめ
- 4. 銀河麻雀の待ちを判定するWebアプリを作った
- 5. AWS LambdaでBoxSDK(JWT認証)を使おうとしてハマった件(備忘録)
- 6. AWS lambdaでログが重複して出力される理由と対処法(Python)
- 7. AWS Chalice Tips
- 8. make(旧integromat)を使ってLambdaを実行する
- 9. lambdaでセキュリティグループのインバウンドルールを変更する
- 10. Amazon Connectで、オペレーターが着信履歴からユーザー情報を確認する方法
- 11. AWS Lambdaを使ってSlack botを作る方法
- 12. AWS Cognitoを使って認証済みユーザーしか実行できないAPIを作成する
- 13. Lexの環境ごとのエイリアス設定
- 14. aws-cdkのL1・L2・L3とは aws-cdk#3
- 15. [python]importについて理解したい件―pytest, aws lambdaで使う
- 16. Golang + gorilla/mux + LambdaProxyIntegration + ServerlessFrameworkを動かすまで
- 17. AWS LambdaでS3イベントが発火しない
- 18. レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話
- 19. AWS lambda pythonでライブラリを読み込むまで
- 20. 40 代おっさんLambdaを使ってS3と連携
Challiceを使用し、Lambdaのコードを管理 ①
# はじめに
LambdaのコードをGithubに管理するにあたり、chaliceを採用したため、chaliceについてまとめます。
chaliceのメリットとして、以下が挙げられます。
– シンプルにLambdaをコード管理できる
– デプロイがSAMに比べて、簡易でデプロイが早い
– 今回は、Lambdaのみですが、API Gateway、S3, SNS, SQSといったAWSサービスも利用できる
– IAM ポリシーを自動生成してくれる今回は、APIGatewayは、使用せず、複数のLambdaのコード管理をするために、Chaliceを使用します。
# IAMユーザーの設定
ローカルのmacのターミナルで`chalice`をインストールします。“`terminal
$ python -V
Python 2.7.18$ pip install chalice
$ chalice –version
chalice 1.26.0, python 3.9.2, darwin 21.3.0
“`ChaliceでLambdaをアップするためには、アップするAWSア
標準ライブラリurllib request と 外部モジュールrequests をLambdaのコードでそれぞれまとめた
# はじめに
Lambdaでapiにリクエストする際、requestのモジュールが必要でした。
標準ライブラリurllib request と 外部モジュールrequests がありましたので、それぞれまとめます。外部モジュールであるrequestsの方が、コード量が少ないですが、モジュールをアップする手間があります。
ただ、手間と言ってもchalice等を使用することで、手間を無くすことはできます。# 標準ライブラリurllib request
requestsライブラリをデプロイパッケージに含める必要はなく、`import request`するだけでよいです。https://docs.python.org/ja/3/library/urllib.request.html
## GET,POSTの場合
“`py
from urllib import request
import urllib
import json
import os# get
def get_api(event):api = ‘/test’
request_url = os
【ServerlessFramework】serverless.ymlで利用できる変数のまとめ
serverless.ymlの変数の仕様がどこにまとまっているかわからず、かなり探し回ったのでまとめておこうと思いました。
内容的には公式ドキュメントからよく使いそうなものを抜粋しただけです。https://www.serverless.com/framework/docs/providers/aws/guide/variables
# 基本的な変数の利用方法
まずはじめに、変数の参照には `${}` を利用します。
“`serverless.yml
yamlKeyXYZ: ${variableSource}
“`ちなみに、serverlessの変数は再帰的な参照がサポートされており、変数をネストすることができます。
“`provider
provider:
name: aws
environment:
MY_SECRET: ${file(./config.${opt:stage, ‘dev’}.json):CREDS}
“`# デフォルト値
参照先の変数が存在しない場合にデフォルト値を利用したい場合は `${variableSource, d
銀河麻雀の待ちを判定するWebアプリを作った
麻雀YouTuberの麻雀カッコイイシリーズが投稿した「銀河麻雀」。
(ルール説明は13:40くらいから)
簡単に言えば、各種類の牌に1枚ずつ「ギャラクシー牌(銀河牌)」と呼ばれる牌種が自由になる牌が入った状態での麻雀だ。
例えば、銀河1mは1p,1sとしても扱える。
銀河東は東南西北、銀河白は發中としても扱える。銀河牌がたくさん入ると、受け入れや待ちの数が通常よりも多くなる。
銀河牌が沢山入った順子が並べば、とても人間の頭では処理しきれない、まさに銀河が広がるような麻
AWS LambdaでBoxSDK(JWT認証)を使おうとしてハマった件(備忘録)
# はじめに
本記事はタイトルの通りです。とてもハマったため、備忘録として残しておこうと思ったのと同じようにハマって
しまった方の参考になればと思います。結果的にAWS Lambda上でBoxSDKを使ったAPIは動作しました。
先にどうやって動いたかを紹介したあと、ハマった経緯や原因などの解説にはいります。# Lambda環境(BoxSDK動作確認済み)
こちらの記事を参考にBoxSDKをインストール、ZIP化、S3への格納、Lambdaへのレイヤー追加を行います。cryptographyのレイヤー追加、記事ですがBoxSDKもかなり関わってました。
レイヤー追加時ですが、互換性のあるランタイムにpython3.7/3.8/3.9を指定
互換性のあるアーキテクチャはx86_64を指定しました。https://qiita.com/Bacchus/items/7dcfc0237df196d1ab67

# はじめに
AWS lambda上で、Pythonのloggingモジュールを使い、ログを表示させていたところ、重複してログが表示されていることに気づいたので、重複してログが出力される理由とその対処法を調査した。# ログが重複する理由
### lambdaのlogging仕様
lambda上では、デフォルトで、ルートロガーにLambdaLoggerHandlerというハンドラが登録されている。([参照記事](https://qiita.com/k_hoso/items/ba7614775dbec089d18d))
つまり、自分で新たなハンドラを登録すると、ハンドラが複数存在することになり、ログが重複して出力されてしまう。#### コード
“`python: デフォルトで存在するハンドラの確認
from logging import getLogger, StreamHandler, DEBUG, Formatter
def lambda_handler(event, context):
logger = getLogger()
logger.setL
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
#
make(旧integromat)を使ってLambdaを実行する
## 1.はじめに
make(旧integromat, 以下本記事ではmakeで記します)からLambdaを呼び出す手順です。
ただそれだけなのですが、makeに関する情報が少なく難儀したので、やったことを書き留めました。## 2.今回やること
こんな感じのパイプラインを作ってLambdaを実行します。
Slackのチャンネルに投げたメッセージをトリガーにして、OutgoingWebhooksからmakeのWebhooksを呼び出す。
WebhooksはSlackやGmailに代替しても同じことができると思います。
## 3.アプリの設定
一般的な手順で各アプリに対して設定を行い、パイプラインを作ります。### 3-1.Slack
適当なチャンネルを作成する。パブリックとプライベートど
lambdaでセキュリティグループのインバウンドルールを変更する
AWSに構築したシステムのセキュリティ設計として、セキュリティグループでインバウンド制限をすることは珍しくないと思います。システムの利用者が増えた・減った場合、セキュリティグループを更新する必要があり、通常はAWSコンソールで変更すれば良いですが、諸事情により非エンジニアがAWSコンソールを使わずに変更できるようにする必要があったので、その方法をメモしておきます。
# はじめに
設定する人がエンジニアではない想定だったので、WEBでセキュリティグループのインバウンドを追加・削除できるようにしました。全体のアーキテクチャは下記のような感じなのですが、この記事ではlambdaにフォーカスしています。
# 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`を返すようにします。その後、オペレータにつなげる、というお問い合わせフローを作成します。

– 当番ローテーションBot (シーケンシャル)

# 前提
以下はすでに準備されている前提となります。
– AWSアカウント
# 手順
# 1. Slack
## 1.1 Slack App 作成
https://api.slack.com/Slack APIからアプリを作ります。
でのこの宣言通り
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にしてみたよ、という話です。
でプログラムを実行できるサービス### lambdaを使う利点
EC2と違って、サーバーレスなのでサービスを実行する時のみ課金される。
(コストを抑える利点がある)### lambdaの使い方
AWSコンソールにてlambdaへ移動。

右上の関数を作成ボタンをクリックして、関数を作成する画面へ飛ぶ。
関数の作成画面へ移行すると、関数の作成方法を求めてきます。
今回はユースケースなど使わず、一から作成を選択。

## Lambda関数を作る
### LambdaのGUIコンソールを開く
関数の作成をクリック
一からの作成をチェックを入れて
関数名を入れて
ランタイムにpython3.7を入れる(今回はpython使用するため)
アクセス権限は
基本的なLambdaアクセス権限で新しいロールを作成にチェックできたら関数の作成をクリックしてください。
### コードを確認
‘statusCode’: 200
が return するようになっていると思います。
上にprint(event)を追加“`