環境の移動と Amazon EBS ボリュームのサイズ変更または暗号化 - AWS Cloud9

環境の移動と Amazon EBS ボリュームのサイズ変更または暗号化

AWS Cloud9 開発環境 は、ある Amazon EC2; インスタンスから別の Amazon EC2; インスタンスに移動できます。たとえば、次のようなアクションを実行したいかもしれません。

  • 正常なインスタンスと比較して、障害がある、または予期しない方法で実行されている Amazon EC2 インスタンスから環境を移転します。

  • 古いインスタンスから最新のシステム更新が適用されているインスタンスに 環境を移転します。

  • 環境が現在のインスタンスに対して使用率が高すぎるまたは低すぎるため、インスタンスのコンピューティングリソースを増やします。

環境の Amazon EC2 インスタンスに関連付けられている Amazon Elastic Block Store (Amazon EBS) ボリュームのサイズもできます。たとえば、次のアクションの一方または両方を実行したいかもしれません。

  • インスタンスのストレージ領域が不足している場合、ボリュームのサイズを増やします。

  • 使用していない余分なストレージ領域の支払いを避けるために、ボリュームのサイズを減らします。

環境を移動またはサイズ変更する前に、環境で実行中のプロセスの停止または環境へのスワップファイルの追加を試すことができます。メモリ不足や CPU 使用率が高い場合の対処方法の詳細については、トラブルシューティングの関連問題を参照してください。

注記

このトピックでは、Amazon EC2 インスタンス間の環境移動または Amazon EBS ボリュームのサイズ変更についてのみ説明します。自社サーバー間で環境のサイズを変更したり、自社サーバーのいずれかのストレージ領域を変更したりする場合は、サーバーのドキュメンテーションを参照してください。

最後に、Amazon EBS リソースを暗号化して、インスタンスと添付の EBS ストレージ間で保管中のデータと転送中のデータの両方のセキュリティを調整できます。

環境の移動

移動プロセスをスタートする前に、以下の条件に注意してください。

  • 環境を同じタイプの Amazon EC2 インスタンスに移動することはできません。移動する場合は、新しいインスタンスとして別の Amazon EC2 インスタンスタイプを選択する必要があります。

    重要

    環境を別の Amazon EC2 インスタンスタイプに移動する場合、そのインスタンスタイプは現在の AWS リージョン内にある AWS Cloud9 によるサポートを受ける必要もあります。リージョンごとに使用できるインスタンスタイプをチェックするには、コンソールを使用して EC2 環境の作成している時は表示されている[設定の構成]に移動します。インスタンスタイプセクションにおける選択は、コンソールの右上で選択した AWS リージョンで決定します。 

  • インスタンスタイプを変更する前に、環境に関連付けられている Amazon EC2 インスタンスを停止する必要があります。インスタンスが停止している間、お客様およびメンバーは、停止したインスタンスに関連付けられた環境を使用することはできません。

  • AWS はインスタンスを新しいハードウェアに移動しますが、インスタンス ID は変更されません。

  • インスタンスが Amazon VPC で実行されていてパブリック IPv4 アドレスが割り当てられている場合、AWS によってこのアドレスは解放されており、新しい公開 IPv4 アドレスが割り当てられています。インスタンスは、プライベート IPv4 アドレス、Elastic IP アドレス、および IPv6 アドレスを保持します。

  • インスタンスが停止している間のダウンタイムを計画しておいてください。このプロセスには数分かかることがあります。

環境を移動するには

  1. (オプション) 新しいインスタンスタイプに既存のインスタンス上でインストールされていないドライバーが必要な場合は、インスタンスに接続して、まずそのドライバーをインストールする必要があります。詳細については、Linux インスタンス用の Amazon EC2 ユーザーガイドの「インスタンスのサイズ変更の互換性」を参照してください。

  2. 現在 環境を表示しているすべてのウェブブラウザのタブを閉じます。

    重要

    現在環境を表示しているウェブブラウザのタブをすべて閉じないと、AWS Cloud9 が介入してこの手順を完了できない場合があります。特に、この手順を実行中にもかかわらず、AWS Cloud9 は誤ったタイミングで環境に関連付けられている Amazon EC2 インスタンスを再起動しようとする場合があります。この手順を完了するまで、インスタンスは停止したままであることが必要です。

  3. まだサインインしていない場合は、AWS Management Console (https://console.aws.amazon.com) にサインインします。

    AWS アカウントの IAM 管理者レベルの認証情報を使用してサインインすることをお勧めします。これを実行できない場合は、AWS アカウントの管理者に確認してください。

  4. Amazon EC2 コンソールを開きます。そのためには、[サービス]リストで[EC2]を選択します。

  5. AWS ナビゲーションバーで、移動したい環境 (例えば米国東部 (オハイオ)) を含むAWS リージョンを選択します。

  6. サービスナビゲーションペインで[インスタンス]を展開して、その後、[インスタンス]を選択します。

  7. インスタンスのリストで、移動したい環境に関連付けられているインスタンスを選択します。EC2 環境の場合、インスタンス名はaws-cloud9- で始まり、環境名が続きます。たとえば、環境名が my-demo-environment の場合、インスタンス名は aws-cloud9-my-demo-environment で始まります。

  8. インスタンスの状態]が停止でない場合は、[アクション]、[インスタンスの状態]、[停止]を選択します。プロンプトが表示されたら、[停止する]を選択します。インスタンスが停止するまで、数分かかる場合があります。

  9. インスタンスの状態]が停止すると、インスタンスを選択したままで、[アクション]、[インスタンスの設定]、[インスタンスタイプの変更]を選択します。

  10. インスタンスタイプの変更]ダイアログボックスで、使用する環境に新しい[インスタンスタイプ]を選択します。

    注記

    希望するインスタンスタイプがリストに表示されない場合は、インスタンスの設定と互換性がありません (その仮想化タイプが原因の場合など)。

  11. (オプション) 選択したインスタンスタイプが EBS 最適化をサポートしている場合は、[EBS 最適化]を選択して EBS 最適化を有効にするか、[EBS 最適化]を選択解除して EBS 最適化を無効にします。

    注記

    選択したインスタンスタイプがデフォルトで EBS 最適化される場合、[EBS 最適化]が選択され、この選択を解除することはできません。

  12. Apply]を選択して、新しい設定を受け入れます。

    注記

    この手順で先ほど[インスタンスタイプ]に別のインスタンスタイプを選択しなかった場合は、[適用]を選択しても何も起こりません。

  13. 環境を再び開きます。詳細については、「AWS Cloud9 で環境を開く」を参照してください。

前の手順の詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスタイプを変更する」を参照してください。

環境で使用されている Amazon EBS ボリュームのサイズ変更

  1. サイズを変更したい Amazon EBS ボリュームの Amazon EC2 インスタンスに関連付けられている環境を開きます。

  2. その環境用 AWS Cloud9 IDE で、以下の内容のファイルを作成し、拡張子 .sh (例えば resize.sh)を付けてファイル保存します。

    注意

    このスクリプトは、Amazon Linux 2、Amazon Linux、または Ubuntu サーバーを実行する EC2 インスタンスに接続した Amazon EBS ボリュームに有効であり、IMDSv1 を使用するように設定されています。

    このスクリプトは、Nitro ベースのインスタンスで NVMe ブロックデバイスとして公開される Amazon EBS ボリュームのサイズも変更します。Nitro システムをベースにしたインスタンスリストについては、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Nitro ベースのインスタンス」を参照してください。

    #!/bin/bash # Specify the desired volume size in GiB as a command line argument. If not specified, default to 20 GiB. SIZE=${1:-20} # Get the ID of the environment host Amazon EC2 instance. INSTANCEID=$(curl http://169.254.169.254/latest/meta-data/instance-id) REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/') # Get the ID of the Amazon EBS volume associated with the instance. VOLUMEID=$(aws ec2 describe-instances \ --instance-id $INSTANCEID \ --query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \ --output text \ --region $REGION) # Resize the EBS volume. aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE # Wait for the resize to finish. while [ \ "$(aws ec2 describe-volumes-modifications \ --volume-id $VOLUMEID \ --filters Name=modification-state,Values="optimizing","completed" \ --query "length(VolumesModifications)"\ --output text)" != "1" ]; do sleep 1 done #Check if we're on an NVMe filesystem if [[ -e "/dev/xvda" && $(readlink -f /dev/xvda) = "/dev/xvda" ]] then # Rewrite the partition table so that the partition takes up all the space that it can. sudo growpart /dev/xvda 1 # Expand the size of the file system. # Check if we're on AL2 STR=$(cat /etc/os-release) SUB="VERSION_ID=\"2\"" if [[ "$STR" == *"$SUB"* ]] then sudo xfs_growfs -d / else sudo resize2fs /dev/xvda1 fi else # Rewrite the partition table so that the partition takes up all the space that it can. sudo growpart /dev/nvme0n1 1 # Expand the size of the file system. # Check if we're on AL2 STR=$(cat /etc/os-release) SUB="VERSION_ID=\"2\"" if [[ "$STR" == *"$SUB"* ]] then sudo xfs_growfs -d / else sudo resize2fs /dev/nvme0n1p1 fi fi
  3. IDE のターミナルセッションから、resize.sh ファイルが格納されているディレクトリに移動します。それから次のコマンドを実行し、20 を Amazon EBS ボリュームのリサイズとして希望する Gib 単位のサイズに置き換えます。

    • bash resize.sh 20
    • chmod +x resize.sh ./resize.sh 20

AWS Cloud9 によって使用される Amazon EBS ボリュームを暗号化する

Amazon EBS 暗号化では、次のデータが暗号化されます。

  • ボリューム内の保管中のデータ

  • ボリュームとインスタンスの間で移動されるすべてのデータ

  • ボリュームから作成されたすべてのスナップショット

  • それらのスナップショットから作成されたすべてのボリューム

Amazon EBS ボリュームには、AWS Cloud9 EC2 開発環境が使用する2 つの暗号化オプションがあります。

  • デフォルトでの暗号化 – 作成する新しい EBS ボリュームとスナップショットコピーの暗号化を強制するように AWS アカウントを設定できます。AWS リージョンのレベルでは暗号化はデフォルトで有効になっているため、そのリージョンでは個々のボリュームまたはスナップショットに対して有効にすることはできません。さらに、Amazon EBS はインスタンスの起動時に作成されるボリュームを暗号化するため、EC2 環境を作成する前にこの設定を有効にする必要があります。詳細については、Linux インスタンス用の Amazon EC2 ユーザーガイドのデフォルトで暗号化」を参照してください。

  • EC2 環境で使用される既存の Amazon EBS ボリュームの暗号化 — EC2 インスタンス用に作成済みの特定の Amazon EBS ボリュームを暗号化できます。このオプションには、AWS Key Management Service (AWS KMS) を使用して、暗号化されたボリュームへのアクセスを管理が含まれます。関連する手順については、「AWS Cloud9 によって使用される既存の Amazon EBS ボリュームを暗号化する」を参照してください。

重要

お客様の AWS Cloud9 IDE がデフォルトで暗号化されている Amazon EBS ボリュームを使用するのであれば、AWS Cloud9 のために AWS Identity and Access Management サービスにリンクされたロールによるこれらの EBS ボリューム用 AWS KMS key へのアクセスが必要です。アクセスが提供されない場合、AWS Cloud9 IDE の起動に失敗し、デバッグが困難である可能性があります。

アクセスを提供するため、AWS Cloud9、AWSServiceRoleForAWSCloud9 用のサービスにリンクされたロールをAmazon EBS ボリュームで使用する KMS キーに追加します。このタスクの詳細については、AWS規範的ガイダンスパターンの「デフォルトの暗号化で Amazon EBS ボリュームを使用する AWS Cloud9 IDE を作成する」を参照してください。

AWS Cloud9 によって使用される既存の Amazon EBS ボリュームを暗号化する

既存の Amazon EBS ボリュームを暗号化するには、AWS KMS を使用して、KMS キーを作成します。置き換えるボリュームのスナップショットを作成した後、KMS キーを使用してスナップショットのコピーを暗号化します。

次に、そのスナップショットを使用して暗号化されたボリュームを作成します。次に、EC2 インスタンスからデタッチし、暗号化されたボリュームをアタッチすることで、暗号化されていないボリュームを置き換えます。

kai最後に、カスタマーマネージドキーのキーポリシーを更新して、AWS Cloud9 サービスロールのアクセスを有効にする必要があります。

注記

次の手順の中心は、カスタマーマネージドキーを使用してボリュームを暗号化する方法です。また、アカウントの AWS サービス用の AWS マネージドキー を使用することもできます (Amazon EBS のエイリアスはaws/ebs)。このデフォルトの暗号化オプションを選択した場合は、カスタマーマネージドキーを作成するステップ 1 をスキップします。また、キーポリシーを更新するステップ 8 をスキップします (AWS マネージドキー 用のキーポリシーは変更できません).

既存の Amazon EBS ボリュームを暗号化するには

  1. AWS KMS コンソールで、対称 KMS キーを作成します。詳細については、AWS Key Management Service デベロッパーガイドの「対称 KMS キーの作成」を参照してください。

  2. Amazon EC2 コンソールで、環境で使用されている Amazon EBS-backed インスタンスを停止します。コンソールまたはコマンドラインを使用して、ドインスタンスを停止タグを追加できます

  3. Amazon EC2 コンソールのナビゲーションペインで、[スナップショット]を選択して、暗号化したい 既存のボリュームのスナップショットを作成します

  4. Amazon EC2 コンソールのナビゲーションペインで、[スナップショット ]を選択して、スナップショットをコピーしますスナップショットのコピーダイアログボックスで、暗号化を有効にするには、以下の操作を実行します。

    • このスナップショットを暗号化するを選択します。

    • マスターキーを使用する場合、作成済みの KMS キーを選択します。(AWS マネージドキー を使用中であれば、(デフォルト) aws/ebs設定) を維持します。

  5. 暗号化されたスナップショット から新しいボリュームを作成します

    注記

    暗号化されたスナップショットから作成された新しい Amazon EBS ボリュームは、自動的に暗号化されます。

  6. Amazon EC2インスタンスから古い Amazon EBS ボリュームをデタッチします。

  7. 新しい暗号化ボリュームを Amazon EC2 インスタンスに添付します。

  8. AWS Management Consoleデフォルトビュー、AWS Management Console ポリシービュー、または AWS KMS API を使用して、KMS キーのキーポリシーを更新します。次のキーポリシーステートメントを追加して、AWS Cloud9 サービス、AWSServiceRoleForAWSCloud9 による KMS キーへのアクセスを許可します。

    注記

    AWS マネージドキー を使用している場合は、このステップを省略できます。

    { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:{Partition}:iam::{AccountId}:role/aws-service-role/cloud9.amazonaws.com/AWSServiceRoleForAWSCloud9" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:{Partition}:iam::{AccountId}:role/aws-service-role/cloud9.amazonaws.com/AWSServiceRoleForAWSCloud9" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }
  9. Amazon EC2 インスタンスを再起動します