クイックスタート: アプリケーションの発行 - AWS Serverless Application Repository

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クイックスタート: アプリケーションの発行

このガイドでは、AWS SAM CLI を使用して、サーバレスアプリケーションのサンプルをダウンロード、構築、テストして、AWS Serverless Application Repository に発行する手順を示します。このサンプルアプリケーションを参考にして、独自のサーバーレスアプリケーションを開発して発行できます。

概要

次の手順は、サーバーレスアプリケーションのサンプルをダウンロード、構築、および発行する方法の概要です。

  1. 初期化するsam init を使用してテンプレートからサンプルアプリケーションをダウンロードします。

  2. ローカルでテストするsam local invoke または sam local start-api を使用して、アプリケーションをローカルでテストします。これらのコマンドでは、Lambda 関数をローカルに呼び出しますが、読み取りと書き込みは AWS クラウド内の AWS リソースに対して行われます。

  3. パッケージ化する。Lambda 関数に問題がなければ、sam package を使用して Lambda 関数、AWS SAM テンプレート、および依存関係を AWS CloudFormation デプロイパッケージとしてバンドルします。このステップでは、AWS Serverless Application Repository にアップロードするアプリケーションに関する情報も含めます。

  4. 発行するsam publish を使用してアプリケーションを AWS Serverless Application Repository に発行します。このステップの最後で、AWS Serverless Application Repository でアプリケーションを表示し、AWS Serverless Application Repository を使用してアプリケーションを AWS クラウドにデプロイできます。

次のセクションの例 Hello World アプリケーション では、サーバーレスアプリケーションの構築と発行の手順を示します。

Hello World アプリケーション

この演習では、単純な API バックエンドを示す Hello World サーバーレスアプリケーションをダウンロードしてテストします。これには、GET オペレーションと Lambda 関数をサポートする Amazon API Gateway エンドポイントが含まれています。エンドポイントに GET リクエストを送信すると、API Gateway により Lambda 関数が呼び出されます。次に、AWS Lambda は関数を実行します。この関数は、単に hello world メッセージを返します。

アプリケーションには次のコンポーネントがあります。

  • Hello World アプリケーションの 2AWS SAMAWS つのリソースを定義するテンプレート。1 つは GET オペレーションを使用する API Gateway サービスで、もう 1 つは Lambda 関数です。このテンプレートは、API Gateway GET オペレーションと Lambda 関数の間のマッピングも定義します。

  • Python で書かれたアプリケーションコード。

開始する前に

この演習に必要な設定が整っていることを確認します。

ステップ 1: アプリケーションの初期化

このセクションでは、AWS SAM テンプレートとアプリケーションコードで構成されるサンプルアプリケーションをダウンロードします。

アプリケーションを初期化する
  1. AWS SAM CLI コマンドプロンプトで以下のコマンドを実行します。

    sam init --runtime python3.6
  2. コマンドで作成されたディレクトリの内容を確認します (sam-app/)。

    • template.yaml – Hello World アプリケーションが必要とする 2 つの AWS リソース (Lambda 関数、および GET オペレーションをサポートする API Gateway エンドポイント) を定義します。このテンプレートは、2 つのリソース間のマッピングも定義します。

    • Hello World アプリケーションコードに関連するコンテンツ:

      • hello_world/ ディレクトリ - アプリケーションコードが含まれています。このコードを実行すると、hello world が返されます。

    注記

    この演習では、アプリケーションコードを Python で記述し、init コマンドでランタイムを指定します。AWS Lambda は、アプリケーションコードを作成するための追加の言語をサポートしています。別のサポートされているランタイムを指定すると、init コマンドは、指定した言語での Hello World コードと、その言語で参照できる README.md ファイルを提供します。サポートされているランタイムの詳細については、Lambda 実行環境と使用可能なライブラリを参照してください。

ステップ 2: アプリケーションのローカルテスト

これで、ローカルマシンに AWS SAM アプリケーションが準備されました。次に、以下の手順に従ってアプリケーションをローカルでテストします。

アプリケーションをローカルでテストするには
  1. API ゲートウェイエンドポイントをローカルで起動します。template.yaml ファイルがあるディレクトリから次のコマンドを実行する必要があります。

    sam-app> sam local start-api --region us-east-1

    このコマンドは API Gateway エンドポイントを返します。このエンドポイントにローカルテストのためのリクエストを送信できます。

  2. アプリケーションをテストします。API Gateway エンドポイント URL をコピーしてブラウザに貼り付け、Enter を選択します。API Gateway エンドポイント URL の一例は、http://127.0.0.1:3000/hello です。

    API Gateway は、エンドポイントのマッピング先の Lambda 関数をローカルに呼び出します。Lambda 関数は、ローカルの Docker コンテナで実行され、hello world を返します。API Gateway は、テキストが含まれているブラウザへのレスポンスを返します。

演習: メッセージの文字列を変更する

サンプルアプリケーションを正常にテストしたら、簡単な変更を試すために、返されたメッセージの文字列を変更します。

  1. /hello_world/app.py ファイルを編集して、メッセージの文字列を 'hello world' から 'Hello World!' に変更します。

  2. ブラウザでテスト URL をリロードし、新しい文字列を確認します。

sam local プロセスを再起動することなく、新しいコードが動的にロードされることがわかります。

ステップ 3: アプリケーションのパッケージ化

アプリケーションをローカルでテストしたら、AWS SAM CLI を使用してデプロイパッケージとパッケージ化された AWS SAM テンプレートを作成します。

注記

次の手順では、アプリケーションコードを含む hello_world/ ディレクトリの内容の .zip ファイルを作成します。この .zip ファイルは、サーバーレスアプリケーションのデプロイパッケージです。詳細については、AWS Lambda デベロッパーガイドデプロイパッケージの作成 (Python)を参照してください。

Lambda デプロイパッケージを作成する
  1. Metadata セクションを AWS SAM テンプレートファイルに追加し、必要なアプリケーション情報を指定します。AWS SAM テンプレートの Metadata セクションの詳細については、AWS Serverless Application Model デベロッパーガイドAWS SAM テンプレートのメタデータセクションのプロパティを参照してください。

    次に、Metadata セクションの例を示します。

    Metadata: AWS::ServerlessRepo::Application: Name: my-app Description: hello world Author: user1 SpdxLicenseId: Apache-2.0 LicenseUrl: LICENSE.txt ReadmeUrl: README.md Labels: ['tests'] HomePageUrl: https://github.com/user1/my-app-project SemanticVersion: 0.0.1 SourceCodeUrl: https://github.com/user1/my-app-project

    LicenseUrl プロパティと ReadmeUrl プロパティは、ローカルファイルへの参照 (上の例を参照) であるか、これらのアーティファクトをすでにホストしている Amazon S3 バケットへのリンクとなります。

  2. パッケージ化されたコードを保存する場所に S3 バケットを作成します。既存の S3 バケットを使用する場合は、このステップをスキップします。

    sam-app> aws s3 mb s3://bucketname
  3. 次の package AWS SAM CLI コマンドを実行して、Lambda 関数のデプロイパッケージを作成します。

    sam-app> sam package \ --template-file template.yaml \ --output-template-file packaged.yaml \ --s3-bucket bucketname

    コマンドが以下の操作を行います。

    • aws-sam/hello_world/ ディレクトリの内容を圧縮して Amazon S3 にアップロードします。

    • デプロイパッケージ、README ファイル、および LICENSE ファイルを --s3-bucket オプションで指定した Amazon S3 バケットにアップロードします。

    • 新しいテンプレートファイル (packaged.yaml) を出力します。このファイルは、次のステップでアプリケーションを AWS Serverless Application Repository に発行するために使用します。packaged.yaml テンプレートファイルは元のテンプレートファイル (template.yaml) と似ていますが、大きな違いがあります。それは、CodeUriLicenseUrl、および ReadmeUrl プロパティはそれぞれのアーティファクトを含む Amazon S3 バケットとオブジェクトを指すことです。packaged.yaml テンプレートファイルの例から次のスニペットは、CodeUri プロパティを示しています。

      HelloWorldFunction: Type: AWS::Serverless::Function # For more information about function resources, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: s3://bucketname/fbd77a3647a4f47a352fcObjectGUID ...

ステップ 4: アプリケーションを発行する

デプロイパッケージを作成したので、これを使用してアプリケーションを AWS Serverless Application Repository に発行します。

サーバーレスアプリケーションを AWS Serverless Application Repository に発行するには
  • 次のコマンドを実行して、AWS Serverless Application Repository で新しいアプリケーションを発行します。最初に作成するバージョンは 0.0.1 とします。

    sam-app> sam publish \ --template packaged.yaml \ --region us-east-1
注記

アプリケーションは、デフォルトで非公開として作成されます。アプリケーションの表示とデプロイを他の AWS アカウントに許可する前に、アプリケーションを共有する必要があります。アプリケーションの共有の詳細については、次のステップ を参照してください。

次のステップ

サンプルアプリケーションを発行したので、次にこれを使用していくつかの操作を行います。

  • AWS Serverless Application Repository でアプリケーションを表示するsam publish コマンドの出力には、アプリケーションの詳細ページを直接表示するための AWS Serverless Application Repository へのリンクが含まれています。AWS Serverless Application Repository ランディングページに移動して、アプリケーションを検索することもできます。

  • アプリケーションを共有する – アプリケーションはデフォルトで非公開に設定されるため、他の AWS アカウントでは表示できません。アプリケーションを他のユーザーと共有するには、アプリケーションを公開とするか、一連の特定の AWS アカウントにアクセス許可を付与する必要があります。AWS CLI を使用してアプリケーションを共有する方法については、「AWS Serverless Application Repositoryアプリケーションポリシーの例」を参照してください。コンソールを使用してアプリケーションを共有する方法については、「アプリケーションの共有」を参照してください。

詳細情報

AWS SAM テンプレートの Metadata セクション、AWS SAM CLI の sam package および sam publish コマンドの詳細については、AWS Serverless Application Model デベロッパーガイドAWS SAM CLI を使用したアプリケーションの発行を参照してください。