LoginSignup
5
7

More than 5 years have passed since last update.

PowerShellでCloudAutomatorのAPIにアクセスしてみた

Last updated at Posted at 2017-07-07

CloudAutomatorがAPIで操作出るようになりました!

Cloud AutomatorのREST APIを公開しました!

これまではブラウザぽちぽちだったのでありがたい。(ミスが減るね!)

せっかくなのでさわってみます。

前提条件

  • 業務用のPCがWindowsなので、PowerShellでやってみます
    • Invoke-RestMethodコマンド(curlのようなもの)で操作します

事前準備

REST APIキーの発行

管理コンソールからAPIキーを取得します。

方法は、冒頭のブログ記事を確認してください。

ヘッダーに指定するのは共通なので、ここで変数に設定します。

コマンド
$apiKey = "********************************"
$headers = @{"Authorization" = "Bearer " + $apiKey}

アカウントの管理

アカウントの作成

APIの仕様をドキュメントで確認します。

Create AwsAccount

URLを指定します。

コマンド
$url="https://manager.cloudautomator.com/api/v1/aws_accounts"

BODY部をヒアストリングで生成します。

コマンド
$account_name="api-test"
$aws_id="111122223333"
$access_key="XXXXXXXXXXXXXXXXXXXX"
$secret_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
コマンド
$body = @"
{
    "name": "$account_name",
    "account_number": "$aws_id",
    "access_key_id": "$access_key",
    "secret_access_key": "$secret_key"
}
"@

アカウントを作成します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Post `
    -Headers $headers `
    -Body $body `
    -ContentType "application/json" `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "1231",
                 "type":  "aws_accounts",
                 "attributes":  {
                                    "name":  "api-test"
                                }
             }
}

作成したアカウントの確認

まずは、一覧を表示します。

APIの仕様をドキュメントで確認します。

Get AwsAccounts

URLを指定します。

コマンド
$url="https://manager.cloudautomator.com/api/v1/aws_accounts"

アカウントの一覧を表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  [
                 {
                     "id":  "1231",
                     "type":  "aws_accounts",
                     "attributes":  "@{name=api-test}"
                 },
                 {
                     "id":  "***",
                     "type":  "aws_accounts",
                     "attributes":  "@{name=****}"
                 }
             ],
    "links":  {

              },
    "meta":  {
                 "total":  2
             }
}

次に、作成したアカウントを確認します。

APIの仕様をドキュメントで確認します。

Get AwsAccount

URLを指定します。

コマンド
$account_id="1231"
コマンド
$url="https://manager.cloudautomator.com/api/v1/aws_accounts/$account_id"

アカウントを表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "1231",
                 "type":  "aws_accounts",
                 "attributes":  {
                                    "name":  "api-test"
                                }
             }
}

作成したアカウントの編集

アカウント名を変更してみます。(アクセスキーの変更も同じ要領で可能です)

APIの仕様をドキュメントで確認します。

Edit AwsAccount

URLを指定します。

コマンド
$account_id="1231"
コマンド
$url="https://manager.cloudautomator.com/api/v1/aws_accounts/$account_id"

BODY部をヒアストリングで生成します。

変更したい部分のみを記述します。

コマンド
$account_name="api-test-2"
コマンド
$body = @"
{
    "name": "$account_name"
}
"@

アカウントを編集します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Patch `
    -Headers $headers `
    -Body $body `
    -ContentType "application/json" `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "1231",
                 "type":  "aws_accounts",
                 "attributes":  {
                                    "name":  "api-test-2"
                                }
             }
}

ジョブの作成と管理

ジョブの作成

APIの仕様をドキュメントで確認します。

Create Job

URLを指定します。

コマンド
$url="https://manager.cloudautomator.com/api/v1/jobs"

BODY部をヒアストリングで生成します。

コマンド
$job_name="Daily_Backup"
$account_id="1231"
$rule_type="cron"
$hour="2"
$minutes="0"
$schedule_type="weekly"
$weekly_schedule='["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]'

$action_type="create_image"
$region="ap-northeast-1"
$specify_image_instance="identifier"
$instance_id="i-xxxxxxxxxxxxxxxxx"
$generation="1"
$image_name="test-ami"
$description="Test for CloudAutomator API"
$reboot_instance="true"
$additional_tag_key="hogehoge"
$additional_tag_value="fugafuga"
$add_same_tag_to_snapshot="true"
$trace_status="true"
$recreate_image_if_ami_status_failed="true"
コマンド
$body = @"
{
    "name": "$job_name",
    "aws_account_id": "$account_id",
    "rule_type": "$rule_type",
    "rule_value": {
        "hour": "$hour",
        "minutes": $minutes,
        "schedule_type": "$schedule_type",
        "weekly_schedule": $weekly_schedule
    },
    "action_type": "$action_type",
    "action_value": {
        "region": "$region",
        "specify_image_instance": "$specify_image_instance",
        "instance_id": "$instance_id",
        "generation": "$generation",
        "image_name": "$image_name",
        "description": "$description",
        "reboot_instance": "$reboot_instance",
        "additional_tag_key": "$additional_tag_key",
        "additional_tag_value": "$additional_tag_value",
        "add_same_tag_to_snapshot": "$add_same_tag_to_snapshot",
        "trace_status": "$trace_status",
        "recreate_image_if_ami_status_failed": "$recreate_image_if_ami_status_failed"
    }
}
"@

ジョブを作成します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Post `
    -Headers $headers `
    -Body $body `
    -ContentType "application/json" `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "10338",
                 "type":  "trigger_jobs",
                 "attributes":  {
                                    "name":  "Daily_Backup",
                                    "aws_account_id":  1231,
                                    "rule_type":  "cron",
                                    "rule_value":  "@{hour=2; minutes=0; schedule_type=weekly; weekly_schedule=[\"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\"]; time_zone=Tokyo; next_occurrence=2017-07-07 17:00:00 UTC}",
                                    "action_type":  "create_image",
                                    "action_value":  "@{instance_id=i-xxxxxxxxxxxxxxxxx; region=ap-northeast-1; trace_status=true; additional_tag_key=hogehoge; additional_tag_value=fugafuga; description=Test for CloudAutomator API; generation=1; add_same_tag_to_snapshot=true; image_name=test-ami; reboot_instance=true; recreate_image_if_ami_status_failed=true; specify_image_instance=identifier}",
                                    "active":  true,
                                    "created_at":  "2017-07-07T21:52:58.931+09:00",
                                    "updated_at":  "2017-07-07T21:52:58.951+09:00"
                                }
             }
}

ジョブの確認

まずは、一覧を表示します。

APIの仕様をドキュメントで確認します。

Get Jobs

URLを指定します。

コマンド
$url="https://manager.cloudautomator.com/api/v1/jobs"

ジョブの一覧を表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  [
                 {
                     "id":  "10338",
                     "type":  "trigger_jobs",
                     "attributes":  "@{name=Daily_Backup; aws_account_id=1231; rule_type=cron; rule_value=; action_type=create_image; action_value=; active=True; created_at=2017-07-07T21:52:58.931+09:00; updated_at=2017-07-07T21:52:58.951+09:00}"
                 },
                 {
                     ...
                 }
             ],
    "links":  {
                  ...
              },
    "meta":  {
                 "total":  14
             }
}

次に、作成したジョブを確認します。

APIの仕様をドキュメントで確認します。

Get Job

URLを指定します。

コマンド
$job_id="10338"
コマンド
$url="https://manager.cloudautomator.com/api/v1/jobs/$job_id"

ジョブを表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "10338",
                 "type":  "trigger_jobs",
                 "attributes":  {
                                    "name":  "Daily_Backup",
                                    "aws_account_id":  1231,
                                    "rule_type":  "cron",
                                    "rule_value":  "@{hour=2; minutes=0; time_zone=Tokyo; schedule_type=weekly; next_occurrence=2017-07-07 17:00:00 UTC; weekly_schedule=[\"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\"]}",
                                    "action_type":  "create_image",
                                    "action_value":  "@{region=ap-northeast-1; generation=1; image_name=test-ami; description=Test for CloudAutomator API; instance_id=i-xxxxxxxxxxxxxxxxx; trace_status=true; reboot_instance=true; additional_tag_key=hogehoge; additional_tag_value=fugafuga; specify_image_instance=identifier; add_same_tag_to_snapshot=true; recreate_image_if_ami_status_failed=true}",
                                    "active":  true,
                                    "created_at":  "2017-07-07T21:52:58.931+09:00",
                                    "updated_at":  "2017-07-07T21:52:58.951+09:00"
                                }
             }
}

ジョブの変更

ジョブの実行時刻を変更してみます。

APIの仕様をドキュメントで確認します。

Edit Job

URLを指定します。

コマンド
$job_id="10338"
コマンド
$url="https://manager.cloudautomator.com/api/v1/jobs/$job_id"

BODY部をヒアストリングで生成します。

コマンド
$hour="3"
コマンド
$body = @"
{
    "rule_value": {
        "hour": "$hour"
    }
}
"@

ジョブを変更します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Patch `
    -Headers $headers `
    -Body $body `
    -ContentType "application/json" `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "10338",
                 "type":  "trigger_jobs",
                 "attributes":  {
                                    "name":  "Daily_Backup",
                                    "aws_account_id":  1231,
                                    "rule_type":  "cron",
                                    "rule_value":  "@{hour=3; minutes=0; time_zone=Tokyo; schedule_type=weekly; next_occurrence=2017-07-07 18:00:00 UTC; weekly_schedule=[\"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\"]}",
                                    "action_type":  "create_image",
                                    "action_value":  "@{region=ap-northeast-1; generation=1; image_name=test-ami; description=Test for CloudAutomator API; instance_id=i-xxxxxxxxxxxxxxxxx; trace_status=true; reboot_instance=true; additional_tag_key=hogehoge; additional_tag_value=fugafuga; specify_image_instance=identifier; add_same_tag_to_snapshot=true; recreate_image_if_ami_status_failed=true}",
                                    "active":  true,
                                    "created_at":  "2017-07-07T21:52:58.931+09:00",
                                    "updated_at":  "2017-07-07T22:21:06.857+09:00"
                                }
             }
}

ログの確認

一覧を表示します。

APIの仕様をドキュメントで確認します。

Get Logs

URLを指定します。

コマンド
$url="https://manager.cloudautomator.com/api/v1/logs"

ログの一覧を表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  [
                 {
                     "id":  "xxxxx",
                     "type":  "trigger_job_logs",
                     "attributes":  "@{name=XXXXXXXX; result=; status=completed; action_type=create_image; action_value=; aws_account_id=xxx; rule_type=cron; rule_value=; started_at=2014-12-06T02:00:01.147+09:00; finished_at=2014-12-06T03:27:58.493+09:00; created_at=2014-12-06T02:00:01.152+09:00; updated_at=2014-12-06T03:27:58.500+09:00; job_id=xxxx}"
                 },
                 {
                     ...
                 }
             ],
    "links":  {
                  ...
              },
    "meta":  {
                 "total":  347
             }
}

次に、特定のジョブのログを確認します。

APIの仕様をドキュメントで確認します。

Get Log

URLを指定します。

コマンド
$log_id="xxxxx"
コマンド
$url="https://manager.cloudautomator.com/api/v1/logs/$log_id"

ログを表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  {
                 "id":  "xxxxx",
                 "type":  "trigger_job_logs",
                 "attributes":  {
                                    "name":  "XXXXXXXXXXXX",
                                    "result":  "@{error_code=OperationSuccess.AMIsCreated; error_message=AMIs created: AMIs=[ami-xxxxxxxx]}",
                                    "status":  "completed",
                                    "action_type":  "create_image",
                                    "action_value":  "@{region=ap-northeast-1; generation=2; image_name=CloudAutomator; description=%Y%m%d-TestBackup; instance_id=i-xxxxxxxx; trace_status=true; reboot_instance=true; record_set_value=; additional_tag_key=; additional_tag_value=; specify_image_instance=identifier; final_cluster_snapshot_identifier=}",
                                    "aws_account_id":  xxx,
                                    "rule_type":  "cron",
                                    "rule_value":  "@{hour=2; minutes=0; time_zone=Tokyo; schedule_type=weekly; next_occurrence=2014-12-05 17:00:00 UTC; weekly_schedule=[\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"\"]}",
                                    "started_at":  "2014-12-06T02:00:01.147+09:00",
                                    "finished_at":  "2014-12-06T03:27:58.493+09:00",
                                    "created_at":  "2014-12-06T02:00:01.152+09:00",
                                    "updated_at":  "2014-12-06T03:27:58.500+09:00",
                                    "job_id":  xxxx
                                }
             }
}

ログに紐づくリソース操作結果を確認します。

APIの仕様をドキュメントで確認します。

Get ResourceOperationResults

URLを指定します。

コマンド
$log_id="xxxxx"
コマンド
$url="https://manager.cloudautomator.com/api/v1/logs/$log_id/resource_operation_results"

ログを表示します。

コマンド
Invoke-RestMethod `
    -Uri $url `
    -Method Get `
    -Headers $headers `
    | ConvertTo-Json
結果
{
    "data":  [
                 {
                     "id":  "xxxxxxxx",
                     "type":  "resource_operation_results",
                     "attributes":  "@{message=; result=completed; affected_resource_id=ami-xxxxxxxx; target_resource_id=i-xxxxxxxxxxxxxxxxx; created_at=2017-07-08T03:05:09.632+09:00; updated_at=2017-07-08T03:05:09.632+09:00; job_id=xxxxx; log_id=xxxxxxx}"
                 }
             ],
    "links":  {

              },
    "meta":  {
                 "total":  1
             }
}

感想

  • ジョブのオンオフ機能が欲しい
  • ジョブの後処理を設定できる機能が欲しい
  • JSON地獄がしんどいw

以上です。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7