AWS Cloud Control API を利用したAWSリソース操作をCLIで試してみた

AWSリソースの基本操作を実現する Cloud Control API を AWSCLIで試してみました。
2021.10.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSチームのすずきです。

2021年9月30日のアップデートでサポートされた AWS Cloud Control API。 AWS CLI を利用した AWSリソースの操作(作成、表示、削除)を試す機会がありましたので、紹介させていただきます。

AWS Cloud Control API, a Uniform API to Access AWS & Third-Party Services

実行環境

  • OS: Amazon Linux 2 (x86_64)
  • aws-cli: 2.2.43
$ aws --version
aws-cli/2.2.43 Python/3.8.8 Linux/4.14.243-185.433.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
  • awscliインストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Cloud Control API

AWS Cloud Control API がサポートする Kinesis Data Streams を操作対象としました。

リソース作成

$ aws cloudcontrol create-resource \
 --type-name AWS::Kinesis::Stream \
 --desired-state "{\"Tags\":[{\"Value\":\"01\",\"Key\":\"tag1\"}],\"Name\":\"stream01\",\"ShardCount\":1}"
{
    "ProgressEvent": {
        "TypeName": "AWS::Kinesis::Stream",
        "Identifier": "stream01",
        "RequestToken": "00000000-0000-0000-0000-000000000000",
        "Operation": "CREATE",
        "OperationStatus": "IN_PROGRESS",
        "EventTime": "2021-10-01T12:52:41.469000+00:00"
    }
}

リソース表示

$ aws cloudcontrol list-resources --type-name AWS::Kinesis::Stream
{
    "TypeName": "AWS::Kinesis::Stream",
    "ResourceDescriptions": [
        {
            "Identifier": "stream01",
            "Properties": "{\"Name\":\"stream01\"}"
        }
    ]
}
$ aws cloudcontrol get-resource --type-name AWS::Kinesis::Stream --identifier stream01
{
    "TypeName": "AWS::Kinesis::Stream",
    "ResourceDescription": {
        "Identifier": "stream01",
        "Properties": "{\"Arn\":\"arn:aws:kinesis:ap-northeast-1:000000000000:stream/stream01\",\"RetentionPeriodHours\":24,\"Tags\":[{\"Value\":\"01\",\"Key\":\"tag1\"}],\"Name\":\"stream01\",\"ShardCount\":1}"
    }
}

リソース削除

$ aws cloudcontrol delete-resource --type-name AWS::Kinesis::Stream --identifier stream01
{
    "ProgressEvent": {
        "TypeName": "AWS::Kinesis::Stream",
        "Identifier": "stream01",
        "RequestToken": "00000000-0000-0000-0000-000000000000",
        "Operation": "DELETE",
        "OperationStatus": "IN_PROGRESS",
        "EventTime": "2021-10-01T12:56:54.190000+00:00"
    }
}

従来API

Amazon Kinesis Data Streams API では、2回のAPI操作が必要でした。

Amazon Kinesis Data Streams Service API Reference

作成

create-stream

aws kinesis create-stream --stream-name stream02 --shard-count 1

add-tags-to-stream

aws kinesis add-tags-to-stream --stream-name stream02 --tags tag1=02

表示

describe-stream

$ aws kinesis describe-stream --stream-name stream02
{
    "StreamDescription": {
        "Shards": [
            {
                "ShardId": "shardId-000000000000",
                "HashKeyRange": {
                    "StartingHashKey": "0",
                    "EndingHashKey": "340282366920938463463374607431768211455"
                },
                "SequenceNumberRange": {
                    "StartingSequenceNumber": "49622564398159323166478361687972732299177258526353391618"
                }
            }
        ],
        "StreamARN": "arn:aws:kinesis:ap-northeast-1:000000000000:stream/stream02",
        "StreamName": "stream02",
        "StreamStatus": "ACTIVE",
        "RetentionPeriodHours": 24,
        "EnhancedMonitoring": [
            {
                "ShardLevelMetrics": []
            }
        ],
        "EncryptionType": "NONE",
        "KeyId": null,
        "StreamCreationTimestamp": "2021-10-01T12:58:25+00:00"
    }
}

list-tags-for-stream

$ aws kinesis list-tags-for-stream --stream-name stream02
{
    "Tags": [
        {
            "Key": "tag1",
            "Value": "02"
        }
    ],
    "HasMoreTags": false
}

まとめ

AWSサービスのAPI、各サービス毎に差異が存在する事がありますが、 Cloud Control API を利用する事で、作成、参照、変更、削除 基本的なリソース操作の共通化が可能になりました。

特にAWSリソースの管理にタグを活用しているシステムでは、嬉しいアップデートかと思われます。

Cloud Control API は90以上のサービスをサポートしますが、 2021年10月時点では、AWS::EC2::InstanceAWS::RDS::DBInstance など未サポートのリソースも存在します。

今後 のサポート対象の追加は期待できると思われますが、 Cloud Control APIを利用する場合、まず最新の公式ドキュメントで操作対象のリソースのサポート状況を確認する事をおすすめします。

Resource types that support Cloud Control API

Cloud Control API 対象サービス

2021年9月30日時点

  • Amazon API Gateway
  • Amazon AppFlow
  • Amazon Athena
  • Amazon CloudFront
  • Amazon CloudWatch
  • Amazon CodeGuru Profiler
  • Amazon CodeGuru Reviewer
  • Amazon Connect
  • Amazon Detective
  • Amazon DevOps Guru
  • Amazon DynamoDB
  • Amazon EC2
  • Amazon EC2 Auto Scaling
  • Amazon ECR
  • Amazon ECS
  • Amazon EFS
  • Amazon EKS
  • Amazon ElastiCache
  • Amazon EMR
  • Amazon EMR
  • Amazon EventBridge
  • Amazon FinSpace
  • Amazon Fraud Detector
  • Amazon GameLift
  • Amazon HealthLake
  • Amazon Interactive Video Service
  • Amazon Kendra
  • Amazon Keyspaces (for Apache Cassandra)
  • Amazon Kinesis
  • Amazon Kinesis Data Firehose
  • Amazon Location Service
  • Amazon Lookout for Equipment
  • Amazon Lookout for Metrics
  • Amazon Lookout for Vision
  • Amazon Macie
  • Amazon Managed Service for Prometheus
  • Amazon Managed Workflows for Apache Airflow (Amazon MWAA)
  • Amazon Nimble Studio
  • Amazon OpenSearch Service
  • Amazon QLDB
  • Amazon QuickSight
  • Amazon Redshift
  • Amazon Relational Database Service
  • Amazon Route 53
  • Amazon SageMaker
  • Amazon Simple Email Service
  • Amazon Simple Storage Service
  • Amazon Timestream
  • AWS Amplify
  • AWS App Runner
  • AWS Audit Manager
  • AWS Backup
  • AWS Billing and Cost Management
  • AWS Budgets
  • AWS Certificate Manager
  • AWS Chatbot
  • AWS CloudFormation
  • AWS CloudTrail
  • AWS CodeArtifact
  • AWS CodeStar
  • AWS Config
  • AWS DataSync
  • AWS Elemental MediaConnect
  • AWS Elemental MediaPackage
  • AWS Firewall Manager
  • AWS FIS
  • AWS Global Accelerator
  • AWS Glue
  • AWS Glue DataBrew
  • AWS Ground Station
  • AWS Identity and Access Management
  • AWS IoT Core
  • AWS IoT Events
  • AWS IoT Greengrass
  • AWS IoT SiteWise
  • AWS Key Management Service
  • AWS Lambda
  • AWS License Manager
  • AWS Network Firewall
  • AWS OpsWorks CM
  • AWS Resource Groups
  • AWS RoboMaker
  • AWS Service Catalog
  • AWS Signer
  • AWS Single Sign-On
  • AWS Step Functions
  • AWS Systems Manager
  • AWS WAF
  • AWS X-Ray
  • EC2 Image Builder
  • Elastic Load Balancing
  • Transit Gateway Network Manager