このチャプターの目次
■Cloud9の作成
- コードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE)であるCloud9を作成
- CloudShellでは、Dockerコンテナをサポートしていないため、Dockerが扱えるCloud9上でハンズオン作業を行います
cmd
aws cloud9 create-environment-ec2 \
--name ContainerHandsOn \
--description "ContainerHandsOn" \
--instance-type t3.small \
--subnet-id ${SubnetId1aPublic} \
--automatic-stop-time-minutes 60
result
{
"environmentId": "d95af67d7d5f4a9782475b0549bf1fe2"
}
■Cloud9環境Roleを作成
- Cloud9上でAWSリソースを作成するため、Roleを作成します
cmd
cd ~/
cat << EOF > assume-role-policy-document.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
aws iam create-role \
--role-name ContainerHandsOnForCloud9 \
--assume-role-policy-document file://assume-role-policy-document.json
result
{
"Role": {
"Path": "/",
"RoleName": "ContainerHandsOnForCloud9",
"RoleId": "AROASHENIAIFELRPUULUJ",
"Arn": "arn:aws:iam::123456789012:role/ContainerHandsOnForCloud9",
"CreateDate": "2022-09-15T11:49:42+00:00",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
}
}
■Cloud9環境RoleにPolicy追加
cmd
aws iam attach-role-policy \
--role-name ContainerHandsOnForCloud9 \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
result
(なし)
cmd
aws iam list-attached-role-policies \
--role-name ContainerHandsOnForCloud9
result
{
"AttachedPolicies": [
{
"PolicyName": "AdministratorAccess",
"PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
}
]
}
■instance-profileを作成
- Cloud9を稼働しているEC2にRoleを付与するため、instance-profileを作成
cmd
aws iam create-instance-profile \
--instance-profile-name ContainerHandsOnForCloud9
result
{
"InstanceProfile": {
"Path": "/",
"InstanceProfileName": "ContainerHandsOnForCloud9",
"InstanceProfileId": "AIPASHENIAIFEVHXOW7NP",
"Arn": "arn:aws:iam::123456789012:instance-profile/ContainerHandsOnForCloud9",
"CreateDate": "2022-09-15T11:50:50+00:00",
"Roles": []
}
}
■instance-profileにRole付与
cmd
aws iam add-role-to-instance-profile \
--role-name ContainerHandsOnForCloud9 \
--instance-profile-name ContainerHandsOnForCloud9
result
(なし)
■Cloud9のInstanceIdの取得
- IDを取得し、変数に格納・確認を行います
cmd
InstanceId=`aws ec2 describe-instances \
--query "Reservations[*].Instances[*].InstanceId" \
--filters "Name=vpc-id,Values=${VpcId}" \
--output text`
clear; cat << EOF > ~/export.log
export AccountID="${AccountID}"
export VpcId="${VpcId}"
export SubnetId1aPublic="${SubnetId1aPublic}"
export SubnetId1cPublic="${SubnetId1cPublic}"
export SubnetId1aPrivate="${SubnetId1aPrivate}"
export SubnetId1cPrivate="${SubnetId1cPrivate}"
export InternetGatewayId="${InternetGatewayId}"
export RouteTableIdPublic="${RouteTableIdPublic}"
export RouteTableIdPrivate="${RouteTableIdPrivate}"
export PublicSecurityGroupsId="${PublicSecurityGroupsId}"
export PrivateSecurityGroupsId="${PrivateSecurityGroupsId}"
export InstanceId="${InstanceId}"
EOF
cat ~/export.log
result
これはサンプルです。export AccountID="123456789012"
これはサンプルです。export VpcId="vpc-010a940bbd8f747c2"
これはサンプルです。export SubnetId1aPublic="subnet-0356b36ba2daa766c"
これはサンプルです。export SubnetId1cPublic="subnet-0dabe411bfdc835fb"
これはサンプルです。export SubnetId1aPrivate="subnet-0d99180ac3baeb5fa"
これはサンプルです。export SubnetId1cPrivate="subnet-0a66f1c2d5ce3b939"
これはサンプルです。export InternetGatewayId="igw-082f42082d7748713"
これはサンプルです。export RouteTableIdPublic="rtb-000a11e6eacc5c263"
これはサンプルです。export RouteTableIdPrivate="rtb-077b87e7eb65d1f43"
これはサンプルです。export PublicSecurityGroupsId="sg-065a7c8eceb9759d4"
これはサンプルです。export PrivateSecurityGroupsId="sg-0f59547a1185820b5"
これはサンプルです。export InstanceId="i-0ddf413a91a008a52"
■Cloud9環境RoleをAttach
cmd
aws ec2 associate-iam-instance-profile \
--instance-id ${InstanceId} \
--iam-instance-profile Name=ContainerHandsOnForCloud9
result
{
"IamInstanceProfileAssociation": {
"AssociationId": "iip-assoc-0989fcd85f472ddc6",
"InstanceId": "i-0ddf413a91a008a52",
"IamInstanceProfile": {
"Arn": "arn:aws:iam::123456789012:instance-profile/ContainerHandsOnForCloud9",
"Id": "AIPASHENIAIFEVHXOW7NP"
},
"State": "associating"
}
}
■環境変数をメモ
- Cloud9で使うため、取得した変数をエディターに残して下さい
cmd
clear; cat << EOF > ~/export.log
export AccountID="${AccountID}"
export VpcId="${VpcId}"
export SubnetId1aPublic="${SubnetId1aPublic}"
export SubnetId1cPublic="${SubnetId1cPublic}"
export SubnetId1aPrivate="${SubnetId1aPrivate}"
export SubnetId1cPrivate="${SubnetId1cPrivate}"
export InternetGatewayId="${InternetGatewayId}"
export RouteTableIdPublic="${RouteTableIdPublic}"
export RouteTableIdPrivate="${RouteTableIdPrivate}"
export PublicSecurityGroupsId="${PublicSecurityGroupsId}"
export PrivateSecurityGroupsId="${PrivateSecurityGroupsId}"
export InstanceId="${InstanceId}"
EOF
cat ~/export.log
result
これはサンプルです。export AccountID="123456789012"
これはサンプルです。export VpcId="vpc-010a940bbd8f747c2"
これはサンプルです。export SubnetId1aPublic="subnet-0356b36ba2daa766c"
これはサンプルです。export SubnetId1cPublic="subnet-0dabe411bfdc835fb"
これはサンプルです。export SubnetId1aPrivate="subnet-0d99180ac3baeb5fa"
これはサンプルです。export SubnetId1cPrivate="subnet-0a66f1c2d5ce3b939"
これはサンプルです。export InternetGatewayId="igw-082f42082d7748713"
これはサンプルです。export RouteTableIdPublic="rtb-000a11e6eacc5c263"
これはサンプルです。export RouteTableIdPrivate="rtb-077b87e7eb65d1f43"
これはサンプルです。export PublicSecurityGroupsId="sg-065a7c8eceb9759d4"
これはサンプルです。export PrivateSecurityGroupsId="sg-0f59547a1185820b5"
これはサンプルです。export InstanceId="i-0ddf413a91a008a52"
■AWS コンソールでCloud9を起動
-
上部の検索バーでCloud9と検索
-
AWS Cloud9 > Your environmentsにContainerHandsOnが作成されているので、Open IDEボタン押下
-
Cloud9の画面が表示される
-
今後のcmdはCloud9のbashと書かれたTABの下に貼り付けていきます
-
間違えてTABを閉じてしまった場合には以下で新しくTABを開いてください
■Cloud9でCredentialsを切り替え
- 画面右上の歯車マークをクリックし、Preferencesを開く
- Preferences > AWS Settings > Credentials と画面遷移をする
- Credentialsをオフにする
■Credential切り替え後の確認
cmd
aws sts get-caller-identity
result
- 表示されるArnとして、次のように
ContainerHandsOnForCloud9
のassumed-roleが表示されればOK
{
"UserId": "AROARSZZ5OK6XKSLV6L7V:i-0a1d7ee9d83080bff",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/ContainerHandsOnForCloud9/i-0ddf413a91a008a52"
}