概要
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 とします
-
設定値は以下を参照 基本はデフォルトのままで
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
AWS CLI完了確認
- 以下のコマンドでバージョンを確認する。
aws --version
今回はここまで
Cloud9の環境はブラウザを閉じれば30分後に停止しますが、気になる方は手動で停止をしましょう。