API Nifty Cloud facile à utiliser avec botocore et python

Cet article est l'article du 12ème jour du Calendrier de l'Avent NIFTY 2016.

Hier, il y avait un article de @ alice02 Une histoire sur une session d'étude Ruby parmi les nouveaux employés. J'étais content que mon nom soit un peu mentionné.

Je suis @umiiiiins, apprenti ingénieur pour la première année des diplômés de Nifty. J'ai récemment été affecté à un service et j'ai eu l'opportunité d'accéder à l'API Nifty Cloud, alors j'aimerais parler de la possibilité d'utiliser facilement une API Nifty Cloud très basique avec python.

API Nifty Cloud

Nifty Cloud fournit diverses fonctions en tant qu'API. Il existe 1 à 4 versions de signature nécessaires pour envoyer une demande, et les signatures disponibles varient en fonction du service. Cette fois, nous utiliserons l'API Nifty Cloud Script et la version 4 de la signature comme exemple.

Qu'est-ce que le botocore

Une interface de bas niveau pour AWS, actuellement utilisée dans l'AWS CLI et boto3. Étant donné que la signature de l'API Nifty Cloud est générée de la même manière qu'AWS, vous pouvez utiliser botocore. Si vous êtes intéressé, veuillez vérifier le code source dans le référentiel botocore.

Préparation

Installez Python (j'utilise 3.5.2 cette fois) Exécutez Démarrage rapide De Nifty Cloud Script. Enregistrez la clé d'accès et la clé secrète obtenues à partir de la partie à cadre rouge de l'image en tant que ACCESS_KEY_ID et SECRET_ACCESS_KEY dans les variables d'environnement. [Panneau de configuration]Capture.JPG

Maintenant, je voudrais exécuter le script.

Essayez en fait

Tout d'abord, définissez l'URL de requête, l'en-tête et les paramètres requis en vous référant à la Référence API de script.

script_api.py


url = "https://script.api.cloud.nifty.com/2015-09-01" 
headers = {
    'X-Amz-Target': '2015-09-01.ExecuteScript',
}
params = {
    'ScriptIdentifier': 'test.js',
    'Method': 'GET',
    'Header': '{}',
    'Body': '{}',
    'Query': '{"name":"Umino"}',
}

Ensuite, utilisez botocore pour générer et demander des signatures. À ce stade, assurez-vous que la méthode de l'argument AWS Request est correcte.

script_api.py


credentials = Credentials(os.environ["ACCESS_KEY_ID"],os.environ["SECRET_ACCESS_KEY"])
request = AWSRequest(method="POST",url=url,data=params,headers=headers)
SigV4Auth(credentials, "ExecuteScript",'east-1').add_auth(request)
response = BotocoreHTTPSession().send(request.prepare())

Importez ce dont vous avez besoin et lancez le programme ci-dessus ...

<?xml version='1.0' encoding='utf-8'?>
<executescriptresponse>
    <requestid>
        9b195209-c025-4522-8e6a-9840324f3fb6
    </requestid>
    <executescriptresult>
        <result>
            <responsestatus>
                200
            </responsestatus>
            <scriptidentifier>
                test.js
            </scriptidentifier>
            <requestquery>
                <![CDATA[{"name":"Umino"}]]>
            </requestquery>
            <requestbody>
                <![CDATA[{}]]>
            </requestbody>
            <responseheader>
                <![CDATA[{"Content-Type":"text/plain"}]]>
            </responseheader>
            <requestheader>
                <![CDATA[{}]]>
            </requestheader>
            <responsedata>
                <![CDATA[Umino]]>
            </responsedata>
            <status>
                200
            </status>
        </result>
    </executescriptresult>
</executescriptresponse>

Cela a réussi et les résultats ont été renvoyés. Veuillez consulter le script à ici.

Un petit commentaire

Cette fois, Signature est générée par diverses méthodes appelées dans addAuth de la classe SigV4Auth. En plus de SigV4Auth, il existe AigV2Auth qui génère la version 2 de la signature, vous pouvez donc facilement générer des signatures d'utilisation avec l'API Nifty Cloud en les utilisant. Si vous essayez de comparer l'intérieur de l'en-tête avant et après l'exécution de SigV4Auth, vous pouvez voir que l'autorisation est ajoutée après l'exécution.

Avant la génération de signature

{
 'X-Amz-Target': '2015-09-01.ExecuteScript',
}

Après la génération de signature

{
 'X-Amz-Target': '2015-09-01.ExecuteScript',
 'X-Amz-Date': '20161211T090451Z',
 'Authorization': 'AWS4-HMAC-SHA256 
               Credential=OOICPHKDBZZE9ZNGEBV7/20161211/east-1/ExecuteScript/aws4_request, 
               SignedHeaders=content-type;host;x-amz-date;x-amz-target,
               Signature=ffddxxxxxxxxxxxxxxxxxxxxxxxxxxxxd4',
}

De plus, lorsque j'essaie d'exécuter des instances de description du serveur à l'aide de SigV2Auth, la signature générée est ajoutée au paramètre après l'exécution.

Avant la génération de signature

{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
 'Action': 'DescribeInstances', 'SignatureVersion': '2', 
 'Timestamp': '2016-12-11T18:28:03Z', 'SignatureMethod': 'HmacSHA256'
}

Après la génération de signature

{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
 'Action': 'DescribeInstances', 'SignatureVersion': '2', 
 'Timestamp': '2016-12-11T09:28:03Z', 'SignatureMethod': 'HmacSHA256',
 'Signature': 'FydxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqRc='
}

Résumé

Cette fois, à titre d'exemple d'utilisation de botocore, j'ai donné un script qui peut rarement être frappé depuis python, mais bien sûr, il peut également être utilisé pour des services autres que des scripts. En ce qui concerne la version 4 de la signature, il est assez difficile de l'implémenter par vous-même, alors veuillez vous y référer si vous rencontrez des problèmes avec l'API Nifty Cloud de python.

Demain, c'est "Gérer les informations de configuration d'Ansible avec Graph DB" par @ntoofu!

Recommended Posts

API Nifty Cloud facile à utiliser avec botocore et python
[AWS] [GCP] J'ai essayé de rendre les services cloud faciles à utiliser avec Python
Utiliser l'API Trello avec python
Utiliser l'API Twitter avec Python
Utiliser l'API subsonique avec python3
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Python: comment utiliser async avec
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
Comment utiliser l'API Python d'OpenPose
Bloc-notes Jupyter facile à utiliser (Python3.5)
[Python] Comment utiliser l'API Typetalk
Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python
[Version septembre 2020] Explique la procédure d'utilisation de l'API Gmail avec Python
Exemple à utiliser après l'authentification OAuth de l'API BOX avec Python
Comment installer et utiliser pandas_datareader [Python]
Fractal pour faire et jouer avec Python
[Introduction à Python] Utilisons foreach avec Python
Utilisez PIL ou Pillow avec Cygwin Python
Un moyen simple d'utiliser Wikipedia avec Python
Utiliser l'API Google Cloud Vision de Python
python: Comment utiliser les locals () et globals ()
Comment utiliser le zip Python et énumérer
Comment utiliser l'API Cloud Vision de GCP
Facile! Utilisez gensim et word2vec avec MAMP.
Scraping Web facile avec Python et Ruby
Comment utiliser is et == en Python
Utiliser Python et MeCab avec Azure Functions
Défi pour créer un rapport de liste de l'axe des temps avec l'API Toggl et Python
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
Je veux utiliser MATLAB feval avec python
Firebase: utilisez Cloud Firestore et Cloud Storage depuis Python
Un moyen simple d'utiliser Python 2.7 sur Cent OS 6
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
Extraction de texte avec l'API GCP Cloud Vision (Python3.6)
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Comment utiliser l'API Google Cloud Translation
Le moyen le plus simple d'utiliser OpenCV avec python
Je souhaite utiliser le répertoire temporaire avec Python2
Comment utiliser tkinter avec python dans pyenv
[Python] Comment utiliser la fonction de hachage et taple.
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Utiliser Python et word2vec (appris) avec Azure Databricks
Utilisez Python / Django avec Windows Azure Cloud Service!
[Python] Mention à plusieurs personnes avec l'API de Slack
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
[Python] Utiliser JSON avec Python
Flacon facile à utiliser
Utiliser mecab avec Python 3
Utiliser DynamoDB avec Python
Utilisez Python 3.8 avec Anaconda
Utiliser python avec docker
Facile à utiliser SQLite3
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-