Setup Cloud9 for EKS¶
快速设置 cloud9 用于日常测试环境搭建,包含从 cloudshell 中创建 cloud9 instance,然后登录 cloud9 instance 进行基础软件安装、磁盘大小调整和容器环境相关软件安装。为了更方便配置,在 quick-setup-cloud9 中,直接可以仅通过 cloudshell 即完成所有初始化动作,登录 cloud9 instance 后就可以开始使用。
spin-up-a-cloud9-instance-in-your-region¶
-
点击这里 运行 cloudshell,执行代码块创建 cloud9 测试环境 (open cloudshell, and then execute following code to create cloud9 environment)
# name=<give your cloud9 a name> datestring=$(date +%Y%m%d-%H%M) echo ${name:=cloud9-$datestring} # VPC_ID=<your vpc id> # ensure you have public subnet in it DEFAULT_VPC_ID=$(aws ec2 describe-vpcs \ --filter Name=is-default,Values=true \ --query 'Vpcs[0].VpcId' --output text \ --region ${AWS_DEFAULT_REGION}) VPC_ID=${VPC_ID:=$DEFAULT_VPC_ID} if [[ ! -z ${VPC_ID} ]]; then FIRST_SUBNET=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=${VPC_ID}" \ --query 'Subnets[?(AvailabilityZone==`'"${AWS_DEFAULT_REGION}a"'` && MapPublicIpOnLaunch==`true`)].SubnetId' \ --output text \ --region ${AWS_DEFAULT_REGION}) aws cloud9 create-environment-ec2 \ --name ${name} \ --image-id amazonlinux-2-x86_64 \ --instance-type m5.large \ --subnet-id ${FIRST_SUBNET%% *} \ --automatic-stop-time-minutes 10080 \ --region ${AWS_DEFAULT_REGION} |tee /tmp/$$ echo "Open URL to access your Cloud9 Environment:" C9_ID=$(cat /tmp/$$ |jq -r '.environmentId') echo "https://${AWS_DEFAULT_REGION}.console.aws.amazon.com/cloud9/ide/${C9_ID}" else echo "you have no default vpc in $AWS_DEFAULT_REGION" fi -
点击输出的 URL 链接,打开 cloud9 测试环境 (click the URL at the bottom to open cloud9 environment)

using internal proxy or not¶
- 如果你不需要使用代理服务器下载软件包,跳过执行下面代码 (skip this code block if you do not need proxy in your environment)
install-in-cloud9-¶
- 下面代码块包含一些基本设置,包括:(execute this code block to install tools for your lab, and resize ebs of cloud9)
- 安装更新常用的软件
- 修改 cloud9 磁盘大小 (link)
| script-prep-eks-env-part-one.sh | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | |
| script-ubuntu-prep-eks-env-part-one.sh | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | |
- 安装 eks 相关的常用软件 (install some eks related tools)
-
for AL2 & ubuntu: script-prep-eks-env-part-two.sh
script-prep-eks-env-part-two.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
#!/bin/bash # curl --location https://github.com/panlm/panlm.github.io/raw/main/docs/cloud9/script-prep-eks-env-part-two.sh |sh # curl --location https://panlm.github.io/cloud9/script-prep-eks-env-part-two.sh |sh ###-SCRIPT-PART-TWO-BEGIN-### echo "###" echo "SCRIPT-PART-TWO-BEGIN" echo "###" # Detect architecture # ARCH: amd64/arm64 (Go-style, used by kubectl, eksctl, k9s, aws-iam-authenticator, kubectl-convert) # ARCH_UNAME: x86_64/arm64 (used by kubectx, kubens, eksdemo which use x86_64 for Intel but arm64 for ARM) MACHINE=$(uname -m) case ${MACHINE} in x86_64) ARCH="amd64"; ARCH_UNAME="x86_64" ;; aarch64) ARCH="arm64"; ARCH_UNAME="arm64" ;; *) echo "Unsupported architecture: ${MACHINE}"; exit 1 ;; esac echo "Detected architecture: ${MACHINE} -> ARCH=${ARCH}, ARCH_UNAME=${ARCH_UNAME}" mv -f ~/.bash_completion ~/.bash_completion.$(date +%N) 2>/dev/null || true # install kubectl with +/- 1 cluster version 1.28.14 / 1.29.9 / 1.30.9 / 1.31.6 # refer: https://kubernetes.io/releases/ # sudo curl --location -o /usr/local/bin/kubectl "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl" sudo curl --silent --location -o /usr/local/bin/kubectl "https://storage.googleapis.com/kubernetes-release/release/v1.30.4/bin/linux/${ARCH}/kubectl" sudo chmod +x /usr/local/bin/kubectl /usr/local/bin/kubectl completion bash >> ~/.bash_completion # source /etc/profile.d/bash_completion.sh # source ~/.bash_completion alias k=kubectl complete -F __start_kubectl k echo "alias k=kubectl" >> ~/.bashrc echo "complete -F __start_kubectl k" >> ~/.bashrc # install eksctl # consider install eksctl version 0.89.0 # if you have older version yaml # https://eksctl.io/announcements/nodegroup-override-announcement/ curl -L "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_${ARCH}.tar.gz" | tar xz -C /tmp/ sudo mv -v /tmp/eksctl /usr/local/bin /usr/local/bin/eksctl completion bash >> ~/.bash_completion # source /etc/profile.d/bash_completion.sh # source ~/.bash_completion # install kubectx curl -L "https://github.com/ahmetb/kubectx/releases/download/v0.9.5/kubectx_v0.9.5_linux_${ARCH_UNAME}.tar.gz" |tar xz -C /tmp/ sudo mv -f /tmp/kubectx /usr/local/bin/ # install kubens curl -L "https://github.com/ahmetb/kubectx/releases/download/v0.9.5/kubens_v0.9.5_linux_${ARCH_UNAME}.tar.gz" |tar xz -C /tmp/ sudo mv -f /tmp/kubens /usr/local/bin/ # install k9s curl -L "https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_${ARCH}.tar.gz" |tar xz -C /tmp/ sudo mv -f /tmp/k9s /usr/local/bin/ # install eksdemo curl -L "https://github.com/awslabs/eksdemo/releases/latest/download/eksdemo_$(uname -s)_${ARCH_UNAME}.tar.gz" |tar xz -C /tmp/ sudo mv -v /tmp/eksdemo /usr/local/bin /usr/local/bin/eksdemo completion bash >> ~/.bash_completion # source /etc/profile.d/bash_completion.sh # source ~/.bash_completion # helm newest version (3.15.4) curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash /usr/local/bin/helm version --short # helm 3.8.2 (helm 3.9.0 will have issue #10975) # wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz # tar xf helm-v3.8.2-linux-amd64.tar.gz # sudo mv linux-amd64/helm /usr/local/bin/helm # install aws-iam-authenticator 0.6.14 wget -O /tmp/aws-iam-authenticator "https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/download/v0.6.14/aws-iam-authenticator_0.6.14_linux_${ARCH}" chmod +x /tmp/aws-iam-authenticator sudo mv /tmp/aws-iam-authenticator /usr/local/bin/ # install kube-no-trouble sh -c "$(curl -sSL https://git.io/install-kubent)" # install kubectl convert plugin curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl-convert" --output-dir /tmp curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl-convert.sha256" --output-dir /tmp echo "$(cat /tmp/kubectl-convert.sha256) /tmp/kubectl-convert" | sha256sum --check sudo install -o root -g root -m 0755 /tmp/kubectl-convert /usr/local/bin/kubectl-convert rm /tmp/kubectl-convert /tmp/kubectl-convert.sha256 # option install jwt-cli # https://github.com/mike-engel/jwt-cli/blob/main/README.md # sudo yum -y install cargo # cargo install jwt-cli # sudo ln -sf ~/.cargo/bin/jwt /usr/local/bin/jwt # install flux & fluxctl # curl -s https://fluxcd.io/install.sh | sudo -E bash # /usr/local/bin/flux -v # source <(/usr/local/bin/flux completion bash) # sudo wget -O /usr/local/bin/fluxctl $(curl https://api.github.com/repos/fluxcd/flux/releases/latest | jq -r ".assets[] | select(.name | test(\"linux_amd64\")) | .browser_download_url") # sudo chmod 755 /usr/local/bin/fluxctl # fluxctl version # fluxctl identity --k8s-fwd-ns flux # install nvm and Node.js 22 LTS echo "Installing nvm and Node.js 22 LTS..." curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install 22 nvm alias default 22 nvm use default echo "Node.js version: $(node --version)" echo "npm version: $(npm --version)" # install opencode cli echo "Installing OpenCode CLI..." npm install -g opencode-ai echo "OpenCode version: $(opencode --version || echo installed)" # install claude code cli echo "Installing Claude Code CLI..." npm install -g @anthropic-ai/claude-code echo "Claude Code version: $(claude --version || echo installed)" # install kiro cli echo "Installing Kiro CLI..." curl -fsSL https://cli.kiro.dev/install | bash export PATH="$HOME/.local/bin:$PATH" echo "Kiro CLI version: $(kiro-cli --version || echo installed)" # install uv and uvx (Python package manager, useful for MCP server tools) echo "Installing uv..." curl -LsSf https://astral.sh/uv/install.sh | sh export PATH="$HOME/.local/bin:$PATH" echo "uv version: $(uv --version || echo installed)" echo "uvx version: $(uvx --version || echo installed)" echo "###" echo "SCRIPT-PART-TWO-END" echo "###" ###-SCRIPT-PART-TWO-END-### -
直接执行下面代码块可能遇到权限不够的告警,需要:
- 如果你有 workshop 的 Credentials ,直接先复制粘贴到命令行,再执行下列步骤;(copy and paste your workshop’s credential to CLI and then execute this code block)
- 或者,如果自己账号的 cloud9,先用环境变量方式(
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)保证有足够权限执行 (or using environment variables to export credential yourself) - 下面代码块包括:
- 禁用 cloud9 中的 credential 管理,从
~/.aws/credentials中删除aws_session_token=行 - 分配管理员权限 role 到 cloud9 instance
- 禁用 cloud9 中的 credential 管理,从
-
for AL2: script-prep-eks-env-part-three.sh
-
在 cloud9 中,重新打开一个 terminal 窗口,并验证权限符合预期。上面代码块将创建一个 instance profile ,并将关联名为
adminrole-xxx的 role,或者在 cloud9 现有的 role 上关联AdministratorAccessrole policy。(open new tab to verify you have new role,adminrole-xxx, on your cloud9)