Help us understand the problem. What is going on with this article?

[AWS SAM] 概要、Hello World

  1. [AWS SAM] 概要、Hello World (※本記事)
  2. [AWS SAM] Lambda関数からS3アクセス
  3. [AWS SAM] Swaggerを使用したAPI定義

AWS SAM(AWS Serverless Application Model)

サーバレスアプリケーション

Lambda関数、トリガとなるイベントリソース、およびLambda関数から操作するリソース等を組み合わせたもの

AWS SAM

サーバレスアプリケーションのデプロイに特化したAWS CloudFormationの拡張機能
CloudFormationと比べて簡潔にテンプレートを記述可能
SAMはCloudFormationの拡張機能のため、CloudFormationの文法と共存可能
SAMでサポートしていないサービスについてはCloudFormationの文法で対応

CloudFormationと同様にYAMLまたはJSONでSAMテンプレートを記述する
デプロイ時にCloudFormationによってSAMテンプレートはCloudFormationテンプレートに変換される
テンプレート内のTransform: AWS::Serverless-2016-10-31で変換方式を指定している

AWS SAM CLIのインストール

公式ドキュメントを参考にAWS SAM CLIをインストール

Hello Worldアプリケーションの導入

公式ドキュメントを参考にsam initでアプリケーションを作成、
今回はRuntimeにpython3.8、アプリケーションテンプレートにhello-worldを選択
python3.8をインストールしておく必要あり、バージョン違いも不可

-----------------------
Generating application:
-----------------------
Name: sam-app
Runtime: python3.8
Dependency Manager: pip
Application Template: hello-world
Output Directory: .

デプロイは、aws cloudformation packageaws cloudformation deployを使用
パッケージのアップロード先S3バケットは事前に作成しておく必要あり

$ aws cloudformation package \
    --template-file ./template.yaml \
    --s3-bucket ${YOUR_BUCKET_NAME} \
    --output-template-file ./packaged_template.yaml

$ aws cloudformation deploy \
    --template-file ./packaged_template.yaml \
    --stack-name ${YOUR_STACK_NAME} \
    --capabilities CAPABILITY_IAM \
    --region ${YOUR_REGION}

aws cloudformation packageで実装ファイルをzip圧縮し、S3の指定バケットにアップロード、
aws cloudformation deployでCloudFormationのスタックとして、指定された名前でデプロイ

スタックはデプロイされるリソース一式で、スタックを削除すると紐づいているリソースすべてが削除される、
存在しないスタック名でデプロイすると新規作成、すでに存在するスタック名の場合は更新される
デプロイしたLambda関数、API GatewayのAPI名に指定したスタック名で含まれる(明示的にFunctionName, Nameを指定しなかった場合)

hello-worldアプリケーションをデプロイすると、
API Gateway にスタック名でAPIが生成、
Lambdaに${YOUR_STACK_NAME}-HelloWorldFunction-XXXXXXのような名前で関数が生成される

テンプレート内容

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/ # Lambda関数ファイルの場所、※packageコマンドで実際のS3パスに置き換えれる
      Handler: app.lambda_handler # Lambda関数実体(ファイル名app、関数名lambda_handler) 
      Runtime: python3.8
      Events: # Lambdaのトリガとなるイベント
        HelloWorld:
          Type: Api # API Gatewayの以下パス、メソッドコール時にLambdaをキック
          Properties:
            Path: /hello
            Method: get

続き(AWS SAM Lambda関数からS3アクセス)

takmot
大阪中心に活動しているエンジニアです。 興味のある技術は、AWS、Webアプリ、機械学習/Deep Learning等々。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away