- 1. 銀河麻雀の待ちを判定するWebアプリを作った
- 2. AWS LambdaでBoxSDK(JWT認証)を使おうとしてハマった件(備忘録)
- 3. AWS lambdaでログが重複して出力される理由と対処法(Python)
- 4. AWS Chalice Tips
- 5. make(旧integromat)を使ってLambdaを実行する
- 6. lambdaでセキュリティグループのインバウンドルールを変更する
- 7. Amazon Connectで、オペレーターが着信履歴からユーザー情報を確認する方法
- 8. AWS Lambdaを使ってSlack botを作る方法
- 9. AWS Cognitoを使って認証済みユーザーしか実行できないAPIを作成する
- 10. Lexの環境ごとのエイリアス設定
- 11. aws-cdkのL1・L2・L3とは aws-cdk#3
- 12. [python]importについて理解したい件―pytest, aws lambdaで使う
- 13. Golang + gorilla/mux + LambdaProxyIntegration + ServerlessFrameworkを動かすまで
- 14. AWS LambdaでS3イベントが発火しない
- 15. レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話
- 16. AWS lambda pythonでライブラリを読み込むまで
- 17. 40 代おっさんLambdaを使ってS3と連携
- 18. S3バケットにあるgzipファイルを加工して再度gzipで出力
- 19. 40 代おっさんLambdaを使ってみる
- 20. lambdaをローカルで動かしてみよう
銀河麻雀の待ちを判定する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)を追加“`
S3バケットにあるgzipファイルを加工して再度gzipで出力
大したことない作業のようですが、若干つまりどころがあったので残しておきます。
## やりたいこと
とあるS3バケットにあるgzipファイル(中身はjson)が生成されるたびに一部加工して、別のバケットに再圧縮して出力したい。
図を書くほどのものでもないんですが、こんな構成になります。
## どうやるか
Source BucketからSQSに通知してLambdaを呼び出すところは一般的な設定なので割愛します。
gzipを取り扱えるnpmパッケージは有名どころだと[node-zip](https://www.npmjs.com/package/node-gzip)などがありますが、zlibだけで出来ましたので今回のようなシンプルなケースだと外部パッケージは不要でした。
解凍・加工・再圧縮を行うLambdaは下記のようにな
40 代おっさんLambdaを使ってみる
## 本記事ついて
本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。## lambdaを使う
lambdaの作成画面に行ってください。
作成を押してください

左から
・一からの作成
・設計図の使用
あらかじめ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