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

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

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

このチュートリアルでは、Amazon CodeCatalyst ワークフロー、Amazon EKS、およびその他のいくつかの サービスを使用して、コンテナ化されたアプリケーションを Amazon Elastic Kubernetes Service にデプロイする方法について説明します AWS 。デプロイされたアプリケーションはシンプルな「Hello, World!」です。Apache ウェブサーバーの Docker イメージ上に構築された ウェブサイト。このチュートリアルでは、開発マシンや Amazon EKS クラスターのセットアップなど、必要な準備作業を順を追って説明し、アプリケーションを構築してクラスターにデプロイするワークフローを作成する方法について説明します。

最初のデプロイが完了すると、チュートリアルではアプリケーションソースを変更するように指示します。この変更により、新しい Docker イメージが構築され、新しいリビジョン情報とともに Docker イメージリポジトリにプッシュされます。その後、Docker イメージの新しいリビジョンが Amazon EKS にデプロイされます。

ヒント

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

前提条件

このチュートリアルを開始する前に:

ステップ 1: 開発マシンをセットアップする

このチュートリアルの最初のステップは、このチュートリアル全体で使用するいくつかのツールを使用して開発マシンを設定することです。これらのツールは次のとおりです。

  • eksctl ユーティリティ – クラスター作成用

  • kubectl ユーティリティ – の前提条件 eksctl

  • AWS CLI - の前提条件でもあります。 eksctl

これらのツールがある場合は、既存の開発マシンにインストールすることも、クラウドベースの CodeCatalyst 開発環境を使用することもできます。 CodeCatalyst 開発環境の利点は、スピンアップとスピンダウンが容易で、他の CodeCatalyst サービスと統合されているため、このチュートリアルをより少ないステップで実行できます。

このチュートリアルでは、 CodeCatalyst 開発環境を使用することを前提としています。

次の手順では、 CodeCatalyst 開発環境をすばやく起動して必要なツールで設定する方法を説明しますが、詳細な手順が必要な場合は、以下を参照してください。

開発環境を起動するには
  1. https://codecatalyst.aws/ で CodeCatalyst コンソールを開きます。

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

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

  4. ソースリポジトリの名前 を選択しますcodecatalyst-eks-source-repository

  5. 上部近くで開発環境の作成 を選択しAWS Cloud9 (ブラウザで) を選択します。

  6. 既存のブランチとメインで作業が選択されていることを確認してから、「 の作成」を選択します。

    開発環境が新しいブラウザタブで起動し、リポジトリ (codecatalyst-eks-source-repository) がそこにクローンされます。

kubectl をインストールして設定するには
  1. 開発環境ターミナルで、次のように入力します。

    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl
  2. 次のように入力します。

    chmod +x ./kubectl
  3. 次のように入力します。

    mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
  4. 次のように入力します。

    echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  5. 次のように入力します。

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

    これで、 がインストールされましたkubectl

eksctl をインストールして設定するには
注記

eksctlkubectl、代わりに を使用できるため、必須ではありません。ただし、 eksctlにはクラスター設定の多くを自動化する利点があるため、このチュートリアルでは が推奨されています。

  1. 開発環境ターミナルで、次のように入力します。

    curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
  2. 次のように入力します。

    sudo cp /tmp/eksctl /usr/bin
  3. 次のように入力します。

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

    これで、 がインストールされましたeksctl

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

    aws --version
  2. AWS CLI がインストールされていることを確認するために、バージョンが表示されていることを確認します。

    残りの手順を完了して、 にアクセスするために必要なアクセス許可 AWS CLI を持つ を設定します AWS。

を設定するには AWS CLI

AWS サービスへのアクセスを許可するには、 アクセスキーとセッショントークン AWS CLI を使用して を設定する必要があります。次の手順では、キーとトークンを簡単に設定することができますが、詳細な手順が必要な場合は、「 ユーザーガイド」の「 の設定 AWS CLIAWS Command Line Interface 」を参照してください。

  1. IAM Identity Center ユーザーを次のように作成します。

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

      (IAM Identity Center にサインインしたことがない場合は、Enable を選択する必要があります)。

      注記

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

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

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

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

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

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

      codecatalyst-eks-user
    7. で、次のように入力します。

      codecatalyst-eks-user
    8. 表示名 では、次の点に注意してください。

      codecatalyst-eks-user codecatalyst-eks-user
    9. [次へ] をクリックします。

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

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

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

    12. 「コピー」を選択し、サインイン情報をテキストファイルに貼り付けます。サインイン情報は、 AWS アクセスポータル URL、ユーザー名、ワンタイムパスワードで構成されます。

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

  2. アクセス許可セットを次のように作成します。

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

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

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

    4. アクセス許可セット名 で、 を削除AdministratorAccessして入力します。

      codecatalyst-eks-permission-set
    5. [次へ] をクリックします。

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

  3. 次のようにcodecatalyst-eks-user、アクセス許可セットを に割り当てます。

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

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

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

    4. [codecatalyst-eks-user] のチェックボックスをオンにします。

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

    6. [codecatalyst-eks-permission-set] のチェックボックスをオンにします。

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

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

      これで、 codecatalyst-eks-usercodecatalyst-eks-permission-setを に割り当て AWS アカウント、それらをバインドしました。

  4. 次のように、 codecatalyst-eks-userのアクセスキーとセッショントークンを取得します。

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

      注記

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

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

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

    4. 次の方法でサインインします。

      • ユーザー名:

        codecatalyst-eks-user
      • パスワード:

        one-time-password

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

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

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

    7. の横にある コマンドラインまたはプログラムによるアクセス codecatalyst-eks-permission-setを選択します。

    8. ページの中央にあるコマンドをコピーします。次のようになります。

      export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="session-token"

      セッショントークンは長いランダム文字列です。

  5. 次のように AWS CLI、アクセスキーとセッショントークンを に追加します。

    1. CodeCatalyst 開発環境に戻ります。

    2. ターミナルプロンプトで、コピーしたコマンドを貼り付けます。[Enter] キーを押します。

      これで、 アクセスキーとセッショントークン AWS CLI を使用して を設定しました。を使用して AWS CLI 、このチュートリアルに必要なタスクを完了できるようになりました。

      重要

      このチュートリアルのどの時点でも、次のようなメッセージが表示されます。

      Unable to locate credentials. You can configure credentials by running "aws configure".

      または:

      ExpiredToken: The security token included in the request is expired

      AWS CLI セッションの有効期限が切れているためです。この場合、 aws configure コマンドを実行しないでください。代わりに、 で始まるこの手順のステップ 4 の手順を使用してObtain codecatalyst-eks-user's access key and session token、セッションを更新します。

ステップ 2: Amazon EKS クラスターを作成する

このセクションでは、Amazon EKS でクラスターを作成します。以下の手順では、 を使用してクラスターを作成する簡単な方法について説明しますがeksctl、詳細な手順が必要な場合は、以下を参照してください。

注記

プライベートクラスターは、Amazon EKS と CodeCatalyst の統合ではサポートされていません。

開始する前に

開発マシンで次のタスクが完了していることを確認します。

  • eksctl ユーティリティをインストールしました。

  • kubectl ユーティリティをインストールしました。

  • をインストール AWS CLI し、アクセスキーとセッショントークンを使用して設定しました。

これらのタスクを完了する方法については、「」を参照してくださいステップ 1: 開発マシンをセットアップする

クラスターを作成するには
重要

クラスターが正しく設定されないため、Amazon EKS サービスのユーザーインターフェイスを使用してクラスターを作成しないでください。次の手順で説明するように、 eksctlユーティリティを使用します。

  1. 開発環境に移動します。

  2. クラスターとノードを作成します。

    eksctl create cluster --name codecatalyst-eks-cluster --region us-west-2

    コードの説明は以下のとおりです。

    • codecatalyst-eks-cluster は、クラスターに付ける名前に置き換えられます。

    • us-west-2 はお客様の リージョンに置き換えられます。

    10~20 分後、次のようなメッセージが表示されます。

    EKS cluster "codecatalyst-eks-cluster" in "us-west-2" region is ready

    注記

    がクラスターを作成すると AWS 、複数のwaiting for CloudFormation stackメッセージが表示されます。これは通常の動作です。

  3. クラスターが正常に作成されたことを確認します。

    kubectl cluster-info

    クラスターが正常に作成されたことを示す次のようなメッセージが表示されます。

    Kubernetes master is running at https://long-string.gr7.us-west-2.eks.amazonaws.com CoreDNS is running at https://long-string.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

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

このセクションでは、Amazon Elastic Container Registry (Amazon ECR) にプライベートイメージリポジトリを作成します。このリポジトリには、チュートリアル用の Docker イメージが保存されます。

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

Amazon ECR でイメージリポジトリを作成するには
  1. 開発環境に移動します。

  2. Amazon ECR で空のリポジトリを作成します。

    aws ecr create-repository --repository-name codecatalyst-eks-image-repo

    を Amazon ECR リポジトリに付ける名前codecatalyst-eks-image-repoに置き換えます。

    このチュートリアルでは、リポジトリに という名前を付けますcodecatalyst-eks-image-repo

  3. Amazon ECR リポジトリの詳細を表示します。

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

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

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

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

  • index.html ファイル — 「Hello, World!」を表示します。ブラウザの メッセージ。

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

  • deployment.yaml ファイル — Kubernetes サービスとデプロイを定義する Kubernetes マニフェスト。

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

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

index.html

index.html ファイルには「Hello, World!」と表示されます。ブラウザの メッセージ。

index.html ファイルを追加するには
  1. 開発環境に移動します。

  2. codecatalyst-eks-source-repository、 という名前のフォルダを作成しますpublic-html

  3. /public-html、次の内容index.htmlで という名前のファイルを作成します。

    <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>
  4. ターミナルプロンプトで、次のように入力します。

    cd /projects/codecatalyst-eks-source-repository
  5. 追加、コミット、プッシュ:

    git add . git commit -m "add public-html/index.html" git push

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

Dockerfile

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

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

Dockerfile を追加するには
  1. codecatalyst-eks-source-repository、次の内容Dockerfileの というファイルを作成します。

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80

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

    重要

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

  2. 追加、コミット、プッシュ:

    git add . git commit -m "add Dockerfile" git push

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

deployment.yaml

このセクションでは、リポジトリにdeployment.yamlファイルを追加します。deployment.yaml ファイルは、実行する 2 つの Kubernetes リソースタイプまたは種類を定義する Kubernetes マニフェストです。「サービス」と「デプロイ」です。

  • 「サービス」はロードバランサーを Amazon EC2 にデプロイします。ロードバランサーには、「Hello, World!」を参照するために使用できるインターネット向けパブリック URL と標準ポート (ポート 80) が用意されています。アプリケーションをデプロイします。

  • 「deployment」は 3 つのポッドをデプロイし、各ポッドには「Hello, World!」という名前の Docker コンテナが含まれます。アプリケーションをデプロイします。3 つのポッドは、クラスターの作成時に作成されたノードにデプロイされます。

このチュートリアルのマニフェストは短いですが、マニフェストにはポッド、ジョブ、イングレス、ネットワークポリシーなど、任意の数の Kubernetes リソースタイプを含めることができます。さらに、デプロイが複雑な場合は、複数のマニフェストファイルを使用できます。

deployment.yaml ファイルを追加するには
  1. codecatalyst-eks-source-repository、 という名前のフォルダを作成しますKubernetes

  2. /Kubernetes、次の内容deployment.yamlの というファイルを作成します。

    apiVersion: v1 kind: Service metadata: name: my-service labels: app: my-app spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: codecatalyst-eks-container # The $REPOSITORY_URI and $IMAGE_TAG placeholders will be replaced by actual values supplied by the build action in your workflow image: $REPOSITORY_URI:$IMAGE_TAG ports: - containerPort: 80
  3. 追加、コミット、プッシュ:

    git add . git commit -m "add Kubernetes/deployment.yaml" git push

    deployment.yaml ファイルは、 というフォルダのリポジトリに追加されますKubernetes

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

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

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

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

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

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

  • ロールのデプロイ – AWS アカウントと Amazon EKS CodeCatalyst にアクセスするための (ワークフロー内の) Kubernetes クラスターへのデプロイアクションのアクセス許可を付与します。

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

注記

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

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

1. 両方のロールの信頼ポリシーを作成するには
  1. 開発環境に移動します。

  2. Cloud9-long-string ディレクトリで、次の内容codecatalyst-eks-trust-policy.jsonで という名前のファイルを作成します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
2. ビルドロールのビルドポリシーを作成するには
  • Cloud9-long-string ディレクトリで、次の内容codecatalyst-eks-build-policy.jsonで という名前のファイルを作成します。

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

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

    "Resource": "*"
3. デプロイロールのデプロイポリシーを作成するには
  • Cloud9-long-string ディレクトリで、次の内容codecatalyst-eks-deploy-policy.jsonで という名前のファイルを作成します。

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

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

    "Resource": "*"

これで、開発環境に 3 つのポリシードキュメントが追加されました。ディレクトリ構造は次のようになります。

|— Cloud9-long-string |— .c9 |— codecatalyst-eks-source-repository |— Kubernetes |— public-html |— Dockerfile codecatalyst-eks-build-policy.json codecatalyst-eks-deploy-policy.json codecatalyst-eks-trust-policy.json
4. ビルドポリシーを に追加するには AWS
  1. 開発環境ターミナルで、次のように入力します。

    cd /projects
  2. 次のように入力します。

    aws iam create-policy \ --policy-name codecatalyst-eks-build-policy \ --policy-document file://codecatalyst-eks-build-policy.json
  3. [Enter] キーを押します。

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

5. デプロイポリシーを に追加するには AWS
  1. 次のように入力します。

    aws iam create-policy \ --policy-name codecatalyst-eks-deploy-policy \ --policy-document file://codecatalyst-eks-deploy-policy.json
  2. [Enter] キーを押します。

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

6. ビルドロールを作成するには
  1. 次のように入力します。

    aws iam create-role \ --role-name codecatalyst-eks-build-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. [Enter] キーを押します。

  3. 次のように入力します。

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

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

  4. [Enter] キーを押します。

  5. ターミナルプロンプトで、次のように入力します。

    aws iam get-role \ --role-name codecatalyst-eks-build-role
  6. [Enter] キーを押します。

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

7. デプロイロールを作成するには
  1. 次のように入力します。

    aws iam create-role \ --role-name codecatalyst-eks-deploy-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. [Enter] キーを押します。

  3. 次のように入力します。

    aws iam attach-role-policy \ --role-name codecatalyst-eks-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy

    ここで、arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy は、前にメモしたデプロイポリシーの ARN に置き換えられます。

  4. [Enter] キーを押します。

  5. 次のように入力します。

    aws iam get-role \ --role-name codecatalyst-eks-deploy-role
  6. [Enter] キーを押します。

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

これで、ビルドロールとデプロイロールを作成し、その ARNs。

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

このステップでは、スペースに接続 AWS アカウント した にビルドロール (codecatalyst-eks-build-role) とデプロイロール (codecatalyst-eks-deploy-role) を追加します。これにより、ロールをワークフローで使用できるようになります。

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

  2. 上部で、設定 を選択します。

  3. ナビゲーションペインで、AWS アカウント を選択します。アカウントのリストが表示されます。

  4. Amazon CodeCatalyst の表示名列で、ビルドロールとデプロイロールを作成した AWS アカウント の表示名をコピーします。(数字である可能性があります)。この値は、後でワークフローを作成するときに必要になります。

  5. 表示名を選択します。

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

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

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

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

  8. ドロップダウンリストから、以下を追加します。

    • codecatalyst-eks-build-role

    • codecatalyst-eks-deploy-role

    注記

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

  9. CodeCatalyst コンソールに戻り、ページを更新します。

    これで、ビルドロールとデプロイロールが IAM ロール の下に表示されます。

    これらのロールが CodeCatalyst ワークフローで使用できるようになりました。

ステップ 7: を更新する ConfigMap

で作成したデプロイロールステップ 5: AWS ロールを作成するを Kubernetes ConfigMap ファイルに追加して、Kubernetes クラスターへのデプロイアクション (ワークフロー内) に、クラスターにアクセスして操作できるようにする必要があります。eksctl または を使用してkubectl、このタスクを実行できます。

eksctl を使用して Kubernetes ConfigMap ファイルを設定するには
  • 開発環境ターミナルで、次のように入力します。

    eksctl create iamidentitymapping --cluster codecatalyst-eks-cluster --arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role --group system:masters --username codecatalyst-eks-deploy-role --region us-west-2

    コードの説明は以下のとおりです。

    • codecatalyst-eks-cluster は、Amazon EKS クラスターのクラスター名に置き換えられます。

    • arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role は、 で作成したデプロイロールの ARN に置き換えられますステップ 5: AWS ロールを作成する

    • codecatalyst-eks-deploy-role ( の横--username) は、 で作成したデプロイロールの名前に置き換えられますステップ 5: AWS ロールを作成する

      注記

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

    • us-west-2 はお客様の リージョンに置き換えられます。

    このコマンドの詳細については、「IAM ユーザーとロールの管理」を参照してください。

    次のようなメッセージが表示されます。

    2023-06-09 00:58:29 [ℹ]  checking arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role against entries in the auth ConfigMap
    2023-06-09 00:58:29 [ℹ]  adding identity "arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role" to auth ConfigMap
kubectl を使用して Kubernetes ConfigMap ファイルを設定するには
  1. 開発環境ターミナルで、次のように入力します。

    kubectl edit configmap -n kube-system aws-auth

    ConfigMap ファイルが画面に表示されます。

  2. テキストを赤色の斜体で追加します。

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: v1
    data:
      mapRoles: |
        - groups:
          - system:bootstrappers
          - system:nodes
          rolearn: arn:aws:iam::111122223333:role/eksctl-codecatalyst-eks-cluster-n-NodeInstanceRole-16BC456ME6YR5
          username: system:node:{{EC2PrivateDNSName}}
        - groups:
          - system:masters
          rolearn: arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role
          username: codecatalyst-eks-deploy-role
      mapUsers: |
        []
    kind: ConfigMap
    metadata:
      creationTimestamp: "2023-06-08T19:04:39Z"
      managedFields:
      ...

    コードの説明は以下のとおりです。

    • arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role は、 で作成したデプロイロールの ARN に置き換えられますステップ 5: AWS ロールを作成する

    • codecatalyst-eks-deploy-role ( の横username:) は、 で作成したデプロイロールの名前に置き換えられますステップ 5: AWS ロールを作成する

      注記

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

    詳細については、「Amazon EKS ユーザーガイド」の「クラスターへの IAM プリンシパルアクセスの有効化」を参照してください。

これで、デプロイロール、さらには Amazon EKS へのデプロイアクションに、Kubernetes クラスターへのアクセスsystem:masters許可が付与されました。

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

このステップでは、ソースファイルを取得し、Docker イメージにビルドして、Amazon EKS クラスターのツリーポッドにイメージをデプロイするワークフローを作成します。

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

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

  • ビルドアクション (BuildBackend) – トリガー時に、 アクションは Dockerfile を使用して Docker イメージをビルドし、そのイメージを Amazon ECR にプッシュします。また、ビルドアクションは、 deployment.yaml ファイル内の $REPOSITORY_URI変数と $IMAGE_TAG変数を正しい値で更新し、このファイルと Kubernetesフォルダ内のその他の出力アーティファクトを作成します。このチュートリアルでは、フォルダ内の唯一のファイルは Kubernetesですがdeployment.yaml、さらにファイルを含めることができます。アーティファクトはデプロイアクションの入力として使用され、次は です。

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

  • デプロイアクション (DeployToEKS) – ビルドアクションが完了すると、デプロイアクションはビルドアクション (Manifests) によって生成された出力アーティファクトを検索し、その中に deployment.yaml ファイルを見つけます。次に、 アクションは deployment.yaml ファイルの指示に従って 3 つのポッドを実行します。それぞれに 1 つの「Hello, World!」が含まれます。Docker コンテナ — Amazon EKS クラスター内。

ワークフローを作成するには
  1. CodeCatalyst コンソールに移動します。

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

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

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

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

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

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

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

  9. 次の YAML コードを追加して、新しいワークフロー定義ファイルを作成します。

    注記

    ワークフロー定義ファイルの詳細については、「」を参照してくださいワークフロー YAML 定義

    注記

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

    Name: codecatalyst-eks-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name: codecatalyst-eks-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-build-role Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-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 deployment.yaml - Run: find Kubernetes/ -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find Kubernetes/ -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat Kubernetes/* # The output artifact will be a zip file that contains Kubernetes manifest files. Outputs: Artifacts: - Name: Manifests Files: - "Kubernetes/*" DeployToEKS: DependsOn: - BuildBackend Identifier: aws/kubernetes-deploy@v1 Environment: Name: codecatalyst-eks-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-deploy-role Inputs: Artifacts: - Manifests Configuration: Namespace: default Region: us-west-2 Cluster: codecatalyst-eks-cluster Manifests: Kubernetes/

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

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

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

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

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

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

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

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

    注記

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. 左側の下部近くで、ロードバランサー を選択します。

  3. Kubernetes デプロイの一部として作成されたロードバランサーを選択します。どのロードバランサーを選択するかわからない場合は、タグタブで次のタグを探します。

    • kubernetes.io/service-name

    • kubernetes.io/cluster/ekstutorialcluster

  4. 正しいロードバランサーを選択し、説明タブを選択します。

  5. DNS 名の値をコピーしてブラウザのアドレスバーに貼り付けます。

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

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

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

index.html を変更するには
  1. 開発環境に移動します。

  2. ターミナルプロンプトで、 をソースリポジトリに変更します。

    cd /projects/codecatalyst-eks-source-repository
  3. 最新のワークフロー変更を取得します。

    git pull
  4. codecatalyst-eks-source-repository/public-html/index.html を開きます。

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

  6. 追加、コミット、プッシュ:

    git add . git commit -m "update index.html title" git push

    ワークフロー実行が自動的に開始されます。

  7. (オプション) 次のように入力します。

    git show HEAD

    index.html 変更のコミット ID を書き留めます。このコミット ID は、先ほど開始したワークフロー実行によってデプロイされる Docker イメージにタグ付けされます。

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

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

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

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

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

    1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

    2. 左側の下部近くで、ロードバランサー を選択します。

    3. Kubernetes デプロイの一部として作成されたロードバランサーを選択します。

    4. DNS 名の値をコピーしてブラウザのアドレスバーに貼り付けます。

      「チュートリアルが完了しました!」 ウェブページがブラウザに表示され、アプリケーションの新しいリビジョンが正常にデプロイされたことを示します。

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

クリーンアップ

このチュートリアルで使用するストレージとコンピューティングリソースに対して不必要に課金されないように、環境をクリーンアップする必要があります。

次をクリーンアップするには:
  1. クラスターを削除します。

    1. 開発環境ターミナルで、次のように入力します。

      eksctl delete cluster --region=us-west-2 --name=codecatalyst-eks-cluster

      コードの説明は以下のとおりです。

      • us-west-2 はお客様の リージョンに置き換えられます。

      • codecatalyst-eks-cluster は、作成したクラスターの名前に置き換えられます。

      5~10 分後、クラスターおよび関連するリソースは削除されます。これには、 AWS CloudFormation スタック、ノードグループ (Amazon EC2)、ロードバランサーが含まれますが、これらに限定されません。

    重要

    eksctl delete cluster コマンドが機能しない場合は、 AWS 認証情報または kubectl認証情報の更新が必要になる場合があります。更新する認証情報が不明な場合は、まず AWS 認証情報を更新します。 AWS 認証情報を更新するには、「」を参照してください「認証情報が見つかりません」と「」のExpiredTokenエラーを修正するにはどうすればよいですか?kubectl 認証情報を更新するには、「」を参照してください「サーバーに接続できません」というエラーを修正するにはどうすればよいですか?

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

    1. Amazon ECR で、 を削除しますcodecatalyst-eks-image-repo

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

      1. codecatalyst-eks-user

      2. codecatalyst-eks-permission-set

    3. IAM で、以下を削除します。

      • codecatalyst-eks-build-role

      • codecatalyst-eks-deploy-role

      • codecatalyst-eks-build-policy

      • codecatalyst-eks-deploy-policy

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

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

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

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

    4. 開発環境を削除します。

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

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