Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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/

Slide 3

Slide 3 text

AWS SAMとは –個人的な理解 • AWSのサーバレスサービスを使ったアプリケー ションの構築を自動化する便利ツール • 内部的にはCloudFormation • SAM専用CLIで使えるもの

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

チュートリアル: 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関数を実行 するアプリケーション

Slide 7

Slide 7 text

アクセス権何が必要なんだ…? • 「IAMアクセス許可が必要です」 • 「SAM」とか「Serverless」関連のAWS管理ポリ シーは無さそう IAM自体のアクセス権限が必 要なのか単に「必要な権限を つけておいてね」の意味なのか よくわからなかった

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Hello World アプリケーション チュートリアルのステップ ①サンプルアプリケーションをダウンロード • sam init ②アプリケーションをビルドする • cd sam-app • sam build ③アプリケーションをデプロイする • sam deploy --guided

Slide 11

Slide 11 text

①sam init • sam initすると対話形式で選択が始まる

Slide 12

Slide 12 text

①sam init

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

①sam init app.py を Lambda関数としてデプロイ CloudFormationテンプレート サーバレスリソースを デプロイ 独自のLambda関数や APIを構成する場合は この「app.py」「template.yaml」を 編集すればいいみたいです。

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

②sam build • まずcd sam-appでディレクトリを移動  移動しないと次の③sam deploy –guidedでこけます • 続いてsam build • Build Succeededでビルドが成功 次は ・関数を呼び出す ⇒・関数をデプロイする

Slide 18

Slide 18 text

③sam deploy --guided • sam deploy を実行。--guidedを付けることで 対話形式になる スタック名「sam-app」でいいですか? ⇒Enter

Slide 19

Slide 19 text

③sam deploy --guided • とりあえずyでゴリゴリ進める • Creating the required resources… となり、少し待ち リージョンは日本にしてみる 他はデフォルト

Slide 20

Slide 20 text

こけた • Error: • Failed to create managed resources: • Waiter StackCreateComplete failed: • Waiter encountered a terminal failure state • Waiterで端末障害状態が発生しました?

Slide 21

Slide 21 text

CloudFormationのステータスを 見に行く S3バケットの作成で こけてる!

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

さあ、片付けよう • AWSのチュートリアルガイドには「sam-app」 スタック消すだけ、と記載されている • このスタックの削除で消えるのは「Lambda」 「IAMロール」「API Gateway」関連のリソース だけ • もう一つのスタック「aws-sam-cli-managed- default」も削除しないとS3バケットが残る • S3バケットはバージョニング有効になっている ので削除するのに一手間必要 • Cloud9環境のEC2に「sam-app」というディレク トリも残るので消しておく

Slide 45

Slide 45 text

• CloudWatch Logsにもロググループが残っていま した(スタックを消しても残ってしまうんです ね) • ポリシーのはく奪も実施します さあ、片付けよう ハンズオンで強力過ぎるお片付けコマンドを 使ってしまうと、ハンズオン以外で作った 大事なリソースも消えちゃったりする可能性があるので ハンズオン作る方も注意が必要なんですね

Slide 46

Slide 46 text

まとめ • SAMとは:サーバレスサービスを使ったアプリ ケーションの構築を自動化する便利ツール(内 部的にはCloudFormation) • SAM専用CLIで使える • Hello Worldチュートリアルを実施するのに必要 な権限 API Gateway Lambda CloudFormation S3 IAM 何が作られて どんな動きをするかは 掴めた

Slide 47

Slide 47 text

参考 • 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/