最近の AWS 作業あれこれ
Amazon EMR
aws emr create-default-roles でインスタンスロールを作成。必要なら修正。
aws emr create-cluster でクラスタを作成。
HBase を実行したいときはこんな風にする。
aws emr create-cluster \ --name "hbase-cluster" \ --release-label "emr-5.25.0" \ --applications Name=HBase \ --use-default-roles \ --ec2-attributes KeyName="emr-ec2-key",SubnetId=xxxyyyzzz,AdditionalMasterSecurityGroups=[sg-xxxyyyzzz],AdditionalSlaveSecurityGroups=[sg-xxxyyyzzz] \ --instance-groups InstanceGroupType=MASTER,InstanceType=m4.large,InstanceCount=3 InstanceGroupType=CORE,InstanceType=m4.large,InstanceCount=1 \ --no-termination-protected
引数 | 値 |
---|---|
release-label | リリースガイド を見て確認する |
applications | Name=App1 Name=App2 ... アプリケーション名を指定する。有効な名前はソースコード見れば分かる |
use-default-roles | awscli に定義されたデフォルト値(EMR_DefaultRole ) を EC2 インスタンスプロファイルに使用する。create-default-roles で作成したやつ。 |
ec2-attributes | EC2 インスタンスの ssh キーペア、インスタンスプロファイル、サブネット or AZ、セキュリティグループを指定する |
instance-groups | ユニフォームインスタンスグループを構成する。 |
no-termination-protected | 削除保護をオフにするはずなんだけどオフにならない・・・ |
不要になったクラスタは aws emr terminate-clusters で停止する(はずだった)。
`no-termination-protected` を指定しても削除保護がオフにならないため失敗する。管理コンソールで操作する必要があった
起動した EC2 インスタンスをリストアップしたいときはaws emr list-instances する。
起動した EC2 インスタンス(マスターノード)へ ssh 接続したいときはaws emr ssh する。
Amazon EKS
aws-iam-authenticator と eksctl があると楽ちん。
eksctl create cluster
でクラスタを作成する。
例えばこんな風にする。
そうすると CloudFormation スタック eks-cluster
と eks-workers
を順番に実行する。
eksctl create cluster \ --region ap-northeast-1 \ --name "eks-cluster" \ --nodegroup-name "eks-workers" \ --version 1.13 \ --node-type m5.large \ --nodes 3 \ --nodes-min 1 \ --nodes-max 3 \ --node-ami auto \ --node-volume-size 10 \ --node-private-networking \ --vpc-private-subnets=private1,private2,private3 \ --vpc-public-subnets=public1,public2,public3 \ --node-security-groups sg-xxxyyyzzz \ --write-kubeconfig \ --kubeconfig .kube_config
node-type
に指定できるインスタンスタイプには制限がある。t2.medium
や t3.medium
だと作成可能なインスタンス数の上限に達した、というエラーで失敗する。
[✖] AWS::AutoScaling::AutoScalingGroup/NodeGroup: CREATE_FAILED – "You must use a valid fully-formed launch template. You have requested more instances (1) than your current instance limit of 0 allows for the specified ins tance type. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit. (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError;)"
メッセージをそのまま解釈すると私のアカウントでは t3.medium
の利用可能なインスタンス数は 0 ということになるんだけどなんかおかしくないかな。
Q: Amazon EC2 ではいくつのインスタンスを実行できますか?
オンデマンドインスタンスの実行はインスタンスファミリーをまたいで最大で合計 20 個、リザーブドインスタンスの購入は 20 個に制限されます。また、リージョンごとの動的なスポットインスタンスの制限に従ってスポットインスタンスをリクエストするよう制限されています。新規の AWS アカウントでは、当初この上限よりも少ない数に制限されることがあります。特定のインスタンスタイプでは、さらにリージョンごとに次のような制限があります。
--vpc-*
オプションを指定すると既存の VPC にクラスタを作成できる。指定しないと VPC を作成する(しない場合もある)。
write-kubeconfig
と kubeconfig
を組み合わせると、指定した場所へ kubectl
の設定ファイルを生成できる。
このとき、aws-iam-authenticator
が存在するとそれを利用する設定になる。存在しないときは aws eks get-token
を利用する設定になる。
デフォルトの `~/.kube/config` に混ざるととっちらかる感じがするので、設定ファイルはプロジェクトごとに分けた方がいい気がする。
その上で `alias k="kubectl --kubeconfig .kube_config "` とかすればいいのかなと。
eksctl delete cluster
でクラスタを削除する。