0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cloud9環境へDockerのインストール方法 準備編

Posted at

概要

Dockerを使用した開発にあたり手持ちのWindows端末ではいろいろと不便になってきたのでCloud9で開発をできるようにしてみようかと思います。
作成の部分はこちらAWS CLI 専門支部のイベント を参考に作っています。

Cloud9用VPC作成

VPCの設定

  • Cloud9用のVPCを作成します。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます
# 各変数の設定 ターミナルを切り替えたりした場合は再度設定が必要になります
AWS_REGION="ap-northeast-1"
EC2_VPC_TAG_NAME='docker-vpc'
EC2_VPC_CIDR='10.0.0.0/16'
EC2_INTERNET_GATEWAY_TAG_NAME='docker-internet-gateway'
EC2_ROUTE_TABLE_TAG_NAME='docker-route-table'
EC2_ROUTE_DESTINATION_CIDR='0.0.0.0/0'
EC2_SUBNET_TAG_NAME='public-subnet'
EC2_SUBNET_CIDR='10.0.0.0/24'
EC2_AZ_NAME="ap-northeast-1a"


# 設定値の確認 設定値が設定されていない場合はコマンドを見直してください
cat << END

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

  # 1. EC2_VPC_TAG_NAME:"docker-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. EC2_VPC_CIDR:"10.0.0.0/16"
       EC2_VPC_CIDR="${EC2_VPC_CIDR}"

END


# 変数の設定
STRING_EC2_VPC_TAG="ResourceType=vpc,Tags=[{Key=Name,Value=${EC2_VPC_TAG_NAME}}]" \
  && echo ${STRING_EC2_VPC_TAG}



# 設定値の確認 設定値が設定されていない場合はコマンドを見直してください
cat << END

  # EC2_VPC_CIDR:"10.0.0.0/16"
    EC2_VPC_CIDR="${EC2_VPC_CIDR}"
  # STRING_EC2_VPC_TAG:"ResourceType=vpc,Tags=[{Key=Name,Value=docker-vpc}]"
    STRING_EC2_VPC_TAG="${STRING_EC2_VPC_TAG}"

END


# VPC作成
aws ec2 create-vpc \
  --cidr-block ${EC2_VPC_CIDR} \
  --tag-specifications ${STRING_EC2_VPC_TAG}

  • 作成結果確認
# VPC作成確認
aws ec2 describe-vpcs \
  --filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME}  \
  --query 'Vpcs[].Tags[?Key == `Name`].Value' \
  --output text

# CIDRの確認
aws ec2 describe-vpcs \
  --filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME} \
  --query "Vpcs[].CidrBlock" \
  --output text

インターネットゲートウェイの設定

  • 前述の手順作成したVPCのインターネットゲートウェイを作成します。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます
# VPCのタグ名、CIDRの設定
cat << END

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

  # 1. EC2_INTERNET_GATEWAY_TAG_NAME:"docker-internet-gateway"
       EC2_INTERNET_GATEWAY_TAG_NAME="${EC2_INTERNET_GATEWAY_TAG_NAME}"

END


# 変数設定
STRING_EC2_INTERNET_GATEWAY_TAG="ResourceType=internet-gateway,Tags=[{Key=Name,Value=${EC2_INTERNET_GATEWAY_TAG_NAME}}]" \
  && echo ${STRING_EC2_INTERNET_GATEWAY_TAG}


cat << END

  # STRING_EC2_INTERNET_GATEWAY_TAG:"ResourceType=internet-gateway,Tags=[{Key=Name,Value=docker-internet-gateway}]"
    STRING_EC2_INTERNET_GATEWAY_TAG="${STRING_EC2_INTERNET_GATEWAY_TAG}"

END


# インターネットゲートウェイの作成
aws ec2 create-internet-gateway \
  --tag-specifications ${STRING_EC2_INTERNET_GATEWAY_TAG}

# 作成の確認
aws ec2 describe-internet-gateways \
  --filters Name=tag:Name,Values=${EC2_INTERNET_GATEWAY_TAG_NAME}  \
  --query "InternetGateways[].Tags[].Value" \
  --output text

インターネットゲートウェイのアタッチ

  • 前述の手順作成したVPCのインターネットゲートウェイのアタッチを行います。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます

# 変数確認
cat << END

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

  # 1. EC2_VPC_TAG_NAME:"docker-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. EC2_INTERNET_GATEWAY_TAG_NAME:"docker-internet-gateway"
       EC2_INTERNET_GATEWAY_TAG_NAME="${EC2_INTERNET_GATEWAY_TAG_NAME}"

END


# VPCIDの取得
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}


# インターネットゲートウェイIDの取得
EC2_INTERNET_GATEWAY_ID=$( \
  aws ec2 describe-internet-gateways \
    --filters Name=tag:Name,Values=${EC2_INTERNET_GATEWAY_TAG_NAME} \
    --query "InternetGateways[].InternetGatewayId" \
    --output text \
) \
  && echo ${EC2_INTERNET_GATEWAY_ID}


# 変数の確認
cat << END

  # EC2_VPC_ID:"vpc-xxxxxxxxxxxxxxxxx"
    EC2_VPC_ID="${EC2_VPC_ID}"
  # EC2_INTERNET_GATEWAY_ID:"igw-xxxxxxxxxxxxxxxxx"
    EC2_INTERNET_GATEWAY_ID="${EC2_INTERNET_GATEWAY_ID}"

END


# インターネットゲートウェイのアタッチ
aws ec2 attach-internet-gateway \
  --vpc-id ${EC2_VPC_ID} \
  --internet-gateway-id ${EC2_INTERNET_GATEWAY_ID}

# アタッチの確認
aws ec2 describe-internet-gateways \
  --filters Name=tag:Name,Values=${EC2_INTERNET_GATEWAY_TAG_NAME}  \
  --query "InternetGateways[].Attachments[?VpcId == \`${EC2_VPC_ID}\`].VpcId" \
  --output text

ルートテーブルの作成

  • 前述の手順作成したVPCのルートテーブルを作成します。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます
# 変数の確認
cat << END

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

  # 1. EC2_VPC_TAG_NAME:"docker-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. EC2_ROUTE_TABLE_TAG_NAME:"docker-route-table"
       EC2_ROUTE_TABLE_TAG_NAME="${EC2_ROUTE_TABLE_TAG_NAME}"

END



# 変数設定
STRING_EC2_ROUTE_TABLE_TAG="ResourceType=route-table,Tags=[{Key=Name,Value=${EC2_ROUTE_TABLE_TAG_NAME}}]" \
  && echo ${STRING_EC2_ROUTE_TABLE_TAG}


# 変数の確認
cat << END

  # EC2_VPC_ID:"vpc-xxxxxxxxxxxxxxxxx"
    EC2_VPC_ID="${EC2_VPC_ID}"
  # STRING_EC2_ROUTE_TABLE_TAG:"ResourceType=route-table,Tags=[{Key=Name,Value=docker-route-table}]"
    STRING_EC2_ROUTE_TABLE_TAG="${STRING_EC2_ROUTE_TABLE_TAG}"

END


# ルートテーブルの作成
aws ec2 create-route-table \
  --vpc-id ${EC2_VPC_ID} \
  --tag-specifications ${STRING_EC2_ROUTE_TABLE_TAG}


# 完了確認
aws ec2 describe-route-tables \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME}  \
  --query "RouteTables[].Tags[?Key == \`Name\`].Value" \
  --output text

ルートの作成

  • 前述の手順作成したルートを作成します。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます

# 変数確認
cat << END

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

  # 1. EC2_VPC_TAG_NAME:"docker-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. EC2_ROUTE_TABLE_TAG_NAME:"docker-route-table"
       EC2_ROUTE_TABLE_TAG_NAME="${EC2_ROUTE_TABLE_TAG_NAME}"
  # 3. EC2_ROUTE_DESTINATION_CIDR:"0.0.0.0/0"
       EC2_ROUTE_DESTINATION_CIDR="${EC2_ROUTE_DESTINATION_CIDR}"
  # 4. EC2_INTERNET_GATEWAY_TAG_NAME:"docker-internet-gateway"
       EC2_INTERNET_GATEWAY_TAG_NAME="${EC2_INTERNET_GATEWAY_TAG_NAME}"

END



# ルートテーブルのID設定
EC2_ROUTE_TABLE_ID=$( \
  aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${EC2_VPC_ID} \
              Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME}  \
    --query "RouteTables[].RouteTableId" \
    --output text \
) \
  && echo ${EC2_ROUTE_TABLE_ID}



# 変数確認
cat << END

  # EC2_ROUTE_TABLE_ID:"rtb-xxxxxxxxxxxxxxxxx"
    EC2_ROUTE_TABLE_ID="${EC2_ROUTE_TABLE_ID}"
  # EC2_ROUTE_DESTINATION_CIDR:"0.0.0.0/0"
    EC2_ROUTE_DESTINATION_CIDR="${EC2_ROUTE_DESTINATION_CIDR}"
  # EC2_INTERNET_GATEWAY_ID:"igw-xxxxxxxxxxxxxxxxx"
    EC2_INTERNET_GATEWAY_ID="${EC2_INTERNET_GATEWAY_ID}"

END


# ルートテーブル作成
aws ec2 create-route \
  --route-table-id ${EC2_ROUTE_TABLE_ID} \
  --destination-cidr-block ${EC2_ROUTE_DESTINATION_CIDR} \
  --gateway-id ${EC2_INTERNET_GATEWAY_ID}


# 完了確認
aws ec2 describe-route-tables \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME}  \
  --query "RouteTables[].Routes[?DestinationCidrBlock == \`${EC2_ROUTE_DESTINATION_CIDR}\`].DestinationCidrBlock" \
  --output text


aws ec2 describe-route-tables \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME}  \
  --query "RouteTables[].Routes[?DestinationCidrBlock == \`${EC2_ROUTE_DESTINATION_CIDR}\`].GatewayId" \
  --output text

サブネット作成

  • 前述の手順作成したサブネットを作成します。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます

# 変数確認
cat << END

  # 0. AWS_REGION:"ap-northeast-1"
       AWS_REGION="${AWS_REGION}"
  # 1. EC2_VPC_TAG_NAME:"docker-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. EC2_SUBNET_TAG_NAME:"public-subnet"
       EC2_SUBNET_TAG_NAME="${EC2_SUBNET_TAG_NAME}"
  # 3. EC2_SUBNET_CIDR:"10.0.0.0/24"
       EC2_SUBNET_CIDR="${EC2_SUBNET_CIDR}"
  # 4. EC2_AZ_NAME:"ap-northeast-1a"
       EC2_AZ_NAME="${EC2_AZ_NAME}"

END



# サブネット
STRING_EC2_SUBNET_TAG="ResourceType=subnet,Tags=[{Key=Name,Value=${EC2_SUBNET_TAG_NAME}}]" \
  && echo ${STRING_EC2_SUBNET_TAG}


# 変数確認
cat << END

  # EC2_VPC_ID:"vpc-xxxxxxxxxxxxxxxxx"
    EC2_VPC_ID="${EC2_VPC_ID}"
  # EC2_SUBNET_CIDR:"10.0.0.0/24"
    EC2_SUBNET_CIDR="${EC2_SUBNET_CIDR}"
  # EC2_AZ_NAME:"ap-northeast-1a"
    EC2_AZ_NAME="${EC2_AZ_NAME}"
  # STRING_EC2_SUBNET_TAG:"ResourceType=subnet,Tags=[{Key=Name,Value=public-subnet}]"
    STRING_EC2_SUBNET_TAG="${STRING_EC2_SUBNET_TAG}"

END


# サブネット作成
aws ec2 create-subnet \
  --vpc-id ${EC2_VPC_ID} \
  --cidr-block ${EC2_SUBNET_CIDR} \
  --availability-zone ${EC2_AZ_NAME} \
  --tag-specifications ${STRING_EC2_SUBNET_TAG}


# 完了確認
aws ec2 describe-subnets \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_SUBNET_TAG_NAME}  \
  --query 'Subnets[].Tags[?Key == `Name`].Value' \
  --output text


aws ec2 describe-subnets \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_SUBNET_TAG_NAME}  \
  --query "Subnets[].CidrBlock" \
  --output text


aws ec2 describe-subnets \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_SUBNET_TAG_NAME}  \
  --query "Subnets[].AvailabilityZone" \
  --output text

ルートテーブル更新

  • 前述の手順作成したルートテーブルの更新をします。
  • CloudShell で以下のコマンドを実行していきます
    • #以下のコマンドをコピペして実施すればできます

# 変数確認
cat << END

  # 0. AWS_REGION:"ap-northeast-1"
       AWS_REGION="${AWS_REGION}"
  # 1. EC2_VPC_TAG_NAME:"docker-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. EC2_ROUTE_TABLE_TAG_NAME:"docker-route-table"
       EC2_ROUTE_TABLE_TAG_NAME="${EC2_ROUTE_TABLE_TAG_NAME}"
  # 3. EC2_SUBNET_TAG_NAME:"public-subnet"
       EC2_SUBNET_TAG_NAME="${EC2_SUBNET_TAG_NAME}"

END


# サブネット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}


# 変数確認
cat << END

  # EC2_SUBNET_ID:"subnet-xxxxxxxxxxxxxxxxx"
    EC2_SUBNET_ID="${EC2_SUBNET_ID}"
  # EC2_ROUTE_TABLE_ID:"rtb-xxxxxxxxxxxxxxxxx"
    EC2_ROUTE_TABLE_ID="${EC2_ROUTE_TABLE_ID}"

END


# ルートテーブルの更新
aws ec2 associate-route-table \
  --subnet-id ${EC2_SUBNET_ID} \
  --route-table-id ${EC2_ROUTE_TABLE_ID}


# 完了確認
aws ec2 describe-route-tables \
  --route-table-ids ${EC2_ROUTE_TABLE_ID} \
  --query "RouteTables[].Associations[?SubnetId == \`${EC2_SUBNET_ID}\`].RouteTableAssociationId" \
  --output text

Cloud9の構築

  • Cloud9の環境を作成行います

  • Cloud9ダッシュボードにアクセスします。

  • リージョンが東京になっていることを確認します。

  • Create enviromentボタンを押下します。

  • Name に環境名を入れます ここでは docker-cloud9-env とします

    • Description は説明なのでお好みで
      スクリーンショット 2021-10-30 215035.png
  • 設定値は以下を参照 基本はデフォルトのままで

    • Instance type は無料枠があれば無料枠の t2.microがいいかも
    • Network(VPC),Subnetについては作成したVPCを選択してください。
      • メニューから隠れているので + となっている部分を押下することで設定できます。
        スクリーンショット 2021-10-30 215810.png

スクリーンショット 2021-10-30 220302.png

  • Next Stepボタンを押下すると確認画面に遷移します。
    スクリーンショット 2021-10-30 220252.png
  • Create enviroment ボタンを押下するとCloud9環境が起動します。軌道には時間がかかります。
    スクリーンショット 2021-10-30 220514.png

AWSCLIの設定

  • Dockerを使うだけなら不要ですがAWS CLIを使えるように更新をします
sudo yum erase aws-cli -y

aliasの追加

  • ~/.bashrc に対して以下を追加します。
alias sudo='sudo '
  • 追加後以下のコマンドで設定を反映させます。
source ~/.bashrc

AWSCLIのインストール

  • 以下のコマンドでインストールします
sudo pip install awscli

タブ補完の有効化

  • 以下の内容を ~/.bashrc に対して追加を行います。
  • そのまま貼り付けるとインデントがずれるかもしれません。
  • この設定を行うことで正常にコマンドを実行したときに 緑色に 失敗すると赤になるようになります。
complete -C aws_completer aws

PS1="\`
  if [ \$? = 0 ]; then
    echo \[\e[36m\]
  else
    echo \[\e[31m\]
  fi
\`[\u@\h%]\[\e[0m\]\$ "
  • 追加後以下のコマンドで設定を反映させます。
source ~/.bashrc

スクリーンショット 2021-10-30 221500.png

AWS CLI完了確認

  • 以下のコマンドでバージョンを確認する。
aws --version

今回はここまで
Cloud9の環境はブラウザを閉じれば30分後に停止しますが、気になる方は手動で停止をしましょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?