- 1. GoogleAPIを実行してデータを取得するAPIをAWSのLambdaとAPI Gatewayでつくる
- 2. Lambda (golang)でOpenSearchのドメインを定期的に名前解決し、ALBのターゲットを更新(プライベートサブネットのみ)
- 3. Lambda Authorizer 概要 メモ
- 4. LambdaでFastAPI + NuxtJSなアプリ環境を構築してみる
- 5. AWS LambdaとAPI Gateway・簡単で早いAPIデプロイ
- 6. [AWS SAM] 1つのtemplate.ymlから複数環境へのデプロイ
- 7. AWS SNSでeメールを送信する
- 8. PyCharmのPYTHONPATHが上書きされてしまう
- 9. DynamoDB StreamsのイベントをフィルタリングしてLambdaを実行する(おまけ付き)
- 10. Lambda Layersを使って処理をまとめてみた
- 11. AWS Chalice で AWS Data Wrangler を利用する
- 12. APIgatewayのプロキシ統合と非プロキシ統合についてわかってなかった
- 13. Python リスト内包表記とmap,lambda攻略(基礎)
- 14. Challiceを使用し、Lambdaのコードを管理 ②
- 15. 【AWS】LambdaでIAMロールを付与していないとこんなエラーが出る件
- 16. Lambdaレイヤーを作成・アップロードする
- 17. AWSサーバーレス仕組みでメールの自動送信システムの構築
- 18. Challiceを使用し、Lambdaのコードを管理 ①
- 19. 標準ライブラリurllib request と 外部モジュールrequests をLambdaのコードでそれぞれまとめた
- 20. 【ServerlessFramework】serverless.ymlで利用できる変数のまとめ
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
# 前提条件
nodejsとpython3.8とdockerをインストールしておいてください。# ServerlessFrameworkインストール & プロジェクト作成
ServerlessFrameworkをグローバルにインストールして、プロジェクトを新規作成します。“`bash
# ServerlessFrameworkをグローバルにインストール
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
【AWS】LambdaでIAMロールを付与していないとこんなエラーが出る件
## 経緯
EventBridgeをキックしてLambdaでEC2を停止するスケジューリングを立てようとしたところ、Lambda実行で権限のないエラーが発生したので、調査した結果を記事にしてみようと思った。## 構成
![stop_ec2_at_lambda.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478546/cc627c27-6fc6-b0c0-8084-13c3e6ea35cf.jpeg)## Lambdaのコード
言語は「Python3.9」です。“`
import boto3region = ‘ap-northeast-1’
instances = [‘i-0cfa865823946e45e’]
def lambda_handler(event, context):
ec2 = boto3.client(‘ec2’, region_name=region)
ec2.stop_instances(InstanceIds=instances)
“`
Lambdaレイヤーを作成・アップロードする
# はじめに
機械学習APIを作りたいとき、なるべくサーバの保守をしないで済むようにしたい場合、あまり高機能なものをやるわけではなければAWSのLambdaでサーバレスなシステムを作ることによって安価・迅速に実現したくなることがあると思います。
その場合、詰まるところがいくつかあったのでまとめてみました。
すぐにLambdaにLayerをアップロードしたいという方はGithubにコードをあげておいたのでこちらをご確認ください。
https://github.com/mynkit/upload-lambda-layer
# Lambda-Layers
Lambdaは機械学習関連のパッケージはおろか、numpyやpandasも標準でインストールされていません。そのため、必要なライブラリのコードを[Lambda-Layers](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer)にアップロードする必要があります。
AWSサーバーレス仕組みでメールの自動送信システムの構築
こんにちは、王と申します。
うちの会社は改善の取り組みを実施しており、ヒヤリハットの事例を皆さんに入力頂くように
自動的にメールで案内を出すシステムを構築することを検討しています。社員名簿をもらい、毎月、月と氏名コードの下1桁が一致する方を対象にメールを発信する
という要件だそうです。
AWSのサーバーレスのクエリサービスを利用することで、オンプレミス環境でDBサーバーを立てるより、
手間を省くと思うのでメールの自動送信システムを構築することにしました。私の設計した構成図は以下の通りです。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600067/046df616-05e3-c59d-bab8-491c49404aee.png)
1)「社員名簿.xlsx」をCSVファイルに変換し、S3 Bucketへアップロードする
2)Athenaで、DDLを作成・実行し、社員名簿テーブルを作成する
3)Athena APIを呼び出し、通知するメールアドレスを抽出するLambda関数を作
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