ハンズオン日記Vol.4:サーバレス編その2

こんにちは。

本日もAWSの初心者向けハンズオンをやっていきます。

今回はサーバレス編その2です。

pages.awscloud.com

そういえば、JP Contents Hubが公開されましたね。

ハンズオンの資料を探しやすくなっているのでこちらも活用していきたいです。

aws-samples.github.io

ハンズオンの動画は2020年1月

こちらの記事は2022年9月時点の情報となります。

アジェンダ

# Session
1 前回のハンズオンの復習と今回のハンズオンの概要
2 AWS SAM の紹介と AWS Cloud9 の紹介
3 Cloud9 のセットアップ + [Option] Cloud9 で簡単な Lambda 関数を作成する
4 SAM で Lambda 関数を作成する ①
5 SAM で Lambda 関数を作成する ②
6 SAM で API Gateway のリソースを作成し、Lambda 関数と連携させる
7 SAM で DynamoDB TBL を作成し、Lambda 関数を連携させる
8 [Option] SAM CLI を使ってみる ①
9 [Option] SAM CLI を使ってみる ②
10 クリーンアップ & 落ち穂拾い & まとめ

目標は、サーバレス編その1で作成した構成をSAMで構築してみることです

主に使用するサービスは、AWS SAM,Lambda,API Gateway,DynamoDBです

全体を通して

学んだこと
  • AWS SAM
    • サーバレスな環境を自動構築できる
    • CloudformationとSAMの違いってなに?
      • SAMはCloudformationの拡張機能
        • サーバレス分野に関してより簡単に記述できる
    • Transformの記述が必要
      • デプロイ時にCloudformationのテンプレートに変換される
    • TypeとPropertiesを記述する
      • Type:リソースのタイプ。6種類ある。
      • Properties:リソースごとの詳細な設定。それぞれ項目が違う。
    • SAMの流れ
      • テンプレート記述
      • パッケージング(aws cloudformation package)
        • この時S3にZIP化されたアプリケーションが保存される
        • PropertiesのCodeUriが書き換えられる
      • デプロイ(aws cloudformation deploy)
        • SAMテンプレートからCloudformationのテンプレートに変換
        • Cloudformationが実行される
    • CodeUriについて
      • CodeUriまたはInlineCodeが必要になる
    • AWS::Serverless::Function
      • Handler
      • Runtime
      • CodeUri or InlineCode
    • AWS::Serverless::Api
      • StageName
      • EndpointConfiguration:必須ではないが指定しない場合はエッジ最適化になる
    • AWS::Serverless::SimpleTable
      • 必須項目なし
  • SAM CLI
    • ローカル環境でSAMを利用できる
    • Dockerのインストールが必要
    • sam init で対話形式で初期化できる
    • デプロイやテンプレートの事前検証が行える
    • sam deploy --guidedはハンズオンより聞かれる内容が多い
  • Cloud9
    • 前も触ったことがあるけどもう一度復習
    • ブラウザ上でコードの記述、実行できるクラウドベースのIDE
    • チャット機能もあるのでペアプログラミングも可能
    • サーバレスアプリケーションを簡単に構築できる
    • ホストEC2とEBS分の料金がかかる
  • SAMやLambdaは一度デプロイしないとテストできないの?
    • ローカル環境に構築すればデプロイしなくてもテスト可能
    • sam build後もsam deployを実行せずにsam local startを実行できる
詰まったところ
  • Cloud9からLambda functionを作成方法
    • 動画のGUIと違うため詰まった
      • 動画では左ペインに「AWS Resources」と表示されている
      • 私の画面には表示されていない
      • いろいろ調べてみたが有効な解決方法は見つからなかった
        • 使用が変更されている可能性...?
        • SAMアプリケーションの作成は可能
  • Cloud9へのhomebrewインストール
    • 下記コマンドを実行するとec2-userのパスワードが求められた
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for ec2-user: 

 

    • 特に設定した覚えはないため初期パスワードがあるか調べた
      • 特に見つからなかったが、時間が経つとインストールが開始された

sudo: timed out reading password
sudo: 1 incorrect password attempt
==> This script will install:
/home/ec2-user/.linuxbrew/bin/brew
/home/ec2-user/.linuxbrew/share/doc/homebrew
/home/ec2-user/.linuxbrew/share/man/man1/brew.1
/home/ec2-user/.linuxbrew/share/zsh/site-functions/_brew
/home/ec2-user/.linuxbrew/etc/bash_completion.d/brew
/home/ec2-user/.linuxbrew/Homebrew
==> The following new directories will be created:
/home/ec2-user/.linuxbrew/bin
/home/ec2-user/.linuxbrew/etc
/home/ec2-user/.linuxbrew/include
/home/ec2-user/.linuxbrew/lib
/home/ec2-user/.linuxbrew/sbin

...以下略

CI=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

  • Cloud9へのpython 3.9インストール
    • サンプルSAMアプリケーションのRuntimeを3.9に指定
    • sam buildを実行したところpython3.9がないらしい
    • こちらの記事を参照し3.9をインストール

 

課題
  • SAMのユースケース
  • SAMとCloudformationは併用可能
    • SAMはデプロイ時にCloudformationに変換されるので可能と予想
  • SAMで記述したものをCloudformationでも書いてみる
  • Pythonの中身について前回のハンズオンを復習する

終わり

少し前のハンズオンだったのでGUIの違い、バージョン違いに苦戦しました。。

調べてみても最近の記事はなかなか出てこないので、もっとググり力をつける必要があるなぁと感じました。

次のハンズオンなにするか決めていませんが、自分の課題を消化する期間にしてみようかと思います。

アーキテクチャ図の作成とかね。