View a markdown version of this page

Beanstalk クラスターの開始方法 - AWS Elastic Beanstalk

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

Beanstalk クラスターの開始方法

このチュートリアルでは、Elastic Beanstalk アプリケーションと Beanstalk クラスター環境を作成します。Elastic Beanstalk が構築済みのサンプルコンテナイメージをデプロイするように、アプリケーションバージョンを省略します。次に、環境の準備が整うのを待ち、URL を取得して終了します。または、完全にガイドされたエクスペリエンスを提供する AWS マネジメントコンソールで開始するか、 Beanstalk クラスタードキュメントで AI エージェントをポイントすることもできます。

推定所要時間: 15~20 分

重要

Elastic Beanstalk には追加料金はかかりませんが、Amazon EKS とそのコンピューティングなど、環境が使用する AWS リソースに対して料金が発生します。詳細については、「Elastic Beanstalk の料金」を参照してください。このチュートリアルを完了したら、クリーンアップステップを完了します。

[開始する前に]

以下の前提条件を満たしてください。

  • AWS CLIをインストールして設定します。手順については、「AWS Command Line Interface ユーザーガイド」の「AWS CLIの開始方法」を参照してください。

  • Elastic Beanstalk アプリケーションと環境を作成および管理でき、環境の作成時にクラスター、ノード、オブザーバビリティロールを渡すことができる IAM プリンシパルを使用します。正確なアクセス許可については、「」を参照してください環境を作成するアクセス許可。

  • 「」で説明されているように、Amazon EKS が引き受けるクラスターロール、クラスターの Amazon EC2 ノードが引き受けるノードロール、および環境のメトリクス、ログ、トレースを発行するオブザーバビリティロールを作成しますIAM ロールを作成する。環境が使用する VPC サブネットを選択するには、「」を参照してくださいBeanstalk クラスター環境のネットワークの設定。

  • Beanstalk クラスターが利用可能な AWS リージョンを選択します。コマンドは、 AWS CLI 設定から リージョンを使用します。

IAM ロールを作成する

Beanstalk クラスター環境には、クラスターロール、ノードロール、オブザーバビリティロールの 3 つの IAM ロールが必要です。Elastic Beanstalk コンソールによって自動的に作成されますが、このチュートリアルでは を使用するため AWS CLI、最初に作成します。コンソールは既存のロールを名前で選択するので、これらの名前を使用します。各ロールの内容と、ロールを渡す必要がある発信者のアクセス許可については、「」を参照してくださいBeanstalk クラスターのアクセス許可。

クラスター、ノード、オブザーバビリティロールを作成するには
  1. ロールを引き受けるサービスごとに信頼ポリシーファイルを作成します。クラスターロールは Amazon EKS を信頼し、ノードロールは Amazon EC2 を信頼し、オブザーバビリティロールは Amazon EKS Pod Identity を信頼します。

    $ cat > eks-trust.json <<'EOF' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "eks.amazonaws.com"}, "Action": ["sts:AssumeRole", "sts:TagSession"] }] } EOF
    $ cat > ec2-trust.json <<'EOF' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" }] } EOF
    $ cat > pods-trust.json <<'EOF' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "pods.eks.amazonaws.com"}, "Action": ["sts:AssumeRole", "sts:TagSession"] }] } EOF
  2. クラスターロールを作成し、そのポリシーをアタッチします。

    $ aws iam create-role \ --role-name aws-elasticbeanstalk-eks-cluster-role \ --assume-role-policy-document file://eks-trust.json $ for p in AmazonEKSClusterPolicy AmazonEKSNetworkingPolicy AmazonEKSComputePolicy \ AmazonEKSBlockStoragePolicy AmazonEKSLoadBalancingPolicy AWSElasticBeanstalkEKSTagging; do aws iam attach-role-policy \ --role-name aws-elasticbeanstalk-eks-cluster-role \ --policy-arn arn:aws:iam::aws:policy/$p done
  3. ノードロールを作成し、そのポリシーをアタッチします。

    $ aws iam create-role \ --role-name aws-elasticbeanstalk-eks-node-role \ --assume-role-policy-document file://ec2-trust.json $ for p in AmazonEKSWorkerNodeMinimalPolicy AmazonEC2ContainerRegistryPullOnly \ AmazonSSMManagedInstanceCore; do aws iam attach-role-policy \ --role-name aws-elasticbeanstalk-eks-node-role \ --policy-arn arn:aws:iam::aws:policy/$p done
  4. オブザーバビリティロールを作成し、そのポリシーをアタッチします。

    $ aws iam create-role \ --role-name aws-elasticbeanstalk-eks-observability-role \ --assume-role-policy-document file://pods-trust.json $ for p in CloudWatchAgentServerPolicy AWSElasticBeanstalkEKSObservability; do aws iam attach-role-policy \ --role-name aws-elasticbeanstalk-eks-observability-role \ --policy-arn arn:aws:iam::aws:policy/$p done
  5. 3 つのロール ARNs を記録します。環境を作成するときに渡します。

    $ for r in cluster node observability; do aws iam get-role --role-name aws-elasticbeanstalk-eks-$r-role \ --query 'Role.Arn' --output text done

サポートされているプロビジョニングツールを選択する

Beanstalk クラスター環境は、Elastic Beanstalk コンソール、Elastic Beanstalk API、または を使用して作成および管理できます AWS CLI。このチュートリアルでは、 を使用して、各リクエストを表示および繰り返し可能 AWS CLI にします。

公式の GitHub Action を使用してデプロイすることもでき、 AWS プロバイダーを通じて Terraform で環境をコードとしてのインフラストラクチャとして定義することもできます。GitHub アクションについては、「」を参照してくださいGitHub Actions を使用した Elastic Beanstalk へのデプロイ。

アプリケーションを作成し、サンプルをデプロイする

  1. 環境を格納する Elastic Beanstalk アプリケーションを作成します。

    $ aws elasticbeanstalk create-application \ --application-name getting-started-cluster-app
  2. 環境の作成 Cluster 階層は Beanstalk クラスターを選択します。このリクエストにはバージョンラベルがないため、Elastic Beanstalk はサンプルアプリケーションをデプロイします。

    $ aws elasticbeanstalk create-environment \ --application-name getting-started-cluster-app \ --environment-name getting-started-cluster-env \ --tier Name=Cluster,Type=EKS \ --option-settings \ Namespace=aws:elasticbeanstalk:eks,OptionName=cluster-role,Value=cluster-role-arn \ Namespace=aws:elasticbeanstalk:eks,OptionName=node-role,Value=node-role-arn \ Namespace=aws:elasticbeanstalk:eks:environment,OptionName=observability-role,Value=observability-role-arn

    ロール ARN プレースホルダーを、準備したロールに置き換えます。リクエストは service-portと を省略しますload-balancer-type。Elastic Beanstalk は、これらの設定をデフォルト 8080および に解決しますALB。異なる値を選択するには、 で渡します--option-settings。完全なオプションリファレンスについては、「」を参照してくださいBeanstalk クラスター環境の設定オプション。

  3. 環境の準備ができるまで待ちます。最初の環境では、Elastic Beanstalk が Amazon EKS クラスターを作成し、サンプルをデプロイするまでに 15~20 分かかることがあります。には、環境が AWS CLI を報告するまでポーリングする組み込みウェーターが用意されていますReady。ウェーターは 20 秒間隔で最大 20 回、約 6 分 40 秒ポーリングするため、最初の環境では が報告されることを想定していますMax attempts exceeded。成功が報告されるまで、再度実行します。

    $ aws elasticbeanstalk wait environment-exists \ --environment-names getting-started-cluster-env

    ウェーターは、環境がまだ作成されているときと作成に失敗したときMax attempts exceededの両方を報告します。数回実行しても成功が報告されない場合は、環境の最近のイベントを調べ、報告されたエラーを解決してから続行してください。

    $ aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table
  4. 環境ステータス、ヘルスカラー、ヘルスステータス、URL を検査します。

    $ aws elasticbeanstalk describe-environments \ --application-name getting-started-cluster-app \ --environment-names getting-started-cluster-env \ --query 'Environments[0].[Status,Health,HealthStatus,CNAME]' \ --output table

    環境が を報告しReady、空でない を返すことを確認しますCNAME。ウェブブラウザで を開き、https://続いて CNAME を開き、サンプルアプリケーションが応答することを確認します。ロードバランサーは HTTPS でのみ応答するため、 へのリクエストはタイムアウトするまでhttp://待機します。HTTP リクエストを受け入れて Elastic Beanstalk に HTTPS にリダイレクトさせるには、「」を参照してくださいBeanstalk クラスター環境のネットワークの設定。アイドル状態の環境では、アプリケーションのヘルスを判断するためのリクエストが少なすぎるNoDataため、最初に Greyと をレポートできます。ヘルスイベントでは、このステータスが と表示されますNo Data。これはデプロイが失敗したことを示すものではありません。アプリケーションが十分な成功したリクエストを受信すると、正常性は通常 Greenと に移行しますOk。CNAME が空の場合、アプリケーションが応答しない場合、またはヘルスが障害を報告した場合は、続行する前に環境の最近のイベントを調べます。

    $ aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table

    クラスターヘルスモデルについては、「」を参照してくださいBeanstalk クラスター環境のモニタリング。

独自のコンテナイメージをデプロイする

作成リクエストにバージョンラベルが付いていないため、環境はサンプルアプリケーションを実行しています。独自のアプリケーションを実行するには、コンテナイメージに名前を付けるアプリケーションバージョンを作成し、そのバージョンを環境にデプロイします。これは通常の Elastic Beanstalk フローです。アプリケーションバージョンはデプロイ可能なアーティファクトであり、サンプルは、Elastic Beanstalk がデプロイしない場合にデプロイするものです。

開始する前に、アカウントの Amazon Elastic Container Registry (Amazon ECR) リポジトリなど、レジストリにプッシュ済みのコンテナイメージが必要です。イメージは環境の をリッスンする必要があります。これはservice-port、変更8080しない限りです。独自のバージョンをデプロイすると、サンプルアプリケーションが置き換えられます。代わりに Elastic Beanstalk でソースからイメージを構築し、ビルドオプションについては、「」を参照してくださいBeanstalk クラスター環境のコンテナイメージの構築。

  1. イメージをポイントするアプリケーションバージョンを作成します。

    $ aws elasticbeanstalk create-application-version \ --application-name getting-started-cluster-app \ --version-label v1 \ --image-configuration Source={Uri=your-image-uri}

    your-image-uri を などのイメージに置き換えます111122223333.dkr.ecr.us-east-1.amazonaws.com/my-app:v1。イメージはすでに構築されているため、バージョンにビルドステップは不要で、デプロイする準備が整います。

  2. 環境にバージョンをデプロイします。

    $ aws elasticbeanstalk update-environment \ --environment-name getting-started-cluster-env \ --version-label v1
  3. デプロイが完了し、環境がアプリケーションを提供していることを確認します。

    $ aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table

    を開きhttps://、続いてウェブブラウザで環境の CNAME を開き、アプリケーションが応答することを確認します。そうでない場合は、デプロイの失敗のイベントをチェックし、イメージが環境の をリッスンすることを確認しますservice-port。

チュートリアルリソースをクリーンアップする

  1. 環境を終了します。

    $ aws elasticbeanstalk terminate-environment \ --environment-name getting-started-cluster-env
  2. 環境が Terminatedステータスになるまで待ちます。 AWS CLI には、終了が完了するまでポーリングする組み込みウェーターが用意されています。このウェーターには同じ 20 試行の制限があるため、成功が報告されるまで再度実行します。

    $ aws elasticbeanstalk wait environment-terminated \ --environment-names getting-started-cluster-env

    ウェーターは、終了がまだ進行中のときと失敗したときMax attempts exceededの両方を報告します。数回実行しても成功が報告されない場合は、環境のイベントでエラーを解決します。環境がまだ存在する間は、アプリケーションを削除しないでください。

  3. Elastic Beanstalk が作成したサンプルバージョンや追加したバージョンなど、アプリケーションとそのアプリケーションバージョンを削除します。これにより、指定したコンテナイメージやそれを保持するリポジトリは削除されません。「」を参照してくださいBeanstalk クラスター環境のコンテナイメージの構築。

    $ aws elasticbeanstalk delete-application \ --application-name getting-started-cluster-app

Elastic Beanstalk は、共有 Amazon EKS クラスターを使用する最後の環境を終了した後にのみ、共有 Amazon EKS クラスターを削除します。クラスターの削除には最大 3 時間かかる場合があります。Amazon EKS およびその他のリソース料金は、削除が完了するまで継続されます。終了しても、お客様が用意したクラスター、ノード、オブザーバビリティ IAM ロールは削除されません。「」の説明に従って、クラスターの削除を確認しますクラスターの削除。

次の手順