sam init を使用する - AWS Serverless Application Model

sam init を使用する

AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) sam init コマンドは、次で構成される新しいサーバーレスアプリケーションを初期化するためのオプションを提供します。

  • インフラストラクチャコードを定義するための AWS SAM テンプレート。

  • アプリケーションを整理するフォルダ構造。

  • AWS Lambda 関数の設定。

AWS SAM CLI の概要については、「AWS SAMCLI とは?」を参照してください。

AWS SAM CLI sam init コマンドオプションのリストについては、「sam init」を参照してください。

新しいサーバーレスアプリケーションを初期化する

AWS SAM CLI を使用して新しいサーバーレスアプリケーションを初期化するには
  1. cd を実行して開始ディレクトリに移動します。

  2. コマンドラインで次を実行します。

    $ sam init
  3. AWS SAM CLI は、新しいサーバーレスアプリケーションを作成するためのインタラクティブフローを通じてユーザーをガイドします。

開始テンプレートを選択する

テンプレートは次で構成されます。

  1. インフラストラクチャコードの AWS SAM テンプレート。

  2. プロジェクトファイルを整理する開始プロジェクトディレクトリ。例えば、これには次が含まれる場合があります。

    1. Lambda 関数コードとその依存関係の構造。

    2. ローカルテスト用のテストイベントを含む events フォルダ。

    3. ユニットテストをサポートする tests フォルダ。

    4. プロジェクトの設定を構成する samconfig.toml ファイル。

    5. ReadMe ファイルおよび他の基本的な開始プロジェクトファイル。

    開始プロジェクトディレクトリの例を次に示します。

    sam-app
    ├── README.md
    ├── __init__.py
    ├── events
    │   └── event.json
    ├── hello_world
    │   ├── __init__.py
    │   ├── app.py
    │   └── requirements.txt
    ├── samconfig.toml
    ├── template.yaml
    └── tests
        ├── __init__.py
        ├── integration
        │   ├── __init__.py
        │   └── test_api_gateway.py
        ├── requirements.txt
        └── unit
            ├── __init__.py
            └── test_handler.py

利用可能な AWS クイックスタートテンプレートのリストから選択することも、独自のカスタムテンプレートの場所を指定することもできます。

AWS クイックスタートテンプレートを選択するには
  1. プロンプトが表示されたら、[AWS クイックスタートテンプレート] を選択します。

  2. まずは AWS クイックスタートテンプレートを選択します。次に例を示します。

    Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
    Choice: 1
    
    Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Multi-step workflow
        3 - Serverless API
        4 - Scheduled task
        5 - Standalone function
        6 - Data processing
        7 - Hello World Example With Powertools
        8 - Infrastructure event management
        9 - Serverless Connector Hello World Example
        10 - Multi-step workflow with Connectors
        11 - Lambda EFS example
        12 - DynamoDB Example
        13 - Machine Learning
    Template: 4
独自のカスタムテンプレートの場所を選択するには
  1. プロンプトが表示されたら、[カスタムテンプレートの場所] を選択します。

    Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
    Choice: 2
  2. AWS SAM CLI は、テンプレートの場所を指定するよう促すプロンプトを表示します。

    Template location (git, mercurial, http(s), zip, path):

    テンプレート .zip ファイルアーカイブに対して次のいずれかの場所を指定します。

    • GitHub リポジトリ – GitHub リポジトリ内の .zip ファイルへのパス。ファイルはリポジトリのルートに存在する必要があります。

    • Mercurial リポジトリ – Mercurial リポジトリ内の .zip ファイルへのパス。ファイルはリポジトリのルートに存在する必要があります。

    • .zip パス – .zip ファイルへの HTTPS またはローカルパス。

  3. AWS SAM CLI は、カスタムテンプレートを使用してサーバーレスアプリケーションを初期化します。

ランタイムを選択する

AWS クイックスタートテンプレートを選択すると、AWS SAM CLI は Lambda 関数のランタイムを選択するよう促すプロンプトを表示します。AWS SAM CLI によって表示されるオプションのリストは、Lambda によってネイティブにサポートされるランタイムです。

  • ランタイムでは、実行環境で実行される言語固有の環境が提供されます。

  • AWS クラウド にデプロイされると、Lambda サービスは実行環境で関数を呼び出します。

カスタムランタイムでは他のプログラミング言語を使用できます。これを実行するには、開始アプリケーション構造を手動で作成する必要があります。その後、カスタムテンプレートの場所を設定することで、sam init を使用してアプリケーションを迅速に初期化できます。

選択内容に基づいて、AWS SAM CLI は Lambda 関数コードと依存関係の開始ディレクトリを作成します。

Lambda がランタイムについて複数の依存関係マネージャーをサポートしている場合は、優先する依存関係マネージャーを選択するよう促すプロンプトが表示されます。

パッケージタイプを選択する

AWS クイックスタートテンプレートとランタイムを選択すると、AWS SAM CLI はパッケージタイプを選択するよう促すプロンプトを表示します。パッケージタイプによって、Lambda サービスで使用するために Lambda 関数がどのようにデプロイされるかが決まります。サポートされているパッケージタイプは次の 2 つです。

  1. コンテナイメージ – 基本オペレーティングシステム、ランタイム、Lambda 拡張機能、アプリケーションコード、およびその依存関係が含まれています。

  2. .zip ファイルアーカイブ – アプリケーション コードとその依存関係が含まれます。

デプロイパッケージタイプの詳細については、「AWS Lambda デベロッパーガイド」の「Lambda デプロイパッケージ」を参照してください。

Lambda 関数がコンテナイメージとしてパッケージ化されたアプリケーションのディレクトリ構造の例を次に示します。AWS SAM CLI はイメージをダウンロードし、関数のディレクトリで Dockerfile を作成してイメージを指定します。

sam-app
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── Dockerfile
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── samconfig.toml
├── template.yaml
└── tests
    ├── __init__.py
    └── unit
        ├── __init__.py
        └── test_handler.py

関数が .zip ファイルアーカイブとしてパッケージ化されたアプリケーションのディレクトリ構造の例を次に示します。

sam-app
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── samconfig.toml
├── template.yaml
└── tests
    ├── __init__.py
    ├── integration
    │   ├── __init__.py
    │   └── test_api_gateway.py
    ├── requirements.txt
    └── unit
        ├── __init__.py
        └── test_handler.py

AWS X-Ray トレースを設定する

AWS X-Ray トレースをアクティブ化するかどうかを選択できます。詳細については、「AWS X-Ray デベロッパーガイド」の「AWS X-Ray とは」を参照してください。

アクティブ化すると、AWS SAM CLI は AWS SAM テンプレートを設定します。次に例を示します。

Globals: Function: ... Tracing: Active Api: TracingEnabled: True

Amazon CloudWatch Application Insights でモニタリングを設定する

Amazon CloudWatch Application Insights を使用してモニタリングをアクティブ化することを選択できます。詳細については、「Amazon CloudWatch ユーザーガイド」の「Amazon CloudWatch Application Insights」を参照してください。

アクティブ化すると、AWS SAM CLI は AWS SAM テンプレートを設定します。次に例を示します。

Resources: ApplicationResourceGroup: Type: AWS::ResourceGroups::Group Properties: Name: Fn::Join: - '' - - ApplicationInsights-SAM- - Ref: AWS::StackName ResourceQuery: Type: CLOUDFORMATION_STACK_1_0 ApplicationInsightsMonitoring: Type: AWS::ApplicationInsights::Application Properties: ResourceGroupName: Fn::Join: - '' - - ApplicationInsights-SAM- - Ref: AWS::StackName AutoConfigurationEnabled: 'true' DependsOn: ApplicationResourceGroup

アプリケーションに名前を付ける

アプリケーションの名前を入力します。AWS SAM CLI は、この名前を使用してアプリケーションの最上位フォルダを作成します。

sam init のオプション

sam init コマンドで使用できる主なオプションの一部を次に示します。すべてのオプションのリストについては、「sam init」を参照してください。

カスタムテンプレートの場所を使用してアプリケーションを初期化する

--location オプションを使用して、サポートされているカスタムテンプレートの場所を指定します。次に例を示します。

$ sam init --location https://github.com/aws-samples/sessions-with-aws-sam/raw/master/starter-templates/web-app.zip

インタラクティブフローを使用せずにアプリケーションを初期化する

--no-interactive オプションを使用して、コマンドラインで設定の選択内容を指定し、インタラクティブフローをスキップします。次に例を示します。

$ sam init --no-interactive --runtime go1.x --name go-demo --dependency-manager mod --app-template hello-world

トラブルシューティング

AWS SAM CLI をトラブルシューティングするには、「AWS SAMCLI トラブルシューティング」を参照してください。

Hello World AWS スターターテンプレートを使用して新しいサーバーレスアプリケーションを初期化する

この例については、「チュートリアル: Hello World アプリケーションのデプロイ」の「 ステップ 1: サンプルの Hello World アプリケーションを初期化する」を参照してください。

カスタムテンプレートの場所を使用して新しいサーバーレスアプリケーションを初期化する

カスタムテンプレートに GitHub の場所を提供する例を次に示します。

$ sam init --location gh:aws-samples/cookiecutter-aws-sam-python $ sam init --location git+sh://git@github.com/aws-samples/cookiecutter-aws-sam-python.git $ sam init --location hg+ssh://hg@bitbucket.org/repo/template-name

ローカルファイルパスの例を次に示します。

$ sam init --location /path/to/template.zip

HTTPS によって到達可能なパスの例を次に示します。

$ sam init --location https://github.com/aws-samples/sessions-with-aws-sam/raw/master/starter-templates/web-app.zip

詳細

sam init コマンドの使用方法の詳細については、次を参照してください。