AWS Lambda プロジェクトのトラフィックを移行する - AWS CodeStar

2024 年 7 月 31 日に、Amazon Web Services (AWS) は AWS CodeStar プロジェクトの作成と表示のサポートを終了します。2024 年 7 月 31 日以降、 AWS CodeStar コンソールにアクセスしたり、新しいプロジェクトを作成したりできなくなります。ただし、ソースリポジトリ、パイプライン AWS CodeStar、ビルドなど、 によって作成された AWS リソースは、この変更の影響を受けず、引き続き機能します。 AWS CodeStar 接続と AWS CodeStar 通知は、この中止の影響を受けません。

 

作業の追跡、コードの開発、アプリケーションの構築、テスト、デプロイを行う場合、Amazon CodeCatalyst は効率的な開始プロセスと、ソフトウェアプロジェクトを管理するための追加機能を提供します。Amazon の機能https://codecatalyst.aws/exploreおよび料金の詳細をご覧ください CodeCatalyst。

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

AWS Lambda プロジェクトのトラフィックを移行する

AWS CodeDeploy では、AWS CodeStar サーバーレスプロジェクトの AWS Lambda 関数の関数バージョンのデプロイをサポートしています。AWS Lambda のデプロイは、既存の Lambda 関数からの着信トラフィックを、更新された Lambda 関数バージョンに移行します。更新された Lambda 関数をテストするには、別のバージョンをデプロイし、必要に応じて、デプロイを最初のバージョンにロールバックします。

このセクションのステップに従い、AWS CodeStar プロジェクトテンプレートを変更し、CodeStarWorker ロールの IAM アクセス許可を更新します。このタスクでは、エイリアスの AWS Lambda 関数を作成する自動応答を AWS CloudFormation でスタートし、更新された環境にトラフィックを移行するように AWS CodeDeploy に指示します。

注記

2018 年 12 月 12 日以前に AWS CodeStar プロジェクトを作成した場合にのみ、これらのステップを完了​します。

AWS CodeDeploy には、アプリケーションの AWS Lambda 関数のバージョンにトラフィックを移行することを許可するデプロイオプションが 3 種類あります。

  • Canary: トラフィックは 2 つの増分で移行されます。残りのトラフィックが 2 回目の増分で移行される前に、最初の増分および間隔で更新された Lambda 関数のバージョンに移行されるトラフィックの割合 (%) を分単位で指定する、事前定義された Canary オプションから選択できます。

  • Linear: トラフィックは等しい増分で移行され、増分間の間隔 (分) も同じです。増分ごとに移行するトラフィックの割合 (%) と、増分間の間隔 (分) を指定する、事前定義済み線形オプションから選択できます。トラフィックは毎回同じ間隔 (分) の等しい増分で移行されます。増分ごとに移行するトラフィックの割合 (%) と、増分間の間隔 (分) を指定する、事前定義済み線形オプションから選択できます。

  • All-at-once: すべてのトラフィックは元の Lambda 関数から最新バージョンの Lambda 関数に一度に移行されます。

デプロイプリファレンスのタイプ
Canary10Percent30Minutes
Canary10Percent5Minutes
Canary10Percent10Minutes
Canary10Percent15Minutes
Linear10PercentEvery10Minutes
Linear10PercentEvery1Minute
Linear10PercentEvery2Minutes
Linear10PercentEvery3Minutes
AllAtOnce

AWS Lambda コンピューティングプラットフォームの AWS CodeDeploy デプロイの詳細については、AWS Lambda コンピューティングプラットフォームでのデプロイ を参照してください。

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

前提条件:

サーバーレスプロジェクトを作成する場合、Lambda コンピューティングプラットフォームで任意のテンプレートを選択します。ステップ 4~6 を実行するには、管理者ユーザーとしてサインインする必要があります。

トピック
    ステップ 1: SAM テンプレートを変更して AWS Lambda バージョンのデプロイパラメータを追加する
    1. https://console.aws.amazon.com/codestar/ で AWS CodeStar コンソールを開きます。

    2. プロジェクトを作成するか、template.yml ファイルを含む既存のプロジェクトを選択して、[Code] (コード) ページを開きます。リポジトリの最上位で、変更する template.yml という名前の SAM テンプレートの場所を書き留めます。

    3. template.yml ファイルを IDE またはローカルリポジトリで開きます。以下のテキストをコピーして、Globals セクションをファイルに追加します。このチュートリアルのサンプルテキストでは、Canary10Percent5Minutes オプションを選択します。

      Globals: Function: AutoPublishAlias: live DeploymentPreference: Enabled: true Type: Canary10Percent5Minutes

      この例では、Globals セクション追加後に変更されたテンプレートを示します。

      詳細については、SAM テンプレートの グローバルセクション リファレンスガイドを参照してください。

    ステップ 2: AWS CloudFormation ロールを編集してアクセス許可を追加する
    1. AWS Management Console にサインインし、AWS CodeStar コンソール (https://console.aws.amazon.com/codestar/) を開きます。

      注記

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

    2. 既存のサーバーレスプロジェクトを選択し、[Project resources] (プロジェクトリソース) ページを開きます。

    3. [Resources] (リソース) で、CodeStarWorker/AWS CloudFormation ロール用に作成した IAM ロールを選択します。ロールが IAM コンソールで開きます。

    4. [Permissions] (アクセス許可) タブの [Inline Policies] (インラインポリシー) で、サービスロールポリシーの列の [Edit Policy] (ポリシーの編集) を選択します。[JSON] タブを選択して、JSON 形式でポリシーを編集します。

      注記

      サービスロールは CodeStarWorkerCloudFormationRolePolicy という名前になります。

    5. [JSON] フィールドで、Statement 要素内に次のポリシーステートメントを追加します。regionid のプレースホルダーは、お客様のリージョンとアカウント ID に置き換えてください。

      { "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::codepipeline*" ], "Effect": "Allow" }, { "Action": [ "lambda:*" ], "Resource": [ "arn:aws:lambda:region:id:function:*" ], "Effect": "Allow" }, { "Action": [ "apigateway:*" ], "Resource": [ "arn:aws:apigateway:region::*" ], "Effect": "Allow" }, { "Action": [ "iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:PutRolePolicy" ], "Resource": [ "arn:aws:iam::id:role/*" ], "Effect": "Allow" }, { "Action": [ "iam:AttachRolePolicy", "iam:DeleteRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::id:role/*" ], "Effect": "Allow" }, { "Action": [ "iam:PassRole" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Action": [ "codedeploy:CreateApplication", "codedeploy:DeleteApplication", "codedeploy:RegisterApplicationRevision" ], "Resource": [ "arn:aws:codedeploy:region:id:application:*" ], "Effect": "Allow" }, { "Action": [ "codedeploy:CreateDeploymentGroup", "codedeploy:CreateDeployment", "codedeploy:DeleteDeploymentGroup", "codedeploy:GetDeployment" ], "Resource": [ "arn:aws:codedeploy:region:id:deploymentgroup:*" ], "Effect": "Allow" }, { "Action": [ "codedeploy:GetDeploymentConfig" ], "Resource": [ "arn:aws:codedeploy:region:id:deploymentconfig:*" ], "Effect": "Allow" }
    6. [Review policy] (ポリシーの確認) を選択して、ポリシーにエラーがないことを確認します。ポリシーにエラーがなければ、[Save changes] (変更の保存) を選択します。

    ステップ 3: テンプレートの変更をコミットおよびプッシュして、AWS Lambda バージョンの移行を開始する
    1. ステップ 1 で保存した template.yml ファイルの変更をコミットおよびプッシュします。

      注記

      これにより、パイプラインが開始されます。IAM アクセス許可を更新する前に変更をコミットすると、パイプライン開始後、AWS CloudFormation スタック更新でエラーが発生し、このスタック更新はロールバックされます。この問題が発生した場合は、アクセス許可を修正してから、パイプランを再起動します。

    2. AWS CloudFormation スタック更新は、プロジェクトのパイプランで[Deploy] (デプロイ) ステージのスタート時にスタートします。デプロイ開始時のスタック更新の通知を確認するには、AWS CodeStar ダッシュボードで、パイプラインの AWS CloudFormation ステージを選択します。

      AWS CloudFormation は、スタック更新中、次のようにプロジェクトリソースを自動的に更新します:

      • AWS CloudFormation では、エイリアスの Lambda 関数、イベントフック、およびリソースを作成して、template.yml ファイルを処理します。

      • AWS CloudFormation は、Lambda を呼び出して、新しい関数のバージョンを作成します。

      • AWS CloudFormation は AppSpec ファイルを作成し、AWS CodeDeploy を呼び出してトラフィックを移行します。

      SAM でのエイリアスの Lambda 関数の発行の詳細については、AWS サーバーレスアプリケーションモデル(SAM) テンプレートリファレンスを参照してください。AWS CodeDeploy AppSpec ファイルのイベントフックおよびリソースの詳細については、AppSpec の「resources」セクション (AWS Lambda デプロイのみ) および AWS Lambda デプロイの AppSpec の「hooks」セクション を参照してください。

    3. パイプラインが正常に完了すると、AWS CloudFormation スタックでリソースが作成されます。[Project] (プロジェクト) ページの [Project Resources] (プロジェクトリソース) リストで、AWS CodeDeploy アプリケーション、AWS CodeDeploy デプロイグループ、およびプロジェクト用に作成した AWS CodeDeploy サービスロールのリソースを表示します。

    4. 新しいバージョンを作成するには、リポジトリで Lambda 関数を変更します。新しいデプロイが開始し、トラフィックは、SAM テンプレートで示されるデプロイタイプに応じて、移行されます。新しいバージョンに移行されるトラフィックのステータスを表示するには、[Project] (プロジェクト) ページの [Project Resources] (プロジェクトリソース) リストで、AWS CodeDeploy デプロイへのリンクを選択します。

    5. 各バージョンに関する詳細を表示するには、[Revisions] (リビジョン) で、AWS CodeDeploy デプロイグループへのリンクを選択します。

    6. ローカル作業ディレクトリで、AWS Lambda 関数を変更し、その変更をプロジェクトリポジトリにコミットすることができます。AWS CloudFormation では、同様に次のリビジョンを管理する上で、AWS CodeDeploy をサポートしています。Lambda デプロイの再デプロイ、停止、ロールバックの詳細については、AWS Lambda コンピューティングプラットフォームでのデプロイ を参照してください。