Help us understand the problem. What is going on with this article?

Cloud9環境のセットアップメモ

Windows PCを使う必要があり、Macに慣れていて快適な環境ではなかったので、Cloud9上に作業環境を作ったメモ。
ここで作業とは、kubectlを使ったりterraformを使ったリ、シェルスクリプトを書いたリを想定。

Cloud9環境をデプロイ

AWSコンソールで、サービス > Cloud9から、「Create Environment」をクリック。
環境に名前をつけ、好みのスペックを選択。以下を選択。

項目
Name MyWorkspace
Environment type Create a new instance for environment (EC2)
Instance type m4.large (8 GiB RAM + 2 vCPU)
Platform Ubuntu Server 18.04 LTS
Cost-saving setting After 30 minutes (default)

設定値を確認して環境を作成。

IAMロールをアサイン

Cloud9は呼び出したAWSアカウントが利用可能な全てのAWSリソースに対するAWSアクションを許可する一時的なクレデンシャルで利用できるが、cloud9-で始まるロールとのインタラクションを除くIAM系は制限されている。このため、この一時的なクレデンシャルだとeksctlコマンドが失敗する。なので一時的なクレデンシャルではなくEC2インスタンスにIAMロールをアサインする。

(参考)

サービス > IAMで左のメニューからロールを選択し、「ロールの作成」をクリックし、「AWSサービス」と「EC2」を選択して次のステップ。

image.png

「AdministratorAccess」にチェックして次のステップへ。

image.png

タグはそのままにして次のステップへ。

image.png

ロールに「cloud9-admin」のような適当な名前をつけて、「ロールを作成」。

image.png

サービス > EC2で左のメニューからインスタンスを選択し、Cloud9のインスタンスを選択して、アクション > インスタンスの設定 > IAMロールの割り当て/置換を選択し、先ほど作成したIAMロールを割り当てる。

Cloud9で右上の設定アイコンから、AWS SETTINGSの「AWS managed temporary credentials」を無効にする。

image.png

Homebrewを導入

Macっぽく使いたかったので、Homebrew (Linuxbrew)を入れる。

(参考)

Homebrewのサイトに記載のコマンドを実行。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

以下を実行。

test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile

このあとの各ツールがapt-getでもbrewでもpipでも入れられたりするので、どれを使うかはいちいち迷うかもしれない。

AWS CLI

デフォルトで入っているので、aws configureコマンドを実行してリージョンだけ設定しておく。

以下のコマンドで別途導入することも可能。

pip install awscli
# brew install awscli

eksctl

eksctlをインストールする。

brew tap weaveworks/tap
brew install weaveworks/tap/eksctl

kubernetes-cliとaws-iam-authenticatorも入る。

brew install kubectx
brew install kube-ps1

.bashrcに以下を追加。

source "/home/linuxbrew/.linuxbrew/opt/kube-ps1/share/kube-ps1.sh"
KUBE_PS1_SUFFIX=') '
PS1='$(kube_ps1)'$PS1
kubeoff

デフォルトで非表示にしているが、kubeonを実行するとkube-ps1のプロンプトが表示される。

東京リージョンにEKSクラスタを作成

試しにクラスタを作ってみる。

sample1-clusterconfig.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: sample
  region: ap-northeast-1

nodeGroups:
  - name: ng
    instanceType: m5.large
    desiredCapacity: 3

このファイルを指定してクラスターを作成。

sotosugi:~/environment $ eksctl create cluster -f sample-clusterconfig.yaml
[ℹ]  eksctl version 0.7.0
[ℹ]  using region ap-northeast-1
[ℹ]  setting availability zones to [ap-northeast-1c ap-northeast-1a ap-northeast-1d]
[ℹ]  subnets for ap-northeast-1c - public:192.168.0.0/19 private:192.168.96.0/19
[ℹ]  subnets for ap-northeast-1a - public:192.168.32.0/19 private:192.168.128.0/19
[ℹ]  subnets for ap-northeast-1d - public:192.168.64.0/19 private:192.168.160.0/19
[ℹ]  nodegroup "ng" will use "ami-02e124a380df41614" [AmazonLinux2/1.14]
[ℹ]  using Kubernetes version 1.14
[ℹ]  creating EKS cluster "sample" in "ap-northeast-1" region
[ℹ]  1 nodegroup (ng) was included (based on the include/exclude rules)
[ℹ]  will create a CloudFormation stack for cluster itself and 1 nodegroup stack(s)
[ℹ]  if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=ap-northeast-1 --name=sample'
[ℹ]  CloudWatch logging will not be enabled for cluster "sample" in "ap-northeast-1"
[ℹ]  you can enable it with 'eksctl utils update-cluster-logging --region=ap-northeast-1 --name=sample'
[ℹ]  2 sequential tasks: { create cluster control plane "sample", create nodegroup "ng" }
[ℹ]  building cluster stack "eksctl-sample-cluster"
[ℹ]  deploying stack "eksctl-sample-cluster"
[ℹ]  building nodegroup stack "eksctl-sample-nodegroup-ng"
[ℹ]  --nodes-min=3 was set automatically for nodegroup ng
[ℹ]  --nodes-max=3 was set automatically for nodegroup ng
[ℹ]  deploying stack "eksctl-sample-nodegroup-ng"
[✔]  all EKS cluster resources for "sample" have been created
[✔]  saved kubeconfig as "/home/ubuntu/.kube/config"
[ℹ]  adding identity "arn:aws:iam::221193251029:role/eksctl-sample-nodegroup-ng-NodeInstanceRole-QFBSLXDG07HK" to auth ConfigMap
[ℹ]  nodegroup "ng" has 0 node(s)
[ℹ]  waiting for at least 3 node(s) to become ready in "ng"
[ℹ]  nodegroup "ng" has 3 node(s)
[ℹ]  node "ip-192-168-22-44.ap-northeast-1.compute.internal" is ready
[ℹ]  node "ip-192-168-60-210.ap-northeast-1.compute.internal" is ready
[ℹ]  node "ip-192-168-67-211.ap-northeast-1.compute.internal" is ready
[ℹ]  kubectl command should work with "/home/ubuntu/.kube/config", try 'kubectl get nodes'
[✔]  EKS cluster "sample" in "ap-northeast-1" region is ready
sotosugi:~/environment $ 

クラスターを確認。

sotosugi:~/environment $ eksctl get cluster                                                                                                                                                                                                          
NAME    REGION
sample  ap-northeast-1
sotosugi:~/environment $ aws eks list-clusters
{
    "clusters": [
        "sample"
    ]
}
sotosugi:~/environment $ kubectl get node
NAME                                                STATUS   ROLES    AGE     VERSION
ip-192-168-22-44.ap-northeast-1.compute.internal    Ready    <none>   5m42s   v1.14.7-eks-1861c5
ip-192-168-60-210.ap-northeast-1.compute.internal   Ready    <none>   5m45s   v1.14.7-eks-1861c5
ip-192-168-67-211.ap-northeast-1.compute.internal   Ready    <none>   5m47s   v1.14.7-eks-1861c5
sotosugi:~/environment $ 

aws-iam-authenticatorを使った認証情報が設定されている。

sotosugi:~/environment $ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://63DC5E16450F58024D02113D66CFE7FE.sk1.ap-northeast-1.eks.amazonaws.com
  name: sample.ap-northeast-1.eksctl.io
contexts:
- context:
    cluster: sample.ap-northeast-1.eksctl.io
    user: i-0233cb7248d878398@sample.ap-northeast-1.eksctl.io
  name: i-0233cb7248d878398@sample.ap-northeast-1.eksctl.io
current-context: i-0233cb7248d878398@sample.ap-northeast-1.eksctl.io
kind: Config
preferences: {}
users:
- name: i-0233cb7248d878398@sample.ap-northeast-1.eksctl.io
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - token
      - -i
      - sample
      command: aws-iam-authenticator
      env: null
sotosugi:~/environment $ 

最近はaws-iam-authenticatorを使わなくても認証できる模様。

aws eks update-kubeconfig --name sample

Ansible

pip install ansible
# brew install ansible

Terraform

tfenvを使って入れる。

brew search tfenv
brew install tfenv
tfenv --version
tfenv list-remote
tfenv install 0.12.12

jq

apt-get install jq
# brew install jq
# pip install jq
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away