チュートリアル: Amazon ECS にアプリケーションをデプロイする - Amazon CodeCatalyst

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

チュートリアル: Amazon ECS にアプリケーションをデプロイする

このチュートリアルでは、ワークフロー、Amazon ECS、およびその他のいくつかの AWS サービスを使用して、サーバーレスアプリケーションを Amazon Elastic Container Service (Amazon ECS) にデプロイする方法について説明します。デプロイされたアプリケーションは、Apache ウェブサーバーの Docker イメージ上に構築されたシンプルな Hello World ウェブサイトです。このチュートリアルでは、クラスターの設定など、必要な準備作業を順を追って説明し、アプリケーションを構築およびデプロイするワークフローを作成する方法について説明します。

ヒント

このチュートリアルを進める代わりに、完全な Amazon ECS セットアップを実行する設計図を使用できます。Node.js API AWS Fargate を で使用するか、Java API を AWS Fargateブループリントで使用する必要があります。詳細については、「設計図を使用したプロジェクトの作成」を参照してください。

前提条件

開始する前に:

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

  • スペースには、空の Start from scratch CodeCatalystプロジェクトが必要です。

    codecatalyst-ecs-project

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

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

    codecatalyst-ecs-environment

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

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

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

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

    詳細については、「環境を使用した AWS アカウント および VPCs CodeCatalystへのデプロイ」を参照してください。

ステップ 1: AWS ユーザーと をセットアップする AWS CloudShell

このチュートリアルの最初のステップは、 でユーザーを作成し AWS IAM Identity Center、このユーザーとしてインスタンスを起動 AWS CloudShell することです。このチュートリアルの期間中、 CloudShell は開発用コンピュータであり、 は AWS リソースとサービスを設定する場所です。チュートリアルを完了したら、このユーザーを削除します。

注記

このチュートリアルでは、ルートユーザーを使用しないでください。別のユーザーを作成する必要があります。作成しないと、後で AWS Command Line Interface (CLI) でアクションを実行するときに問題が発生する可能性があります。

IAM Identity Center ユーザーおよび の詳細については CloudShell、「 ユーザーガイド」およびAWS IAM Identity Center 「 ユーザーガイドAWS CloudShell 」を参照してください。

IAM Identity Center ユーザーを作成するには
  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/singlesignon/ で AWS IAM Identity Center コンソールを開きます。

    注記

    スペース AWS アカウント に接続されている CodeCatalyst を使用してサインインしていることを確認してください。接続されているアカウントを確認するには、スペースに移動し、AWS アカウントタブを選択します。詳細については、「スペースの作成」を参照してください。

  2. ナビゲーションペインで [Users] (ユーザー)、[Add user] (ユーザーの追加) の順に選択します。

  3. ユーザー名 で、次のように入力します。

    CodeCatalystECSUser
  4. パスワード で、このユーザーと共有できるワンタイムパスワードの生成 を選択します。

  5. E メールアドレスE メールアドレスの確認 で、IAM Identity Center にまだ存在しない E メールアドレスを入力します。

  6. で、次のように入力します。

    CodeCatalystECSUser
  7. 表示名 で、自動的に生成された名前を保持します。

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

  9. ユーザーをグループに追加ページで、次へ を選択します。

  10. ユーザーの確認と追加ページで情報を確認し、ユーザーの追加を選択します

    ワンタイムパスワードダイアログボックスが表示されます。

  11. アクセス AWS ポータル URL やワンタイムパスワードなどのサインイン情報をコピーして貼り付けます。

  12. [閉じる] を選びます。

アクセス権限セットを作成するには

このアクセス許可セットは後で に割り当てCodeCatalystECSUserます。

  1. ナビゲーションペインで [アクセス許可セット] を選択し、[アクセス許可セットの作成] を選択します。

  2. 事前定義されたアクセス許可セットを選択し、 を選択しますAdministratorAccess。このポリシーは、すべての に完全なアクセス許可を提供します AWS のサービス。

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

  4. アクセス許可セット名」に、次のように入力します。

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

  6. [確認と作成] ページで情報を確認し、[グループの作成] を選択します。

アクセス許可セットを CodeCatalystECSUser に割り当てるには
  1. ナビゲーションペインで を選択しAWS アカウント、現在サインイン AWS アカウント している の横にあるチェックボックスをオンにします。

  2. [ユーザーまたはグループの割り当て] を選択します。

  3. [ユーザー] タブを選択します。

  4. [CodeCatalystECSUser] のチェックボックスをオンにします。

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

  6. [CodeCatalystECSPermissionSet] のチェックボックスをオンにします。

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

  8. 情報を確認し、[送信] を選択します。

    これで、 CodeCatalystECSUserCodeCatalystECSPermissionSetを に割り当て AWS アカウント、それらをバインドしました。

CodeCatalystECSUser としてサインアウトして再度サインインするには
  1. サインアウトする前に、 AWS アクセスポータル URL と、 のユーザー名とワンタイムパスワードがあることを確認してくださいCodeCatalystECSUser。以前にこの情報をテキストエディタにコピーしておく必要があります。

    注記

    この情報がない場合は、IAM Identity Center CodeCatalystECSUserの詳細ページに移動し、パスワードのリセット、ワンタイムパスワードの生成 [...]、パスワードのリセットをもう一度選択して、画面に情報を表示します。

  2. からサインアウトします AWS。

  3. AWS アクセスポータル URL をブラウザのアドレスバーに貼り付けます。

  4. のユーザー名とワンタイムパスワードでサインインしますCodeCatalystECSUser

  5. 新しいパスワード でパスワードを入力し、新しいパスワード の設定 を選択します。

    画面に AWS アカウント ボックスが表示されます。

  6. を選択しAWS アカウントCodeCatalystECSUserユーザーとアクセス許可セット AWS アカウント を割り当てた の名前を選択します。

  7. CodeCatalystECSPermissionSet の横にある [管理コンソール] を選択します。

    AWS Management Console が表示されます。これで、適切なアクセス許可CodeCatalystECSUserで としてサインインします。

AWS CloudShell インスタンスを起動するには
  1. としてCodeCatalystECSUser、上部のナビゲーションバーで AWS アイコン () を選択します AWS icon

    のメインページ AWS Management Console が表示されます。

  2. 上部のナビゲーションバーで、 AWS CloudShell アイコン () を選択します CloudShell icon

    CloudShell が開きます。 CloudShell 環境が作成されるまで待ちます。

    注記

    CloudShell アイコンが表示されない場合は、 でサポートされているリージョン CloudShellにいることを確認してください。このチュートリアルは、米国西部 (オレゴン) リージョンにいることを前提としています。

AWS CLI がインストールされていることを確認するには
  1. CloudShell ターミナルで、次のように入力します。

    aws --version
  2. バージョンが表示されていることを確認します。

    AWS CLI は現在のユーザー 用にすでに設定されているためCodeCatalystECSUser、通常どおり、 AWS CLI キーと認証情報を設定する必要はありません。

ステップ 2: プレースホルダーアプリケーションを Amazon ECS にデプロイする

このセクションでは、プレースホルダーアプリケーションを Amazon ECS に手動でデプロイします。このプレースホルダーアプリケーションは、ワークフローによってデプロイされた Hello World アプリケーションに置き換えられます。プレースホルダーアプリケーションは Apache Web Server です。

Amazon ECS の詳細については、「Amazon Elastic Container Service デベロッパーガイド」を参照してください。

プレースホルダーアプリケーションをデプロイするには、以下の一連の手順を実行します。

タスク実行ロールを作成するには

このロールは、ユーザーに代わって API コールを行う AWS Fargate (Fargate) アクセス許可を Amazon ECS に付与します。

  1. 信頼ポリシーを作成します。

    1. で AWS CloudShell、次のコマンドを入力します。

      cat > codecatalyst-ecs-trust-policy.json

      CloudShell ターミナルに点滅するプロンプトが表示されます。

    2. プロンプトに次のコードを入力します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    3. 最後の中括弧 () の後にカーソルを置きます}

    4. EnterCtrl+dを押してファイルを保存し、猫を終了します。

  2. タスク実行ロールを作成します。

    aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  3. AWS 管理AmazonECSTaskExecutionRolePolicyポリシーをロールにアタッチします。

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
  4. ロールの詳細を表示します。

    aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
  5. ロール"Arn":の値、例えば を書き留めますarn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role。この Amazon リソースネーム (ARN) は後で必要になります。

Amazon ECS クラスターを作成するには

このクラスターには Apache プレースホルダーアプリケーションと、後で Hello World アプリケーションが含まれます。

  1. としてCodeCatalystECSUser、 で空のクラスター AWS CloudShellを作成します。

    aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
  2. (オプション) クラスターが正常に作成されたことを確認します。

    aws ecs list-clusters

    codecatalyst-ecs-cluster クラスターの ARN がリストに表示され、正常に作成されたことを示します。

タスク定義ファイルを作成するには

タスク定義ファイルは、 からプルされた Apache 2.4 Web Server Docker イメージ (httpd:2.4) を実行することを示します DockerHub。

  1. としてCodeCatalystECSUser、 でタスク定義ファイル AWS CloudShellを作成します。

    cat > taskdef.json
  2. プロンプトに次のコードを貼り付けます。

    { "executionRoleArn": "arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "family": "codecatalyst-ecs-task-def", "memory": "512", "networkMode": "awsvpc" }

    上記のコードで、arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role を置き換えます。

    でメモしたタスク実行ロールの ARN を持つ タスク実行ロールを作成するには

  3. 最後の中括弧 () の後にカーソルを置きます}

  4. EnterCtrl+dを押してファイルを保存し、猫を終了します。

タスク定義ファイルを Amazon ECS に登録するには
  1. としてCodeCatalystECSUser、 でタスク定義 AWS CloudShellを登録します。

    aws ecs register-task-definition \ --cli-input-json file://taskdef.json
  2. (オプション) タスク定義が登録されていることを確認します。

    aws ecs list-task-definitions

    codecatalyst-ecs-task-def タスク定義がリストに表示されます。

Amazon ECS サービスを作成するには

Amazon ECS サービスは、Apache プレースホルダーアプリケーションのタスク (および関連する Docker コンテナ) を実行し、後で Hello World アプリケーションを実行します。

  1. としてCodeCatalystECSUser、まだ Amazon Elastic Container Service コンソールに切り替えていない場合は、切り替えます。

  2. 前に作成したクラスター を選択しますcodecatalyst-ecs-cluster

  3. サービス タブで、 の作成 を選択します。

  4. 「作成」ページで、次の操作を行います。

    1. 次にリストされているものを除き、すべてのデフォルト設定を保持します。

    2. [Launch type (起動タイプ)] で、[FARGATE] を選択します。

    3. タスク定義 で、ファミリードロップダウンリストで以下を選択します。

      codecatalyst-ecs-task-def

    4. サービス名 には、次のように入力します。

      codecatalyst-ecs-service
    5. 必要なタスク には、次のように入力します。

      3

      このチュートリアルでは、各タスクが単一の Docker コンテナを起動します。

    6. ネットワークセクションを展開します。

    7. VPC では、任意の VPC を選択します。

    8. サブネット で、任意のサブネットを選択します。

      注記

      サブネットは 1 つだけ指定します。このチュートリアルに必要なのはこれだけです。

      注記

      VPC とサブネットがない場合は、作成します。「Amazon VPC ユーザーガイド」の「VPC の作成」および「VPC にサブネットを作成する」を参照してください。

    9. セキュリティグループ で、新しいセキュリティグループ の作成 を選択し、次の操作を行います。

      1. セキュリティグループ名 には、次のように入力します。

        codecatalyst-ecs-security-group
      2. セキュリティグループの説明 には、次のように入力します。

        CodeCatalyst ECS security group
      3. [ルールを追加] を選択します。タイプHTTP を選択し、ソース Anywhere を選択します。

    10. 下部で、 の作成 を選択します。

    11. サービスが作成されるまで待ちます。このプロセスには数分かかることがあります。

  5. タスクタブを選択し、更新ボタンを選択します。3 つのタスクすべてで、Last Status 列が Running に設定されていることを確認します。

(オプション) Apache プレースホルダーアプリケーションが実行されていることを確認するには
  1. タスク タブで、3 つのタスクのいずれかを選択します。

  2. パブリック IP フィールドで、オープンアドレス を選択します。

    It Works! ページが表示されます。これは、Amazon ECS サービスが Apache イメージで Docker コンテナを起動するタスクを正常に開始したことを示します。

    チュートリアルのこの時点で、Amazon ECS クラスター、サービス、タスク定義、および Apache プレースホルダーアプリケーションを手動でデプロイしました。これらの項目がすべて揃ったら、Apache プレースホルダーアプリケーションをチュートリアルの Hello World アプリケーションに置き換えるワークフローを作成する準備が整いました。

ステップ 3: Amazon ECR イメージリポジトリを作成する

このセクションでは、Amazon Elastic Container Registry (Amazon ECR) にプライベートイメージリポジトリを作成します。このリポジトリには、以前にデプロイした Apache プレースホルダーイメージを置き換えるチュートリアルの Docker イメージが保存されます。

Amazon ECR の詳細については、Amazon Elastic Container Registry User Guide を参照してください。

Amazon ECR でイメージリポジトリを作成するには
  1. としてCodeCatalystECSUser、 で AWS CloudShell Amazon ECR に空のリポジトリを作成します。

    aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
  2. Amazon ECR リポジトリの詳細を表示します。

    aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
  3. “repositoryUri”: 値に注意してください。例えば、 です111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo

    これは、後でリポジトリをワークフローに追加するときに必要になります。

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

このセクションでは、 CodeCatalyst ワークフローが機能するために必要な AWS IAM ロールを作成します。これらのロールは次のとおりです。

  • ビルドロール – AWS アカウントにアクセスして Amazon ECR と Amazon EC2 に書き込むための CodeCatalyst ビルドアクション (ワークフロー内) アクセス許可を付与します。

  • ロールのデプロイ – AWS アカウント CodeCatalyst 、Amazon ECS、およびその他のいくつかのサービスにアクセスするための (ワークフロー内の) ECS アクションへのデプロイアクセス許可を付与します。 AWS

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

注記

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

ビルドロールとデプロイロールを作成するには、 AWS Management Console または を使用できます AWS CLI。

AWS Management Console

ビルドロールとデプロイロールを作成するには、以下の一連の手順を実行します。

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

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

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

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

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

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

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

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
      注記

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

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

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

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

      codecatalyst-ecs-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-ecs-build-policy、そのチェックボックスをオンにします。

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

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

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

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

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

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

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

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

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

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

    4. 上部で、ARN 値をコピーします。これは、後で必要になります。

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

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

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

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

    4. [Create Policy (ポリシーの作成)] を選択します。

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

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

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

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      注記

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

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

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

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

      codecatalyst-ecs-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-ecs-deploy-policy、そのチェックボックスをオンにします。

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

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

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

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

    これで、信頼ポリシーを使用してデプロイロールが作成されました。

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

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

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

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

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

    4. 上部で、ARN 値をコピーします。これは、後で必要になります。

AWS CLI

ビルドロールとデプロイロールを作成するには、以下の一連の手順を実行します。

両方のロールの信頼ポリシーを作成するには

としてCodeCatalystECSUser、 で信頼ポリシーファイル AWS CloudShellを作成します。

  1. ファイルを作成します。

    cat > codecatalyst-ecs-trust-policy.json
  2. ターミナルプロンプトで、次のコードを貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  3. 最後の中括弧 () の後にカーソルを置きます}

  4. EnterCtrl+dを押してファイルを保存し、猫を終了します。

ビルドポリシーとビルドロールを作成するには
  1. ビルドポリシーを作成します。

    1. としてCodeCatalystECSUser、 でビルドポリシーファイル AWS CloudShellを作成します。

      cat > codecatalyst-ecs-build-policy.json
    2. プロンプトで、次のコードを入力します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    3. 最後の中括弧 () の後にカーソルを置きます}

    4. EnterCtrl+dを押してファイルを保存し、猫を終了します。

  2. ビルドポリシーを に追加します AWS。

    aws iam create-policy \ --policy-name codecatalyst-ecs-build-policy \ --policy-document file://codecatalyst-ecs-build-policy.json
  3. コマンド出力で、 などの"arn":値を書き留めますarn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy。この ARN は後で必要になります。

  4. ビルドロールを作成し、信頼ポリシーをアタッチします。

    aws iam create-role \ --role-name codecatalyst-ecs-build-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. ビルドポリシーをビルドロールにアタッチします。

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy

    ここで、arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy は、前にメモしたビルドポリシーの ARN に置き換えられます。

  6. ビルドロールの詳細を表示します。

    aws iam get-role \ --role-name codecatalyst-ecs-build-role
  7. ロール"Arn":の値、例えば を書き留めますarn:aws:iam::111122223333:role/codecatalyst-ecs-build-role。この ARN は後で必要になります。

デプロイポリシーとデプロイロールを作成するには
  1. デプロイポリシーを作成します。

    1. で AWS CloudShell、デプロイポリシーファイルを作成します。

      cat > codecatalyst-ecs-deploy-policy.json
    2. プロンプトで、次のコードを入力します。

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      注記

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

      "Resource": "*"
    3. 最後の中括弧 () の後にカーソルを置きます}

    4. EnterCtrl+dを押してファイルを保存し、猫を終了します。

  2. デプロイポリシーを に追加します AWS。

    aws iam create-policy \ --policy-name codecatalyst-ecs-deploy-policy \ --policy-document file://codecatalyst-ecs-deploy-policy.json
  3. コマンド出力で、デプロイポリシーの値"arn":、例えば を書き留めますarn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy。この ARN は後で必要になります。

  4. デプロイロールを作成し、信頼ポリシーをアタッチします。

    aws iam create-role \ --role-name codecatalyst-ecs-deploy-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. デプロイポリシーをデプロイロールにアタッチします。ここで、arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy は、前にメモしたデプロイポリシーの ARN に置き換えられます。

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy
  6. デプロイロールの詳細を表示します。

    aws iam get-role \ --role-name codecatalyst-ecs-deploy-role
  7. ロールの値"Arn":、例えば を書き留めますarn:aws:iam::111122223333:role/codecatalyst-ecs-deploy-role。この ARN は後で必要になります。

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

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

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

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

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

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

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

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

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

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

    注記

    が表示された場合はThe security token included in the request is invalid、適切なアクセス許可がないためである可能性があります。この問題を解決するには、 からサインアウト AWS して、スペースの作成時に使用した AWS アカウントで再度サインインします CodeCatalyst。

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

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

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

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

このステップでは、 でソースリポジトリを作成します CodeCatalyst。このリポジトリには、タスク定義ファイルなど、チュートリアルのソースファイルが保存されます。

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

ソースリポジトリを作成するには
  1. https://codecatalyst.aws/ で CodeCatalyst コンソールを開きます。

  2. プロジェクト に移動しますcodecatalyst-ecs-project

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

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

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

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

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

このセクションでは、Hello World ソースファイルを CodeCatalyst リポジトリ に追加しますcodecatalyst-ecs-source-repository。これらは以下で構成されます。

  • index.html ファイル - ブラウザに Hello World メッセージを表示します。

  • Dockerfile – Docker イメージに使用するベースイメージと、それに適用する Docker コマンドについて説明します。

  • taskdef.json ファイル — クラスターでタスクを起動するときに使用する Docker イメージを定義します。

フォルダ構造は次のとおりです。

. |— public-html | |— index.html |— Dockerfile |— taskdef.json
注記

次の手順では、コンソールを使用してファイルを追加する方法を示します CodeCatalyst が、必要に応じて Git を使用できます。詳細については、「ソースリポジトリのクローン作成」を参照してください。

index.html

index.html ファイルには、ブラウザに Hello World メッセージが表示されます。

index.html ファイルを追加するには
  1. CodeCatalyst コンソールで、ソースリポジトリ に移動しますcodecatalyst-ecs-source-repository

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

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

    public-html/index.html
    重要

    同じ名前のフォルダを作成するには、必ず public-html/ プレフィックスを含めてください。index.html はこのフォルダにあることが想定されます。

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

    <html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello World</h1> </body> </html>
  5. コミット を選択し、もう一度コミット を選択します。

    index.html は、 public-htmlフォルダのリポジトリに追加されます。

Dockerfile

Dockerfile は、使用するベース Docker イメージと、それに適用する Docker コマンドを記述します。Dockerfile の詳細については、「Dockerfile リファレンス」を参照してください。

ここで指定された Dockerfile は、Apache 2.4 ベースイメージ (httpd) を使用することを示します。また、ウェブページを提供する Apache サーバーのフォルダindex.htmlに というソースファイルをコピーする手順も含まれています。Dockerfile の EXPOSE命令は、コンテナがポート 80 でリッスンしていることを Docker に伝えます。

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

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

    Dockerfile

    ファイル拡張子を含めないでください。

    重要

    Dockerfile はリポジトリのルートフォルダに存在する必要があります。ワークフローの Docker build コマンドは、ワークフローが存在することを想定しています。

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

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
  4. コミット を選択し、もう一度コミット を選択します。

    Dockerfile がリポジトリに追加されます。

taskdef.json

このステップで追加するファイルは、 で既に指定したtaskdef.jsonファイルと同じですがステップ 2: プレースホルダーアプリケーションを Amazon ECS にデプロイする、次の違いがあります。

image: フィールド (httpd:2.4) でハードコードされた Docker イメージ名を指定する代わりに、ここでのタスク定義では、いくつかの変数を使用してイメージ $REPOSITORY_URIと を示します$IMAGE_TAG。これらの変数は、後のステップでワークフローを実行するときに、ワークフローのビルドアクションによって生成された実際の値に置き換えられます。

タスク定義パラメータの詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「タスク定義パラメータ」を参照してください。

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

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

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

    { "executionRoleArn": "arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced # by the workflow at build time (see the build action in the # workflow) "image": $REPOSITORY_URI:$IMAGE_TAG, "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "codecatalyst-ecs-task-def" }

    上記のコードで、

    arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role

    でメモしたタスク実行ロールの ARN を に含めますタスク実行ロールを作成するには

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

    taskdef.json ファイルがリポジトリに追加されます。

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

このステップでは、ソースファイルを取得し、Docker イメージにビルドして、そのイメージを Amazon ECS クラスターにデプロイするワークフローを作成します。このデプロイは、既存の Apache プレースホルダーアプリケーションを置き換えます。

ワークフローは、順番に実行される次の構成要素で構成されます。

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

  • ビルドアクション (BuildBackend) – トリガー時に、 アクションは Dockerfile を使用して Docker イメージをビルドし、そのイメージを Amazon ECR にプッシュします。ビルドアクションは、 を正しいimageフィールド値taskdef.jsonで更新し、このファイルの出力アーティファクトを作成します。このアーティファクトは、デプロイアクションの入力として使用され、次は です。

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

  • デプロイアクション (DeployToECS) – ビルドアクションが完了すると、デプロイアクションはビルドアクション (TaskDefArtifact) によって生成された出力アーティファクトを検索し、そのtaskdef.json内部を見つけて、Amazon ECS サービスに登録します。次に、サービスは taskdef.json ファイルの指示に従って、Amazon ECS クラスター内で 3 つの Amazon ECS タスク、および関連付けられた Hello World Docker コンテナを実行します。

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

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

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

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

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

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

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

    注記

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

    Name: codecatalyst-ecs-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name: codecatalyst-ecs-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-ecs-build-role Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo - Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com #build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in taskdef.json - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat taskdef.json # The output artifact will be a zip file that contains a task definition file. Outputs: Artifacts: - Name: TaskDefArtifact Files: - taskdef.json DeployToECS: DependsOn: - BuildBackend Identifier: aws/ecs-deploy@v1 Environment: Name: codecatalyst-ecs-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-ecs-deploy-role Inputs: Sources: [] Artifacts: - TaskDefArtifact Configuration: region: us-west-2 cluster: codecatalyst-ecs-cluster service: codecatalyst-ecs-service task-definition: taskdef.json

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

    • で作成した環境の名前codecatalyst-ecs-environmentを持つ の両方のインスタンス前提条件

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

    • codecatalyst-ecs-build-role に、 で作成したビルドロールの名前を入力しますステップ 4: AWS ロールを作成する

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo ( Value:プロパティ内) と、 で作成した Amazon ECR リポジトリの URIステップ 3: Amazon ECR イメージリポジトリを作成する

    • イメージサフィックス () のない Amazon ECR リポジトリの URI を持つ 111122223333.dkr.ecr.us-west-2.amazonaws.com ( Run: aws ecr コマンド内)/codecatalyst-ecs-image-repo

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

    • AWS リージョンコードを含む us-west-2 の両方のインスタンス。リージョンコードのリストについては、「」の「リージョンエンドポイント」を参照してくださいAWS 全般のリファレンス

    注記

    ビルドロールとデプロイロールを作成しない場合は、 codecatalyst-ecs-build-role と をCodeCatalystWorkflowDevelopmentRole-spaceNameロールの名前codecatalyst-ecs-deploy-roleに置き換えます。このロールの詳細については、「ステップ 4: AWS ロールを作成する」を参照してください。

    ヒント

    前のワークフローコードに示されている find および sed コマンドを使用してリポジトリとイメージ名を更新する代わりに、この目的のために Amazon ECS タスク定義アクションをレンダリングできます。詳細については、「ワークフローを使用した Amazon ECS タスク定義ファイルの変更」を参照してください。

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

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

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

    1. コミットメッセージ で、テキストを削除して次のように入力します。

      Add first workflow
    2. リポジトリ で、 を選択しますcodecatalyst-ecs-source-repository

    3. ブランチ名 で、main を選択します。

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

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

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

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

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

  4. DeployToECS を選択すると、デプロイの進行状況が表示されます。

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

デプロイを確認するには
  1. Amazon ECS クラシックコンソール (https://console.aws.amazon.com/ecs/) を開きます。

  2. クラスター を選択しますcodecatalyst-ecs-cluster

  3. [タスク] タブを選択します。

  4. 3 つのタスクのいずれかを選択します。

  5. パブリック IP フィールドで、オープンアドレス を選択します。

    ブラウザに「Hello World」ページが表示され、Amazon ECS サービスがアプリケーションを正常にデプロイしたことを示します。

ステップ 9: ソースファイルを変更する

このセクションでは、ソースリポジトリの index.html ファイルを変更します。この変更により、ワークフローは新しい Docker イメージを構築し、コミット ID でタグ付けして Amazon ECR にプッシュし、Amazon ECS にデプロイします。

index.html を変更するには
  1. CodeCatalyst コンソールのナビゲーションペインで、コード を選択し、ソースリポジトリ を選択し、リポジトリ を選択しますcodecatalyst-ecs-source-repository

  2. [public-html] を選択し、[index.html] を選択します。

    の内容index.htmlが表示されます。

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

  4. 14 行目で、Hello Worldテキストを に変更しますTutorial complete!

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

    コミットにより、新しいワークフロー実行が開始されます。

  6. (オプション) ソースリポジトリのメインページに移動し、コミットの表示 を選択しindex.html変更のコミット ID をメモします。

  7. デプロイの進行状況を確認します。

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

    2. を選択して、最新の実行codecatalyst-ecs-workflowを表示します。

    3. ワークフローの実行の進行状況を確認するにはBuildBackend、、、および DeployToECS を選択します。

  8. 次のように、アプリケーションが更新されていることを確認します。

    1. Amazon ECS クラシックコンソール (https://console.aws.amazon.com/ecs/) を開きます。

    2. クラスター を選択しますcodecatalyst-ecs-cluster

    3. [タスク] タブを選択します。

    4. 3 つのタスクのいずれかを選択します。

    5. パブリック IP フィールドで、オープンアドレス を選択します。

      Tutorial complete! ページが表示されます。

  9. (オプション) で AWS Amazon ECR コンソールに切り替え、新しい Docker イメージがステップ 6 のコミット ID でタグ付けされていることを確認します。

クリーンアップ

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

で AWS Management Console、次の順序でクリーンアップします。

  1. Amazon ECS で、次の操作を行います。

    1. を削除しますcodecatalyst-ecs-service

    2. を削除しますcodecatalyst-ecs-cluster

    3. codecatalyst-ecs-task-definition の登録を解除します。

  2. Amazon ECR で、 を削除しますcodecatalyst-ecs-image-repo

  3. Amazon EC2 で、 を削除しますcodecatalyst-ecs-security-group

  4. IAM Identity Center で、以下を削除します。

    1. CodeCatalystECSUser

    2. CodeCatalystECSPermissionSet

CodeCatalyst コンソールで、次のようにクリーンアップします。

  1. を削除しますcodecatalyst-ecs-workflow

  2. を削除しますcodecatalyst-ecs-environment

  3. を削除しますcodecatalyst-ecs-source-repository

  4. を削除しますcodecatalyst-ecs-project

このチュートリアルでは、 CodeCatalyst ワークフローと Amazon ECS へのデプロイアクションを使用して Amazon ECS サービスにアプリケーションをデプロイする方法を学習しました。