チュートリアル: 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 アプリケーションデプロイの設計図を使用する必要があります。詳細については、「設計図を使用したプロジェクトの作成」を参照してください。

前提条件

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

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

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

    codecatalyst-eks-project

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

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

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

    codecatalyst-eks-source-repository

    詳細については、「でソースリポジトリを使用してコードを保存し、共同作業する CodeCatalyst」を参照してください。

  • プロジェクトには、 CodeCatalyst 次の CI/CD 環境 (開発環境ではない) が必要です。

    codecatalyst-eks-environment

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

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

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

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

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

ステップ 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 し、 で AWS IAM Identity Center コンソールを開きますhttps://console.aws.amazon.com/singlesignon/

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

      注記

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

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

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

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

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

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

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

      codecatalyst-eks-user
    8. 表示名 で、次の状態を維持します。

      codecatalyst-eks-user codecatalyst-eks-user
    9. [Next (次へ)] を選択します。

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

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

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

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

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

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

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

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

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

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

      codecatalyst-eks-permission-set
    5. [Next (次へ)] を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

      注記

      この情報がない場合は、IAMIdentity 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"

      ... 場所 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 と CodeCatalyst の統合ではサポートされていませんEKS。

開始する前に

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

  • 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 ユーザーガイド」を参照してください。

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

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

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

    置換 codecatalyst-eks-image-repo Amazon ECRリポジトリに付ける名前の 。

    このチュートリアルでは、リポジトリに という名前を付けます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 マニフェストです。「サービス」と「デプロイ」です。

  • 「service」はロードバランサーを 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 に書き込むための CodeCatalyst ビルドアクション (ワークフロー内) アクセス許可を付与しますEC2。

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

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.com.rproxy.goskope.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 ロールを作成する

      注記

      デプロイロールを作成しない場合は、codecatalyst-eks-deploy-role CodeCatalystWorkflowDevelopmentRole-spaceName はロールの名前で指定します。このロールの詳細については、「ステップ 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:
      ...

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

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

これで、デプロイロール、さらには 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. [Create] (作成) を選択します。

  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イメージリポジトリを作成する

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

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

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

    注記

    ビルドロールとデプロイロールを作成しない場合は、codecatalyst-eks-build-role また、codecatalyst-eks-deploy-role CodeCatalystWorkflowDevelopmentRole-spaceName はロールの名前で指定します。このロールの詳細については、「ステップ 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 分後、スタック、ノードグループ (Amazon 内EC2)、ロードバランサーなど AWS CloudFormation 、クラスターと関連するリソースが削除されます。

    重要

    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サービスにデプロイする方法を学習しました。