質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

2445閲覧

AuroraDBのリストアでエラーになる。( [ERROR] Runtime.UserCodeSyntaxError: Syntax error )

koichi88

総合スコア10

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/14 08:24

編集2021/07/15 18:10

AuroraDBのリストアを自動化するためにスクリプトを作成しているのですが、エラーが発生し、詰まっているため、質問させていただきます。

https://dev.classmethod.jp/articles/aws-lambda-rds-restore/
上記をコピペし、AuroraDBリストアスクリプトを作成しました。
実行したところ、下記のエラーが発生しました。

[ERROR] DBSnapshotNotFoundFault: An error occurred (DBSnapshotNotFound) when calling the RestoreDBInstanceFromDBSnapshot operation: DBSnapshot not found: <snapshot名>

調査したところ、auroraは違うコマンドで実行するようで、コマンドを下記の記事の通り、修正しました。
https://qiita.com/paper2/items/48aeb92cea56428d524f

35 client.restore_db_instance_from_db_snapshot(                                ↓ 35 client.restore-db-cluster-from-snapshot(

渡すパラメータが一部違うので、下記の通り、追加と削除をしました。

DBClusterIdentifier #追加 DBClusterParameterGroup #追加      #DBInstanceIdentifier #削除

再度実行したところ、違うエラーに変わりました。

[ERROR] Runtime.UserCodeSyntaxError: Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 34) Traceback (most recent call last): File "/var/task/lambda_function.py" Line 34 client.restore-db-cluster-from-snapshot(

lambda内でのrestore-db-cluster-from-snapshotを利用する場合もclient.の後に追加する形で動作すると思っているのですが、何かご存知であれば、教えて頂きたいです。
(client.に関してはまだ理解できておりません。)

コード追記

import boto3 import logging import os import json logger = logging.getLogger() logger.setLevel(logging.INFO) client = boto3.client('rds') def lambda_handler(event, context): snapshot_id = os.environ.get('SNAPSHOT_ID') if not snapshot_id: logger.info('START get_snapshot_id') snapshot_id = get_snapshot_id() logger.info('END get_snapshot_id') if (snapshot_id is None): logger.info('not found snapshot') return logger.info('snapshot_id:' + snapshot_id) #if (not is_exist_instance()): logger.info('START restore') restore(snapshot_id) logger.info('END restore') logger.info('START call_modify_lambda') call_modify_lambda() logger.info('END call_modify_lambda') #else: # logger.info('exist instance') def restore(snapshot_id): logger.info('restore snapshot id:' + snapshot_id) client.restore-db-cluster-from-snapshot( AvailabilityZones=['ap-northeast-1a'], DBClusterIdentifier='xxxx-cluster', SnapshotIdentifier=snapshot_id, Engine='aurora-mysql', DBClusterParameterGroupName='paramgroup-XXX' ) def is_exist_instance(): db_instances = client.describe_db_instances(); target_instance = \ filter(lambda x : x['DBInstanceIdentifier'] == os.environ.get('INSTANCE_ID'), db_instances['DBInstances']) return len(target_instance) > 0 def get_snapshot_id(): snapshot_list = client.describe_db_snapshots( DBInstanceIdentifier=os.environ.get('INSTANCE_ID'), SnapshotType='manual', ) logger.info(snapshot_list) snapshot_id = \ snapshot_list['DBSnapshots'][0]['DBSnapshotIdentifier'] if len(snapshot_list['DBSnapshots']) > 0 else None return snapshot_id def call_modify_lambda(): params = {} params['instance_id'] = os.environ.get('INSTANCE_ID') params['retry_count'] = 0 params['modified_flag'] = False client_lambda = boto3.client('lambda') client_lambda.invoke( FunctionName='modify-rds', InvocationType='Event', Payload=json.dumps(params) )

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koichi88

2021/07/14 18:26

ありがとうございます。 上記のようなpythonのサンプルを探していたのですが、自分で検索した限り、検索キーワードがまずかったと思いますが、見当たらず。。 過不足がありそうなので、比較してみます。
koichi88

2021/07/15 18:12

コードを修正してみたりしたのですが、シンタックスエラーが解消しない状態です。。 https://extendsclass.com/python-tester.html 上記のサイトではシンタックスエラーはないことは確認済です。 コードを追記したので、何かご存知であれば、教えていただきたいです。
guest

回答3

0

ベストアンサー

コードの開示ありがとうございます。
やはり構文エラーだと思いましが・・
エラーメッセージ通り、lambda_function.py の34行目

python

1 client.restore-db-cluster-from-snapshot(

ハイフンが引き算記号のマイナスと判断されているのではないでしょうか?
正しいメソッド名は _ (アンダースコア、アンダーライン)でつなぐのでは?

python

1 client.restore_db_cluster_from_snapshot(

投稿2021/07/15 23:20

odataiki

総合スコア938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koichi88

2021/07/16 06:48

ありがとうございます。 ご指摘の通り、アンダーラインに修正したところ、解消しました!
guest

0

他の方が既に書いてくれていますが、構文エラーというとわかりにくいかもしれませんが、
lambda_functionにrestore-db-cluster-from-snapshot()というfunctionはないっていうエラーですね。
[ERROR] Runtime.UserCodeSyntaxError: Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 34)

リファレンスを見るとこうなっています。
restore_db_cluster_from_snapshot(**kwargs)

開発環境にAWSSDKが入っていればエラーが見えそうですが、入っていないのかな?

投稿2021/07/16 01:11

Noin

総合スコア188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問者さんの書いたコードを開示されていないとなんとも言えませんが・・・

Syntax(構文)エラーはこちらを参考に
https://blog.pyq.jp/entry/Python_kaiketsu_200310

例えば、Pythonは半角スペースやTabなどの段落の書き方が厳しいので
そのあたりではないでしょうか。
どちらにせよそのコードを(可能な範囲で)開示されるのは解決の近道と思います。

投稿2021/07/14 22:56

odataiki

総合スコア938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koichi88

2021/07/15 16:52

ありがとうございます。 確認してみます!
koichi88

2021/07/15 18:12

コードを修正してみたりしたのですが、シンタックスエラーが解消しない状態です。。 https://extendsclass.com/python-tester.html 上記のサイトではシンタックスエラーはないことは確認済です。 コードを追記したので、何かご存知であれば、教えていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問