- 1. AWS の Annotations Framework ってなんだ?
- 2. AWS Lambda /tmp領域が10GBまで拡張できるようになったのでディスク読書速度を測定してみた。
- 3. 【Ruby】Googleカレンダーに服薬記録をつけるAlexaスキル作ってみた
- 4. AWS LambdaによるBolt for Pythonの話
- 5. Cost Explorer API でアカウントおよびサービスプロバイダ毎に請求額を取得する
- 6. make(旧integromat)を使ってLambdaを実行する〜EC2の起動・停止篇
- 7. GoogleAPIを実行してデータを取得するAPIをAWSのLambdaとAPI Gatewayでつくる
- 8. Lambda (golang)でOpenSearchのドメインを定期的に名前解決し、ALBのターゲットを更新(プライベートサブネットのみ)
- 9. Lambda Authorizer 概要 メモ
- 10. LambdaでFastAPI + NuxtJSなアプリ環境を構築してみる
- 11. AWS LambdaとAPI Gateway・簡単で早いAPIデプロイ
- 12. [AWS SAM] 1つのtemplate.ymlから複数環境へのデプロイ
- 13. AWS SNSでeメールを送信する
- 14. PyCharmのPYTHONPATHが上書きされてしまう
- 15. DynamoDB StreamsのイベントをフィルタリングしてLambdaを実行する(おまけ付き)
- 16. Lambda Layersを使って処理をまとめてみた
- 17. AWS Chalice で AWS Data Wrangler を利用する
- 18. APIgatewayのプロキシ統合と非プロキシ統合についてわかってなかった
- 19. Python リスト内包表記とmap,lambda攻略(基礎)
- 20. Challiceを使用し、Lambdaのコードを管理 ②
AWS の Annotations Framework ってなんだ?
# はじめに
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の実行環境とローカルの開発環境を差を吸収する部分でちょっと工夫が必要。
あまりスッキリした解決方法ではないのも悩ましい。
DynamoDB StreamsのイベントをフィルタリングしてLambdaを実行する(おまけ付き)
# はじめに
Lambdaでは、DynamoDB Streamsでデータの変更を検知して実行することができます。以前は、変更のたびに毎回Lambdaが実行され、Lambdaのコード内で追加、更新、削除を判断して処理を行う必要がありました。この方法では、毎回Lambdaが実行されるため、その分、費用がかかる状態でした。
それが2021年11月のアップデートでLambda実行前に処理を実行するかどうかフィルタリングすることができるようになり、コードの簡略化や不要な実行がなくなり費用も低減できます。
今回は、実際にフィルタリングを設定し、実行してみます。# 事前準備
トリガーとなるDynamoDBのテーブルを作成し、ストリームを有効化しておきます。その後、ストリームARNをコピーしておきます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129814/8da1e5c4-7959-3a56-75b4-defebfb66c2a.png)
![image.png](https://
Lambda Layersを使って処理をまとめてみた
## 背景
アカウントAの複数のLambdaから別のアカウントのEC2の情報を取得する実装を行っていて、Lambdaの中がほぼ同じ処理なのでLambda Layersを使ってmodule化してみます
![スクリーンショット 2022-03-22 13.29.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/6dd8867f-882c-3f10-3d3d-0310dcb6e3df.png)## 今回話すこと
– Lambda Layersの概要
– Lambda Layersの使い方## 今回話さないこと
– クロスアカウントロール周り
– Lambdaのコードの解説
– Lambda関数の作成方法## Lambda Layersの概要
公式には下記のような説明があります
>Lambda レイヤーは、追加のコードやデータを含めることができる .zip ファイルアーカイブです。簡潔に言うと1つの関数を定義してそれを複数のLambda関数で使うことができるということです。!
AWS Chalice で AWS Data Wrangler を利用する
# はじめに
AWS 上のデータを Pandas[^pandas] で処理したいときには、各種 AWS サービス(RDS, DynamoDB, Athena, S3 など)からのデータの load/unload を簡単化してくれる Python モジュール AWS Data Wrangler[^awswrangler] が超便利です。しかも、AWS 自体が開発してオープンソース公開しているものなので、ある程度安心して使えます。
なんですが、この AWS Data Wrangler を Lambda で利用する際には、デプロイパッケージのサイズに適用されるクォータ(未圧縮で 250MB、zip 圧縮済みで 50MB)が問題になります。具体的には、AWS Data Wrangler を普通に pip でインストールすると、それだけでパッケージサイズが 250MB を超えてしまいデプロイすることができません。
実はこの問題、[AWS Data Wrangler のドキュメント](https://aws-data-wrangler.readthedocs.io/en/2.14.0/instal
APIgatewayのプロキシ統合と非プロキシ統合についてわかってなかった
・勘違いポイント
プロキシ統合、非プロキシ統合、なにもしないの3択だと思ってた
・実際
APIgateway(少なくともRESTAPI)は統合をする必要がある
→統合方法としてプロキシ統合をするかプロキシを使わないか(非プロキシ統合か)を選ぶという考え方だった![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/705ee572-f71a-28b4-7d16-14d7b223c79a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/a60f295f-44f4-5564-6881-26fd0404c6a7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/36713737-1105-c5a1-1456-7e176d243fe9.png)
Python リスト内包表記とmap,lambda攻略(基礎)
# リスト内包表記はよく見かけるので、仕組みを理解しよう(ついでにmapやlambdaも)
## 目次
01. [リスト内包表記](#listin)
02. [リスト内包表記_if文](#listin_if)
03. [lambdaやmap](#lambda)—
### 今回使用するテストデータは以下とします“`python
TestList = [1,2,3,4,5]
“`リスト内の要素に対して演算(2倍)をします
“`python
processed_list = [num*2 for num in TestList]
“`この結果は以下になります
“`
[2,4,6,8,10]
“`—
あえて、言葉で書くならこんな感じでしょうか。
![スクリーンショット 2022-03-21 21.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/f0a169fb-903
Challiceを使用し、Lambdaのコードを管理 ②
# はじめに
LambdaをGithubでコード管理するにあたり、chaliceを採用したため、chaliceについてまとめます。
前回の続きになります。https://qiita.com/holdout0521/items/e6c8b12dab5728d36684
# config.jsonの設定
config.jsonは、以下の2つがわかりやすいです。https://aws.github.io/chalice/topics/configfile.html
https://www.nooozui.com/entry/2019/10/31/223506
## VPC内でLambdaをデプロイ
VPC内でLambdaを使用する方法を説明します。`subnet_ids`と`security_group_ids`の2つを設定するだけです。
`subnet_ids`:VPCに配置してあるサブネットのうちどのサブネットを使用するか指定する。
`security_group_ids`:lambdaに設定するセキュリティーグループを指定する“`diff_json:confi