- 1. around_actionで引数ありのメソッドをlambdaで指定する
- 2. LocalStackを使ってローカル環境でS3を立ち上げ、Lambdaでファイルをアップロードしてみた
- 3. 大量にあるLambda Functionsのトリガーとの紐付き一覧を出力する
- 4. AWS LambdaにJava11のプログラムをデプロイし、パラメータストアから値を取得するメモ
- 5. Lambda が保留中のままタイムアウトするエラーの原因
- 6. API Gateway + Lambda でリダイレクトする方法(Go言語)
- 7. 日経平均のチャート画像を毎日Twitter投稿するLambda関数(Rust)を作る
- 8. 【AWS Lambda】Slackに通知を送信する
- 9. AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発
- 10. AWS SAMでLambdaに設定したS3イベントトリガがコンソールに表示されない問題の対応
- 11. React+AmplifyにContent-Security-Policy-Report-Onlyを設定しCloudWatchにログをためる話
- 12. 作業先のS3バケットがLambdaのトリガーとなっていないかを確認する方法
- 13. [AWS Step Functions] EC2とRDS(Aurora)をグループ単位かつ指定した順番に起動/停止する
- 14. LocalStackを用いたAPI Gateway+Lambda+DynamoDB API作成方法 メモ
- 15. LocalStackを用いたS3オブジェクト登録API(API Gateway+Lambda)作成方法 メモ
- 16. API Gateway POSTメソッド+Lambda 作成の備忘
- 17. AWS Step Functions のステート定義におけるリトライの書き方
- 18. サーバーレスフレームワークでLambdaからLaravelを利用してRDSに接続する(検証手順付き)
- 19. terraformで構成管理しつつaws lambdaをデプロイする
- 20. AWS IoT Coreとlambdaを連携してAWS DynamoDBに環境データを登録する
around_actionで引数ありのメソッドをlambdaで指定する
## 概要
`around_action`に引数を持つメソッドを指定する際に無限に詰まったので同じ状況で困っている人のために残しておく。(最終的に上司に助けていただいて解決した。)
指定方法だけ知りたい人は`解決`までジャンプしてもらえれば書いてある。
## 状況
なぜ詰まったかというと、まずrailsでAction Controllerのフィルターを使用する際に引数を持つメソッドを指定する場合、ブロックを渡す必要がある。下記のようにしないとエラーが出てしまう。
“`rb
class HogeController < ApplicationController # 引数なしの場合 before_action :fuga # 引数ありの場合 before_action -> { fuga(x, y) }
end
“``before_action`と`after_action`を使用する場合は上記の記述で問題ないけど、`around_action`を使用する場合は1つ問題が発生する。
Railsガイドを読むと下記のように記述がある。
>「around系」
LocalStackを使ってローカル環境でS3を立ち上げ、Lambdaでファイルをアップロードしてみた
# この記事について
AWSのサービスをローカルで実行できるLocalStackについて紹介したいと思います。今回、AWS CLIの練習も兼ねてLocalStackを使用し、ローカルでAWS LambdaとS3を立ち上げ、Lambda関数を使用し、S3に日時.txtファイルをアップロードしてみました。
# 記事の対象者
– LocalStackに興味のある方
– AWS・AWS CLIに触れてみたい方# LocalStackとは
開発環境において無料で**AWSのアカウント登録なし**でAWSのサービスを擬似的に使用できるモックフレームワークでpipやdockerを用いて簡単に環境構築が可能。
ローカルにAWS環境を作ってくれて、料金などを気にすることなくテストや動作確認が可能である。https://localstack.cloud/
LocalStackは無料版と有料版がある。[^abe] 有料版は無料版に加え、高度なサービスをサポート。以下にLocalStackのサービスを示す。[^abc](2021年10月時点)
| 無料 | 有料
大量にあるLambda Functionsのトリガーとの紐付き一覧を出力する
Lambdaって便利でついつい量産しちゃいますよね。
負債は負債として、量産してしまったLambda関数を整理する際に、どのトリガーから起動する設定になっているかを出したくなった際のエントリーになります。トリガーを見れば、どのLambda関数がもう不要なのかの当てが付くかなと思い。
## 環境
“`bash
$ sw_vers
ProductName: macOS
ProductVersion: 11.5.2
BuildVersion: 20G95
$ uname -mrsv
Darwin 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:27 PDT 2021; root:xnu-7195.141.2~5/RELEASE_ARM64_T8101 arm64
“`## aws-vaultのセットアップ
本エントリーでは認証情報を直接ローカルに保存する`aws configure`ではなく、`aws-vault`を利用します。“`bash
$ brew install aws-vault
$ aws-vault
AWS LambdaにJava11のプログラムをデプロイし、パラメータストアから値を取得するメモ
### パラメータストアに適当なキーを保存
– キー名:testkey
– 値:test-value![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530708/eaad3e6f-0cfe-83bd-d7f5-66f767ed4d28.png)
### ラムダ上に関数をデプロイして実行
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530708/0af6dfb2-917e-5c14-836c-92e720fb198a.png)### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530708/e6835c85-5c1d-bc31-fc9e-e05e8a704040.png)### ソース作成からデプロイまで
– sam initでテンプレートを作成(AWS Quick Start
Lambda が保留中のままタイムアウトするエラーの原因
# はじめに
Lamba のエラー通知を受信したので X-Ray で確認すると、Lambda の状態が「保留中」となったまま実行時間を過ぎてタイムアウトしまいエラーになっていることがありました。その原因がわかったため、ここに記録しておきます。
# 原因
このエラーは、[VPC](https://aws.amazon.com/jp/vpc/) 内のプライベートサブネットに接続する必要がある Lambda に起こるようです。
Lambda が VPC 内のリソースに接続するとき、サブネットごとにネットワークインターフェイス([ENI](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-eni.html))が作成されます。これによって Lambda は各 VPC 内のリソースに通信できるようになります。
この Lambda が長期間アクティブでない場合、Lambda はネットワークインターフェイスを回収し、アイドル状態になります。アイドル状態の Lambda を再度アクティブにするには、その Lambda
API Gateway + Lambda でリダイレクトする方法(Go言語)
# 目的
API Gateway + Lambda でリダイレクトさせたいときの Go 言語のコードを紹介します。# リダイレクトさせる Go 言語のコード
APIGatewayProxyResponse は、リクエストに対して API Gateway によって返されるレスポンスを構成します。よって、APIGatewayProxyResponse にリダイレクト(3xx)のステータスコードとリダイレクト先 URL をセットしてあげれば、クライアントにリダイレクトさせることが可能です。
“`golang
package mainimport (
“net/http”“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
)func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxy
日経平均のチャート画像を毎日Twitter投稿するLambda関数(Rust)を作る
##はじめに
スクレイピングした日経平均のチャート画像を毎日Twitter投稿するLambda関数をRustで作成しました。##成果物
– GitHub:https://github.com/c3drive/my_stock_data
– 成果物:https://twitter.com/idx_info##環境など
– 実行環境:AWS Lambda (カスタムランタイム) + Amazon EventBridge + AWS S3
– 開発言語:Rust
– 開発環境:macOS + VSCode + AWS SAM + (Docker)
– 株価チャート取得先:[StockCharts.com](https://stockcharts.com/)
– Twitter投稿:[TwitterAPI](https://developer.twitter.com/)
– 構成図作成: Python + [diagrams](https://diagrams.mingrammer.com/) + graphviz##概要
やっていることは以下です。– Amazon Eve
【AWS Lambda】Slackに通知を送信する
今回はCloudFormationでLambdaを触ってみるということで、Slackに通知を送信するLambda関数を構築していきたいと思います。
調べてみたところ、Lambdaを構築する場合はCloudFormationの `AWS::Serverless` というマクロ機能を利用するみたいです。
[AWS::Serverless変換](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html)マクロを利用すると「AWS SAM 構文」なるものでLambdaを定義できるようになり、 `aws cloudformation package` コマンド実行時に、通常のCloudFormationテンプレートに展開されます。
マクロ機能を利用するには、テンプレート内で下記のように宣言します。
“`template.yml
Transform: AWS::Serverless-2016-10-31
“`# SlackのWebhook U
AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発
# 目的
AWS SAM を使って Go 言語でサーバーレスアプリケーションを開発するための、環境構築の手順をまとめます。個人的な備忘録を兼ねているため、必須ではない細かな設定なども記載しています。Lambda でサーバーレスアプリケーションの開発をはじめようと思っている方の参考になれば幸いです。
# 当記事に含まれる内容
当記事に含まれる内容は下記の通りです。ソフトウェアのインストールなどは既にわかりやすい記事があるので、そのリンクを貼っています。
– Hello World アプリケーションについて
– WSL2 の設定
– Docker の設定
– AWS CLI の設定
– Session Manager プラグインの設定
– SAM と Go のインストール
– Ubuntu の環境変数設定の自動化
– VSCode の設定
– SAM プロジェクトの新規作成
– SAM プロジェクトのデプロイ
– AWS コンソールから各サービスを確認# Hello World アプリケーションについて
Hello World アプリケーションは、SAM プロジェクトを新規作
AWS SAMでLambdaに設定したS3イベントトリガがコンソールに表示されない問題の対応
AWS SAMでLambdaにS3イベントトリガを設定したところ
動作は想定どおり行われるが、AWSコンソールのイベントトリガには
何も表示されない事象が発生しました。これは既知の問題のようで
https://github.com/aws/serverless-application-model/issues/300
で議論されていました。上記にも記載されていますが対応方法のサンプルです。
最初の定義。以下ではAWSコンソールにイベントトリガが表示されない。
“`yaml
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: MyFunction/
Runtime: python3.8
Handler: app.handler
FunctionName: !Sub
– “${prefix}MyFunction”
– { prefix: !FindInMap [“EnvMap”, !Ref Env,
React+AmplifyにContent-Security-Policy-Report-Onlyを設定しCloudWatchにログをためる話
##背景
業務で開発しているReactアプリの中で、XSSの対策としてContent-Security-Policyの設定を行うか議論があり、
そのための判断基準を設けるために一旦、Content-Security-Policy-Report-Onlyを設定してレポートを収集して分析を行う流れになった。##Content-Security-Policy(CSP)とは
[簡易な認識] : XSS対策の一環で、HTTPのヘッダーの中にそのサイトで使用するJSのスクリプトやコンテンツ、画像やフォントなどを読み込む場所をホワイトリストとして設定することで
それ以外の場所から読み込まれるものはブロックするもの。詳しい内容はいろんなサイトが紹介している
https://developer.mozilla.org/ja/docs/Web/HTTP/CSP
##Content-Security-Policy-Report-Onlyとは
Content-Security-Policyを設定するとブロックされたものは表示できなくなり、変に設定するとアプリとして壊れるかもしれない。
そこでCSP
作業先のS3バケットがLambdaのトリガーとなっていないかを確認する方法
#背景
S3へのオブジェクト作成をトリガーを利用してLambdaを活用することは多いと思います。
そうすると、S3にファイルを作成する処理を書くときに「あれ、このバケットのこの場所、トリガーになってないよね、、、?」
と思うことが出てきました。
さっと確認できると安心感も増すものです。#解決方法
API レベル (s3api) コマンドにこれを満たす get-bucket-notification-configuration というものがあります。
参考:[API レベル (s3 api) コマンド](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-s3-apicommands.html)
#具体的な方法
せっかくなので
・S3の条件(Prefixとか)
・S3のパス
・Lambda関数のARNが1行で一覧で出力できるようなjqを書いてみました(あと一歩スマートな書き方があるかもです)
“`
aws s3api get-bucket-notification-config
[AWS Step Functions] EC2とRDS(Aurora)をグループ単位かつ指定した順番に起動/停止する
## はじめに
EC2とRDS(Aurora)を、グループ単位かつ指定した順番に起動/停止する仕組みを AWS Step FunctionsとLambda(Python 3.9)で作りました。
## もう少し詳しく
作成した StepFunctions ステートマシン の詳細を説明します。
以下のように複数のEC2,RDS(Aurora)がある場合に、タグを使いをグループ化と起動順序を設定します。
タグに必要な情報を設定し、起動したいグループと命令(起動命令 or 停止命令)を指定すると、順番に従いリソースを起動or 停止します。具体的な設定例も含め説明します。以下図のような構成でEC2,RDS(Aurora)を作成します。
※図にはリソースごとのタグ情報を記載しています各リソースにはこのようにタグを設定します。
LocalStackを用いたAPI Gateway+Lambda+DynamoDB API作成方法 メモ
* LocalStackを用いて、DynamoDBにデータ登録を行うAPIをAPI Gateway + Lambdaで作成する方法についてメモする。
## LocalStack 準備
* [こちら](https://qiita.com/KWS_0901/items/f9579d9c360cf42dc97d)の手順でDocker LocalStack環境を準備しておく。
## Dynamo DB 準備
* テーブル(`sample-table`)作成
“`shell
aws dynamodb create-table –table-name sample-table –attribute-definitions AttributeName=Data,AttributeType=S –key-schema AttributeName=Data,KeyType=HASH –provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 –endpoint-url=http://localhost:4
LocalStackを用いたS3オブジェクト登録API(API Gateway+Lambda)作成方法 メモ
* LocalStackを用いて、S3バケットにオブジェクト登録を行うAPIをAPI Gateway + Lambdaで作成する方法についてメモする。
## LocalStack及びS3 準備
* [こちら](https://qiita.com/KWS_0901/items/f9579d9c360cf42dc97d)の手順でLocalStackとオブジェクト登録先のバケット(`sample-bucket`)を準備しておく。
## API Gateway 準備
* REST API を作成する
* リソースID(`id`)を控える
“`shell
aws apigateway create-rest-api –name ‘LambdaS3TestAPI’ –endpoint-url=http://localhost:4567 –region us-east-1 –profile localstack
{
“id”: “A-Z2699261A-Z3”,
“name”: “‘LambdaS3TestAPI'”
API Gateway POSTメソッド+Lambda 作成の備忘
##構成
[Client] ⇒(リクエスト ※1)⇒ APIGateway ⇒ Lambda
※1
IAM認証・・・不正リクエスト対策
※Client PCがウイルスにかかり、APIにリクエストが動く場合など
IP制限 ・・・不正アクセス対策##POSTのAPI リクエストのcontent-type
世の中のAPIを見ると、リクエストのcontent-typeが、
application/jsonのものと、application/x-www-form-urlencodedのものがあります。
両方に対応しているAPIもありました。
application/jsonの数が増えつつあるというところでしょうか。“`x-www-form-urlencoded.
flg=1&id=2
“`“`application/json.
{“flg”:1,”id”:2}
“`##API Gatewayの設定について
####・リソースポリシーで、IP制限を設定
https://aws.amazon.com/jp/premiumsupport/knowledge
AWS Step Functions のステート定義におけるリトライの書き方
## 指数バックオフアルゴリズム
SFN(Step Functions) は指数バックオフによるリトライが行われます。
(エクスポネンシャルバックオフ)https://docs.aws.amazon.com/ja_jp/general/latest/gr/api-retries.html
SFNにおける式はこんな感じ
`リトライ時間 = IntervalSeconds * BackoffRate ^ (Attempts-1)`https://d1.awsstatic.com/webinars/jp/pdf/services/20190522_AWS-Blackbelt_StepFunctions.pdf#page=36
簡単に言うと、回数を追うごとに待ち時間が長くなっていくようなリトライアルゴリズムです。
いきなりこんな式を見てもピンと来ないので、エラー時に成功するまでn回リトライするようなケースを考えてみます。
### よくあるリトライ
* `リトライ間隔 = 2秒` (固定)
* `リトライ回数 = n回`サーバーレスフレームワークでLambdaからLaravelを利用してRDSに接続する(検証手順付き)
以下に移行しました。
https://zenn.dev/mgmgmogumi/books/0214f64645951a
terraformで構成管理しつつaws lambdaをデプロイする
DMMデータインフラ部に所属している[yuua](https://qiita.com/yuua0216)です
terraformで作成しlambdaをデプロイする際にterraformにlambda関数を含めるとchangeがでたり、扱いづらく
悩むときがあるのでその際の手順的な備忘録です今回のlambdaはlambda containerではありません
## 初回の手順
1.terraformで基本的なlambdaの事前の情報を作成する(配置先など)
2.lambda関数をzip化しs3バケットに配置する## 継続的なデプロイの手順
基本的にgithub actionsなどのCI/CDを使います
1.github actionsでlambda function / lambda layerをバケットに配置
2.github actionsでupdate functionの実行## 下準備
lambdaを配置するようのs3 keyなどをterraformで作成します
“`s3.tf
// bucket作成
resource “aws_s3_bucket” “l
AWS IoT Coreとlambdaを連携してAWS DynamoDBに環境データを登録する
# はじめに
> AWS IoT CoreとAWS Lambdaを連携してAWS DynamoDBに環境データを保存してみようと思います。# 開発構成
– イメージは、こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533263/1bed232c-edc8-6df3-b507-a262ced95f79.png)
# 検証環境
– RaspberryPi3B+
– 温湿度センサー(DHT22)
– AWS IoT Core
– AWS Lambda
– AWS DynamoDB# 前提
– RaspberryPiから送られてくるデータをAWS IoT Coreで受信出来ていること
# DynamoDB作成
1) マネージメントコンソールにログインし**DynamoDBサービス**を開きます
[マネージメントコンソール](https://aws.amazon.com/jp/free/?trk=ps_a134p000003yhoPAAQ&trkCam