新しいメンバーがジョインしたときのAWSトレーニング/ハンズオン

# 概要

新しくジョインしたメンバー向けに独自でトレーニングメニューを作成し、最新の情報に追従してアップデートしていくのはコストがかかる面もあります。

AWSは公開されているトレーニングが豊富なので、私のチームではそれを活用しています。良さそうなハンズオンを適宜さがしてきて「作ったものを説明&デモ」「手順の存在しないオリジナル追加課題」という工程を加えています。

今のところ省力で効果的と感じているので、流れやハンズオンの探し方をまとめてみました。

# 流れ

1. 経験や勉強していることを改めてヒアリング。担当予定のシステムのアーキテクチャを説明し、理解度をお互いに確認。

2. レベルと補完しておきたいサービスに応じたハンズオンを探す

3. トレーニングの実施
    - ゴールの設定 フェーズ①
        - ハンズオンを一通り完了させる
        -  **作ったものをデモを交えて説明&QA。**
    - ゴールの設定 フェーズ②
        - フェーズ①で作ったものに対して**オリジナルの課題(機能拡張や応用)** を追加
        - **作ったものをデモを交えて説明&QA。**
        - オリジナル部分のレビュー & レビュー修正
    - 期限
        - 最初は期限をこちらで設定。
        - 追加課題の期限は新メンバー側から見積もり出してもって設定。 
        - 進めてて間に合わなそうな場合は連絡もらう。

## コストの算出、クォータの確認

流れを改めて書き出してみて思ったのですが、これらにプラスしてこちらで**アクセス量やアクセスパターンを定義**し、それに対して**コストを[AWS Pricing Calculator](https://calculator.aws)で算出**したり、**[クォータ](https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-service-information.html)に収まるか**/どの程度スケールしても捌けそうか確認してもらうのも良さそう。選定や設計に必要な要素となってくるので。

いいタイミングあればコストの算出、クォータの確認もやってみてもらおうかなと思います。

# ハンズオンを探す

実際にハンズオンを探すのに使っているページを紹介します。
今回は「AWS公式」「無料」「ひとりで進められる」という条件で絞っています。

## [AWS Hands-on for Beginners](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/96005cfe-5bff-8a00-752d-20fb6cb9ded8.png)


 - 動画による丁寧な解説
     - Youtube埋め込みなので倍速再生やシークも可
 - サービス概要の説明もついている
 - フォームに勤務先やAWS利用状況など入力する必要あり


## [追記][AWS 日本語ハンズオン(JP Contents Hub)](https://aws-samples.github.io/jp-contents-hub/)


![スクリーンショット 2023-04-05 16.19.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/7fb0568f-a09a-b7f5-1197-01d59cdd23f4.png)

- 日本語の AWS ハンズオンが一覧になっているサイト
    - 日本語対応されているハンズオンをカテゴリごとに探せる
    - 検索しやすい
    - ここで紹介しているハンズオンも日本語化されているものはここから辿れる
    - [更新履歴](https://github.com/aws-samples/jp-contents-hub#%E6%9B%B4%E6%96%B0%E5%B1%A5%E6%AD%B4)を見てもアップデートが頻繁

## [実績チュートリアル](https://aws.amazon.com/jp/getting-started/hands-on)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/a63b327b-f940-dc10-78ad-45351735226e.png)


  -  カテゴリやレベルでフィルタリングできる
  -  だいたい日本語化されている


## [AWS Workshops](https://workshops.aws/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/3cb1a4cf-a719-1dee-682d-2734c85580bd.png)

  - 実績チュートリアルに比べるとボリュームが大きいものが多い
  - だいたい英語
  - 検索が少し使いにくいので探すとき工夫がいる
      - 対象を All にした状態でブラウザのページ内検索を使う
      - タグから探す
          - https://workshops.aws/?tag=DynamoDB
          - https://workshops.aws/?tag=SQS


## [追記] builders.flash の記事

[builders.flash](https://aws.amazon.com/jp/builders-flash) にハンズオンに関するいい記事があったので追加で紹介。

 - [Hands-on for Beginners で AWS を使いはじめよう !](https://aws.amazon.com/jp/builders-flash/202204/get-started-with-hands-on-for-beginners)
    - こんな方にはコレ ! Hands-on for Beginners チェックシート
    - Hands-on for Beginners 活用 Tips
 - [ハンズオンの「腹落ち問題」を改善する 5 Tips](https://aws.amazon.com/jp/builders-flash/202103/five-tips-accept-handson-situation)
    - ハンズオンを探そう !
        - 具体的なおすすめハンズオンも載っている
    - 「腹落ち問題」を改善しよう ! Tips 1〜5


# トレーニングの実施


## 作ったものをデモを交えて説明&QA

ハンズオンやるだけだともったいないので、作ったものをデモ&説明してもらいます。
限られた時間で全て理解するのは不可能だという前提の元で「コードのこの部分はどういう処理ですか？」といった質問をしてみたり、動かしてはみたもののわかってない部分やもっと知りたい部分は逆質問してもらったりして、理解度/考え方/調べ方を相互に共有します。

モニタリングやデバッグ(CloudWatch MetricやLogs/Insights)もハンズオンでやる小規模な題材だとわかりやすいかなとこのへんで軽くインプットしたり。

## オリジナルの追加課題

ハンズオンにはだいたい「手順」が用意されているので、次のステップとして「手順」の存在しないオリジナル追加課題を設定します。より実践的な理解や考え方/調べ方が身につけばという狙いです。

オリジナル部分についてはレビューもしています。
どこまで深掘りするかは要調整ですが、たいてい対象範囲は小さくなるので、レビューみっちりやっても溢れにくいです。

# 実例

2022年3月に [新しいメンバー](https://qiita.com/y-kob) がジョインしてくれました。これまでの主な使用言語はPHPで、AWSはEC2の使用経験あり。
弊チームでの主な使用言語はPythonとTypeScript、AWSはサーバレスな構成が多い。
Pythonは入社前に勉強してきてくれたらしく問題なさそう。ということでサーバレス周りのトレーニングを挟むことにしました。

## トレーニング内容

[AWS Hands-on for Beginners](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on)から以下２つをピックアップ。

 - [Serverless #1 サーバーレスアーキテクチャで翻訳 Web API を構築する](https://pages.awscloud.com/event_JAPAN_Hands-on-for-Beginners-Serverless-2019_LP.html?trk=aws_introduction_page)
 - [Serverless #2 AWS SAM を使ってテンプレートからサーバーレスな環境を構築する](https://pages.awscloud.com/event_JAPAN_Ondemand_Hands-on-for-Beginners-Serverless-2_LP.html?trk=aws_introduction_page)


このハンズオンでは以下のような構成を作っていきます。

```
1. APIのクエリパラメータで渡されてきた「日本語テキスト」をAPI Gateway + Lambdaで受ける
2. Transcribeで「英語テキスト」に翻訳
3. DynamoDBに翻訳履歴を保存
4. 翻訳結果の「英語テキスト」をAPIのレスポンスとして返す
```

選んだ理由は、API Gateway + Lambda + DynamoDB という解りやすい構成なのと、
\#1 で構築した内容を、 \#2で AWS SAMテンプレートを使って再構築しIaCも学べるという点がよかったので。

### オリジナル追加課題

オリジナル追加課題としては以下をやってもらいました。

```
S3バケットのsrc/配下に
テキストファイル(*.txt)が保存されたら、ファイルの中身を英語に翻訳してdstフォルダに保存するLambdaを追加する

仕様
src/aaa.txt # 中身 こんにちは
dst/aaa.txt # 中身 Hi
```
上記の雑な説明(原文ママ)だけ記載し、あとは口頭で不明点を聞いてもらいました。
\#2 に対してのオリジナル追加課題も同様で、この部分をSAMテンプレートで構築してもらいます。

このお題には１つ罠があって、もしバケットのPUTイベントにプレフィックスを指定し忘れると、dst/へのPUTでもイベント発生して無限イベントループが発生します。その罠には引っかからなかったですが、後で参考として話しました。話をしながら「これは先に注意点として伝えておくべきだったな」と自分でゾッとしましたw

オリジナル課題の手がかりとして
\#1 では [Boto3::S3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html)、[S3 イベント通知](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/NotificationHowTo.html)
\#2 では [SAM::S3](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-property-function-s3.html)

あたり連携しつつ、ググるといくつか解説ブログもあると思うので、それもとっかかりとして参考にしてもらえたらとインプット。ググれば動く方法や解説は出てきますが、加えて公式ドキュメントをベースにしたり立ち返って、仕組みや設定/パラメータの意味を理解し、どのようなオプションがあるか把握して使うことも重要と考えています。

## 進め方

最初に \#1 を実施してサーバレス構成に少し慣れてもらい、そのあと実務タスクをアサインしました。1つ目の実務タスクが完了したあと、その次にアサインするタスクがちょうどIaC部分にも手を入れる必要があったため、次タスクに入る前に\#2を実施してもらいました。

今回はお互いリモートだったのでコミュニケーションはSlackとGoogleMeet。
タスク管理は普段Backlogを使っているので、トレーニングについてもBacklogを使用。
図の作成はCacooを使っているのでCacooで描いてもらいました。図はレビュー時にリクエストしました。

### 課題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/eeedec3f-664f-5644-b3d5-346a970f2992.png)


### 描いてもらった図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/02f93c7c-e004-5fc8-0d48-9f9b76e73beb.png)

※「ハンズオン課題」「オリジナル追加課題」の枠はブログでの説明用に後付け。

## 終わりに

完全リモートでのメンバー受け入れは初めてだったので不安はありましたが、あまり困ることがありませんでした。それは新メンバーが「ここはわかった」「ここわかってない」というのをはっきり伝えてくれ、説明&QAのタイミングでは興味を持って質問してくれたおかげもあるかなと思います。

自分自身も経験のないサービスや使い方について学びたいとき適当にハンズオンを探してきてやってみることがあります。何かトレーニングやハンズオンでオススメあれば教えていただけると助かります！ ではまた。