1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

サーバーレスの作成をより簡単に!大学生が体感したSAMの魅力

Posted at

はじめに

自分がインターンで参加している会社で最近AWSのSAMを触って、これに驚いたのでこの感動を伝えたいがためにこの記事を書こうと思います。
サーバーレスについて知っていることを前提に記事を書いていくため、サーバーレスについて知らない方は調べてみてください。

対象とする方

  • AWSリソースを管理コンソールからしか使ったことがない方
  • SAMを使ったことがない方

そもそもSAMとはなんじゃろ?

SAMとは何かとはServerless Application Modelの略称のことです。公式ドキュメントを見ると以下のような説明がされています。

AWS Serverless Application Model(SAM)は、サーバーレスアプリケーションを構築するためのオープンソースのフレームワークだ。関数、API、データベース、イベントソースマッピングを表現する省略記法構文を提供する。リソースごとにわずか数行で、必要なアプリケーションを定義し、YAMLを使ってモデル化することができる。デプロイ時に、SAMはSAM構文をAWS CloudFormation構文に変換して展開するため、サーバーレスアプリケーションを迅速に構築できる。

と書かれています。つまり、サーバーレスアプリケーションを構築するときに使うと便利なわけです。

ですがここで以下の疑問が湧いてきました。「CloudFormationでサーバーレスアプリケーションは作成できるのに何故SAMが開発されたのか」と。

1. テンプレートの簡素化

まずSAMを使用することのメリットは文法が簡素化できるということです。以下に簡単なサーバーレスアプリケーションである、APIGatewayからトリガーされるLambda関数を作成します。

最初は素のCloudFormationで作成します。

素のCloudFormation.yaml
Resources:
  MyLambdaFunction:
    Type: 'AWS::Lambda::Function'
    Properties:
      Handler: 'index.handler'
      Role: arn:aws:iam::123456789012:role/execution_role
      FunctionName: 'MyFunction'
      Code:
        S3Bucket: 'myBucket'
        S3Key: 'code/myLambda.zip'
      Runtime: 'nodejs14.x'
  MyApi:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: 'MyAPI'
      Description: 'My API'
      FailOnWarnings: 'true'
  RootMethod:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      AuthorizationType: 'NONE'
      HttpMethod: 'GET'
      ResourceId:
        Fn::GetAtt:
        - 'MyApi'
        - 'RootResourceId'
      RestApiId:
        Ref: 'MyApi'
      Integration:
        IntegrationHttpMethod: 'POST'
        Type: 'AWS_PROXY'
        Uri:
          Fn::Sub:
          - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaArn}/invocations
          - LambdaArn: !GetAtt [MyLambdaFunction, Arn]

つぎにSAMを使用して作成します。

sam.yaml
Resources:
  MyLambdaFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: 'index.handler'
      Role: arn:aws:iam::123456789012:role/execution_role
      CodeUri: s3://myBucket/code/myLambda.zip
      Runtime: 'nodejs14.x'
      Events:
        RootEndpoint:
          Type: Api
          Properties:
            Path: '/'
            Method: get

一目瞭然ですがSAMを使用すれば、簡素化された構文でサーバーレスアプリケーションを作成することができるんですね。だいぶすっきりしていて読みやすいですよね。

2. サーバーレスをローカルで実行したりデバッグができる

Lambdaを触ったことがある方ならわかるとおもいますが、Lambdaのデバッグってかなりめんどくないですか?Lambdaって10MB以上になるとzipファイルをアップロードしないといけなくて、それを何回もやるのがかなり面倒くさいわけです。それを解消できるのがSAMなんですね。
Lambdaをローカルで実行できるのはかなり嬉しいですよね。
Lambdaをローカルで実行する方法は追々記事にしていこうとおもいます。

その他にもSAMのすごいことは盛りだくさんなので知っている方がいらっしゃいましたら教えてください!
【参考資料】

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?