Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Lambda Update 2021

kensh
January 26, 2022

AWS Lambda Update 2021

re:Invent 2021を含む、2021年に登場したupdateとそのまとめ

kensh

January 26, 2022
Tweet

More Decks by kensh

Other Decks in Technology

Transcript

  1. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp AWS Lambda Update 2021 S e r v e r l e s s M e e t u p J a p a n V i r t u a l # 2 0 - A W S r e : C a p
  2. #serverlessjp 当セッションの概要 • AWS re:Invent 2021 を含む、2021 年の AWS Lambda

    に関連する 主要アップデートを デモを交えてご紹介します。 • AWS Lambda の基本的な動作の解説は当セッションでは⾏いませんの で、AWS Black Belt Online Seminar をご視聴ください。 AWS Black Belt Online Seminar https://aws.amazon.com/jp/aws-jp-introduction/
  3. #serverlessjp The Shared Responsibility Model for AWS Lambda https://aws.amazon.com/jp/compliance/shared-responsibility-model/ https://docs.aws.amazon.com/whitepapers/latest/security-overview-aws-lambda/the-shared-

    responsibility-model.html リージョン アベイラビリティ ゾーン EC2 ハードウェア ハードウェア ソフトウェア コン ピュート 実⾏環境 ⾔語 ネット ワーク 認証・認可 リソース設定 利⽤者の関数 コード・ライブラリ お客様 AWS AWS Lambda • お客様 コードの実装やアップロード、データの管理 (暗号化オプションを含む)、IAM での適切 な権限の適⽤について責任を持つ • AWS ハードウェアから、ソフトウェア(プラット フォーム)を管理・運⽤に責任を持つ
  4. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp 速く 低コスト
  5. #serverlessjp Graviton2 搭載の AWS Lambda 関数 x86ベースの Lambda と⽐較し 最⼤

    34% のコストパフォーマンス向上 最⼤ 34% のコスト パフォーマンス向上 20% コスト削減 vs 同サイズの Lambda 関数 ⾼パフォーマンス vs x86 対応リージョン US East (N. Virginia) US East (Ohio) US West (Oregon) Europe (Frankfurt) Europe (Ireland) EU (London) Asia Pacific (Mumbai) Asia Pacific (Singapore) Asia Pacific (Sydney) Asia Pacific (Tokyo)
  6. #serverlessjp Graviton2 の利⽤⽅法 AWS CLI / AWS SAM / AWS

    CDK / AWS マネージメントコンソールで指定可能 ・x86_64(デフォルト) ・arm64 (Graviton2 )
  7. #serverlessjp Graviton2 対応の Lambda ランタイム • Node.js 12, Node.js 14

    • Python 3.8, Python 3.9 • Java 8 (AL2), Java 11 • .NET Core 3. • Ruby 2.7 • Custom Runtime on Amazon Linux 2 • Go は、Amazon Linux 2 をベースにイメージ構成することで利⽤可能 https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html
  8. #serverlessjp Graviton2 搭載の AWS Lambda への移⾏ 1. 依存関係の整理 1. Lambda

    関数内で利⽤するライブラリ/Lambda Layer / Lambda Extensions 2. 利⽤するツールの確認(例︓CI/CD パイプラインやコンパイラ) 2. 依存するライブラリ/ツールが arm64 に対応しているか確認 1. 既存の arm64 バイナリや、アーキテクチャに依存しないソースコード (Open Source Software) を探す 2. ベンダーまたはプロバイダに arm64 サポートに向けたロードマップを尋ねる 3. 調査やエスカレーションを⽀援できる AWS アカウントチームに連絡 3. ビルド・デプロイ・テスト 4. パフォーマンステスト 1. Lambda 関数の alias routing configuration を活⽤した x86 と arm64 の関数を⽐較しテスト (重みづけをしたトラフィックルーティングの活⽤で容易に⽐較が実現可能) 5. AWS Graviton2 getting started guide on Github 1. https://github.com/aws/aws-graviton-getting-started https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html
  9. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp ⼤量のデータ
  10. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp Graviton2 /tmp 10GB (pre-announcement) Memory 10GB/ 6 vCPU
  11. #serverlessjp AWS Lambda がサポートするパッケージ⽅式 2020 年の AWS re:Invent 以降、コンテナイメージが新たにサポート #

    Zip コンテナ 1 ストレージ場所 S3 ECR 2 ストレージサイズ上限 (リージョン単位) 75GB (上限緩和可能) ECR のクォータに準拠 3 アーティファクトサイズ上限 250 MB (展開後) 10 GB 4 Layer 対応 あり なし 5 コード署名 あり なし 常時起動する必要のないコンテナアプリを起動する場合、 Lambdaを利⽤することでコスト効率が良い場合も ポイント https://docs.aws.amazon.com/lambda/latest/dg/configuration-images.html
  12. #serverlessjp ECRのクロスアカウントサポート AWS Lambda 関数のアカウントとは異なる AWS アカウントの ECR に保存された コンテナイメージが利⽤可能に。1か所で管理が可能になり

    Immutable Image の活⽤が容易化 Development Account AWS Lambda Amazon ECR Image Production Account AWS Lambda Amazon ECR Image Development Account AWS Lambda Amazon ECR Image Production Account https://docs.aws.amazon.com/lambda/latest/dg/configuration-images.html#configuration-images- permissions AWS Lambda
  13. #serverlessjp AWS Lambda 関連の強化されたモニタリング Amazon CloudWatch Lambda Insights が Graviton

    2対応(GA) Amazon CloudWatch Lambda Insights が コンテナイメージに対応(GA)
  14. #serverlessjp CloudWatch Lambda Insights • Lambda Function のパフォーマンス監視や トラブルシュート、最適化を可能にする機能 •

    Function に関するメトリクスを⾃動的に ダッシュボード化 • メモリリークや新バージョンのデプロイによる性能変化を可視化 • CloudWatch Logs Insights や Service Lens と 連携することでさらに問題の原因究明が容易になる Lambda function Amazon CloudWatch
  15. #serverlessjp AWS Lambda 関連の強化されたモニタリング Amazon CloudWatch Lambda Insights が Graviton

    2対応(GA) AWS Trusted Advisor による助⾔の提供 Amazon CloudWatch Lambda Insights が コンテナイメージに対応(GA)
  16. #serverlessjp AWS Trusted Advisorによる助⾔の提供 AWS Lambdaに関する4つの助⾔が追加。 3.⾮推奨 (または⾮推奨になりそうな) ランタイム の使⽤

    ⾮推奨とされたか、⾮推奨になりそうな関数ラン タイムをチェック。 4.単⼀の AZ での VPC 対応関数 単⼀AZで稼働中のVPC アクセス可能な Lambda 関数をチェック。 ⾼可⽤性を実現するために、VPC 対応の関数を複 数のアベイラビリティーゾーンに接続することを お勧めします。 1.⾼エラー率 過去 7 ⽇間のいずれかの⽇において、エラー率が 1 ⽇で 10% を超える関数をチェック エラーによりリトライが発⽣しコスト増につなが ることも。 2.過剰なタイムアウト 過去 7 ⽇間のいずれかの⽇において、タイムアウ ト率が 1 ⽇で 10% を超える関数をチェック。 エラーによりリトライが発⽣しコスト増につなが ることも。 https://aws.amazon.com/jp/about-aws/whats-new/2021/03/aws-lambda-adds-four-trusted- advisor-checks/
  17. #serverlessjp 2022/1 現在 サポートされているランタイム サポート対象 Arm64(Graviton 2) サポート Node.JS Node.js

    14 Node.js 12 対応 Python Python 3.9 Python 3.8 対応 Python 3.7 Python 3.6 未対応 Ruby Ruby 2.7 対応 Java Java 11 Java 8(Amazon Linux2) 対応 Java 8(Amazon Linux1) 未対応 Go Go 1.x 未対応 .NET Core .NET Core 3.1 対応 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
  18. #serverlessjp AWS Lambda 関連の強化されたモニタリング ・VPC 内リソースにアクセス可能な Lambda 関数が 利⽤する ENI情報がCloudTrailで出⼒が可能に

    ・CloudWatch で異常値検出するメトリクスを 追加可能に ・Amazon MSK*/self-managed Kafka で OffsetLag メトリクスが取得可能に (*Amazon Managed Streaming for Apache Kafka) Amazon CloudWatch Lambda Insights が Graviton 2対応(GA) AWS Trusted Advisor による助⾔の提供 Amazon CloudWatch Lambda Insights が コンテナイメージに対応(GA)
  19. #serverlessjp #serverlessjp Private subnet 1 Private subnet 2 共通点はなんでしょう︖ Amazon

    Aurora Amazon ElastiCache Elastic Load Balancing AWS Fargate Customer Own VPC Availability Zone 1 Availability Zone 2
  20. #serverlessjp Lambda 関数からのVPC 内リソースへのアクセス Client Account Customer Own VPC Private

    subnet 1 Availability Zone 1 Availability Zone 2 Private subnet 2 AWS Cloud Lambda 関数 による VPC 内のリソース(Aurora/ ElastiCache/ Fargate/ EC2 等)へのアクセスは、 ENI(Elastic Network Interface)を Customer VPC に作成して ENI 経由で アクセス Amazon Aurora Amazon Replica Amazon ElastiCache Amazon ElastiCache Elastic Load Balancing Elastic Load Balancing AWS Fargate AWS Fargate AWS Lambda Service VPC Service Account AWS Lambda Execution Environment Lambda function Elastic network interface ※ Elastic network interface ※ VPC 内リソースにアクセス可能なLambda 関数の実⾏記録にENIの情報が追加され、識別性が向上
  21. #serverlessjp Lambda 関数のデータイベント有効化 CloudTrailでは管理イベントとデータイベントがあり、Lambda 関数の Invoke について記録する 場合は、以下のような定義をすることで記録可能に(有料) Trail: Type:

    AWS::CloudTrail::Trail Properties: TrailName: !Sub ${AWS::StackName}-cloudtrail S3BucketName: !Sub ${LogBucket} EnableLogFileValidation: true EventSelectors: - DataResources: - Type: AWS::Lambda::Function Values: - !GetAtt HelloWorldFunction.Arn IncludeManagementEvents: false IncludeGlobalServiceEvents: false IsLogging: true IsMultiRegionTrail: false
  22. #serverlessjp CloudTrailにENI のID情報が出⼒可能に { "eventVersion": "1.08", "eventTime": "2021-12-20T10:07:13Z", "eventSource": "lambda.amazonaws.com",

    "eventName": "Invoke", "awsRegion": "ap-northeast-1", "sourceIPAddress": “1.1.1.1", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36", "requestParameters": { "functionName": "arn:aws:lambda:ap-northeast- 1:123456789012:function:sam-vpc-HelloWorldFunction", "invocationType": "RequestResponse", "logType": "Tail", "contentType": "application/json“ }, "responseElements": null, "additionalEventData": { "customerEniId": "eni-0c91ad65d8e92f254", "functionVersion": "arn:aws:lambda:ap-northeast- 1:123456789012:function:sam-vpc-HelloWorldFunction:$LATEST“ }, "requestID": "a8b05cac-9ce9-4bdd-82a8-071f906de90c", "eventID": "7271b4cc-b471-42cf-ae29-8b013048936e", "readOnly": false, "resources": [ { "accountId": "123456789012", "type": "AWS::Lambda::Function", "ARN": "arn:aws:lambda:ap-northeast- 1:123456789012:function:sam-vpc-HelloWorldFunction“ } ], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "123456789012", "eventCategory": "Data“ }
  23. #serverlessjp AWS Lambda 関連の強化されたモニタリング ・VPC 内リソースにアクセス可能な Lambda 関数が 利⽤する ENI情報がCloudTrailで出⼒が可能に

    ・CloudWatch で異常値検出するメトリクスを 追加可能に ・Amazon MSK*/self-managed Kafka で OffsetLag メトリクスが取得可能に (*Amazon Managed Streaming for Apache Kafka) Amazon CloudWatch Lambda Insights が Graviton 2対応(GA) AWS Trusted Advisor による助⾔の提供 Amazon CloudWatch Lambda Insights が コンテナイメージに対応(GA)
  24. #serverlessjp これらサービスの共通点は何でしょうか Amazon Simple Queue Service (Amazon SQS) Amazon MQ

    Amazon Managed Streaming for Apache Kafka Amazon Kinesis Data Streams Amazon DynamoDB
  25. #serverlessjp これらサービスの共通点は何でしょうか Amazon Simple Queue Service (Amazon SQS) Amazon MQ

    Amazon Managed Streaming for Apache Kafka Amazon Kinesis Data Streams Amazon DynamoDB A.イベントソースマッピングを定義することで Lamda 関数をシームレスに統合可能なサービス https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/in vocation-eventsourcemapping.html
  26. #serverlessjp イベントソースマッピング イベントソースマッピングが利⽤可能なサービスと連携する場合関数のコード内でポーリング処理 を実装する必要がなくLambdaがポーリングを⾏い、「バッチ」を作成後、関数を起動する Amazon Simple Queue Service (Amazon SQS)

    Amazon MQ Amazon Managed Streaming for Apache Kafka Amazon Kinesis Data Streams Amazon DynamoDB AWS Lambda event source mapping Lambda Functions ポーリングを⾏いイベントソースから受け取ったレコード群のこと。 データサイズやレコード件数等の上限に達すると関数が起動される バッチ
  27. #serverlessjp #serverlessjp LambdaとKinesis Data Streamsをデプロイ Stream: Type: AWS::Kinesis::Stream Properties: Name:

    LambdaEventFilteringStream RetentionPeriodHours: 168 ShardCount: 1 Producer Amazon Kinesis Data Streams AWS Lambda Event source mapping Lambda Functions ProducerFunction: Type: AWS::Serverless::Function Properties: CodeUri: KinesisClient/ Handler: app.lambda_handler Runtime: python3.9 Architectures: - x86_64 Environment: Variables: STREAM_NAME: !Ref Stream Policies: - Version: '2012-10-17' Statement: - Effect: Allow Action: kinesis:PutRecord Resource: - !GetAtt Stream.Arn Lambda Functions Function1: Type: AWS::Serverless::Function Properties: CodeUri: KinesisFunction/ Handler: app.lambda_handler Runtime: python3.9 Architectures: - x86_64 Events: KinesisEvent: Type: Kinesis Properties: Stream: !GetAtt Stream.Arn StartingPosition:LATEST Enabled: True BatchSize: 50 MaximumBatchingWindowInSeconds: 10 MaximumRetryAttempts: 5
  28. #serverlessjp Producer Amazon Kinesis Data Streams AWS Lambda Event source

    mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions AWS Fargate Container 複数のアプリが同⼀ Stream を別々に利⽤可能 1つのイベントデータに対して異なる処理(例︓データの蓄積のための処理と分析の処理)を 別々の関数やコンテナアプリで⾏うことが可能
  29. #serverlessjp #serverlessjp 異なる処理をする関数をもう⼀つ追加 Users Amazon Kinesis Data Streams AWS Lambda

    Event source mapping Lambda Functions A Account Lambda Functions AWS Lambda Event source mapping Lambda Functions Function2: Type: AWS::Serverless::Function Properties: CodeUri: KinesisFunction2/ Handler: app.lambda_handler Runtime: python3.9 Architectures: - x86_64 Events: KinesisEvent: Type: Kinesis Properties: Stream: !GetAtt Stream.Arn StartingPosition: LATEST Enabled: True BatchSize: 50 MaximumBatchingWindowInSeconds: 10 MaximumRetryAttempts: 5
  30. #serverlessjp #serverlessjp Producer を起動し、1000件 投⼊します。 Amazon Kinesis Data Streams AWS

    Lambda Event source mapping Lambda Functions return { 'EventTime': datetime.datetime.now().isoformat(), 'ID': "ID-"+str(100000+count), 'Price ': random.randint(1,1000) } Producer Lambda Functions AWS Lambda Event source mapping Lambda Functions
  31. #serverlessjp #serverlessjp Producer を起動し、1000件 投⼊します。 Users Amazon Kinesis Data Streams

    AWS Lambda Event source mapping Lambda Functions A Account Lambda Functions AWS Lambda Event source mapping Lambda Functions def lambda_handler(event, context): for record in event['Records']: payload=base64.b64decode(record["kinesis"]["data"]) print(payload.decode('ascii')) data=json.loads(payload) price = data["Price"] if price > 500 : print(“Expensive" ) return { "statusCode": 200, "body": json.dumps({ "message": "hello Tokyo", }), }
  32. #serverlessjp #serverlessjp Producer を起動し、1000件 投⼊します。 Amazon Kinesis Data Streams AWS

    Lambda Event source mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions def lambda_handler(event, context): for record in event['Records']: payload=base64.b64decode(record["kinesis"]["data"]) print(payload.decode('ascii’)) return { "statusCode": 200, "body": json.dumps({ "message": "hello Las Vegas", }), } Producer Lambda Functions
  33. #serverlessjp Producer Amazon Kinesis Data Streams AWS Lambda Event source

    mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions AWS Fargate Container 複数のアプリが同⼀Streamを別々に利⽤可能 1つのイベントデータに対して異なる処理(例︓データの蓄積のための処理と分析の処理)を 別々の関数やコンテナアプリで⾏うことが可能 Lambda 関数が⼀部のイベントのみを処理したい場合、 関数起動後に判定を⾏う必要があり、その処理実装・処理時間・AWSサービス利⽤料に影響がある 課題
  34. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp 実は、⼀部のデータのみを処理したい
  35. #serverlessjp Event Filtering 定義による対象イベントの選定 Event source mapping に 条件式(EventBridge のルールと同等の記述で定義)を記載すること

    で、マッチしないイベントによる Lambda 関数の起動を回避可能。 Producer Amazon Kinesis Data Streams AWS Lambda Event source mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions AWS Fargate Container スキップ Kinesis Data Streams の読込キャパシティは従来通り消費される。 (Event source mapping 側でデータ受け取り後判定しているため) 注意
  36. #serverlessjp #serverlessjp FilterConditionを追加し対象を選定 Users Amazon Kinesis Data Streams AWS Lambda

    Event source mapping Lambda Functions A Account Lambda Functions AWS Lambda Event source mapping Lambda Functions Events: KinesisEvent: Type: Kinesis Properties: Stream: !GetAtt Stream.Arn StartingPosition: LATEST Enabled: True BatchSize: 50 MaximumBatchingWindowInSeconds: 10 MaximumRetryAttempts: 2 FilterCriteria: Filters: - Pattern: '{"data": {"Price": [ { "numeric": [ "<=", 500 ] } ]}}'
  37. #serverlessjp #serverlessjp FilterConditionを追加し対象を選定 Amazon Kinesis Data Streams AWS Lambda Event

    source mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions FilterCriteria: Filters: - Pattern: '{"data": {"Price": [ { "numeric": [ “>", 500 ] } ]}}' Producer Lambda Functions
  38. #serverlessjp Event Filtering 定義による対象イベントの選定 Event source mapping に 条件式(EventBridge のルールと同等の記述で定義)を記載すること

    で、マッチしないイベントによる関数の起動を回避可能。 Producer AWS Lambda Event source mapping Lambda Functions キューから削除 Amazon Simple Queue Service (Amazon SQS)
  39. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp エラーが発⽣した場合のハンドリングは︖ 〜 イベントソースマッピング編 〜
  40. #serverlessjp イベントソースマッピング利⽤時のエラー処理1 ⼀定回数 or ⼀定時間経過しても処理が成功しないデータは退避 または、破棄を検討 AWS Lambda Evemt source

    mapping Lambda Functions Amazon Kinesis Data Streams Amazon Simple Queue Service (Amazon SQS) Amazon Simple Notification Service (Amazon SNS) Event source mapping ・レコードの最⼤有効期間 ・最⼤再試⾏回数 Amazon Simple Queue Service (Amazon SQS) Lambda Functions AWS Lambda Evemt source mapping Amazon Simple Queue Service (Amazon SQS) Amazon SQS DLQ ・最⼤受信回数
  41. #serverlessjp #serverlessjp エラーが発⽣するようにコードを修正 Amazon Kinesis Data Streams AWS Lambda Event

    source mapping Lambda Functions A Account AWS Lambda Event source mapping Lambda Functions if price > 500 : #print(“Expensive” ) raise ValueError("Expensive!") Producer Lambda Functions
  42. #serverlessjp #serverlessjp エラー発⽣時の退避設定を追加 Amazon Kinesis Data Streams AWS Lambda Event

    source mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions Events: KinesisEvent: Type: Kinesis Properties: Stream: !GetAtt Stream.Arn StartingPosition: LATEST Enabled: True BatchSize: 50 MaximumBatchingWindowInSeconds: 10 MaximumRetryAttempts: 5 DestinationConfig: OnFailure: Destination: !GetAtt KinesisDestinationQueue.Arn KinesisDestinationQueue: Type: AWS::SQS::Queue Producer Lambda Functions
  43. #serverlessjp エラー発⽣時の挙動 • 最⼤再試⾏回数を5回と設定しているため以下の挙動 • 1回⽬︓通常の実⾏ • 2~6回⽬ 再試⾏5回 •

    再試⾏の際には、エラーとなったレコードだけでなく、バッチ内の全レ コードが再試⾏対象となる。 エラーが発⽣したレコードと同じバッチ(処理の単位)を繰り返し処理
  44. #serverlessjp イベントソースマッピング利⽤時のエラー処理2 バッチ内の⼀部のデータでエラーがあった場合は適切に応答することで、 その後の処理がより効率的に AWS Lambda Lambda Functions Amazon Kinesis

    Data Streams チェックポイント機能(エラーレコードのIDを応答) { "batchItemFailures": [ { "itemIdentifier": "<id>" } ] } 「全部リトライ」 ・「⼆分割してリトライ」 「エラーレコードからのリトライ」
  45. #serverlessjp #serverlessjp レコードのシーケンス番号を応答 Amazon Kinesis Data Streams AWS Lambda Event

    source mapping Lambda Functions Lambda Functions AWS Lambda Event source mapping Lambda Functions return { 'batchItemFailures': [ { 'itemIdentifier': record['kinesis']['sequenceNumber'] } ]
  46. #serverlessjp #serverlessjp Event Source Mappingの構成を変更 Amazon Kinesis Data Streams AWS

    Lambda Event source mapping Lambda Functions AWS Lambda Event source mapping Lambda Functions Events: KinesisEvent: Type: Kinesis Properties: Stream: !GetAtt Stream.Arn StartingPosition: LATEST Enabled: True BatchSize: 50 MaximumBatchingWindowInSeconds: 10 MaximumRetryAttempts: 5 FunctionResponseTypes: - ReportBatchItemFailures Lambda Functions
  47. #serverlessjp イベントソースマッピング利⽤時のエラー処理2 バッチ内の⼀部のデータでエラーがあった場合は適切に応答することで、 その後の処理がより効率的に Amazon Simple Queue Service (Amazon SQS)

    { "batchItemFailures": [ { "itemIdentifier": "id2" }, { "itemIdentifier": "id4" } ] } 「全部リトライ」 「正常なレコードのリトライの回避」 AWS Lambda Lambda Functions
  48. #serverlessjp これらサービスの共通点は何でしょうか Amazon Simple Queue Service (Amazon SQS) Amazon MQ

    Amazon Managed Streaming for Apache Kafka Amazon Kinesis Data Streams Amazon DynamoDB
  49. #serverlessjp 最⼤バッチウィンドウのサポートの追加 Amazon MSK, self-hosted Apache Kafka, Amazon MQ for

    ActiveMQ and RabbitMQで最⼤バッ チウィンドウを指定可能になり、関数起動の最⼤待機時間が制御でき処理効率の改善が可能 Amazon Simple Queue Service (Amazon SQS) Amazon MQ Amazon Managed Streaming for Apache Kafka Amazon Kinesis Data Streams Amazon DynamoDB AWS Lambda event source mapping Lambda Functions バッチ内のイベントの件数・最⼤バッチウィンドウ・バッチのサイズの いずれかの条件を満たすと、関数が実⾏される ポイント
  50. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp AWS Lambda関数を初めて作成した時の ランタイムは何ですか︖
  51. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp 私は Node.JS Node.js
  52. #serverlessjp ES modules のサポート • import/export オペレータによるモジュール利⽤可能に • Node(CommonJS modules)ではなく、JavaScript(ES6)標準モジュール

    • webpack などでのパッケージングで、静的解析や、tree shaking(実⾏されないコードを削除 する機能)の恩恵を受けやすい • ES modules は、デフォルトで strict mode 適⽤ • 厳格な構⽂管理の適⽤を簡単に Node.js 14.x ランタイムにおいて、CommonJS modulesでは不便だった部分が解消 https://aws.amazon.com/blogs/compute/using-node-js-es-modules-and-top-level-await-in-aws-lambda/
  53. #serverlessjp ES modules として Lambda関数を扱うには 以下のどちらかの⽅法か、または組み合わせて利⽤可能 // package.json { "name":

    "ec-module-example", "type": "module", "description": "ES module.", "version": "1.0", "main": "index.js", "author": "Dan Fox", "license": "ISC” } // index.mjs import { square } from './lib.mjs’; export async function handler() { let result = square(6); // 36 return result; }; // lib.mjs export function square(x) { return x * x; } commonjs”だが、”module”を .js 拡張⼦が
  54. #serverlessjp ES modules のサポート • import/export オペレータによるモジュール利⽤可能に • Node(CommonJS modules)ではなく、JavaScript(ES6)標準モジュール

    • webpack などでのパッケージングで、静的解析や、tree shaking(実⾏されないコードを削除 する機能)の恩恵を受けやすい • ES modules は、デフォルトで strict mode 適⽤ • 厳格な構⽂管理の適⽤を簡単に Node.js 14.x ランタイムにおいて、CommonJS modulesでは不便だった部分が解消 https://aws.amazon.com/blogs/compute/using-node-js-es-modules-and-top-level-await-in-aws-lambda/ • top-level await をサポートするように改善 • Provisioned Concurrencyと組み合わせて、コールドスタートをより効果的に短縮できる
  55. #serverlessjp Lambda 実⾏環境のライフサイクル Init フェーズ invoke Shutdown フェーズ invoke invoke

    ランタイムの初期化に加え、 ユーザーコードで実装された 初期化が⾏われるフェーズ ランタイムの終了処理を実施す る。全体で2秒。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-context.html
  56. #serverlessjp Top-level awaitのサポート top-levelで、awaitが書けることにより、Initフェーズでの処理を擬似的に同期処理化 import { SSMClient, GetParameterCommand } from

    "@aws-sdk/client-ssm"; const ssmClient = new SSMClient(); const input = { "Name": "/configItem" }; const command = new GetParameterCommand(input); const parameter = await ssmClient.send(command); // top-level await
  57. #serverlessjp Top-level awaitのサポート top-levelで、awaitが書けることにより、Initフェーズでの処理を擬似的に同期処理化 import { SSMClient, GetParameterCommand } from

    "@aws-sdk/client-ssm"; const ssmClient = new SSMClient(); const input = { "Name": "/configItem" }; const command = new GetParameterCommand(input); const parameter = await ssmClient.send(command); // top-level await export async function handler() { const response = { statusCode: 200, "body": parameter.Parameter.Value }; return response; };
  58. #serverlessjp 2.ソフトウェア関連 Update コンテナサポート モニタリング拡充 ⾔語サポート SQS クロスアカウント対応 Event filtering

    エラーハンドリング 最⼤バッチウィンドウのサポートの追加 Node.jsのESモジュール/top-level awaitのサポート
  59. © 2022, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. #serverlessjp Thank you