#amazon-web-services #powershell #yaml #amazon-cloudformation
#amazon-веб-сервисы #powershell #yaml #aws-cloudformation
Вопрос:
Вот в чем проблема: я работаю над сценарием формирования облака .yaml для AWS, цель состоит в том, чтобы развернуть сервер Windows 2016 / 2019 и выполнить некоторые команды в PowerShell, но ни одна из команд не выполняется.
Вот полный сценарий:
AWSTemplateFormatVersion: 2010-09-09
Description: |
Plantilla para desplegar una instancia EC2 de Windows Server en eu-west-1.
Parameters:
vpcId:
Description: VPC sobre la que se desplegara el servidor
Type: AWS::EC2::VPC::Id
subnetId:
Description: Listado de subredes disponibles
Type: AWS::EC2::Subnet::Id
apserSecurityGroupId:
Description: Debe llamarse SG-Apser y existir en la VPC seleccionada
Type: AWS::EC2::SecurityGroup::Id
serverType:
Description: Imagen (AMI) del servidor
Type: String
Default: 'WindowsServer2019'
AllowedValues: [WindowsServer2016, WindowsServer2019]
instanceSize:
Description: Tamano de la instancia EC2
Type: String
Default: 't3.large'
AllowedValues: [t3.large, t3.xlarge, t3.2xlarge, m5.large, m5.xlarge, m5.2xlarge]
volumeSize:
Description: Tamano (GiB) del volumen de la instancia
Type: Number
Default: 30
MinValue: 30
MaxValue: 1000
adminPassword:
Description: Contrasena para la cuenta de Administrador
Type: String
NoEcho: true
MinLength: 8
MaxLength: 20
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Label:
default: "Configuracion de Red"
Parameters:
- vpcId
- subnetId
- apserSecurityGroupId
-
Label:
default: "Configuracion del servidor"
Parameters:
- serverType
- instanceSize
- volumeSize
- adminPassword
ParameterLabels:
vpcId:
default: "VPC para despliegue"
subnetId:
default: "Subnet para despliegue"
apserSecurityGroupId:
default: "SecurityGroup de Apser"
serverType:
default: "Tipo de servidor (S.O.)"
instanceSize:
default: "Tamano de la instancia"
volumeSize:
default: "Tamano del volumen"
adminPassword:
default: "Contrasena de Administrador"
Mappings:
serverAMI:
WindowsServer2016:
value: "ami-059cafee566b7248c"
WindowsServer2019:
value: "ami-01925800085c95bea"
Resources:
server:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: !Ref instanceSize
ImageId: !FindInMap
- serverAMI
- !Ref serverType
- value
SubnetId: !Ref subnetId
BlockDeviceMappings:
- DeviceName: /dev/sda1
Ebs:
VolumeSize: !Ref volumeSize
Encrypted: true
CreditSpecification:
CPUCredits: standard
DisableApiTermination: false # DEBE SER SIEMPRE TRUE!
SecurityGroupIds:
- !GetAtt securityGroup.GroupId
- !Ref apserSecurityGroupId
IamInstanceProfile: apser-multirole
UserData:
'Fn::Base64': !Sub |
<powershell>
Rename-Computer -NewName ${AWS::StackName}
net user administrador ${adminPassword}
netsh advfirewall set allprofiles state off
Set-TimeZone -Id "Romance Standard Time" -PassThru
Invoke-WebRequest "https://apserbucket.s3-eu-west-1.amazonaws.com/Recursos/ESET-Windows.zip" -OutFile "C:UsersAdministradorDesktopESET.zip"
Expand-Archive -Path C:UsersAdministradorDesktopESET.zip -DestinationPath C:UsersAdministradorDesktop -Force
C:UsersAdministradorDesktopESMCAgentInstaller.bat
Get-ChildItem C:UsersAdministradorDesktop -File -Recurse | Foreach-Object {Remove-Item $_.FullName}
Restart-Computer -Force
</powershell>
Tags:
- Key: Name
Value: !Ref 'AWS::StackName'
- Key: Backup
Value: true
securityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Join
- ''
- - SG-
- !Ref 'AWS::StackName'
GroupDescription: 'Reglas especificas para este servidor'
VpcId:
Ref: vpcId
Tags:
- Key: Name
Value: !Join
- ''
- - SG-
- !Ref 'AWS::StackName'
elasticIP:
Type: 'AWS::EC2::EIP'
Properties:
InstanceId: !Ref server
Tags:
- Key: Name
Value: !Join
- ''
- - EIP-
- !Ref 'AWS::StackName'
Самое смешное, что этот скрипт работал отлично не так давно.
Комментарии:
1. Можете ли вы войти в инстанс и проверить файлы журналов?
2. Дело в том, что, поскольку сценарий PowerShell не выполняется (или в какой-то момент завершается сбоем), я не могу войти в систему с помощью диспетчера сеансов и каким-то образом (даже с открытым портом 3389) Я не могу выполнить RDP в экземпляре. Другими словами, я слепой. Кроме того, если создать сервер без начальной загрузки и скопировать-вставить команды в power shell, они работают просто отлично.
3. Вы можете просмотреть системный журнал через консоль AWS, а также получить снимок экрана экземпляра (щелкните правой кнопкой мыши на экземпляре в консоли EC2 и перейдите в настройки экземпляра). Может быть, это помогает?
Ответ №1:
В конце концов, я не смог выяснить, почему сценарий PowerShell не выполнялся из пользовательских данных. Решение состояло в том, чтобы загрузить этот скрипт в корзину S3 и загрузить его, а затем запустить из пользовательских данных.
Прошло два года, но я надеюсь, что это кому-то поможет.