AWS CLI aracılığıyla EC2 örneğinde bir komut dosyası veya komut nasıl çalıştırılır?


13

Göre Yeni EC2 Çalıştır komut haber makalesi, AWS CLI uzak EC2 örneklerinde komut dosyalarını yürütmek için yeni bir alt komutunu desteklemelidir.

Ancak check-in aws ec2 helpyaptım, ancak ilgili komutu bulamıyorum.

Ben yükledim awsyoluyla apt-get:

$ aws --version
aws-cli/1.14.32 Python/3.5.4 Linux/4.12.7-64 botocore/1.8.36

Hangi alt komut Ben bakmak gerekir ve izin söz çalıştırmak için sözdizimi ne ipconfigde PowerShell uzak EC2 örneğinde?


1
Bu makalenin 2015 yılına ait olması nedeniyle "yeni" bir alt komut demem. Aws -cli için kaynak kodu deposunu ( github.com/aws/aws-cli ) kontrol ettim ve belgelerde, örneklerde, sürüm notlarında veya kısaca kod aracılığıyla bakarak herhangi bir söz bulamadım . Bir sorun bildirdim ( github.com/aws/aws-cli/issues/3126 ) ve geri bildirim aldığımda bir yanıt göndereceğim.
PrestonM

Yanıtlar:


11

İpconfig dosyasını AWS Systems Manager Çalıştırma Komutundan çalıştırmak için:

$ aws ssm send-command --document-name "AWS-RunPowerShellScript" --instance-ids "<your instance id>" --parameters commands=ipconfig

Not: Hatayla karşılaşırsanız, doğru belirtmeyi düşünün --region.

Bu, AWS kimlik bilgilerinizin ve CLI'nizin doğru yapılandırıldığını varsayar. Daha fazla bilgi için bkz. Systems Manager AWS CLI Kullanarak Komutu İzleyecek Adım'ı Çalıştırma .


Komut çıktısını göndermek ve almak için pratik kabuk komut örneği:

cmdid=$(aws ssm send-command --instance-ids "i-ch3ng3th1s" --document-name "AWS-RunPowerShellScript" --parameters commands=ipconfig --query "Command.CommandId" --output text)
aws ssm list-command-invocations --command-id "$cmdid" --details --query "CommandInvocations[*].CommandPlugins[*].Output[]" --output text

3

aws ssm send-commandKomutları çalıştırmak için kullanılan yardımcı Bash betiği :

#/usr/bin/env bash -x
# Script to run PowerShell script on the Windows instance.
instanceId="$1"
cmdId=$(aws ssm send-command --instance-ids "$instanceId" --document-name "AWS-RunPowerShellScript" --query "Command.CommandId" --output text --parameters commands="'${@:2}'")
[ $? -ne 0 ] && { echo "Usage: $0 instance_id command"; exit 1; }
while [ "$(aws ssm list-command-invocations --command-id "$cmdId" --query "CommandInvocations[].Status" --output text)" == "InProgress" ]; do sleep 1; done
aws ssm list-command-invocations --command-id "$cmdId" --details --query "CommandInvocations[*].CommandPlugins[*].Output[]" --output text

Kullanımı:

 ./run_ec2_ps_cmd.sh instance-id command

Misal:

$ ./run_ec2_ps_cmd.sh i-xyz hostname
ip-xyz

Daha büyük çıkışları yürütmek için, bkz: AWS SSM komutunu çalıştırırken çıktının kesilmesini nasıl önleyebilirim?


Aslında burada en iyi örnek. Daha fazla oy, lütfen.
Sanctus

3

Evet, bunu AWS Systems yöneticisi ile yapabilirsiniz. AWS Systems Manager Çalıştır Komutu, şirket içi sunucuda olduğu gibi EC2'de de komut kümesini uzaktan ve güvenli bir şekilde çalıştırmanızı sağlar. Aşağıda bunu başarmak için üst düzey adımlar verilmiştir.

Örnek IAM rolü ekle: ec2 örneğinin, AmazonSSMFullAccess ilkesiyle IAM rolü olması gerekir. Bu rol, örneğin Systems Manager API'sı ile iletişim kurmasını sağlar.

SSM Agent'ı Yükleme: EC2 örneğinde SSM aracısı yüklü olmalıdır. SSM Agent, run komutu isteklerini işler ve örneği komuta göre yapılandırır.

Yürütme komutu: AWS CLI üzerinden örnek kullanım:

Örnekte çalışan hizmetleri almak için aşağıdaki komutu yürütün. Örnek Kimliğini ec2 yönetim ortamı kimliğiyle değiştirin.

aws ssm send-command --document-name "AWS-RunShellScript" --comment "listing services" --instance-ids "Instance-ID" --parameters commands="service --status-all" --region us-west-2 --output text

Daha ayrıntılı bilgi: burada


3

İşte AWS SSM Send-Command ile yaptığım süper havalı bir şey!

Apache Airflow'u kullanarak, istediğim EC2-Instance için tüm yapılandırma değerlerini içeren bir JSON dosyası olan bir Bulut Oluşum Şablonu (veya kısaca CFT) kullanarak yepyeni bir EC2-Instance oluşturuyorum; ayrıca bu CFT'de bir Python komut dosyasını bir S3 konumundan yeni EC2 örneğine kopyalayan bir bootstrap komutuna sahip olduğumu ve böylece daha sonra bir SSM Gönderme Komutu kullanarak çalıştırabileceğimi unutmayın! Bunu Python3 ve Boto3 kütüphanesi olarak adlandırılan Python3 için AWS SDK kullanarak yaparım. İşte yeni EC2 örneğimi oluşturan yeni CFT Yığını oluşturma komutunun bir parçası:

import boto3

cft = boto3.client("cloudformation", "us-east-1")

response = cft.create_stack(
    StackName='foobarStackName',
    TemplateBody=json.dumps(json_data))

Sonra böyle bir şey kullanarak yeni EC2-Instance (SSM Gönderme-Komutu kullanmak için gerekli) Instance-ID alabilirsiniz:

response = cft.describe_stacks(
    StackName='foobarStackName',
)

Sonra bu komutu wget -q -O - http://169.254.169.254/latest/meta-data/instance-idPython aracılığıyla çalıştırarak mevcut Hava Akışı İşçisinin sunucusunun EC2 Örneğinin Örnek Kimliğini alabilirim :

output = subprocess.Popen(['wget', '-q', '-O', '-', 'http://169.254.169.254/latest/meta-data/instance-id'],
                          stdout=subprocess.PIPE)

# Do some weird stuff to get the value (I'm a Java developer so excuse my bad Python skilz)
instanceId = output.communicate()    
instanceId = str(instanceId).split("'")[1]

ŞİMDİ !!!! BÜYÜK FİNAL İÇİN

Daha sonra oluşturduğum yeni EC2 Örneği üzerinde bir komut dosyası yürütebilirim ve komut dosyasını istediğim parametreler / bağımsız değişkenler gönderebilirim ... komut dosyası tamamlandığında SSM Gönderme Komutu gönderen sunucunun Örnek Kimliği dahil yeni EC2 Örneği üzerinde çalıştığında, komut dosyasının bittiğini söylemek üzere Airflow sunucuma başka bir SSM Gönderme Komutu gönderebilir. Bu ayrıntılar olmadan çok yüksek bir seviyede ancak sadece bir fikir göstermek için :)

subprocess.run(shlex.split('sudo aws ssm send-command --document-name "AWS-RunShellScript" --parameters commands=["sudo python3 /home/ec2-user/ec2_file_sensor.py ' + filepath + ' ' + batchIdValue + ' ' + source + ' ' + fileType + ' ' + airflowWorkerInstanceId + '"] --instance-ids ' + ec2ResourceInstanceId + ' --region us-east-1'))

Bunun kimseye yardımcı olup olmadığından emin değilim ama AWS SSM Send-Command ile bir şeyler yapmanın harika ve EĞLENCE örneği! Gerçi, muhtemelen bir kod kokusu xD

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.