ハンズオン(簡易版): Cloud9 (AWS CLI環境)入門 CloudFormation版

2. Cloud9環境の作成 (CloudShell: handson-cli-env)

手順の目的

Cloud9環境名"handson-cli-env"を作成します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

1. Cloud9環境名

Cloud9環境名を指定します。

変数の設定:

CLOUD9_ENVIRONMENT_NAME='handson-cli-env'

2. Cloud9環境の説明

Cloud9環境の説明を指定します。

変数の設定:

CLOUD9_ENVIRONMENT_DESCRIPTION='Environment for handson-cli.'

3. Cloud9環境イメージID

Cloud9環境のイメージIDを指定します。

変数の設定:

CLOUD9_ENVIRONMENT_IMAGE_ID='amazonlinux-2-x86_64'

4. VPCのNameタグ名

VPCのNameタグ名を指定します。

変数の設定:

EC2_VPC_TAG_NAME='handson-cloud9-vpc'

5. サブネットのNameタグ名

サブネットのNameタグ名を指定します。

変数の設定:

EC2_SUBNET_TAG_NAME='handson-cloud9-subnet'

6. EC2インスタンスのインスタンスタイプ

EC2インスタンスのインスタンスタイプを指定します。

変数の設定:

EC2_INSTANCE_TYPE="t3.micro"

7. Cloud9自動停止時間

Cloud9環境の自動停止時間(分)を指定します。

変数の設定:

CLOUD9_AUTOMATIC_STOP_TIME_MINUTES='30'

設定値の確認

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 0. AWS_REGION:"ap-northeast-1"
       AWS_REGION="${AWS_REGION}"

  # 1. CLOUD9_ENVIRONMENT_NAME:"handson-cli-env"
       CLOUD9_ENVIRONMENT_NAME="${CLOUD9_ENVIRONMENT_NAME}"
  # 2. CLOUD9_ENVIRONMENT_DESCRIPTION:"Environment for handson-cli."
       CLOUD9_ENVIRONMENT_DESCRIPTION="${CLOUD9_ENVIRONMENT_DESCRIPTION}"
  # 3. CLOUD9_ENVIRONMENT_IMAGE_ID:"amazonlinux-2-x86_64"
       CLOUD9_ENVIRONMENT_IMAGE_ID="${CLOUD9_ENVIRONMENT_IMAGE_ID}"
  # 4. EC2_VPC_TAG_NAME:"handson-cloud9-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 5. EC2_SUBNET_TAG_NAME:"handson-cloud9-subnet"
       EC2_SUBNET_TAG_NAME="${EC2_SUBNET_TAG_NAME}"
  # 6. EC2_INSTANCE_TYPE:"t3.micro"
       EC2_INSTANCE_TYPE="${EC2_INSTANCE_TYPE}"
  # 7. CLOUD9_AUTOMATIC_STOP_TIME_MINUTES:"30"
       CLOUD9_AUTOMATIC_STOP_TIME_MINUTES="${CLOUD9_AUTOMATIC_STOP_TIME_MINUTES}"

END

各変数について、上の行と下の行の値の内容もしくは形式が同じであることを確認します。 もし異なる場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

VPC IDの取得

VPC IDを取得します。

コマンド:

ec2_vpc_id=$( \
  aws ec2 describe-vpcs \
    --filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME}  \
    --query 'Vpcs[].VpcId' \
    --output text \
) \
  && echo ${ec2_vpc_id}

結果(例):

vpc-xxxxxxxxxxxxxxxxx

サブネットIDの取得

サブネットIDを取得します。

コマンド:

ec2_subnet_id=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${ec2_vpc_id} \
              Name=tag:Name,Values=${EC2_SUBNET_TAG_NAME}  \
    --query "Subnets[].SubnetId" \
    --output text \
) \
  && echo ${ec2_subnet_id}

結果(例):

subnet-xxxxxxxxxxxxxxxxx

Cloud9環境の作成

Cloud9環境を作成します。

変数の確認:

cat << END

  # CLOUD9_ENVIRONMENT_NAME:"handson-cli-env"
    CLOUD9_ENVIRONMENT_NAME="${CLOUD9_ENVIRONMENT_NAME}"
  # CLOUD9_ENVIRONMENT_DESCRIPTION:"Environment for handson-cli."
    CLOUD9_ENVIRONMENT_DESCRIPTION="${CLOUD9_ENVIRONMENT_DESCRIPTION}"
  # CLOUD9_ENVIRONMENT_IMAGE_ID:"amazonlinux-2-x86_64"
    CLOUD9_ENVIRONMENT_IMAGE_ID="${CLOUD9_ENVIRONMENT_IMAGE_ID}"
  # EC2_INSTANCE_TYPE:"t3.micro"
    EC2_INSTANCE_TYPE="${EC2_INSTANCE_TYPE}"
  # ec2_subnet_id:"subnet-xxxxxxxxxxxxxxxxx"
    ec2_subnet_id="${ec2_subnet_id}"
  # CLOUD9_AUTOMATIC_STOP_TIME_MINUTES:"30"
    CLOUD9_AUTOMATIC_STOP_TIME_MINUTES="${CLOUD9_AUTOMATIC_STOP_TIME_MINUTES}"

END

コマンド:

aws cloud9 create-environment-ec2 \
  --name ${CLOUD9_ENVIRONMENT_NAME} \
  --description "${CLOUD9_ENVIRONMENT_DESCRIPTION}" \
  --image-id ${CLOUD9_ENVIRONMENT_IMAGE_ID} \
  --instance-type ${EC2_INSTANCE_TYPE} \
  --subnet-id ${ec2_subnet_id} \
  --automatic-stop-time-minutes ${CLOUD9_AUTOMATIC_STOP_TIME_MINUTES}

結果(例):

{
  "environmentId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

完了確認

Cloud9環境のオーナーのARNを取得します。

コマンド:

cloud9_environment_owner_arn=$( \
  aws sts get-caller-identity \
    --query 'Arn' \
    --output text \
) \
  && echo ${cloud9_environment_owner_arn}

結果(例):

arn:aws:iam::XXXXXXXXXXXX:user/handson-cloud9-user

「Cloud9環境名"handson-cli-env"が存在する。」ことを確認します。

コマンド:

for i in \
  $(
    aws cloud9 list-environments \
      --query "environmentIds" \
      --output text
  )
do
    aws cloud9 describe-environments \
      --environment-ids ${i} \
      --query "environments[? \
          name == \`${CLOUD9_ENVIRONMENT_NAME}\` \
            && ownerArn == \`${cloud9_environment_owner_arn}\` \
        ].name" \
      --output text
done

結果(例):

handson-cli-env

Cloud9環境IDを取得します。

コマンド:

cloud9_environment_id=$(
  for i in \
    $(
      aws cloud9 list-environments \
        --query "environmentIds" \
        --output text
    )
  do
      aws cloud9 describe-environments \
        --environment-ids ${i} \
        --query "environments[? \
            name == \`${CLOUD9_ENVIRONMENT_NAME}\` \
              && ownerArn == \`${cloud9_environment_owner_arn}\` \
          ].id" \
        --output text
  done
) \
  && echo ${cloud9_environment_id}

結果(例):

<Cloud9環境ID>

「Cloud9環境名"handson-cli-env"のステータスが"Ready"である。」ことを確認します。

コマンド:

aws cloud9 describe-environment-status \
  --environment-id ${cloud9_environment_id} \
  --query 'status' \
  --output text

結果(例):

ready

手順の完了

(参考) マネジメントコンソールの確認

環境一覧(画面)

  • 環境名"handson-cli-env"が表示されていることを確認します。

課題

動作確認