LoginSignup
24
18

More than 5 years have passed since last update.

ゼロから始める AWS SAM 入門

Posted at

この記事で分かること

  • AWS Serverless Application Model (AWS SAM) の概要
  • SAM を使って API Gateway + Lambda のサーバレスな API を構築するまでの流れ

Serverless Application Model (AWS SAM) とは

  • 簡単に言うとサーバレスな構成を作ることに特化した Cloudformation のテンプレート
  • Cloudformation と同様にリソースをひとまとめに管理 (作成 / 更新 / 削除) することができる

SAM を使って API Gateway + Lambda を構築してみる

事前準備

AWS CLI を使えるようにしておく

SAM では AWS CLI を使ってスタックの作成/更新/削除を行うので、ローカル環境で AWS CLI を実行できるようにしておく必要があります。

  1. AWS CLI の インストーラー を取得して、インストーラーの指示に従ってインストール
  2. ちゃんとインストールされたか確認(バージョン情報が返って来ればOK)
$aws --version  
aws-cli/1.11.156 Python/2.7.9 Windows/7 botocore/1.7.14

CLI 実行時の設定を config, credentials に書き込んでおく

AWS CLI はユーザーディレクトリ配下の config, credentials を参照するため、認証情報や諸々の設定を書き込んでおきます。

  1. config 設定のコマンド実行(対話式で設定)
$aws configure
AWS Access Key ID [None]: ← CLI を実行する IAM ユーザーのアクセスキー
AWS Secret Access Key [None]: ← CLI を実行する IAM ユーザーのシークレットキー
Default region name [None]: ← 好きなリージョン
Default output format [None]: ← json を設定しておけば無難

※ユーザーディレクトリ配下の config, credentials を確認(設定した内容が記載されているはず)

S3 バケットの作成

SAM では必要なファイル一式を S3 に置く必要があるので、その置き場を先に用意しときます。

ここでは sam-test というバケットにします。

IAM ロールを用意

SAM が API Gateway と Lambda と S3 にアクセスできるように IAM Role を作成しておきます。

ここでは sam-test-role というロールにします。

SAM のテンプレートを書く

template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: sample
Resources:
  SamSample:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler # 実行するハンドラ
      Runtime: nodejs4.3 # lambda のランタイムを書く
      Role: arn:aws:iam::1234567890:role/sam-test-role # 上の手順で作った IAM Role の Arn
      Timeout: 60 # Lambda のタイムアウト
      Events:
        GetResource: # API Gateway 側の識別子
          Type: Api
          Properties:
            Path: /test # API Gateway のリソースのパス
            Method: put # API Gateway のメソッド

※同じ階層に Lambda が実行するコード(今回の場合は index.js)を配置しておく必要があります。

SAM のスタックを作る

1 . S3 にファイル一式をパッケージ化して配置する

aws cloudformation package --template-file template.yaml --output-template-file template-output.yaml --s3-bucket sam-test

2 . スタックを作成

aws cloudformation deploy --template-file template-output.yaml --stack-name SamTest --capabilities CAPABILITY_IAM

上記のコマンドを実行するだけで、API Gateway + Lambda のサーバレスな構成がプロビジョニングされているはずです。

注意点

  • node.js の場合 npm のパッケージは node_modules がローカルに展開されている状態で package コマンドを実行する必要があります
  • template.yaml 内の各リソースの名前にはハイフンは使えないので注意

今後やりたいこと

折角作ったので API Gateway + Lambda 構成のアプリケーションを作ってみて、活用してみたいです。

24
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
18