最近の 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-authenticatoreksctl があると楽ちん。

eksctl create clusterクラスタを作成する。

例えばこんな風にする。 そうすると CloudFormation スタック eks-clustereks-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.mediumt3.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 ということになるんだけどなんかおかしくないかな。

aws.amazon.com

Q: Amazon EC2 ではいくつのインスタンスを実行できますか?

オンデマンドインスタンスの実行はインスタンスファミリーをまたいで最大で合計 20 個、リザーブインスタンスの購入は 20 個に制限されます。また、リージョンごとの動的なスポットインスタンスの制限に従ってスポットインスタンスをリクエストするよう制限されています。新規の AWS アカウントでは、当初この上限よりも少ない数に制限されることがあります。特定のインスタンスタイプでは、さらにリージョンごとに次のような制限があります。

--vpc-* オプションを指定すると既存の VPCクラスタを作成できる。指定しないと VPC を作成する(しない場合もある)。

write-kubeconfigkubeconfig を組み合わせると、指定した場所へ kubectl の設定ファイルを生成できる。 このとき、aws-iam-authenticator が存在するとそれを利用する設定になる。存在しないときは aws eks get-token を利用する設定になる。

デフォルトの `~/.kube/config` に混ざるととっちらかる感じがするので、設定ファイルはプロジェクトごとに分けた方がいい気がする。
その上で `alias k="kubectl --kubeconfig .kube_config "` とかすればいいのかなと。

eksctl delete clusterクラスタを削除する。