Lambdaイベントの処理方法 IT by NHM - 2021-03-102021-03-10 とりあえずjsonでパースしとけば良い。↓はS3 putイベント t_json = JSON.parse(event.to_json) records = t_json["Records"] records.each do |record| key = record["s3"]["object"] end Proxy利用したapi gatewayのbody取得は↓の感じ。 if t_json['isBase64Encoded'] body = JSON.parse(Base64.decode64(t_json['body'])) else body = JSON.parse(t_json['body']) end なお、テストイベントはフォーマットの確認もできるのでまじ便利。
Lambdaのイベントと環境ログ IT by NHM - 2021-03-102021-03-10 Ruby の AWS Lambda 関数ログ作成https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ruby-logging.html サンプルはto_aで出力してるが、私は↓の方が好き。 logger.debug('## ENVIRONMENT VARIABLES') ENV.each do |variable| logger.debug("#{variable[0]} = #{variable[1]}") end logger.debug('## EVENT') event.each do |key,value| logger.debug("#{key} = #{value}") end
Lambdaの環境変数をKMSで暗号化しておく IT by NHM - 2021-03-102021-03-10 1.関数を作成する 2.関数に紐づけられたロールを確認する(「設定」ー「アクセス権限」で確認可能。リンククリックするとIAMに飛ぶ)。 3.KMSで鍵を作成する(カスタマー管理型のキー)。 4.ロールに割り当てる。 5.作成した鍵のエイリアスとARNを覚えておく。 6.Lambdaに戻って関数の環境変数を設定し、「暗号化」を押す 7.実行ロールポリシーをコピーして別ウインドウを開いて、IAMに割り当てる。今回は復号なのでDecryptだけで良い。 8.lambdaを開いているウインドウに戻って「暗号化」を押す。Valueが暗号化された。 9.復号化する(シークレットスニペットの復号をコピーして利用する) require 'aws-sdk-kms' require 'base64' ENCRYPTED = ENV['test'] require 'json' require 'aws-sdk-kms' require 'base64' ENCRYPTED = ENV['test'] # Decrypt code should run once and variables stored outside of the function # handler so that these are decrypted once per container DECRYPTED = Aws::KMS::Client.new .decrypt({ ciphertext_blob: Base64.decode64(ENCRYPTED), encryption_context: {'LambdaFunctionName' => ENV['AWS_LAMBDA_FUNCTION_NAME']}, }) .plaintext def lambda_handler(event:, context:) # TODO implement { statusCode: 200, body: JSON.generate("Hello from Lambda! #{DECRYPTED}") } end 10.デプロイしてテスト呼び出し。成功 Appendix 今回作成したものの削除順序 1.IAMからKMSの内容を削除する。 2.Lambda関数を削除する 3.KMSを削除する(削除待機日数7~30を指定) 4.IAMを削除する。 5.Cloudwatchのロググループを削除する。
Lambda無料枠の計算 IT by NHM - 2021-03-092021-03-10 AWS Lambda 料金https://aws.amazon.com/jp/lambda/pricing/ なんちゃって計算式シート 1.計算方法はAWSのLAMBDA料金表を開いてリージョンの料金をシートに反映。 2.メモリサイズを設定 3.実際に稼働させてみてメトリクスより実行時間を取得 これでおおよその金額が計算できる。
LambdaとAPI Gatewayでサーバレスを構築する② IT by NHM - 2021-02-252021-02-25 カスタムドメインを設定しよう。 ステージのURLも良いけれどステージ名が入っているからカッコ悪い カスタムドメインの作成。↓のAPI Gatewayドメイン名をCNAMEに登録。 ステージングをマッピングするとステージ名なしのURLでアクセスできる。
LambdaとAPI Gatewayでサーバレスを構築する① Uncategorized by NHM - 2021-02-252021-02-25 1ソースで環境変数だけを変更することのより開発・検証・本番の構築が可能か試す。と考えたのだが環境変数設定ミスすることを考えると関数を分けた方がいいね。 構築する前に考慮しておくこと。 エイリアス レイヤー 環境変数 AWS Lambda 料金https://aws.amazon.com/jp/lambda/pricing/ Amazon API Gateway の料金https://aws.amazon.com/jp/api-gateway/pricing/ レイヤーは/opt配下に配置される。 AWS Lambda レイヤーhttps://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html 仮に↓のようなzipをレイヤー登録しておいて Lambda関数に追加したとしよう。 その場合のパスは /opt/bin/commandになる。 command.zip ┣ bin ┗ command AWS Lambda 環境変数の使用https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html
SAMでlambdaアプリケーションを作成する① IT by NHM - 2021-02-162021-02-16 チュートリアル: Hello World アプリケーションのデプロイhttps://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html 上記を実行した際のログから確認するに下記に関連する権限が必要 API Gateway: HTTPアクセスCloud Formation: 関数デプロイS3:デプロイ用IAM:LambdaロールLambda:関数実行 sam deploy --guide実行した時のログから考えるにあながち間違っていないはず。 CloudFormation stack changeset ------------------------------------------------------------------------------------------------------------- Operation LogicalResourceId ResourceType Replacement ------------------------------------------------------------------------------------------------------------- + Add HelloWorldFunctionHelloWo AWS::Lambda::Permission N/A
Lambdaで設定しておきたいポリシー IT by NHM - 2021-02-152021-02-15 cloudwatchlogとlambda関数作成/実行権限 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:InvokeFunction", "logs:CreateLogStream",