

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

# クイックスタート: アプリケーションの発行
<a name="serverlessrepo-quick-start"></a>

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

## 概要:
<a name="serverlessrepo-quick-start-steps"></a>

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

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

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

1. **パッケージ化する**。Lambda 関数に満足したら、 を使用して Lambda 関数、 AWS SAM テンプレート、および依存関係を CloudFormation デプロイパッケージにバンドルします`sam package`。このステップでは、 AWS Serverless Application Repositoryにアップロードするアプリケーションに関する情報も含めます。

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

次のセクションの例 [Hello World アプリケーション](#serverlessrepo-quick-start-hello-world) では、サーバーレスアプリケーションの構築と発行の手順を示します。

## Hello World アプリケーション
<a name="serverlessrepo-quick-start-hello-world"></a>

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

アプリケーションには次のコンポーネントがあります。
+ Hello World アプリケーションの 2 つの AWS リソースを定義する AWS SAM テンプレート。GET オペレーションを使用する API Gateway サービスと Lambda 関数です。このテンプレートは、API Gateway GET オペレーションと Lambda 関数の間のマッピングも定義します。
+ Python で書かれたアプリケーションコード。

## 開始する前に
<a name="serverlessrepo-quick-start-hello-world-prereq"></a>

この演習に必要な設定が整っていることを確認します。
+ 管理者権限を持つ IAM ユーザーの AWS アカウントが必要です。[AWS アカウントのセットアップ](https://docs.aws.amazon.com/lambda/latest/dg/setup.html)を参照してください。
+ CLI (コマンドラインインターフェイス) AWS SAM がインストールされている必要があります。[「 AWS SAM CLI のインストール](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)」を参照してください。
+ バージョン 1.16.77 以降の AWS CLI がインストールされている必要があります。「[AWS Command Line Interfaceのインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。

## ステップ 1: アプリケーションの初期化
<a name="serverlessrepo-quick-start-hello-world-setup-local-app"></a>

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

**アプリケーションを初期化する**

1.  AWS SAM CLI コマンドプロンプトで次のコマンドを実行します。

   ```
   sam init --runtime python3.6 
   ```

1. コマンドで作成されたディレクトリの内容を確認します (`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 実行環境と使用可能なライブラリ](https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html)を参照してください。

    

## ステップ 2: アプリケーションのローカルテスト
<a name="serverlessrepo-quick-start-hello-world-test-locally"></a>

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



**アプリケーションをローカルでテストするには**

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

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

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

1. アプリケーションをテストします。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!'` に変更します。

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

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

## ステップ 3: アプリケーションのパッケージ化
<a name="serverlessrepo-quick-start-hello-world-package-app"></a>

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

**注記**  
次の手順では、アプリケーションコードを含む `hello_world/` ディレクトリの内容の .zip ファイルを作成します。この .zip ファイルは、サーバーレスアプリケーションの**デプロイパッケージ**です。詳細については、*AWS Lambda デベロッパーガイド*の[デプロイパッケージの作成 (Python)](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html)を参照してください。

**Lambda デプロイパッケージを作成する**

1. 必要なアプリケーション情報を提供する`Metadata`セクションを AWS SAM テンプレートファイルに追加します。 AWS SAM テンプレート`Metadata`のセクションの詳細については、「 *AWS Serverless Application Model デベロッパーガイド*」の[AWS SAM 「テンプレートメタデータセクションのプロパティ](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications-metadata-properties.html)」を参照してください。

   次に、`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 バケットへのリンクとなります。

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

   ```
   sam-app> aws s3 mb s3://bucketname
   ```

1. 次の `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`) と似ていますが、大きな違いがあります。それは、`CodeUri`、`LicenseUrl`、および `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: アプリケーションを発行する
<a name="serverlessrepo-quick-start-hello-world-publish-app"></a>

デプロイパッケージを作成したので、これを使用してアプリケーションを 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 アカウントがアプリケーションを表示およびデプロイできるようにするには、アプリケーションを共有する必要があります。アプリケーションの共有の詳細については、**次のステップ** を参照してください。

## 次のステップ
<a name="serverlessrepo-quick-start-nextstep"></a>

サンプルアプリケーションを発行したので、次にこれを使用していくつかの操作を行います。
+ **でアプリケーションを表示する AWS Serverless Application Repository** – `sam publish` コマンドの出力には、アプリケーションの詳細ページへの AWS Serverless Application Repository 直接リンクが含まれます。 AWS Serverless Application Repository ランディングページに移動してアプリケーションを検索することもできます。
+ **アプリケーションを共有する** – アプリケーションはデフォルトで非公開に設定されるため、他の AWS アカウントでは表示できません。アプリケーションを他のユーザーと共有するには、アプリケーションを公開するか、アカウントの特定のリストにアクセス許可を付与する必要があります AWS 。を使用してアプリケーションを共有する方法については、 AWS CLI 「」を参照してください[AWS Serverless Application Repository アプリケーションポリシーの例](security_iam_resource-based-policy-examples.md)。コンソールを使用してアプリケーションを共有する方法については、「[アプリケーションの共有](serverlessrepo-how-to-publish.md#share-application)」を参照してください。

## 詳細情報
<a name="serverlessrepo-quick-start-moreinfo"></a>

 AWS SAM テンプレート`Metadata`のセクション`sam package`と CLI AWS SAM の`sam publish`コマンドの詳細については、 *AWS Serverless Application Model デベロッパーガイド*の[「 AWS SAM CLI を使用したアプリケーションの発行](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html)」を参照してください。