Edited at

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

More than 1 year has passed since last update.


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

以上です。