Skip to content

Instantly share code, notes, and snippets.

@ysaotome
Last active December 7, 2019 15:52
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save ysaotome/f5a2b0e5babda027d990 to your computer and use it in GitHub Desktop.
Save ysaotome/f5a2b0e5babda027d990 to your computer and use it in GitHub Desktop.
ニフティクラウドのCLIツール( http://cloud.nifty.com/api/cli/ )を自動セットアップするスクリプトと使用例
#!/bin/bash
# setup NIFTY Cloud API Tools
(
USER=${USER}
HOME=${HOME}
ARC=$(/bin/uname -m)
## OpenJDKセットアップ
/usr/bin/yum -y install java-1.6.0-openjdk.${ARC}
## NIFTY Cloud API Tools の設定
/usr/bin/wget -P ${HOME} 'http://cloud.nifty.com/api/sdk/NIFTY_Cloud_api-tools.zip'
/usr/bin/unzip -d ${HOME} ${HOME}/NIFTY_Cloud_api-tools.zip
/bin/rm -rf ${HOME}/NIFTY_Cloud_api-tools.zip
/bin/rm -rf ${HOME}/NIFTY_Cloud_api-tools/bin/*.cmd
/bin/chown -R ${USER}:${USER} ${HOME}/NIFTY_Cloud_api-tools/
/bin/chmod 755 ${HOME}/NIFTY_Cloud_api-tools/bin/*
/bin/cat << _NCSSCONF_ >> ${HOME}/.bashrc
## NIFTY Cloud API Settings
export NIFTY_CLOUD_HOME=${HOME}/NIFTY_Cloud_api-tools/
export PATH=\${PATH}:\${NIFTY_CLOUD_HOME}/bin
export JAVA_HOME=/usr/lib/jvm/jre
export JAVA_OPTS=-Duser.language=ja 
_NCSSCONF_
source ${HOME}/.bashrc
) 2>&1 | /usr/bin/tee /var/log/niftycloud-api-tools-installer.log
@ysaotome
Copy link
Author

ニフティクラウドコマンドラインツールの使い方

  • 繰り返し処理や大量の操作を行う場合コマンドラインツール(CLI)をお使い頂くと労力を削減出来ます。
  • CLIをご利用委託にはAPIツールのインストールが必要です。
  • Linux(CentOS 6.5 x86_64)を想定した使い方をご紹介します。
  • 本家紹介サイト

AccessKey/SecretAccessKeyを取得

  • APIツールの実行には、該当アカウントのAccessKey/SecretAccessKeyが必要です。
  • コントロールパネル上部のアカウントメニューから「API認証」から取得出来ます。

APIツールのインストール

自動インストール(コマンド)

  1. サーバーへログイン後下記コマンドを実行
/usr/bin/curl -s https://gist.githubusercontent.com/ysaotome/f5a2b0e5babda027d990/raw/niftycloud-api-tools-installer.sh | /bin/bash 
  1. AccessKey/SecretAccessKeyを設定
    • 取得したKeyを下記コマンドで環境変数へ設定します。
export NIFTY_ACCESS_KEY_ID=「取得したAccessKey」
export NIFTY_SECRET_KEY=「取得したSecretAccessKey」

手動インストール

  1. 下記サイトからAPIツールをダウンロード頂き、ダウンロードしたファイルを、ローカルフォルダの任意のパスに展開します。

  2. 環境設定を実施します。

    • Open Java SE Development Kitをインストール
    yum install java-1.6.0-openjdk.x86_64
    
    • .bashrc等に環境変数を追記
    export NIFTY_CLOUD_HOME=「ファイルを展開したパス」/NIFTY_Cloud_api-tools/
    export PATH=\${PATH}:\${NIFTY_CLOUD_HOME}/bin
    export JAVA_HOME=/usr/lib/jvm/jre
    export NIFTY_ACCESS_KEY_ID=「取得したAccessKey」
    export NIFTY_SECRET_KEY=「取得したSecretAccessKey」
    

インストール結果を確認

  • 下記コマンドを実行
nifty-describe-regions 
  • 下記の様な表示がされればインストール完了です。
nifty-describe-regions 
REGION  east-1  east-1.cp.cloud.nifty.com    true 
REGION  west-1  west-1.cp.cloud.nifty.com    false

@ysaotome
Copy link
Author

コマンド利用例

  • 利用可能なCLI API一覧
  • オススメ引数
    • --headers
      • 出力形式が 表形式 または 区切り文字による区切り形式 の場合、カラムヘッダを出力します。

リージョンの一覧を取得する

  • コマンド
nifty-describe-regions  --headers
  • 実行結果例
$ nifty-describe-regions --headers
IdType  Name    Endpoint                   Messages  Default
REGION  east-1  east-1.cp.cloud.nifty.com            true   
REGION  west-1  west-1.cp.cloud.nifty.com            false

ゾーンの一覧を取得する

  • コマンド
nifty-describe-availability-zones  --headers
  • 実行結果例
$ nifty-describe-availability-zones  --headers
IdType            Name     State      Region  Messages  SecurityGroupSupported  Default
AVAILABILITYZONE  east-11  available  east-1            false                   false  
AVAILABILITYZONE  east-12  available  east-1            true                    true   
AVAILABILITYZONE  east-13  available  east-1            true                    false  

ファイアウォールグループの設定情報を取得したい

全ての情報を取得

  • コマンド
nifty-describe-security-groups --headers
  • 実行結果例
$ nifty-describe-security-groups --headers
IdType  GroupName  GroupStatus  GroupDescription  GroupRuleLimitUpdate  GroupLogLimitUpdate  GroupLogFilterNetBios  AvailabilityZone
GROUP   SSHxDB     applied                        100                   1000                 false                  east-13         
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxDB     TCP         22        22      IN     CIDR        0.0.0.0/0
IdType  GroupName  GroupStatus  GroupDescription  GroupRuleLimitUpdate  GroupLogLimitUpdate  GroupLogFilterNetBios  AvailabilityZone
GROUP   SSHxWEB    applied                        100                   1000                 false                  east-13         
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxWEB    TCP         22        22      IN     CIDR        0.0.0.0/0
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxWEB    TCP         80        80      IN     CIDR        0.0.0.0/0
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxWEB    TCP         443       443     IN     CIDR        0.0.0.0/0

ファイアウォールグループ名「SSHxWEB」配下のルールを取得

  • コマンド
nifty-describe-security-groups --filter "group-name=SSHxWEB" --headers
  • 実行結果例
$ nifty-describe-security-groups --filter "group-name=SSHxWEB" --headers
IdType  GroupName  GroupStatus  GroupDescription  GroupRuleLimitUpdate  GroupLogLimitUpdate  GroupLogFilterNetBios  AvailabilityZone
GROUP   SSHxWEB    applied                        100                   1000                 false                  east-13         
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxWEB    TCP         22        22      IN     CIDR        0.0.0.0/0
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxWEB    TCP         80        80      IN     CIDR        0.0.0.0/0
IdType      GroupName  IpProtocol  FromPort  ToPort  InOut  SourceType  CidrIp   
PERMISSION  SSHxWEB    TCP         443       443     IN     CIDR        0.0.0.0/0

ファイアウォールグループを追加したい

ゾーン「east-13」へ、ファイアウォールグループ名「SSHxWEB」を追加する

  • コマンド
nifty-create-security-group "SSHxWEB" --availability-zone "east-13"
  • 実行結果例
$ nifty-create-security-group "SSHxWEB" --availability-zone "east-13"
GROUP SSHxWEB east-13

ファイアウォールルールを追加したい

※ルールを追加する前に事前にグループを作成しておく必要があります

  • ファイアウォールグループ名「SSHxWEB」に以下のルールを適用する
インターネット(0.0.0.0/0)からの「80/TCP(http)」「443/TCP(https)」「22/TCP(ssh)」通信許可
ファイアウォールグループ「SSHxDMZ」からの全て(ANY)の通信許可
  • コマンド
nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 80 --in-out IN --source-subnet "0.0.0.0/0"
nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 443 --in-out IN --source-subnet "0.0.0.0/0"
nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 22 --in-out IN --source-subnet "0.0.0.0/0"
nifty-authorize-security-group-ingress "SSHxWEB" --protocol ANY --in-out IN --source-group "SSHxDMZ"
  • 実行結果例
$ nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 80 --in-out IN --source-subnet "0.0.0.0/0"
GROUP  SSHxWEB
PERMISSION  SSHxWEB  TCP  80  80  IN  CIDR  0.0.0.0/0

$ nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 443 --in-out IN --source-subnet "0.0.0.0/0"
GROUP  SSHxWEB
PERMISSION  SSHxWEB  TCP  443  443  IN  CIDR  0.0.0.0/0

$ nifty-authorize-security-group-ingress "SSHxWEB" --protocol TCP --port-range 22 --in-out IN --source-subnet "0.0.0.0/0"
GROUP  SSHxWEB
PERMISSION  SSHxWEB  TCP  22  22  IN  CIDR  0.0.0.0/0

$ nifty-authorize-security-group-ingress "SSHxWEB" --protocol ANY --in-out IN --source-group "SSHxDMZ"
GROUP  SSHxWEB
PERMISSION  SSHxWEB  ANY      IN  GRPNAME  SSHxDMZ

イメージの一覧が取得したい

全てのイメージを取得する

  • コマンド
nifty-describe-images --owner "all" --headers
  • 実行結果例
$ nifty-describe-images --owner "all" --headers
IdType  ImageID  Name      Owner  OwnerAlias                              State      Accessibility  ProductCodes  Architecture  ImageType  KernelId  RamdiskId  Platform  RootDeviceType  Description                                                          Redistributable  AvailabilityZone
IMAGE  15224  Debian GNU_Linux 7.1 64bit  other  ニフティ株式会社  available  public    x86_64  machine      debian  disk  Experimental Release  true  east-1.east-13
「Debian GNU_Linux 7.1 64bit」のイメージです。初期設定は予告なく変更される場合がありますので、ご了承ください。本イメージはOS層以上で随時発生する脆弱性について対応していない可能性がございます。お客様にて最新のパッケージにアップデートしていただくことを推奨いたします。
Debianの登録商標、アイコンの著作権はSoftware in the Public Interest, Inc.に帰属します。
・
・
・

自分が作成したイメージ(プライベート(バックアップ))一覧を取得する

  • コマンド
nifty-describe-images --owner "self" --headers
  • 実行結果例
$ nifty-describe-images --owner "self" --headers  | grep private
IMAGE   12350    CentOS5LVM  self   ニフティクラウドユーザーブログライター  available  private                      x86_64        machine                         linux     disk                         true             east-1.east-12  
IMAGE   16378    Ubuntu1310x8664  self   ニフティクラウドユーザーブログライター  available  private                      x86_64        machine                         ubuntu    disk                         true             east-1.east-13  
・
・
・

イメージを指定してサーバを作成する

※イメージを指定するために事前にサーバ情報内の「ImageID」を取得しておく必要があります。
※SSHキーを指定するために事前に設定するSSHキー名を取得しておく必要があります。

プライベートイメージ「Ubuntu1310x8664」からサーバを作成する(コピーする)

「Ubuntu1310x8664」の 「ImageID」を取得

  • コマンド
nifty-describe-images --owner "self" --headers  | grep Ubuntu1310x8664
  • 実行結果例
    * 以下の実行結果からイメージ「Ubuntu1310x8664」の「ImageID」は「16378」である事が判る
$ nifty-describe-images --owner "self" --headers  | grep Ubuntu1310x8664
IMAGE   16378    Ubuntu1310x8664  self   ニフティクラウドユーザーブログライター  available  private                      x86_64        machine                         ubuntu    disk                         true             east-1.east-13  

SSHキーの一覧を取得する

  • コマンド
nifty-describe-keypairs --headers
  • 実行結果例
    • 以下の実行結果からSSHキー名が「niftycloudTest」である事が判る
nifty-describe-keypairs --headers
IdType   KeyPair         Fingerprint                                                
KEYPAIR  niftycloudTest  88:7b:e4:19:94:6b:a7:89:91:52:6f:95:c2:00:09:6b:f0:ab:4c:57

「ImageID」が「16378」のプライベートイメージ「Ubuntu1310x8664 」をコピーする

  • 引数の意味
    • --instance-id 作成するサーバー名
    • --group 所属するファイアウォールグループ
    • --key 設定するSSHキー名
    • --instance-type 作成するサーバタイプ mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32 | double-large32 | double-large48 | double-large64
    • --accounting-type 課金タイプ 1 (月額課金) | 2 (従量課金)
    • --availability-zone 作成するゾーン名
    • --disable-api-termination APIからのサーバー削除の可否 true (削除不可) | false (削除可)
  • コマンド
nifty-run-instances "16378" --instance-id "UbuntuTest" --group "SSHxWEB" --key "niftycloudTest" --instance-type "double-large32" --accounting-type "2" --availability-zone "east-13"  --disable-api-termination "true" --headers
  • 実行結果例
$ nifty-run-instances "16378" --instance-id "UbuntuTest" --group "SSHxWEB" --key "niftycloudTest" --instance-type "double-large32" --accounting-type "2" --availability-zone "east-13"  --disable-api-termination "true" --headers

IdType  GroupId
GROUP   SSHxWEB
IdType    InstanceId   ImageId          DnsName  PrivateDnsName  State    KeyName  LaunchIndex  ProductCodes  InstanceType  LaunchTime                 AvailabilityZone  KernelId  RamdiskId  MonitoringState      IpAddress  PrivateIpAddress  IpAddressV6  PrivateIpAddressV6  SubnetId  VpcId  RootDeviceType  Admin  AccountingType  IpType  PrivateIpType  Architecture  Platform
INSTANCE  UbuntuTest  Ubuntu1310x8664                           pending                                      double-large32          2014-09-12T19:34:30+09:00  east-13                                monitoring-disabled                                                                                 disk                   2               static  static         x86_64        ubuntu 

サーバの作成状況を確認

  • コマンド
nifty-describe-instances
  • 実行結果例
$ nifty-describe-instances
INSTANCE  UbuntuTest  16378      creating            east-13      disabled              disk  0  0    static  static 

@megane42
Copy link

megane42 commented Oct 3, 2017

今のバージョンだと .bashrc に下記を追記する必要がありました。

export NIFTY_CLOUD_URL=https://west-1.cp.cloud.nifty.com/api/

これをしないと org.apache.http.client.ClientProtocolException: URI does not specify a valid host name エラーが発生します。
また、URL は http://cloud.nifty.com/api/endpoint.htm を参考に、使っているリージョンと同じものを指定する必要があります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment