Slide 1

Slide 1 text

初めてのAWSフルサーバーレス開発で 困ったこととそこから得た知見 1

Slide 2

Slide 2 text

自己紹介 石橋 勇二 Ishibashi Yuji @1484_yuji 2020年4月 入社(新卒エンジニア) 2021年1月 CX事業本部MADチーム 神奈川県大和市在住 好きなAWSサービス:AWS CDK 筋トレ・サウナ・お肉・寿司 2

Slide 3

Slide 3 text

3 今日話すこと AWSのフルーサーバーレス開発を経験した(している)中で、 個人的に困ったこととそこから得た知見を共有します。 サーバーレス開発へのオンボーディング・新人エンジニアの育 成のフェーズにある方などに、役立つ知見を共有できれば幸い です。

Slide 4

Slide 4 text

4 アジェンダ ● 背景 ● 困ったこととそこから得た知見 ○ プロジェクトへのオンボーディング ○ サービス間の連携とデバッグ ○ CDKスタックのデプロイ

Slide 5

Slide 5 text

5 背景 SBGift様 既存システムのリプレース案件 マイクロサービスアーキテクチャの フルサーバーレスアプリへの移行 既存のプロジェクトに1月からJOIN [参考] SBギフト「AWS Amplify Console + CDKを用いて短納期・少人数・フルリ モートで作る管理画面」 #devio_showcase

Slide 6

Slide 6 text

6 プロジェクトへのオンボーディング 困った点①

Slide 7

Slide 7 text

7 プロジェクトへのオンボーディング 把握しておくべき情報、準備するべきこと 顧客・自社の課題、開発の進捗、リリース計画 プロジェクトの管理情報(Backlog, wiki, MTGの運用など) 開発環境の構築、リポジトリの構成の把握 サーバーレス開発の考え方、利用するサービスの方針 AWS構成概略、アプリケーション設計思想の理解 デプロイ要件の把握、実際の開発の流れの把握

Slide 8

Slide 8 text

8 プロジェクトへのオンボーディング マインドマップによる情報の整理

Slide 9

Slide 9 text

9 複雑な情報を整理できる 思考のプロセスが理解できる 全体像を把握することができる メリット

Slide 10

Slide 10 text

10 サービス間の連携とデバッグ 困った点②

Slide 11

Slide 11 text

11 今回のシステムのAWS構成図(一部) AWS CDK

Slide 12

Slide 12 text

12 今回のシステムのAWS構成図(一部) フロントエンド BFF サーバーサイド AWS CDK インフラ(IaC)

Slide 13

Slide 13 text

13 今回のシステムのAWS構成図(一部) フロントエンド BFF サーバーサイド AWS CDK インフラ(IaC) 機能に対するフルスタックな実装が可能

Slide 14

Slide 14 text

例) あるデータを取得してフロントの画面に表示する ● Lambdaハンドラ・処理ロジックを書く ● CDKでバックエンドのリソースを定義する ○ API Gateway リソース、メソッド、マッピングテンプレート ○ Lambda function ● GraphQL Schemaの定義 ● CDKでBFFのリソースを定義する ○ AppSyncのリゾルバ(function)、データソース ● Reactでフロントのコードを書く ○ 必要なコンポーネントの作成 ○ Apollo Clientを使ったGraphQLクエリ 14 実際の開発フロー CDK

Slide 15

Slide 15 text

例) あるデータを取得してフロントの画面に表示する ● Lambdaハンドラ・処理ロジックを書く ● CDKでバックエンドのリソースを定義する ○ API Gateway リソース、メソッド、マッピングテンプレート ○ Lambda function ● GraphQL Schemaの定義 ● CDKでBFFのリソースを定義する ○ AppSyncのリゾルバ(function)、データソース ● Reactでフロントのコードを書く ○ 必要なコンポーネントの作成 ○ Apollo Clientを使ったGraphQLクエリ 15 実際の開発フロー CDK デバッグ時にどこで エラーが起きているか 把握する力が大事 一つの機能実装でも 複数のサービスを利用

Slide 16

Slide 16 text

16 具体的な動作確認とデバッグ CDK ● Lambdaコンソールからテストイベントを作成し、Lambda関数を実行

Slide 17

Slide 17 text

17 CDK ● Lambdaコンソールからテストイベントを作成し、Lambda関数を実行 ● API Gatewayコンソールからテストイベントを作成し、メソッドのテストを実行 具体的な動作確認とデバッグ

Slide 18

Slide 18 text

18 CDK ● Lambdaコンソールからテストイベントを作成し、Lambda関数を実行 ● API Gatewayコンソールからテストイベントを作成し、メソッドのテストを実行 ● ローカルからcurlして、レスポンスとログを確認 (API Gatewayの認証を含む) 具体的な動作確認とデバッグ

Slide 19

Slide 19 text

19 CDK ● Lambdaコンソールからテストイベントを作成し、Lambda関数を実行 ● API Gatewayコンソールからテストイベントを作成し、メソッドのテストを実行 ● ローカルからcurlして、レスポンスとログを確認 (API Gatewayの認証を含む) ● AppSyncコンソールから、クエリを実行 具体的な動作確認とデバッグ

Slide 20

Slide 20 text

20 CDK ● Lambdaコンソールからテストイベントを作成し、Lambda関数を実行 ● API Gatewayコンソールからテストイベントを作成し、メソッドのテストを実行 ● ローカルからcurlして、レスポンスとログを確認 (API Gatewayの認証を含む) ● AppSyncコンソールから、クエリを実行 ● クライアント側からのリクエストとレスポンスの確認 具体的な動作確認とデバッグ

Slide 21

Slide 21 text

21 CDK ● Lambdaコンソールからテストイベントを作成し、Lambda関数を実行 ● API Gatewayコンソールからテストイベントを作成し、メソッドのテストを実行 ● ローカルからcurlして、レスポンスとログを確認 (API Gatewayの認証を含む) ● AppSyncコンソールから、クエリを実行 ● クライアント側(Apollo Client)からのリクエストとレスポンスの確認 具体的な動作確認とデバッグ

Slide 22

Slide 22 text

22 AppSync リゾルバ データソースに対するリクエスト・レスポンスの処理を記 述する関数 リクエストマッピングテンプレートとレスポンスマッピング テンプレートで構成 パイプラインリゾルバ 複数のリゾルバを関数として束ねて実行できるリゾゾル バ

Slide 23

Slide 23 text

23 AppSyncコンソールでのデバッグ パイプラインリゾルバが設定された Queryを実行

Slide 24

Slide 24 text

24 パイプラインリゾルバのデバッグ パイプラインリゾルバが設定された Queryを実行

Slide 25

Slide 25 text

25 パイプラインリゾルバのデバッグ パイプラインリゾルバが設定された Queryを実行 CloudWatch Logsでログの確認が可能

Slide 26

Slide 26 text

26 パイプラインリゾルバのデバッグ 詳細なログモニタリングの設定 https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/monitoring.html#cwl

Slide 27

Slide 27 text

27 パイプラインリゾルバのデバッグ 詳細なログモニタリングの設定 リクエストレベルログ、フィールドレベルログ

Slide 28

Slide 28 text

28 CDKスタックのデプロイ 困った点③

Slide 29

Slide 29 text

29 開発におけるデプロイ戦略 ITG ステージ バックエンド動作確認用 手元から直接デプロイ可 CodePipeline DEV ステージ フロントの開発の際利用する環境 パイプライン経由でのデプロイ

Slide 30

Slide 30 text

30 ある日行った作業 CDK ● フロント側で扱いたいデータを整理 ● 既存のクエリにアタッチされたパイプラインリゾルバ ● ユニットリゾルバで十分データを取得できる ● パイプラインリゾルバの削除、ユニットリゾルバを作成

Slide 31

Slide 31 text

31 想定していた挙動 ・パイプラインリゾルバの記述を削除 ・ユニットリゾルバの記述を追加 cdk deploy クエリ データソース データソース パイプラインリ ゾルバ データソース ユニット リゾルバ クエリ 変更

Slide 32

Slide 32 text

32 上書きに失敗 ・パイプラインリゾルバの記述を削除 ・ユニットリゾルバの記述を追加 cdk deploy クエリ データソース データソース パイプラインリ ゾルバ データソース ユニット リゾルバ クエリ リソースの上書き(削除・作成)に 失敗する

Slide 33

Slide 33 text

33 AppSyncのCDKコンストラクタ cdk-constructsはEXPERIMENTAL https://docs.aws.amazon.com/cdk/api/latest/docs/aws-appsync-readme.html

Slide 34

Slide 34 text

34 対応措置 ・パイプラインリゾルバの記述を削除 cdk deploy クエリ データソース データソース パイプラインリ ゾルバ データソース ユニット リゾルバ クエリ ・ユニットリゾルバの記述を追加 cdk deploy 削除 作成 ① ②

Slide 35

Slide 35 text

35 開発におけるデプロイ戦略 ITG ステージ バックエンド動作確認用 手元から直接デプロイ可 DEV ステージ フロントの開発等で利用する環境 パイプライン経由でのデプロイ CodePipeline 対応措置 push

Slide 36

Slide 36 text

36 開発におけるデプロイ戦略 ITG ステージ バックエンド動作確認用 手元から直接デプロイ可 DEV ステージ フロントの開発等で利用する環境 パイプライン経由でのデプロイ CodePipeline 対応措置 通常のデプロイ

Slide 37

Slide 37 text

37 開発におけるデプロイ戦略 ITG ステージ バックエンド動作確認用 手元から直接デプロイ可 DEV ステージ フロントの開発等で利用する環境 パイプライン経由でのデプロイ CodePipeline 対応措置 通常のデプロイ

Slide 38

Slide 38 text

38 わかったこと ● EXPERIMENTALのコンストラクタは、挙動の確認が必要。 ○ Low Level コンストラクタ(CFN-)の利用も 【AWS CDK】CDK標準の3種類のConstructを使って、AWSリソースをデプロイしてみた ● stg/prodなどの環境のCI/CDパイプラインには、   承認 アクションがあったほうがベター。 ○ 継続的デリバリーか、継続的デプロイメントか。

Slide 39

Slide 39 text

39 まとめ ● 案件情報の整理にマインドマップが便利だった ● サービス内のコンポーネント・サービス間の連携を把握してデ バッグできると開発のスピードが上がる ● CDKのデプロイに際して、コンストラクタの挙動確認・選定が 必要になることも

Slide 40

Slide 40 text

40