チュートリアル: サーバーレスアプリケーションをデプロイする - Amazon CodeCatalyst

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

チュートリアル: サーバーレスアプリケーションをデプロイする

このチュートリアルでは、ワークフローを使用してサーバーレスアプリケーションを CloudFormation スタックとして構築、テスト、デプロイする方法について説明します。

このチュートリアルのアプリケーションは、「Hello World」メッセージを出力するシンプルなウェブアプリケーションです。これは AWS Lambda 関数と Amazon API Gateway で構成され、 の拡張機能である AWS Serverless Application Model (AWS SAM) を使用して構築しますAWS CloudFormation

前提条件

開始する前に:

  • 接続された AWS アカウントを持つ CodeCatalyst スペースが必要です。詳細については、「スペースの作成」を参照してください。

  • スペースには、次の名前の空のプロジェクトが必要です。

    codecatalyst-cfn-project

    このプロジェクトを作成するには、最初から開始 オプションを使用します。

    詳細については、「Amazon での空のプロジェクトの作成 CodeCatalyst」を参照してください。

  • プロジェクトには、次の CodeCatalyst 環境が必要です。

    codecatalyst-cfn-environment

    この環境を次のように設定します。

    • 非本番環境の など、任意のタイプを選択します。

    • アカウントをその AWS アカウントに接続します。

    • デフォルトIAMロール で、任意のロールを選択します。後で別のロールを指定します。

    詳細については、「AWS アカウント と へのデプロイ VPCs」を参照してください。

ステップ 1: ソースリポジトリを作成する

このステップでは、 でソースリポジトリを作成します CodeCatalyst。このリポジトリは、Lambda 関数ファイルなどのチュートリアルのソースファイルを保存するために使用されます。

ソースリポジトリの詳細については、「」を参照してくださいソースリポジトリの作成

ソースリポジトリを作成するには
  1. で CodeCatalyst、ナビゲーションペインでコード を選択し、ソースリポジトリ を選択します。

  2. [リポジトリの追加] を選択し、[リポジトリの作成] を選択します。

  3. リポジトリ名 で、次のように入力します。

    codecatalyst-cfn-source-repository
  4. [作成] を選択します。

これで、 というリポジトリが作成されましたcodecatalyst-cfn-source-repository

ステップ 2: AWS ロールを作成する

このステップでは、次の AWS IAMロールを作成します。

  • ロールのデプロイ — サーバーレスアプリケーションをデプロイする AWS アカウントと CloudFormation サービスにアクセスするためのデプロイ CodeCatalyst AWS CloudFormation スタックアクションのアクセス許可を付与します。 AWS CloudFormation スタックのデプロイアクションはワークフローの一部です。

  • ビルドロール – AWS アカウントにアクセスしてサーバーレスアプリケーションパッケージが保存される Amazon S3 に書き込むための CodeCatalyst ビルドアクションのアクセス許可を付与します。ビルドアクションはワークフローの一部です。

  • スタックロール – 後で指定する AWS SAM テンプレートで指定されたリソースを読み取って変更する CloudFormation アクセス許可を付与します。また、 にアクセス許可を付与します CloudWatch。

IAM ロールの詳細については、「 ユーザーガイド」の「 IAMロールAWS Identity and Access Management 」を参照してください。

注記

時間を節約するために、前述の 3 つのロールではなく、CodeCatalystWorkflowDevelopmentRole-spaceNameロールと呼ばれる 1 つのロールを作成できます。詳細については、「アカウントとスペースのCodeCatalystWorkflowDevelopmentRole-spaceNameロールの作成」を参照してください。CodeCatalystWorkflowDevelopmentRole-spaceName ロールには、セキュリティリスクをもたらす可能性のある非常に広範なアクセス許可があることを理解します。このロールは、セキュリティが懸念されないチュートリアルとシナリオでのみ使用することをお勧めします。このチュートリアルでは、前述の 3 つのロールを作成することを前提としています。

注記

Lambda 実行ロールも必要ですが、ステップ 5 でワークフローを実行するときにsam-template.ymlファイルが作成するため、今すぐ作成する必要はありません。

デプロイロールを作成するには
  1. 次のように、ロールのポリシーを作成します。

    1. にサインインします AWS。

    2. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

    3. ナビゲーションペインで、ポリシー を選択します。

    4. ポリシーの作成を選択します。

    5. [JSON] タブを選択します。

    6. 既存のコードを削除します。

    7. 次のコードを貼り付けます。

      { "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
      注記

      ロールを初めて使用してワークフローアクションを実行するときは、リソースポリシーステートメントでワイルドカードを使用し、使用可能になった後にリソース名でポリシーの範囲を絞り込みます。

      "Resource": "*"
    8. [次へ: タグ] を選択します。

    9. [次へ: レビュー] を選択します。

    10. 名前 で、次のように入力します。

      codecatalyst-deploy-policy
    11. [ポリシーの作成] を選択します。

      これで、アクセス許可ポリシーが作成されました。

  2. デプロイロールを次のように作成します。

    1. ナビゲーションペインで ロール を選択してから、ロールを作成する を選択します。

    2. カスタム信頼ポリシー を選択します。

    3. 既存のカスタム信頼ポリシーを削除します。

    4. 次のカスタム信頼ポリシーを追加します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. [次へ] をクリックします。

    6. アクセス許可ポリシー で、そのチェックボックスを検索codecatalyst-deploy-policyして選択します。

    7. [次へ] をクリックします。

    8. ロール名 には、次のように入力します。

      codecatalyst-deploy-role
    9. ロールの説明 には、次のように入力します。

      CodeCatalyst deploy role
    10. [ロールの作成] を選択します。

    これで、信頼ポリシーとアクセス許可ポリシーを使用してデプロイロールが作成されました。

  3. 次のようにARN、デプロイロール を取得します。

    1. ナビゲーションペインで [ロール] を選択します。

    2. 検索ボックスに、作成したロールの名前 () を入力しますcodecatalyst-deploy-role

    3. リストからロールを選択します。

      ロールの概要ページが表示されます。

    4. 上部で、 ARN値をコピーします。

    これで、適切なアクセス許可を持つデプロイロールを作成し、その を取得しましたARN。

ビルドロールを作成するには
  1. 次のように、ロールのポリシーを作成します。

    1. にサインインします AWS。

    2. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

    3. ナビゲーションペインで、ポリシー を選択します。

    4. ポリシーの作成を選択します。

    5. [JSON] タブを選択します。

    6. 既存のコードを削除します。

    7. 次のコードを貼り付けます。

      { "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:PutObject", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
      注記

      ロールを初めて使用してワークフローアクションを実行するときは、リソースポリシーステートメントでワイルドカードを使用し、使用可能になった後にリソース名でポリシーの範囲を絞り込みます。

      "Resource": "*"
    8. [次へ: タグ] を選択します。

    9. [次へ: レビュー] を選択します。

    10. 名前 で、次のように入力します。

      codecatalyst-build-policy
    11. [ポリシーの作成] を選択します。

      これで、アクセス許可ポリシーが作成されました。

  2. 次のようにビルドロールを作成します。

    1. ナビゲーションペインで ロール を選択してから、ロールを作成する を選択します。

    2. カスタム信頼ポリシー を選択します。

    3. 既存のカスタム信頼ポリシーを削除します。

    4. 次のカスタム信頼ポリシーを追加します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. [次へ] をクリックします。

    6. アクセス許可ポリシー で、そのチェックボックスを検索codecatalyst-build-policyして選択します。

    7. [次へ] をクリックします。

    8. ロール名 には、次のように入力します。

      codecatalyst-build-role
    9. ロールの説明 には、次のように入力します。

      CodeCatalyst build role
    10. [ロールの作成] を選択します。

    これで、信頼ポリシーとアクセス許可ポリシーを使用してビルドロールが作成されました。

  3. 次のようにARN、ビルドロール を取得します。

    1. ナビゲーションペインで [ロール] を選択します。

    2. 検索ボックスに、作成したロールの名前 () を入力しますcodecatalyst-build-role

    3. リストからロールを選択します。

      ロールの概要ページが表示されます。

    4. 上部で、 ARN値をコピーします。

    これで、適切なアクセス許可を持つビルドロールを作成し、その を取得しましたARN。

スタックロールを作成するには
  1. スタックをデプロイするアカウント AWS を使用して にサインインします。

  2. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

  3. 次のようにスタックロールを作成します。

    1. ナビゲーションペインで Roles (ロール) を選択します。

    2. [ロールの作成] を選択します。

    3. [AWS サービス] を選択してください。

    4. ユースケースセクションCloudFormationで、ドロップダウンリストから を選択します。

    5. ラジオボタン [CloudFormation] を選択します。

    6. 下部で、次へ を選択します。

    7. 検索ボックスを使用して、次のアクセス許可ポリシーを検索し、それぞれのチェックボックスをオンにします。

      注記

      ポリシーを検索してもポリシーが表示されない場合は、フィルターをクリアを選択してから再試行してください。

      • CloudWatchFullAccess

      • AWS CloudFormationFullAccess

      • IAMFullAccess

      • AWS Lambda_FullAccess

      • mazonAPIGateway管理者

      • AmazonS3FullAccess

      • AmazonEC2ContainerRegistryFullAccess

      最初のポリシーでは、アラームが発生したときにスタックのロールバックを有効にする CloudWatch ために へのアクセスを許可します。

      残りのポリシーでは AWS SAM 、このチュートリアルでデプロイされるスタック内のサービスとリソースへのアクセスを に許可します。詳細については、「 AWS Serverless Application Model デベロッパーガイド」の「アクセス許可」を参照してください。

    8. [次へ] をクリックします。

    9. ロール名 には、次のように入力します。

      codecatalyst-stack-role
    10. [ロールの作成] を選択します。

  4. 次のようにARN、スタックロールの を取得します。

    1. ナビゲーションペインで [ロール] を選択します。

    2. 検索ボックスに、作成したロールの名前 () を入力しますcodecatalyst-stack-role

    3. リストからロールを選択します。

    4. 概要セクションでARN値をコピーします。これは、後で必要になります。

    これで、適切なアクセス許可を持つスタックロールが作成され、その を取得しましたARN。

ステップ 3: に AWS ロールを追加する CodeCatalyst

このステップでは、ビルドロール (codecatalyst-build-role) とデプロイロール (codecatalyst-deploy-role) をスペース内の CodeCatalyst アカウント接続に追加します。

注記

接続にスタックロール (codecatalyst-stack-role) を追加する必要はありません。これは、 CodeCatalyst と の間にデプロイロール AWS を使用して接続が確立された後、スタックロールが CloudFormation ( ではなく CodeCatalyst) によって使用されるためです。スタックロールは、 が にアクセス CodeCatalyst するために使用しないため AWS、アカウント接続に関連付ける必要はありません。

ビルドロールとデプロイロールをアカウント接続に追加するには
  1. で CodeCatalyst、スペースに移動します。

  2. [AWS アカウント] を選択します。アカウント接続のリストが表示されます。

  3. ビルドロールとデプロイロールを作成したアカウントを表す AWS アカウント接続を選択します。

  4. AWS 管理コンソール からロールの管理 を選択します。

    「Amazon CodeCatalyst スペースへのIAMロールの追加」ページが表示されます。ページにアクセスするには、サインインが必要な場合があります。

  5. で作成した既存のロールを追加 IAMを選択します。

    ドロップダウンリストが表示されます。このリストには、 codecatalyst-runner.amazonaws.comおよび codecatalyst.amazonaws.comサービスプリンシパルを含む信頼ポリシーを持つすべてのIAMロールが表示されます。

  6. ドロップダウンリストで、 を選択しcodecatalyst-build-roleロールの追加 を選択します。

  7. IAM 「ロールの追加」を選択し、「」で作成した既存のロールの追加IAM「」を選択し、ドロップダウンリストから「」を選択しますcodecatalyst-deploy-role。[Add role] を選択します。

    これで、ビルドロールとデプロイロールをスペースに追加しました。

  8. Amazon CodeCatalyst 表示名 の値をコピーします。この値は、後でワークフローを作成するときに必要になります。

ステップ 4: Amazon S3 バケットを作成する

このステップでは、サーバーレスアプリケーションのデプロイパッケージ .zip ファイルを保存する Amazon S3 バケットを作成します。

Amazon S3 バケットを作成するには
  1. で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/

  2. メインペインで、バケットの作成 を選択します。

  3. バケット名 には、次のように入力します。

    codecatalyst-cfn-s3-bucket
  4. [AWS リージョン] で、リージョンを選択します。このチュートリアルでは、米国西部 (オレゴン) us-west-2 を選択したことを前提としています。Amazon S3 でサポートされているリージョンの詳細については、「」の「Amazon Simple Storage Service エンドポイントとクォータ」を参照してくださいAWS 全般のリファレンス

  5. ページの下部で、バケットの作成 を選択します。

これで、米国西部 (オレゴン) us-west-2 リージョンcodecatalyst-cfn-s3-bucketに という名前のバケットが作成されました。

ステップ 5: ソースファイルを追加する

このステップでは、複数のアプリケーションソースファイルを CodeCatalyst ソースリポジトリに追加します。hello-world フォルダには、デプロイするアプリケーションファイルが含まれています。tests フォルダにはユニットテストが含まれています。フォルダ構造は次のとおりです。

. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— package.json |— sam-template.yml |— setup-sam.sh

.npmignore ファイル

.npmignore ファイルは、npm がアプリケーションパッケージから除外するファイルとフォルダを示します。このチュートリアルでは、npm はアプリケーションの一部ではないため、testsフォルダを除外します。

.npmignore ファイルを追加するには
  1. https://codecatalyst.aws/ で CodeCatalyst コンソールを開きます。

  2. プロジェクトを選択します。 codecatalyst-cfn-project

  3. ナビゲーションペインで [コード] を選択してから、[ソースリポジトリ] を選択します。

  4. ソースリポジトリのリストから、リポジトリ を選択しますcodecatalyst-cfn-source-repository

  5. ファイル で、ファイルの作成 を選択します。

  6. ファイル名 には、次のように入力します。

    .npmignore
  7. テキストボックスに、次のコードを入力します。

    tests/*
  8. コミット を選択し、もう一度コミット を選択します。

    これで、リポジトリのルート.npmignoreに という名前のファイルが作成されました。

package.json ファイル

package.json ファイルには、プロジェクト名、バージョン番号、説明、依存関係、およびアプリケーションとやり取りして実行する方法を説明するその他の詳細など、Node プロジェクトに関する重要なメタデータが含まれています。

このチュートリアルpackage.jsonの には、依存関係のリストとtestスクリプトが含まれています。テストスクリプトは以下を実行します。

  • テストスクリプトは、mocha を使用して で指定されたユニットテストを実行しhello-world/tests/unit/xunit レポーターを使用して結果をjunit.xmlファイルに書き込みます。

  • Istanbul (nyc) を使用すると、テストスクリプトはクローバーレポーターを使用してコードカバレッジレポート (clover.xml) を生成します。詳細については、イスタンブールのドキュメントの「代替レポーターの使用」を参照してください。

package.json ファイルを追加するには
  1. リポジトリのファイル で、ファイルの作成 を選択します。

  2. ファイル名 には、次のように入力します。

    package.json
  3. テキストボックスに、次のコードを入力します。

    { "name": "hello_world", "version": "1.0.0", "description": "hello world sample for NodeJS", "main": "app.js", "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs", "author": "SAM CLI", "license": "MIT", "dependencies": { "axios": "^0.21.1", "nyc": "^15.1.0" }, "scripts": { "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml" }, "devDependencies": { "aws-sdk": "^2.815.0", "chai": "^4.2.0", "mocha": "^8.2.1" } }
  4. コミット を選択し、もう一度コミット を選択します。

    これで、リポジトリのルートpackage.jsonに というファイルが追加されました。

sam-template.yml ファイル

sam-template.yml ファイルには、Lambda 関数と API Gateway をデプロイし、一緒に設定する手順が含まれています。テンプレートAWS Serverless Application Model 仕様 に従っており、 AWS CloudFormation テンプレート仕様を拡張します。

は便利な AWS::Serverless::Function リソースタイプ AWS SAM を提供するため、このチュートリアル AWS SAM では通常の AWS CloudFormation テンプレートの代わりに テンプレートを使用します。このタイプは、基本 CloudFormation 構文を使用するために通常書き出す必要がある多くの behind-the-scenes 設定を実行します。例えば、 AWS::Serverless::Functionは Lambda 関数、Lambda 実行ロール、および関数を開始するイベントソースマッピングを作成します。基本的な を使用して書き込む場合は、これらすべてをコーディングする必要があります CloudFormation。

このチュートリアルでは、事前に作成されたテンプレートを使用しますが、ビルドアクションを使用してワークフローの一部としてテンプレートを生成できます。詳細については、「AWS CloudFormation スタックのデプロイ」を参照してください。

sam-template.yml ファイルを追加するには
  1. リポジトリのファイル で、ファイルの作成 を選択します。

  2. ファイル名 には、次のように入力します。

    sam-template.yml
  3. テキストボックスに、次のコードを入力します。

    AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > serverless-api Sample SAM Template for serverless-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs12.x Events: HelloWorld: Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function # Find out about other implicit resources you can reference within AWS SAM at # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for the Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit Lambda execution role created for the Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn
  4. コミット を選択し、もう一度コミット を選択します。

    これで、リポジトリのルートフォルダsam-template.ymlに というファイルが追加されました。

setup-sam.sh ファイル

setup-sam.sh ファイルには、 ユーティリティをダウンロードしてインストールする AWS SAM CLI手順が含まれています。ワークフローは、このユーティリティを使用してhello-worldソースをパッケージ化します。

setup-sam.sh ファイルを追加するには
  1. リポジトリのファイル で、ファイルの作成 を選択します。

  2. ファイル名 には、次のように入力します。

    setup-sam.sh
  3. テキストボックスに、次のコードを入力します。

    #!/usr/bin/env bash echo "Setting up sam" yum install unzip -y curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory ./sam-installation-directory/install; export AWS_DEFAULT_REGION=us-west-2

    上記のコードで、us-west-2 を AWS リージョンで使用します。

  4. コミット を選択し、もう一度コミット を選択します。

    これで、リポジトリのルートsetup-sam.shに というファイルが追加されました。

app.js ファイル

には Lambda 関数コードapp.jsが含まれています。このチュートリアルでは、コードはテキスト を返しますhello world

app.js ファイルを追加するには
  1. リポジトリのファイル で、ファイルの作成 を選択します。

  2. ファイル名 には、次のように入力します。

    hello-world/app.js
  3. テキストボックスに、次のコードを入力します。

    // const axios = require('axios') // const url = 'http://checkip.amazonaws.com/'; let response; /** * * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format * @param {Object} event - API Gateway Lambda Proxy Input Format * * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html * @param {Object} context * * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html * @returns {Object} object - API Gateway Lambda Proxy Output Format * */ exports.lambdaHandler = async (event, context) => { try { // const ret = await axios(url); response = { 'statusCode': 200, 'body': JSON.stringify({ message: 'hello world', // location: ret.data.trim() }) } } catch (err) { console.log(err); return err; } return response };
  4. コミット を選択し、もう一度コミット を選択します。

    これで、 という名前のフォルダhello-worldと という名前のファイルが作成されましたapp.js

test-handler.js ファイル

test-handler.js ファイルには、Lambda 関数の単位テストが含まれています。

test-handler.js ファイルを追加するには
  1. リポジトリのファイル で、ファイルの作成 を選択します。

  2. ファイル名 には、次のように入力します。

    hello-world/tests/unit/test-handler.js
  3. テキストボックスに、次のコードを入力します。

    'use strict'; const app = require('../../app.js'); const chai = require('chai'); const expect = chai.expect; var event, context; describe('Tests index', function () { it('verifies successful response', async () => { const result = await app.lambdaHandler(event, context) expect(result).to.be.an('object'); expect(result.statusCode).to.equal(200); expect(result.body).to.be.an('string'); let response = JSON.parse(result.body); expect(response).to.be.an('object'); expect(response.message).to.be.equal("hello world"); // expect(response.location).to.be.an("string"); }); });
  4. コミット を選択し、もう一度コミット を選択します。

    これで、 hello-world/tests/unitフォルダtest-handler.jsの下に というファイルが追加されました。

これで、すべてのソースファイルが追加されました。

作業内容を再度確認し、すべてのファイルを正しいフォルダに配置したことを確認してください。フォルダ構造は次のとおりです。

. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— README.md |— package.json |— sam-template.yml |— setup-sam.sh

ステップ 6: ワークフローを作成して実行する

このステップでは、Lambda ソースコードをパッケージ化してデプロイするワークフローを作成します。ワークフローは、順番に実行される次の構成要素で構成されます。

  • トリガー — このトリガーは、変更をソースリポジトリにプッシュすると、ワークフローの実行を自動的に開始します。トリガーについての詳細は、「トリガーを使用してワークフローを自動的に開始する」を参照してください。

  • テストアクション (Test) — トリガー時に、このアクションは Node パッケージマネージャー (npm) をインストールし、 npm run test コマンドを実行します。このコマンドは、 package.json ファイルで定義されたtestスクリプトを実行するように npm に指示します。次に、testスクリプトはユニットテストを実行し、テストレポート (junit.xml) とコードカバレッジレポート () の 2 つのレポートを生成しますclover.xml。詳細については、「package.json ファイル」を参照してください。

    次に、テストアクションはXMLレポートを CodeCatalyst レポートに変換し、 CodeCatalyst コンソールのテストアクションのレポートタブに表示します。

    テストアクションの詳細については、「」を参照してくださいワークフローを使用したテスト

  • ビルドアクション (BuildBackend) – テストアクションが完了すると、ビルドアクションは をダウンロードしてインストールし AWS SAM CLI、hello-worldソースをパッケージ化し、パッケージを Lambda サービスが想定する Amazon S3 バケットにコピーします。アクションは、 という新しい AWS SAM テンプレートファイルも出力sam-template-packaged.ymlし、 という出力アーティファクトに配置しますbuildArtifact

    ビルドアクションの詳細については、「」を参照してくださいワークフローを使用した構築

  • デプロイアクション (DeployCloudFormationStack) – ビルドアクションが完了すると、デプロイアクションはビルドアクション (buildArtifact) によって生成された出力アーティファクトを検索し、その中に AWS SAM テンプレートを見つけて、テンプレートを実行します。 AWS SAM テンプレートは、サーバーレスアプリケーションをデプロイするスタックを作成します。

ワークフローを作成するには
  1. ナビゲーションペインで CI/CD を選択し、ワークフロー を選択します。

  2. ワークフローの作成 を選択します。

  3. ソースリポジトリ で、 を選択しますcodecatalyst-cfn-source-repository

  4. ブランチ で、 を選択しますmain

  5. [作成] を選択します。

  6. YAML サンプルコードを削除します。

  7. 次のYAMLコードを追加します。

    注記

    次のYAMLコードでは、必要に応じてConnections:セクションを省略できます。これらのセクションを省略する場合は、環境のデフォルトロールフィールドで指定されたIAMロールに、 で説明されている両方のロールのアクセス許可と信頼ポリシーが含まれていることを確認する必要がありますステップ 2: AWS ロールを作成する。デフォルトのIAMロールで環境を設定する方法の詳細については、「」を参照してください環境を作成する

    Name: codecatalyst-cfn-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: Test: Identifier: aws/managed-test@v1 Inputs: Sources: - WorkflowSource Outputs: Reports: CoverageReport: Format: CLOVERXML IncludePaths: - "coverage/*" TestReport: Format: JUNITXML IncludePaths: - junit.xml Configuration: Steps: - Run: npm install - Run: npm run test BuildBackend: Identifier: aws/build@v1 DependsOn: - Test Environment: Name: codecatalyst-cfn-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-build-role Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: . ./setup-sam.sh - Run: sam package --template-file sam-template.yml --s3-bucket codecatalyst-cfn-s3-bucket --output-template-file sam-template-packaged.yml --region us-west-2 Outputs: Artifacts: - Name: buildArtifact Files: - "**/*" DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - BuildBackend Environment: Name: codecatalyst-cfn-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-deploy-role Inputs: Artifacts: - buildArtifact Sources: [] Configuration: name: codecatalyst-cfn-stack region: us-west-2 role-arn: arn:aws:iam::111122223333:role/StackRole template: ./sam-template-packaged.yml capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND

    上記のコードで、以下を置き換えます。

    • の両方のインスタンス codecatalyst-cfn-environment 環境の名前を入力します。

    • の両方のインスタンス codecatalyst-account-connection アカウント接続の表示名を入力します。表示名は数字にすることができます。詳細については、「ステップ 3: に AWS ロールを追加する CodeCatalyst」を参照してください。

    • codecatalyst-build-role で作成したビルドロールの名前。 ステップ 2: AWS ロールを作成する

    • codecatalyst-cfn-s3-bucket に、 で作成した Amazon S3 バケットの名前を入力しますステップ 4: Amazon S3 バケットを作成する

    • の両方のインスタンス us-west-2 Amazon S3 バケットが存在するリージョン (最初のインスタンス) とスタックがデプロイされるリージョン (2 番目のインスタンス) を持つ 。これらのリージョンは異なる場合があります。このチュートリアルでは、両方のリージョンが に設定されていることを前提としていますus-west-2。Amazon S3 および でサポートされているリージョンの詳細については AWS CloudFormation、「」の「サービスエンドポイントとクォータ」を参照してくださいAWS 全般のリファレンス

    • codecatalyst-deploy-role に、 で作成したデプロイロールの名前を入力しますステップ 2: AWS ロールを作成する

    • codecatalyst-cfn-environment で作成した環境の名前前提条件

    • arn:aws:iam::111122223333:role/StackRole で作成したスタックロールの Amazon リソースネーム (ARN) を指定しますステップ 2: AWS ロールを作成する

      注記

      ビルド、デプロイ、スタックロールを作成しない場合は、codecatalyst-build-role, codecatalyst-deploy-role および arn:aws:iam::111122223333:role/StackRoleCodeCatalystWorkflowDevelopmentRole-spaceNameロールの名前または ARN で指定します。このロールの詳細については、「ステップ 2: AWS ロールを作成する」を参照してください。

    前述のコードのプロパティについては、「」を参照してくださいAWS CloudFormation 「スタックのデプロイ」アクション YAML

  8. (オプション) 検証 を選択して、コミットする前にYAMLコードが有効であることを確認します。

  9. [Commit] (コミット) を選択します。

  10. コミットワークフローダイアログボックスで、次のように入力します。

    1. ワークフローファイル名 の場合、デフォルト のままにしますcodecatalyst-cfn-workflow

    2. コミットメッセージ には、次のように入力します。

      add initial workflow file
    3. リポジトリ で、 を選択しますcodecatalyst-cfn-source-repository

    4. ブランチ名 でメイン を選択します。

    5. [Commit] (コミット) を選択します。

    これでワークフローが作成されました。ワークフローの実行は、ワークフローの上部で定義されたトリガーが原因で自動的に開始されます。具体的には、codecatalyst-cfn-workflow.yamlファイルをソースリポジトリにコミット (およびプッシュ) すると、トリガーによってワークフロー実行が開始されます。

進行中のワークフロー実行を表示するには
  1. ナビゲーションペインで CI/CD を選択し、ワークフロー を選択します。

  2. 先ほど作成したワークフローを選択します: codecatalyst-cfn-workflow

  3. 実行 タブを選択します。

  4. Run ID 列で、実行 ID を選択します。

  5. テストを選択して、テストの進行状況を確認します。

  6. ビルドの進行状況BuildBackendを表示するには、 を選択します。

  7. DeployCloudFormationStack を選択して、デプロイの進行状況を確認します。

    実行の詳細の表示の詳細については、「」を参照してくださいワークフローの実行ステータスと詳細の表示

  8. DeployCloudFormationStack アクションが終了したら、次の操作を行います。

    • ワークフローの実行が成功したら、次の手順に進みます。

    • テストまたはBuildBackendアクションでワークフローの実行が失敗した場合は、ログを選択して問題をトラブルシューティングします。

    • ワークフローの実行が DeployCloudFormationStackアクションで失敗した場合は、デプロイアクションを選択し、概要タブを選択します。CloudFormation イベントセクションまでスクロールして、詳細なエラーメッセージを表示します。ロールバックが発生した場合は、ワークフローを再実行する前に、 の AWS CloudFormation AWS コンソールからcodecatalyst-cfn-stackスタックを削除します。

デプロイを確認するには
  1. デプロイが成功したら、上部の横のメニューバーから可変 (7) を選択します。(右側のペインでは変数を選択しないでください)。

  2. の横にあるHelloWorldApiブラウザhttps://URLに を貼り付けます。

    Lambda 関数からの hello world JSON メッセージが表示され、ワークフローが Lambda 関数と API Gateway を正常にデプロイして設定したことを示します。

    ヒント

    これをワークフロー図URLにいくつかの小さな設定で CodeCatalyst 表示できます。詳細については、「ワークフロー図URLにアプリを表示する」を参照してください。

ユニットテスト結果とコードカバレッジを検証するには
  1. ワークフロー図で、テスト を選択し、レポート を選択します。

  2. ユニットテスト結果TestReportを表示するか、テスト対象のファイルのコードカバレッジの詳細を表示するCoverageReportか、この場合は app.jsおよび を選択しますtest-handler.js

デプロイされたリソースを確認するには
  1. にサインイン AWS Management Console し、 でAPIゲートウェイコンソールを開きますhttps://console.aws.amazon.com/apigateway/

  2. AWS SAM テンプレートcodecatalyst-cfn-stackAPIが作成した を確認します。API 名前はワークフロー定義ファイル () Configuration/nameの値から取得されますcodecatalyst-cfn-workflow.yaml

  3. で AWS Lambda コンソールを開きますhttps://console.aws.amazon.com/lambda/

  4. ナビゲーションペインで、[関数] を選択します。

  5. Lambda 関数 を選択しますcodecatalyst-cfn-stack-HelloWorldFunction-string

  6. API Gateway が関数のトリガーであることを確認できます。この統合は、 AWS SAM AWS::Serverless::Function リソースタイプによって自動的に設定されました。

ステップ 7: 変更を行う

このステップでは、Lambda ソースコードを変更してコミットします。このコミットにより、新しいワークフロー実行が開始されます。この実行は、Lambda コンソールで指定されたデフォルトのトラフィックシフト設定を使用するブルー/グリーンスキームで新しい Lambda 関数をデプロイします。

Lambda ソースを変更するには
  1. で CodeCatalyst、プロジェクトに移動します。

  2. ナビゲーションペインで [コード] を選択してから、[ソースリポジトリ] を選択します。

  3. ソースリポジトリ を選択しますcodecatalyst-cfn-source-repository

  4. アプリケーションファイルを変更します。

    1. hello-world フォルダを選択します。

    2. app.js ファイルを選択します。

    3. [編集] を選択します。

    4. 23 行目で、 hello worldを に変更しますTutorial complete!

    5. コミット を選択し、もう一度コミット を選択します。

      コミットにより、ワークフローの実行が開始されます。ユニットテストを更新して名前の変更を反映していないため、この実行は失敗します。

  5. ユニットテストを更新します。

    1. [hello-world\tests\unit\test-handler.js] を選択します。

    2. [編集] を選択します。

    3. 19 行目で、 hello worldを に変更しますTutorial complete!

    4. コミット を選択し、もう一度コミット を選択します。

      コミットにより、別のワークフロー実行が開始されます。この実行は成功します。

  6. ナビゲーションペインで CI/CD を選択し、ワークフロー を選択します。

  7. を選択しcodecatalyst-cfn-workflow実行 を選択します。

  8. 最新の実行の実行 ID を選択します。まだ進行中である必要があります。

  9. テスト BuildBackend、および を選択してDeployCloudFormationStack、ワークフロー実行の進行状況を確認します。

  10. ワークフローが終了したら、上部にある変数 (7) を選択します。

  11. の横にあるHelloWorldApiブラウザhttps://URLに を貼り付けます。

    ブラウザに、新しいアプリケーションが正常にデプロイされたことを示すTutorial complete!メッセージが表示されます。

クリーンアップ

このチュートリアルで使用するファイルとサービスをクリーンアップして、料金が発生しないようにします。

CodeCatalyst コンソールでクリーンアップするには
  1. https://codecatalyst.aws/ で CodeCatalyst コンソールを開きます。

  2. を削除しますcodecatalyst-cfn-workflow

  3. を削除しますcodecatalyst-cfn-environment

  4. を削除しますcodecatalyst-cfn-source-repository

  5. を削除しますcodecatalyst-cfn-project

でクリーンアップするには AWS Management Console
  1. 次のように CloudFormation、 でクリーンアップします。

    1. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソールを開きます。

    2. codecatalyst-cfn-stack を削除します。

      スタックを削除すると、APIゲートウェイサービスと Lambda サービスからすべてのチュートリアルリソースが削除されます。

  2. Amazon S3 で次のようにクリーンアップします。

    1. で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/

    2. [codecatalyst-cfn-s3-bucket] を選択します。

    3. バケットの内容を削除します。

    4. バケットを削除します。

  3. 次のようにIAM、 でクリーンアップします。

    1. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

    2. codecatalyst-deploy-policy を削除します。

    3. codecatalyst-build-policy を削除します。

    4. codecatalyst-stack-policy を削除します。

    5. codecatalyst-deploy-role を削除します。

    6. codecatalyst-build-role を削除します。

    7. codecatalyst-stack-role を削除します。

このチュートリアルでは、 CodeCatalyst ワークフローとスタックのデプロイアクションを使用してサーバーレスアプリケーションを CloudFormation スタックとしてデプロイする方法を学習しました。 AWS CloudFormation