Lambdaを使って、S3にアップロードしたファイルをEC2(Windows)に自動転送したい。

0

Lambdaを使ってS3にアップロードされたファイルを自動的にEC2(Windows)に転送したいです。 そのため、私は下記のように設定しました: ・Lambda(Python)を起動させるトリガーとして、s3:ObjectCreated:* を設定。 ・windows server 2022を起動し、IAMロールをAdministratorAccessに設定。 ・LambdaのIAMロールをAdministratorAccessに設定。

しかしながら、Python3.7で下記を実行し、S3にファイルを格納したところ、cloudwatchで見る限りエラー無く起動できるのですが、ファイルがEC2に転送されません。 アドバイスをお願いいたします。

import logging
import boto3

LOGGER = logging.getLogger()
LOGGER.setLevel(logging.INFO)
ec2 = boto3.client('ec2')
ssm = boto3.client('ssm')
INSTANCE_ID = 'i-***'

def lambda_handler(event, context):
    try:
		#Get EC2 State
        ec2_resp = ec2.describe_instances(InstanceIds=[INSTANCE_ID]),
        ec2_state = ec2_resp['Reservations'][0]['Instances'][0]['State']['Name']
        if not ec2_state == 'running':
            LOGGER.info('No EC2 is running')
            return "END"
		# RunPowerShellScript
        command = r'aws s3 sync s3://***/ C:/Users/Administrator/Desktop/***/'
        ssm.send_command(
            InstanceIds=[INSTANCE_ID],
            DocumentName='AWS-RunPowerShellScript',
            Parameters={
                'commands':[command],
                'executionTimeout':['3600']
            },
        )
    
    except Exception as error:
        LOGGER.error(error)
        raise error
1回答
0

コードを見ると途中でRuncommandを実行されていますが、これの実行ログとか確認可能でしょうか?
ログはマネジメントコンソールから確認可能なはずなので以下のブログを参考に確認してみてください。 https://dev.classmethod.jp/articles/run-command-enables-log-downloads-from-ssmconsole/

私も過去に似たようなコードを作成したことがあります。(Linuxですが...)
もしかしたら参考になるかもしれません。
https://dev.classmethod.jp/articles/lambda-to-run-systems-manager-run-command/

profile picture
エキスパート
回答済み 8ヶ月前
  • ご確認くださりありがとうございます。 マネジメントコンソールからRunCommandのコマンド履歴を見たのですが、表示されていない状態です(コードを実行するとマネジメントコンソール上でも見られると思うのですが、、)。

  • RunCommandが実行されていない可能性があります。 CloudTrailにRunCommandの実行履歴が残っていますか?

  • 回答が遅くなりすみません。 CloudTrailを確認したところ、 CreateLogStream UpdateInstanceInformation のみとなっており、SSM エージェントには到達しているみたいですが、RunCommandが起動しているようには見えませんでした(RunCommandが実行出来ればRunCommandのコンソール上に実行履歴が表示されると思うため)。 また、Lambdaの実行結果をCloudWatchで見たところ、特にエラーは発生せずに同じコマンドを繰り返し実行しているようでした。 共有いただいたリンクを参考にさせていただきますが、現状不足している情報があればご指摘いただけますと幸いです。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン