

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

# AWS SAM CLI を使用してアプリケーションを公開する
<a name="serverless-sam-template-publishing-applications"></a>

 AWS SAM アプリケーションを他のユーザーが見つけてデプロイできるようにするには、 AWS SAM CLI を使用して に公開します AWS Serverless Application Repository。を使用してアプリケーションを公開するには AWS SAM CLI、 AWS SAM テンプレートを使用してアプリケーションを定義する必要があります。それをローカルで、または AWS クラウドでテストする必要もあります。

このトピックの手順に従って、新しいアプリケーションを作成、既存アプリケーションの新しいバージョンを作成、または既存アプリケーションのメタデータを更新します。(実行する内容は、アプリケーションが に既に存在するかどうか AWS Serverless Application Repository、およびアプリケーションメタデータが変更されているかどうかによって異なります）。アプリケーションメタデータの詳細については、「[AWS SAM テンプレートメタデータセクションのプロパティ](serverless-sam-template-publishing-applications-metadata-properties.md)」を参照してください。

## 前提条件
<a name="serverless-sam-template-publishing-applications-prerequisites"></a>

 AWS Serverless Application Repository を使用して にアプリケーションを発行する前に AWS SAM CLI、以下が必要です。
+ インストール済みの AWS SAM CLI。詳細については、「[AWS SAM CLI のインストール](install-sam-cli.md)」を参照してください。 AWS SAM CLI がインストールされているかどうかを確認するには、以下のコマンドを実行します。

  ```
  sam --version
  ```
+ 有効な AWS SAM テンプレート。
+  AWS SAM テンプレートが参照するアプリケーションコードと依存関係。
+ セマンティックバージョン (アプリケーションをパブリックに共有する場合にのみ必要)。この値は 1.0 といったシンプルなものを使用できます。
+ アプリケーションのソースコードをポイントする URL。
+ `README.md` ファイル。このファイルには、お客様がアプリケーションを使用する方法、およびお客様独自の AWS アカウントでアプリケーションをデプロイする前の設定方法が説明されている必要があります。
+ `LICENSE.txt` ファイル (アプリケーションをパブリックに共有する場合にのみ必要)。
+ アプリケーションにネストされたアプリケーションが含まれている場合は、それらがすでに AWS Serverless Application Repositoryで公開されている必要があります。
+ アプリケーションをパッケージ化するときに Amazon Simple Storage Service (Amazon S3) にアップロードするアーティファクトに対する読み取り許可をサービスに付与する、有効な Amazon S3 バケットポリシー。このポリシーを設定するには、以下を実行します。

  1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

  1. アプリケーションのパッケージ化に使用した Amazon S3 バケットの名前を選択します。

  1. [**Permissions**] (アクセス許可) をクリックします。

  1. [**Permissions**] (アクセス許可) タブの [**Bucket policy**] (バケットポリシー) で [**Edit**] (編集) をクリックします。

  1. [**Edit bucket policy**] (バケットポリシーを編集) ページで、[**Policy**] (ポリシー) エディタに以下のポリシーステートメントを貼り付けます。ポリシーステートメントでは、`Resource` エレメントにお使いのバケット名、 AWS エレメントにお使いの `Condition` アカウント ID を使用するようにしてください。`Condition` 要素の式により、 AWS Serverless Application Repository は指定された AWS アカウントからアプリケーションにのみアクセスするアクセス許可を持ちます。ポリシーステートメントの詳細については、*IAM ユーザーガイド*の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {
                     "Service":  "serverlessrepo.amazonaws.com"
                 },
                 "Action": "s3:GetObject",
                 "Resource": "arn:aws:s3:::<your-bucket-name>/*",
                 "Condition" : {
                     "StringEquals": {
                         "aws:SourceAccount": "123456789012"
                     }
                 }
             }
         ]
     }
     ```

------

  1. [**Save changes**] (変更の保存) をクリックします。

## 新しいアプリケーションの公開
<a name="serverless-sam-template-publishing-applications-new-app"></a>

### ステップ 1: AWS SAM テンプレートに`Metadata`セクションを追加する
<a name="serverless-sam-template-publishing-applications-step1"></a>

まず、 AWS SAM テンプレートに `Metadata`セクションを追加します。 AWS Serverless Application Repositoryに公開するアプリケーション情報を入力します。

以下は、`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

Resources:
  HelloWorldFunction:
    Type: AWS::Lambda::Function
      Properties:
        ...
        CodeUri: source-code1
        ...
```

 AWS SAM テンプレートの `Metadata`セクションの詳細については、「」を参照してください[AWS SAM テンプレートメタデータセクションのプロパティ](serverless-sam-template-publishing-applications-metadata-properties.md)。

### ステップ 2: アプリケーションをパッケージ化する
<a name="serverless-sam-template-publishing-applications-step2"></a>

以下の AWS SAM CLI コマンドを実行します。このコマンドは、アプリケーションアーティファクトを Amazon S3 にアップロードし、`packaged.yaml` と呼ばれる新しいテンプレートファイルを出力します。

```
sam package --output-template-file packaged.yaml --s3-bucket <your-bucket-name>
```

この `packaged.yaml` テンプレートファイルは、次のステップでアプリケーションを AWS Serverless Application Repositoryに公開するために使用します。このファイルは元のテンプレートファイル (`template.yaml`) と似ていますが、`CodeUri`、`LicenseUrl`、および `ReadmeUrl` プロパティが、それぞれのアーティファクトが含まれる Amazon S3 バケットとオブジェクトをポイントするという重要な相違点があります。

`packaged.yaml` テンプレートファイルの例から次のスニペットは、`CodeUri` プロパティを示しています。

```
MySampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: s3://bucketname/fbd77a3647a4f47a352fcObjectGUID

...
```

### ステップ 3: アプリケーションを公開する
<a name="serverless-sam-template-publishing-applications-step3"></a>

 AWS SAM アプリケーションのプライベートバージョンを に発行するには AWS Serverless Application Repository、次の AWS SAM CLIコマンドを実行します。

```
sam publish --template packaged.yaml --region us-east-1
```

`sam publish` コマンドの出力には、 AWS Serverless Application Repository上のアプリケーションへのリンクが含まれます。また、[AWS Serverless Application Repository ランディングページ](https://serverlessrepo.aws.amazon.com/applications)に直接移動して、アプリケーションを検索することもできます。

### ステップ 4: アプリケーションを共有する (オプション)
<a name="serverless-sam-template-publishing-applications-step4"></a>

アプリケーションはデフォルトでプライベートに設定されているため、他の AWS アカウントには表示されません。アプリケーションを他のユーザーと共有するには、アプリケーションを公開するか、特定の AWS アカウントリストにアクセス許可を付与する必要があります。

を使用してアプリケーションを共有する方法については AWS CLI、「 *AWS Serverless Application Repository デベロッパーガイド*」の[AWS Serverless Application Repository 「リソースベースのポリシーの例](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/security_iam_resource-based-policy-examples.html)」を参照してください。 AWS マネジメントコンソールを使用したアプリケーションの共有については、*AWS Serverless Application Repository デベロッパーガイド*の「[Sharing an Application](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-how-to-publish.html#share-application)」を参照してください。

## 既存アプリケーションの新しいバージョンの公開
<a name="serverless-sam-template-publishing-applications-new-version"></a>

にアプリケーションを公開したら AWS Serverless Application Repository、新しいバージョンのアプリケーションを公開できます。例えば、Lambda 関数コードを変更したり、アプリケーションアーキテクチャに新しいコンポーネントを追加した場合などです。

以前に公開したアプリケーションを更新するには、上記と同じプロセスを使用してアプリケーションを再度公開します。 AWS SAM テンプレートファイルの `Metadata` セクションには、最初に公開したときのものと同じアプリケーション名を入力しますが、新しい `SemanticVersion` 値を含めてください。

例えば、アプリケーションが `SampleApp` という名前と、`1.0.0` の `SemanticVersion` で公開されたとします。そのアプリケーションを更新するには、 AWS SAM テンプレートにアプリケーション名 `SampleApp` と、`1.0.1` の `SemanticVersion` (または `1.0.0` 以外の任意の番号) を使用する必要があります。

## その他のトピック
<a name="serverless-sam-template-publishing-applications-additional-topics"></a>
+ [AWS SAM テンプレートメタデータセクションのプロパティ](serverless-sam-template-publishing-applications-metadata-properties.md)