チュートリアル: AWS CodeStar でサーバーレスプロジェクトを作成および管理する - AWS CodeStar

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

チュートリアル: AWS CodeStar でサーバーレスプロジェクトを作成および管理する

このチュートリアルでは、AWS CodeStar を使用して AWS サーバーレスアプリケーションモデル (AWS SAM) を使用して AWS Lambda でホストされるウェブサービスの AWS リソースを作成および管理するプロジェクトを作成します。

AWS CodeStar は、AWS CloudFormation に依存する AWS SAM を使用して、Amazon API Gateway API、AWS Lambda 関数、Amazon DynamoDB テーブルを含む、サポートされた AWS リソースを簡単に作成および管理する方法を提供します。(このプロジェクトでは Amazon DynamoDB テーブルを使用しません)。

詳細については、GitHub の 「AWS サーバーレスアプリケーションモデル (AWS SAM)」 を参照してください。

前提条件: AWS CodeStar をセットアップする の各ステップを実行します。

注記

このチュートリアルに関するコスト (例: AWS CodeStar が使用する AWS サービスのコスト) については、AWS アカウントに請求される場合があります。詳細については、[AWS CodeStar Pricing] (AWS CodeStar の料金) を参照してください。

概要

このチュートリアルでは、次の作業を行います:

  1. AWS CodeStar を使って、AWS SAM を使用して Python ベースのウェブサービスを構築およびデプロイするプロジェクトを作成します。このウェブサービスは AWS Lambda でホストされており、Amazon API Gateway からアクセスできます。

  2. プロジェクトの主なリソースは次のとおりです:

    • AWS CodeCommit リポジトリにはプロジェクトのソースコードが保存されます。このソースコードには、ウェブサービスのロジックが含まれ、関連する AWS リソースが定義されます。

    • AWS CodePipeline パイプラインは、ソースコードの作成を自動化します。 このパイプラインは AWS SAM を使用して AWS Lambda に関数を作成しデプロイして、関連する API を Amazon API Gateway に作成し、API を関数に接続します。

    • AWS Lambda にデプロイされる関数。

    • Amazon API Gateway で作成される API。

  3. ウェブサービスをテストして、AWS CodeStar が正常にウェブサービスを構築し、デプロイすることを確認します。

  4. プロジェクトのソースコードを使用するようにローカルワークステーションを設定します。

  5. ローカルワークステーションを使用してプロジェクトのソースコードを変更します。関数をプロジェクトに追加し、変更をソースコードにプッシュすると、AWS CodeStar はウェブサービスの再構築と再デプロイを行います。

  6. ウェブサービスを再度テストして、AWS CodeStar が正常に再構築および再デプロイすることを確認します。

  7. ローカルワークステーションを使用してユニットテストを作成し、手動テストの一部を自動化されたテストに置き換えます。ユニットテストをプッシュすると、AWS CodeStar は、ウェブサービスの再構築と再デプロイを行い、ユニットテストを実行します。

  8. ユニットテストの結果を表示します。

  9. プロジェクトをクリーンアップします。 このステップは、このチュートリアルに関するコストに関して、AWS アカウントへの不要な請求を防ぐのに役立ちます。

ステップ 1: プロジェクトを作成する

このステップでは、AWS CodeStar コンソールを使用してプロジェクを作成します。

  1. AWS Management Console にサインインして、https://console.aws.amazon.com/codestar/ で、AWS CodeStar コンソールを開きます。

    注記

    作成した IAM ユーザーに関連付けられた認証情報または AWS CodeStar をセットアップする で識別される認証情報を使用して AWS Management Console にサインインする必要があります。このユーザーには、AWSCodeStarFullAccess マネージドポリシーが添付されている必要があります。

  2. プロジェクトとそのリソースを作成する AWS リージョンを選択します。

    AWS CodeStar が利用可能な AWS リージョンの詳細については、「AWS の全般的なリファレンス」「リージョンとエンドポイント」を参照してください。

  3. [Create project] (プロジェクトの作成) を選択します。

  4. [Choose a project template] (プロジェクトのテンプレートを選択する) ページで、以下を選択します:

    • [Application type] (アプリケーションの種類) で、[Web service] (ウェブサービス) を選択します。

    • [Programming language] (プログラミング言語) で、[Python] を選択します。

    • AWS サービスで、AWS Lambdaを選択します。

  5. 選択した内容が含まれているボックスを選択します。[Next] (次へ) を選択します。

  6. [Project name] (プロジェクト名) に、プロジェクトの名前 (例: My SAM Project) を入力します。例とは異なる名前を使用した場合は、必ずこのチュートリアル全体でそれを使用してください。

    [Project ID] (プロジェクト ID) で、AWS CodeStar はこのプロジェクトに関連する識別子を選択します (例:my-sam-project)。別のプロジェクト ID が表示された場合は、このチュートリアル全体でそれを使用してください。

    [AWS CodeCommit] は選択されたままにし、[Repository name] (リポジトリ名) の値は変更しないでください。

  7. [Next] (次へ) を選択します。

  8. 設定を確認し、[Create Project] (プロジェクトの作成) を選択します。

    この AWS リージョンで AWS CodeStar を初めて使用する場合は、[Display Name] (表示名) と [Email] (E メール) に、AWS CodeStar に使用させる IAM ユーザーの表示名と E メールアドレスを入力します。 [Next] (次へ) を選択します。

  9. AWS CodeStar がプロジェクトを作成する間待ちます。 この処理には数分かかることがあります。更新時に[Project provisioned] (プロジェクトのプロビジョニング完了)バナー が表示されるまで次に進まないでください。

ステップ 2: プロジェクトリソースを調べる

このステップでは、プロジェクトの 4 つの AWS リソースを調べて、プロジェクトの仕組みを理解します。

  • AWS CodeCommit リポジトリにはプロジェクトのソースコードが保存されます。my-sam-project がプロジェクトの名前の場合、AWS CodeStar は、リポジトリに my-sam-project という名前を付けます。

  • AWS CodePipeline パイプラインは、CodeBuild と AWS SAM を使用して API Gateway でウェブサービスの Lambda 関数と API を構築しデプロイします。 my-sam-project がプロジェクトの IDである場合、AWS CodeStar は、パイプラインに my-sam-project--Pipeline という名前を付けます。

  • Lambda 関数にはウェブサービスのロジックが含まれます。 AWS CodeStar は、関数に awscodestar-my-sam-project-lambda-HelloWorld-RANDOM_ID という名前を付けます。それぞれの種類の意味は次の通りです。

    • [my-sam-project] はプロジェクトの ID です。

    • [HelloWorld] は、AWS CodeCommit リポジトリの template.yaml ファイルで指定されている関数 ID です。後でこのファイルについて説明します。

    • [RANDOM_ID]は、AWS SAM が一意性を保証するために関数に割り当てるランダムな ID です。

  • Lambda 関数の呼び出しを容易にする API Gateway の API。AWS CodeStar は、API に awscodestar-my-sam-project--lambda という名前を付けます。ここで、my-sam-project はプロジェクトの ID です。

CodeCommit でソースコードリポジトリを確認するには

  1. AWS CodeStar コンソールでプロジェクトを開き、ナビゲーションバーで、[Repository] (リポジトリ) を選択します。

  2. [Repository details] (リポジトリの詳細) で、CodeCommit リポジトリ (My-SAM-Project) へのリンクを選択します。

  3. CodeCommit コンソールの [Code] (コード) ページに、プロジェクトのソースコードファイルが表示されます。

    • buildspec.yml では、CodePipeline が CodeBuild に対して、ビルドフェーズで AWS SAM を使用してウェブサービスをパッケージ化するように指示します。

    • index.py には、Lambda 関数のロジックが含まれています。この関数は、文字列「Hello World」と ISO 形式のタイムスタンプを出力します。

    • README.md には、リポジトリに関する一般的な情報が含まれています。

    • template-configuration.json には、プロジェクト ID でリソースにタグを付けるために使用されるプレースホルダ付きのプロジェクト ARN が含まれます。

    • template.yml は、AWS SAM が、API Gateway でウェブサービスをパッケージ化し API を作成するのに使用します。

    
                        CodeCommit のプロジェクトソースコードファイル

    ファイルの内容を表示するには、リストから選択します。

    CodeCommit コンソール の使用の詳細については、「AWS CodeCommit ユーザーガイド」 を参照してください。

CodePipeline でパイプラインを調べるには

  1. パイプラインに関する情報を表示するには、AWS CodeStar コンソールでプロジェクトを開き、ナビゲーションバーで [Pipeline] (パイプライン) を選択します。パイプラインには以下が含まれています:

    • [Source] (ソース) は、CodeCommit からソースコードを取得するステージです。

    • [Build] (ビルド) は、CodeBuildでソースコードを構築するステージです。

    • [Deploy] (デプロイ) は、ビルドされたソースコードと AWS リソースを AWS SAM でデプロイするステージです。

  2. パイプラインの詳細を表示するには、[Pipeline details] (パイプラインの詳細) で、パイプラインを選択して CodePipeline コンソールでパイプラインを開きます。

CodePipeline コンソールの使用の詳細については、「AWS CodePipeline ユーザーガイド」 を参照してください。

プロジェクトアクティビティとを調べるにはAWS上のサービスリソース概要ページ

  1. AWS CodeStar コンソールでプロジェクトを開き、ナビゲーションバーから [Overview] (概要) を選択します。

  2. [Project activity] (プロジェクトアクティビティ) リストおよび [Project Resources] (プロジェクトリソース) リストを確認します。

Lambda で関数を調べるには

  1. AWS CodeStar コンソールでプロジェクトを開き、サイドナビゲーションバーで、[Overview] (概要) を選択します。

  2. [Project resources] (プロジェクトリソース) の [ARN]列で、Lambda 関数のリンクを選択します。

    関数のコードが Lambda コンソールに表示されます。

Lambda コンソールの使用の詳細については、「AWS Lambda デベロッパーガイド」を参照してください。

API Gateway で API を調べるには

  1. AWS CodeStar コンソールでプロジェクトを開き、サイドナビゲーションバーで、[Overview] (概要) を選択します。

  2. [Project resources] (プロジェクトリソース) の [ARN]列で、Amazon API Gateway API のリンクを選択します。

    API Gateway コンソールに API のリソースが表示されます。

API Gateway コンソールの使用については、API Gateway デベロッパーガイド を参照してください。

ステップ 3: ウェブサービスをテストする

このステップでは、AWS CodeStar が構築してデプロイしたばかりのウェブサービスをテストします。

  1. 前のステップからのプロジェクトを開いたままで、ナビゲーションバーの [Pipeline] (パイプライン) を選択します。

  2. 続行する前に、[Source] (ソース)、[Build] (ビルド)、[Deploy] (デプロイ) ステージで、[Succeeded] (正常に完了) が表示されていることを確認します。この処理には数分かかることがあります。

    注記

    いずれかのステージで [Failed] (失敗) が表示される場合は、以下のトラブルシューティングのヘルプを参照してください。

  3. [View Application] (アプリケーションの表示) を選択します。

ウェブブラウザで開いている新しいタブで、ウェブサービスは以下のレスポンス出力を表示します:

{"output": "Hello World", "timestamp": "2017-08-30T15:53:42.682839"}

ステップ 4: プロジェクトコードを編集するためのローカルワークステーションの設定

このステップでは、ローカルワークステーションを設定して、AWS CodeStar プロジェクトのソースコードを編集します。ローカルワークステーションとして、macOS、Windows、または Linux を実行している物理コンピュータまたは仮想コンピュータを利用できます。

  1. 前の手順でプロジェクトを開いたままにしておきます。

    • ナビゲーションバーで、[IDE] を選択し、[Access your project code] (プロジェクトコードにアクセス) を展開します。

    • [Command line interface] (コマンドラインインターフェイス) のしたの [View instructions] (手順の表示) を選択します。

      Visual Studio または Eclipse がインストールされている場合は、代わりに [Visual Studio] または [Eclipse] の下の [View instructions] (手順の表示) を選択し、手順に従って ステップ 5: ウェブサービスにロジックを追加する に進んでください。

  2. 手順に従って、次のタスクを完了します:

    1. ローカルワークステーションに Git をセットアップします。

    2. IAM コンソールを使用して IAM ユーザーのための Git 認証情報を生成します。

    3. ローカルワークステーションにプロジェクトの CodeCommit リポジトリのクローンを作成します。

  3. 左のナビゲーションで、[Project] (プロジェクト) を選択し、プロジェクトの概要に戻ります。

ステップ 5: ウェブサービスにロジックを追加する

このステップでは、ローカルワークステーションを使用してロジックをウェブサービスに追加します。具体的には、Lambda 関数を追加して API Gateway の API に接続します。

  1. ローカルワークステーションで、クローンされたソースコードリポジトリが保存されているディレクトリに移動します。

  2. そのディレクトリに hello.py という名前のファイルを作成します。次のコードを追加し、ファイルを保存します:

    import json def handler(event, context): data = { 'output': 'Hello ' + event["pathParameters"]["name"] } return { 'statusCode': 200, 'body': json.dumps(data), 'headers': {'Content-Type': 'application/json'} }

    上記のコードは、Hello という文字列と、呼び出し元が関数に送る文字列を出力します。

  3. 同じディレクトリで template.yml ファイルを開きます。次のコードをファイルの末尾に追加し、ファイルを保存します。

    Hello: Type: AWS::Serverless::Function Properties: FunctionName: !Sub 'awscodestar-${ProjectId}-lambda-Hello' Handler: hello.handler Runtime: python3.7 Role: Fn::GetAtt: - LambdaExecutionRole - Arn Events: GetEvent: Type: Api Properties: Path: /hello/{name} Method: get

    AWSSAM はこのコードを使用して Lambdaに関数を作成し、API Gateway 内の API に新しいメソッドとパスを追加し、このメソッドとパスを新しい関数に接続します。

    注記

    前述のコードのインデントは重要です。示されているように、コードを正確に追加しないと、プロジェクトが正しく構築されないことがあります。

  4. git add . コマンドを実行して、ファイルの変更を複製されたリポジトリのステージングエリアに追加します。ピリオド (.) を忘れないでください。変更されたすべてのファイルに追加されます。

    注記

    コマンドラインの代わりに Visual Studio または Eclipse を使用している場合は、Git の使用方法が異なる場合があります。Visual Studio または Eclipse のドキュメントを参照してください。

  5. git commit -m "Added hello.py and updated template.yaml." を実行して、クローンされたレポジトリのステージファイルをコミットします。

  6. git push を実行してコミットをリモートリポジトリにプッシュします。

    注記

    IAM が以前に生成したユーザー名とパスワードの入力を求めるメッセージが表示されることがあります。リモートリポジトリで作業するたびにこれが表示されることを防止するため、Git 認証情報マネージャーをインストールして設定することを考慮してみてください。例えば、macOS または Linux では、ターミナルで git config credential.helper 'cache --timeout 900' を実行して、15 分ごとにプロンプトを表示させることができます。または、git config credential.helper 'store --file ~/.git-credentials' を実行して、プロンプトを再度表示させないようにすることができます。Git は、認証情報をプレーンなファイルのクリアテキストとしてホームディレクトリに保存します。詳細については、Git ウェブサイトの [Git Tools - Credential Storage] (Git Tools - 認証情報ストレージ) を参照してください。

AWS CodeStar はプッシュを検出した後、CodePipeline に対してCodeBuild および AWS SAM を使用してウェブサービスを再構築および再デプロイするよう指示します。[Pipeline] (パイプライン) ページで、デプロイの進行状況を確認できます。

AWS SAM は、新しい関数に [awscodestar-my-sam-project-lambda-Hello-RANDOM_ID] という名前を付けます。それぞれの意味は次のとおりです。

  • [my-sam-project] はプロジェクトの ID です。

  • [Hello] は、template.yaml ファイルで指定された関数の ID です。

  • [RANDOM_ID] は、AWS SAM が一意性を保証するために関数に割り当てるランダムな ID です。

ステップ 6: 拡張ウェブサービスをテストする

このステップでは、このステップでは、前の手順で追加したロジックに基づいて、AWS CodeStar が構築してデプロイした拡張ウェブサービスをテストします。

  1. AWS CodeStar コンソールでプロジェクトを開き、ナビゲーションバーで、[Pipeline] (パイプライン) を選択します。

  2. 続行する前に、パイプラインが再度実行されており、[Source] (ソース)、[Build] (ビルド)、[Deploy] (デプロイ) ステージで、[Succeeded] (正常に完了) が表示されていることを確認します。この処理には数分かかることがあります。

    注記

    いずれかのステージで [Failed] (失敗) が表示される場合は、以下のトラブルシューティングのヘルプを参照してください。

  3. [View Application] (アプリケーションの表示) を選択します。

    ウェブブラウザで開いている新しいタブで、ウェブサービスは以下のレスポンス出力を表示します:

    {"output": "Hello World", "timestamp": "2017-08-30T15:53:42.682839"}
  4. タブのアドレスボックスで、パス /hello/ とファーストネームを URL の最後に追加 (例: https://API_ID.execute-api.REGION_ID.amazonaws.com/Prod/hello/YOUR_FIRST_NAME) し、[Enter] (入力) を押します。

ファーストネームが Mary の場合、ウェブサービスは、次のレスポンス出力を表示します:

{"output": "Hello Mary"}

ステップ 7: ウェブサービスにユニットテストを追加する

このステップでは、ローカルワークステーションを使用して、ウェブサービスで AWS CodeStar を実行するテストを追加します。このテストは、以前に行った手動テストに代わるものです。

  1. ローカルワークステーションで、クローンされたソースコードリポジトリが保存されているディレクトリに移動します。

  2. そのディレクトリに hello_test.py という名前のファイルを作成します。次のコードを追加し、ファイルを保存します。

    from hello import handler def test_hello_handler(): event = { 'pathParameters': { 'name': 'testname' } } context = {} expected = { 'body': '{"output": "Hello testname"}', 'headers': { 'Content-Type': 'application/json' }, 'statusCode': 200 } assert handler(event, context) == expected

    このテストは、Lambda 関数の出力が予想通りの形式であるかどうかをチェックします。予想通りの形式の場合、テストは成功です。 そうでない場合は失敗です。

  3. 同じディレクトリで buildspec.yml ファイルを開きます。ファイルの内容を次のコードに置き換えて、ファイルを保存します。

    version: 0.2 phases: install: runtime-versions: python: 3.7 commands: - pip install pytest # Upgrade AWS CLI to the latest version - pip install --upgrade awscli pre_build: commands: - pytest build: commands: # Use AWS SAM to package the application by using AWS CloudFormation - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml # Do not remove this statement. This command is required for AWS CodeStar projects. # Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources. - sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json artifacts: type: zip files: - template-export.yml - template-configuration.json

    このビルド仕様では、CodeBuild に対して、ビルド環境に Python テストフレームワーク pytest をインストールするように指示します。CodeBuild は pytest を使用してユニットテストを実行します。これ以外のビルド仕様は、前に作成したものと同じです。

  4. Git を使用して、これらの変更内容をリモートリポジトリにプッシュします。

    git add . git commit -m "Added hello_test.py and updated buildspec.yml." git push

ステップ 8: ユニットテストの結果を表示する

このステップでは、ユニットテストが成功したか失敗したかを確認します。

  1. AWS CodeStar コンソールでプロジェクトを開き、ナビゲーションバーで、[Pipeline] (パイプライン) を選択します。

  2. 続行する前に、パイプラインが再度実行されたことを確認します。この処理には数分かかることがあります。

    ユニットテストが成功した場合は、[Build] (ビルド) ステージに [Succeeded] (正常に終了) が表示されます。

  3. ユニットテスト結果の詳細を表示するには、[Build] (ビルド) ステージで、 [CodeBuild] リンクを選択します。

  4. CodeBuild コンソールの [Build Project: my-sam-project] ページの [Build history] (ビルド履歴) で、テーブルの [Build run] (ビルド実行) 列のリンクを選択します。

  5. my-sam-project:BUILD_ID ページの [Build logs] (ビルドログ) で、[View entire log] (全てのログを表示) リンクを選択します。

  6. Amazon CloudWatch Logs コンソールに、次の例のようなテスト結果のログ出力が表示されます。 次のテスト結果では、テストは成功しています。

    ... ============================= test session starts ============================== platform linux2 -- Python 2.7.12, pytest-3.2.1, py-1.4.34, pluggy-0.4.0 rootdir: /codebuild/output/src123456789/src, inifile: collected 1 item hello_test.py . =========================== 1 passed in 0.01 seconds =========================== ...

    テストが失敗した場合は、ログ出力に詳細が表示され、障害のトラブルシューティングに役立ちます。

ステップ 9: クリーンアップ

このステップでは、プロジェクトをクリーンアップして、このプロジェクトに継続的な料金が発生するのを回避します。

このプロジェクトを引き続き使用したい場合は、この手順をスキップできますが、AWS アカウントに引き続き請求が行われる可能性があります。

  1. AWS CodeStar コンソールでプロジェクトを開き、ナビゲーションバーで、[Settings] (設定) を選択します。

  2. [Project details] (プロジェクトの詳細) で、[Delete project] (プロジェクトの削除) を選択します。

  3. delete を入力し、[Delete resources] (リソースの削除) ボックスをオンのまま、[Delete] (削除) を選択します。

    重要

    このチェックボックスをオフにすると、プロジェクトレコードは AWS CodeStar から削除されますが、プロジェクトの AWS リソースの多くは保持されます。お客様の AWS アカウントに引き続き請求される可能性があります。

このプロジェクト向けに AWS CodeStar で作成された Amazon S3 バケットがある場合は、このステップに従って削除します。

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

  2. バケットのリストで、[aws-codestar-REGION_ID-ACCOUNT_ID-my-sam-project--pipe] の横にあるアイコンを選択します。それぞれの種類の意味は次の通りです。

    • [REGION_ID] は、今削除したプロジェクトの AWS リージョンの ID です。

    • [ACCOUNT_ID] はお客様の AWS アカウント ID です。

    • [my-sam-project] は、今削除したプロジェクトの ID です。

  3. [Empty Bucket] (バケットを空にする) を選択します。 バケットの名前を入力し、[Confirm] (確認) を選択します。

  4. [Delete Bucket] (バケットの削除) を選択します。バケットの名前を入力し、[Confirm] (確認) を選択します。

次のステップ

このチュートリアルを完了したら、次のリソースを確認することをお勧めします。