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