ネストされたアプリケーションの使用
サーバーレスアプリケーションには、1 つ、または複数のネストされたアプリケーションを含めることができます。ネストされたアプリケーションは、スタンドアロンのアーティファクトとして、または大規模なアプリケーションのコンポーネントとしてデプロイできます。
サーバーレスアーキテクチャが大きくなるにつれて、同じコンポーネントが複数のアプリケーションテンプレートに定義されているという一般的なパターンが形成されます。一般的なパターンを専用アプリケーションとして分離してから、それらを新規、または既存のアプリケーションテンプレートの一部としてネストできるようになりました。ネストされたアプリケーションを使用することで、アプリケーションに固有のビジネスロジックにさらに集中できるようになります。
サーバーレスアプリケーションでネストされたアプリケーションを定義するには、AWS::Serverless::Application リソースタイプを使用します。
ネストされたアプリケーションは、以下の 2 つのソースから定義できます。
-
AWS Serverless Application Repository アプリケーション - AWS Serverless Application Repository にある、アカウントで利用可能なアプリケーションを使用して、ネストされたアプリケーションを定義できます。これには、アカウント内のプライベートアプリケーション、アカウントとプライベートに共有されたアプリケーション、または AWS Serverless Application Repository で一般公開されているアプリケーションを使用できます。異なるデプロイ許可レベルの詳細については、AWS Serverless Application Repository デベロッパーガイドの「Application Deployment Permissions」と「Publishing Applications」を参照してください。
-
ローカルアプリケーション - ローカルファイルシステムに保存されているアプリケーションを使用して、ネストされたアプリケーションを定義できます。
サーバーレスアプリケーションで両タイプのネストされたアプリケーションを定義するために AWS SAM を使用する方法の詳細については、以下のセクションを参照してください。
サーバーレスアプリケーションでネストできるアプリケーションの最大数は 200 です。
ネストされたアプリケーションで使用できるパラメータの最大数は 60 です。
AWS Serverless Application Repository からのネストされたアプリケーションの定義
ネストされたアプリケーションは、AWS Serverless Application Repository で利用可能なアプリケーションを使用することによって定義できます。また、AWS Serverless Application Repository を使用して、ネストされたアプリケーションが含まれるアプリケーションを保存し、配信することもできます。AWS Serverless Application Repository にあるネストされたアプリケーションの詳細を確認するには、AWS SDK、AWS CLI、または Lambda コンソールを使用できます。
AWS Serverless Application Repository でホストされるアプリケーションをサーバーレスアプリケーションの AWS SAM で定義するには、すべての AWS Serverless Application Repository アプリケーションの詳細ページにある [Copy as SAM Resource] (SAM リソースとしてコピーする) ボタンを使用します。これを実行するには、以下の手順を実行します。
-
AWS Management Console にサインインしていることを確認します。
-
AWS Serverless Application Repository デベロッパーガイドの「Browsing, Searching, and Deploying Applications」セクションにある手順に従って、ネストしたいアプリケーションを AWS Serverless Application Repository で検索します。
-
[Copy as SAM Resource] (SAM リソースとしてコピーする) ボタンをクリックします。これで、表示されているアプリケーションの SAM テンプレートセクションがクリップボードにコピーされます。
-
このアプリケーションにネストしたいアプリケーションの SAM テンプレートファイルの
Resources:
セクションに、この SAM テンプレートセクションを貼り付けます。
以下は、AWS Serverless Application Repository でホストされているネストされたアプリケーションの SAM テンプレートセクションの例です。
Transform: AWS::Serverless-2016-10-31 Resources:
applicationaliasname
: Type: AWS::Serverless::Application Properties: Location: ApplicationId: arn:aws:serverlessrepo:us-east-1
:123456789012
:applications/application-alias-name
SemanticVersion: 1.0.0 Parameters: # Optional parameter that can have default value overridden# ParameterName1: 15 # Uncomment to override default value
# Required parameter that needs value to be providedParameterName2: YOUR_VALUE
必要なパラメータ設定がない場合は、テンプレートの Parameters:
セクションを省略できます。
AWS Serverless Application Repository でホストされているネストされたアプリケーションが含まれるアプリケーションは、ネストされたアプリケーションの共有制約を継承します。
例えば、あるアプリケーションが一般公開されていて、それにこの親アプリケーションを作成した AWS アカウントとプライベート限定で共有されている、ネストされたアプリケーションが含まれているとします。この場合、このネストされたアプリケーションをデプロイする許可が AWS アカウントにないときに、親アプリケーションをデプロイすることはできません。アプリケーションをデプロイするための許可の詳細については、AWS Serverless Application Repository デベロッパーガイドの「Application Deployment Permissions」と「Publishing Applications」を参照してください。
ローカルファイルシステムからのネストされたアプリケーションの定義
ローカルファイルシステムに保存されているアプリケーションを使用して、ネストされたアプリケーションを定義できます。これは、ローカルファイルシステムに保存されている AWS SAM テンプレートファイルへのパスを指定することによって実行します。
以下は、ネストされたローカルアプリケーションの SAM テンプレートセクションの例です。
Transform: AWS::Serverless-2016-10-31 Resources:
applicationaliasname
: Type: AWS::Serverless::Application Properties: Location:../my-other-app/template.yaml
Parameters: # Optional parameter that can have default value overridden# ParameterName1: 15 # Uncomment to override default value
# Required parameter that needs value to be providedParameterName2: YOUR_VALUE
パラメータ設定がない場合は、テンプレートの Parameters:
セクションを省略できます。
ネストされたアプリケーションのデプロイ
AWS SAM CLI コマンド sam
deploy
を使用して、ネストされたアプリケーションをデプロイできます。詳細については、「サーバーレスアプリケーションのデプロイ」を参照してください。
ネストされたアプリケーションが含まれるアプリケーションをデプロイするときは、それを承認する必要があります。これは、CAPABILITY_AUTO_EXPAND を CreateCloudFormationChangeSet API に渡すか、aws serverlessrepo
create-cloud-formation-change-set
AWS CLI コマンドを使用して実行します。
ネストされたアプリケーションの承認に関する詳細については、AWS Serverless Application Repository デベロッパーガイドの「Acknowledging IAM Roles, Resource Policies, and Nested Applications when Deploying Applications」を参照してください。