サーバーレスアプリケーションのデプロイ - AWS Serverless Application Model

サーバーレスアプリケーションのデプロイ

AWS SAM は、基盤となるデプロイメカニズムとして AWS CloudFormation を使用します。詳細については、AWS CloudFormation ユーザーガイドの「What is AWS CloudFormation?」を参照してください。サーバーレスアプリケーションをデプロイするための標準入力は、sam build コマンドを使用して作成されたビルドアーティファクトです。sam build の詳細については、「サーバーレスアプリケーションの構築」を参照してください。

アプリケーションは、AWS SAM コマンドラインインターフェイス (CLI) コマンドを使用して手動でデプロイできます。また、継続的インテグレーションと継続的デプロイ (CI/CD) システムを使用してアプリケーションのデプロイを自動化することも可能です。AWS SAM アプリケーションのデプロイには、AWS CodePipelineJenkinsGitLab CI/CD、および GitHub Actions などの一般的な CI/CD システムを多数使用できます。

CI/CD システムを使用したデプロイ

AWS SAM は、組織が希望する CI/CD システム用のパイプラインを作成するために役立つことから、デプロイ頻度の短縮、変更のリードタイムの短縮、およびデプロイエラーの低減などの CI/CD のメリットを最小限の労力で実現できます。

AWS SAM は、ビルドコンテナイメージを活用して、サーバーレスアプリケーションの CI/CD タスクを簡素化します。AWS SAM が提供するイメージには、AWS SAM CLI、およびサポートされている多数の AWS Lambda ランタイム用のビルドツールが含まれています。これは、AWS SAM CLI を使用したサーバーレスアプリケーションの構築とパッケージ化を容易にします。これらのイメージは、チームが CI/CD システム用に独自のイメージを作成して管理する必要性も軽減します。AWS SAM ビルドコンテナイメージの詳細については、「イメージリポジトリ」を参照してください。

AWS SAM ビルドコンテナイメージは、複数の CI/CD システムでサポートされています。どの CI/CD システムを使用するかの判断は、いくつかの要因に左右されます。これには、アプリケーションが単一のランタイムを使用するのか、それとも複数のランタイムを使用するのか、またはアプリケーションがコンテナイメージ内で構築されるのか、それともホストマシン (仮想マシン (VM) またはベアメタルホスト) で直接構築されるのか、などがあります。

AWS SAM は、デプロイに関する AWS のベストプラクティスをカプセル化する、複数の CI/CD システム用のデフォルトパイプラインテンプレートの一式も提供します。これらのデフォルトパイプラインテンプレートは標準の JSON/YAML パイプライン設定形式を使用し、組み込まれたベストプラクティスは、マルチアカウントおよびマルチリージョンのデプロイを実行し、パイプラインがインフラストラクチャに意図しない変更を行えないことを実証するために役立ちます。

サーバーレスアプリケーションをデプロイするための AWS SAM の使用には、1) AWS SAM CLI コマンドを使用するように既存のパイプラインを変更する、または 2) 独自のアプリケーションの開始点として使用できる CI/CD パイプラインの設定例を生成するという 2 つの主なオプションがあります。

これらのオプションの詳細については、以下のトピックを参照してください。

AWS SAM CLI を使用したデプロイ

サーバーレスアプリケーションをローカルで開発してテストしたら、sam deploy コマンドを使用してアプリケーションをデプロイできます。

AWS SAM によるプロンプトを用いたデプロイガイドを使用するには、--guided フラグを指定します。このフラグを指定すると、sam deploy コマンドがアプリケーションアーティファクトを zip で圧縮し、それらを Amazon Simple Storage Service (Amazon S3) (.zip ファイルアーカイブの場合) または Amazon Elastic Container Registry (Amazon ECR) (コンテナイメージの場合) のいずれかにアップロードします。その後、コマンドがアプリケーションを AWS クラウドにデプロイします。

例:

# Deploy an application using prompts: sam deploy --guided

AWS SAM CLI を使用したデプロイのトラブルシューティング

AWS SAM CLI エラー: 「Security Constraints Not Satisfied」

sam deploy --guided の実行時に、HelloWorldFunction may not have authorization defined, Is this okay? [y/N] という質問のプロンプトが表示されます。このプロンプトに「N」(デフォルトのレスポンス) と答えた場合、以下のエラーが表示されます。

 
Error: Security Constraints Not Satisfied
            

このプロンプトは、デプロイしようとしているアプリケーションに、認証なしで設定された Amazon API Gateway API が存在する可能性があることを知らせています。このプロンプトに「N」と答えることによって、この状態は望ましくないと伝えることになります。

この問題を解決するには、以下のオプションがあります。

  • 認証を使用してアプリケーションを設定する。認証の設定については、「API Gateway API へのアクセスの制御」を参照してください。

  • この質問に「Y」と答えて、認証なしで設定された API Gateway API が存在するアプリケーションをデプロイしてもよいことを示す。

段階的なデプロイ

AWS SAM アプリケーションを一度にデプロイするのではなく、段階的にデプロイする場合は、AWS CodeDeploy が提供するデプロイ設定を指定できます。詳細については、AWS CodeDeploy ユーザーガイドの「Working with deployment configurations in CodeDeploy」を参照してください。

段階的なデプロイのための AWS SAM アプリケーションの設定については、「サーバーレスアプリケーションの段階的なデプロイ」を参照してください。