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

AWS SAM触ってみた奮闘記

97b3cca999b52cb5296675ac0a5c12cd?s=47 emi
September 24, 2021

AWS SAM触ってみた奮闘記

2021/9/30(木) JAWS-UG CLI専門支部 #229R CloudWatch Logs入門でのLTで発表したスライドです。「AWS SAMって何?」の状態から、なんとなく概要がつかめるようになるまでの奮闘記です。
コマンド系もコピペできるようにあとでQiitaにもまとめようかと思います。
朝会とCLI専門支部で一日に二つLT登壇したということで、JAWS-UGダブルヘッダーの称号をいただきました。うれしい

(参考)
AWS SAM触ってみた
https://qiita.com/emiki/items/3c2e2b54e1a83904488c
AWS サーバーレスアプリケーションモデル
https://aws.amazon.com/jp/serverless/sam/
チュートリアル: Hello World アプリケーションのデプロイ
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html
AWS SAMリファレンス
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-reference.html
書籍「ポケットスタディ AWS認定 デベロッパーアソシエイト」
https://www.yamamanx.com/pocketstudy-aws-dva/

97b3cca999b52cb5296675ac0a5c12cd?s=128

emi

September 24, 2021
Tweet

Transcript

  1. AWS SAM触ってみた奮闘記 2021/9/30(木) JAWS-UG CLI専門支部 #229R CloudWatch Logs入門

  2. AWS SAMとは -AWS Serverless Application Model • サーバーレスアプリケーション構築用のオープンソースフレームワーク • YAML

    を使用してモデリングできる • SAM が SAM 構文を AWS CloudFormation 構文に変換および拡張し、サーバーレ スアプリケーションの構築を高速化 • SAM ベースのアプリケーションの構築にはAWS SAM CLI を使用 • SAM CLI により Lambda に似た実行環境が提供され、SAM テンプレートによっ て、または AWS Cloud Development Kit (CDK) を通じて定義されたアプリケー ションの構築、テスト、デバッグをローカルで実行できる …etc https://aws.amazon.com/jp/serverless/sam/
  3. AWS SAMとは –個人的な理解 • AWSのサーバレスサービスを使ったアプリケー ションの構築を自動化する便利ツール • 内部的にはCloudFormation • SAM専用CLIで使えるもの

  4. AWS SAMとは –個人的な理解 • SAM専用CLIで使えるもの ⇒マネコンで探してもズバリのサービス名がない ⇒Serverless Application Repositoryというサービスはある

  5. とりあえずCLIで触ってみよう Cloud9環境にはSAM CLIがインストール済みだそうです

  6. チュートリアル: Hello World アプリ ケーションのデプロイ https://docs.aws.amazon.com/ja_jp/serverless-application- model/latest/developerguide/serverless-getting-started-hello-world.html AWS Cloud •

    API GatewayのGETメソッドでLambda関数を実行 するアプリケーション
  7. アクセス権何が必要なんだ…? • 「IAMアクセス許可が必要です」 • 「SAM」とか「Serverless」関連のAWS管理ポリ シーは無さそう IAM自体のアクセス権限が必 要なのか単に「必要な権限を つけておいてね」の意味なのか よくわからなかった

  8. アクセス権何が必要なんだ…? AWS Cloud API Gateway Lambda CloudFormation あたりが必要な気がする… フラグ

  9. IAMポリシーアタッチ • いつもの感じで以下ポリシーアタッチします "AWSCloudFormationFullAccess“ "AWSLambda_FullAccess“ "AmazonAPIGatewayAdministrator"

  10. Hello World アプリケーション チュートリアルのステップ ①サンプルアプリケーションをダウンロード • sam init ②アプリケーションをビルドする •

    cd sam-app • sam build ③アプリケーションをデプロイする • sam deploy --guided
  11. ①sam init • sam initすると対話形式で選択が始まる

  12. ①sam init

  13. ①sam init プロジェクト名[sam-app] このままEnter

  14. ①sam init • CLI最新版をダウンロードしてね、とは言われ ているがとりあえずうまくいった

  15. ①sam init app.py を Lambda関数としてデプロイ CloudFormationテンプレート サーバレスリソースを デプロイ 独自のLambda関数や APIを構成する場合は

    この「app.py」「template.yaml」を 編集すればいいみたいです。
  16. ①sam init(参考) • 「app.py」の中身 (自動生成されているコメント行は省略しています) GETリクエストを実行すると 「"message": "hello world"」 が返ってくるLambda関数

  17. ②sam build • まずcd sam-appでディレクトリを移動  移動しないと次の③sam deploy –guidedでこけます •

    続いてsam build • Build Succeededでビルドが成功 次は ・関数を呼び出す ⇒・関数をデプロイする
  18. ③sam deploy --guided • sam deploy を実行。--guidedを付けることで 対話形式になる スタック名「sam-app」でいいですか? ⇒Enter

  19. ③sam deploy --guided • とりあえずyでゴリゴリ進める • Creating the required resources…

    となり、少し待ち リージョンは日本にしてみる 他はデフォルト
  20. こけた • Error: • Failed to create managed resources: •

    Waiter StackCreateComplete failed: • Waiter encountered a terminal failure state • Waiterで端末障害状態が発生しました?
  21. CloudFormationのステータスを 見に行く S3バケットの作成で こけてる!

  22. S3のアクセス権も必要でした • いつもの感じで以下ポリシーアタッチします "AmazonS3FullAccess“

  23. いったん失敗スタック消します • 特に問題なく「Delete_Copmlete」

  24. もう一度③sam deploy --guided この設定値でサーバレス アプリケーションをデプロイ 成功! CloudFormationの変更セットを確認してるっぽい

  25. もう一度③sam deploy --guided CloudFormationの 変更セットの確認が成功したようです デプロイしますか? ⇒y

  26. こけた • S3の作成でこけたときはCloud9上のエラーから何で こけたか分からず、マネコンのCloudFormationイベ ント見に行った • 今回の第二デプロイではCloud9上でエラーが見える

  27. こけた IAMロールの作成でこけてる!

  28. CloudFormationのステータスも 見に行く さっきこけてたやつ(直った) “aws-sam-cli-managed-default” 今こけてるやつ “sam-app”

  29. IAMのアクセス権も必要でした • いつもの感じで以下ポリシーアタッチします “IAMFullAccess“

  30. (余談)実はさっき書いてあった • ③ sam deploy –guided で最初にyyy…と進めたとこ ろにちゃんと書いてあった

  31. (余談)実はさっき書いてあった • 「IAMアクセス許可が必要です」っていうのは IAM自体のアクセス権限が必要ってことだった のかな? IAM自体のアクセス権限が必 要なのか単に「必要な権限を つけておいてね」の意味なのか よくわからなかった

  32. いったん失敗スタック消し… 消せない • そんな気 S3バケットが空じゃないから 消せないよエラー 2つあったスタックのうち一つ””sam-app”は消せた

  33. • デフォルトでバージョニングが有効に いったん失敗スタック消し… 消せない

  34. ⾧くなるので別の機会に お話させてください 今回は管理者権限のIAMユーザでログインして マネコンからS3とスタックを削除したと思ってください

  35. • やったー! 三度目の③sam deploy --guided

  36. デプロイの結果を見ます • CloudFormationも見てみます

  37. • CloudFormationも見てみます デプロイの結果を見ます 作成したHello World アプリケーションの API GatewayのエンドポイントのURL

  38. アプリケーションを試します • API GatewayエンドポイントのURLにアクセスし ます

  39. どんなリソースができたのか見てみます API Gateway IAMロール Lambda

  40. どんなリソースができたのか見てみます S3バケット

  41. • S3 • Lambda どんなリソースができたのか見てみます コードの中身は sam init 実行時に 作成した「app.py」

  42. • API Gateway どんなリソースができたのか見てみます

  43. • API Gateway どんなリソースができたのか見てみます

  44. さあ、片付けよう • AWSのチュートリアルガイドには「sam-app」 スタック消すだけ、と記載されている • このスタックの削除で消えるのは「Lambda」 「IAMロール」「API Gateway」関連のリソース だけ •

    もう一つのスタック「aws-sam-cli-managed- default」も削除しないとS3バケットが残る • S3バケットはバージョニング有効になっている ので削除するのに一手間必要 • Cloud9環境のEC2に「sam-app」というディレク トリも残るので消しておく
  45. • CloudWatch Logsにもロググループが残っていま した(スタックを消しても残ってしまうんです ね) • ポリシーのはく奪も実施します さあ、片付けよう ハンズオンで強力過ぎるお片付けコマンドを 使ってしまうと、ハンズオン以外で作った

    大事なリソースも消えちゃったりする可能性があるので ハンズオン作る方も注意が必要なんですね
  46. まとめ • SAMとは:サーバレスサービスを使ったアプリ ケーションの構築を自動化する便利ツール(内 部的にはCloudFormation) • SAM専用CLIで使える • Hello Worldチュートリアルを実施するのに必要

    な権限 API Gateway Lambda CloudFormation S3 IAM 何が作られて どんな動きをするかは 掴めた
  47. 参考 • AWS サーバーレスアプリケーションモデル https://aws.amazon.com/jp/serverless/sam/ • チュートリアル: Hello World アプリケーションのデ

    プロイ https://docs.aws.amazon.com/ja_jp/serverless- application-model/latest/developerguide/serverless- getting-started-hello-world.html • AWS SAMリファレンス https://docs.aws.amazon.com/ja_jp/serverless- application-model/latest/developerguide/serverless- sam-reference.html • 書籍「ポケットスタディ AWS認定 デベロッパーア ソシエイト」 https://www.yamamanx.com/pocketstudy-aws-dva/