学習とサービス・アプリ開発の記録

プライベートで行っている学習やサービス・アプリ開発の記録です。

2022/06/13の週次進捗(サービス開発)

実施したこと

  • JavaScriptでの非同期処理の復習
  • Lambda上でのシンプルな非同期処理の書き方とCloudWatch上での確認方法。IAM等の関連サービスの設定方法の学習

開発したこと

  • 学習のみで、今週は実装機能なし

学習したこと

  • 非同期処理、スレッドを知るうえで把握しておくべきJavaScriptの仕組み
    • コールスタック(Call Stack)
      • 関数は呼び出されるとコールスタックに追加される
      • メインスレッドが占有されている状態はコールスタックにコンテキストが積まれている状態とも言える
      • コールスタックにコンテキストが積まれている時は、タスクキューは待ちの状態で、コールスタックにあるコンテクストがはけるまではタスクは処理されない
      • また、コールスタックは、LIFO(Last In First Out)の構造を持った領域
      • JavaScriptエンジンの内部に実装されている(メインスレッド)
    • タスクキュー(Task Queue)
      • 実行待ちの非同期処理の行列のことを指す。別の言い方をすれば、非同期処理の実行順序を管理しているとも言える
      • 非同期処理はタスクキューに入った順番で処理は実行される
      • また、タスクキューは、FIFO(First In First Out)の構造を持った領域
      • JavaScriptエンジンの外部に実装されています(メインスレッド外)
  • 重要なこと
    • 非同期処理関連
      • setTimeやPromiseのthen等で別スレッドにコールバックを仕込んだ場合、それはタスクキューに詰まれる
      • JavaScriptはシングルスレッドのため、タスクキューに詰まれた処理が本処理と並行で走ることはない
      • タスクキューの処理が実行されるのは、グローバルコンテクストで管理される本処理が終わった後になる
    • AWS Lambda関数のログ
      • console.log/info/warning等で出力した情報をCloudWatchで確認することができる
      • コードを修正した後は、かならずデプロイしてからテスト、ログの確認を行うこと
      • Lambda > 関数 > studyForAsyncのコード画面を見ると、テストボタンやデプロイボタン等のUIの配置から、デプロイする前に、現在のソースコードの実行結果をテストできるかのように見える。しかし、これは誤りで、実際にテストボタン押下で実行されるのは、以前にデプロイされた古いコードである。コード修正後は必ずデプロイを行ってから、テストを実行すること(n敗)
    • S3へのアクセス権限設定
      • 資料1.を参考にS3 bucket側にlistBucket許可を設定した
      • このとき、S3側のpolicyドキュメント(JSON)にはprincipalとして対象のLambda関数のARNを設定するのではなく、対象のLambda関数に割り当てられているロールのARNを設定すること(1敗)
      • なお上記だけでは、LambdaからS3へのアクセスは成功していない。
        • 次回、ここから調査を再開
  • 資料
    • 資料1.特定のlambdaからのみS3のバケットを操作できるバケットポリシーを作りたい - Qiita

      qiita.com

    • 資料2.
      • 非同期処理がJavaScript実行エンジン上のスレッドで、どのように処理されるのかが丁寧に説明されており、たいへん参考になる

所管

  • 学習項目
    • AWSの基礎知識が不足しているため、学習速度が遅い
    • AWS基礎について認定試験を受けるなりして、基礎固めした方が実装が早く進むのかもしれない(今月末時点で検討する。7/2(土)振り返りの課題に追加済み)
  • 学習の環境、手法
    • 新たに契約したコワーキングスペースがとても快適で生産性が上がる
    • アクセスが良く、設備がほどほどに良く、コストがとても安価
    • 半年ほど、様々なコワーキングスペースを試していたが、ベストの環境を見つけてしまった
    • デメリットとしては美味しいお店が周囲に多いこと。体重管理の観点で危険