Chapter 04

Cloud9作成

ShigeruOda
ShigeruOda
2022.10.28に更新

■Cloud9の作成

  • コードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE)であるCloud9を作成
  • CloudShellでは、Dockerコンテナをサポートしていないため、Dockerが扱えるCloud9上でハンズオン作業を行います

img

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を作成します

img

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の下に貼り付けていきます
    img

  • 間違えてTABを閉じてしまった場合には以下で新しくTABを開いてください
    img

■Cloud9でCredentialsを切り替え

  • 画面右上の歯車マークをクリックし、Preferencesを開く
  • Preferences > AWS Settings > Credentials と画面遷移をする
  • Credentialsをオフにする

img

■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"
}