Заметки

Реклама: Выгодные купоны на бесплатные вращения со скидками для наших друзей. Если терзает и болит копчик, что делать - отвечает врач кинезиолог со стажем.

Оглавление

17.05.2018
Servers - Отчет об объектах AWS

Для тех кто пользуется Amazon Web Services было бы полезным иметь инструмент для выгрузки списка используемых ресурсов в виде таблицы. Для решения этой задачи я написал скрипт на Powershell.

Для того, чтобы воспользоваться скриптом, нужно:
- Установить библиотеки AWS SDK for .NET, которые будут вызываться из скрипта PowerShell.
- Создать служебного пользователя в сервисе IAM консоли AWS.
- Назначить служебному пользователю права на чтение объектов EC2 и RDS (права описаны ниже).
- В скрипте PowerShell обозначить входные данные: номер аккаунта AWS, регион, учетные данные служебного пользователя.

Листинг скрипта для получения отчета по объектам EC2 и RDS из консоли AWS:

# AWS variables
$AWSAccountID = [your AWS account number]
$AWSRegion = [AWS region to report]
$AWSProfileAccessKey = "service user access key"
$AWSProfileSecretKey = "service user secret key"

# Registering AWS libraries
Add-Type -Path "C:\Program Files (x86)\AWS SDK for .NET\bin\Net45\AWSSDK.Core.dll"

Function Write-ScriptLog {
  Param(
    [CmdletBinding()] 
    [Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
    [String]$Message,
    [Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
    [String]$LogFile
  )
  Process {
    $LogMessage = Get-Date -uformat "%d.%m.%Y %H:%M:%S"
    $LogMessage += "`t"
    $LogMessage += $Message
    $LogMessage | Out-File -FilePath $LogFile -Append
  }
}#End Function

# --- Start ---

# Calculating variables
$CurrentDate = Get-Date
$ScriptFolder = $MyInvocation.MyCommand.Path.SubString(0,($MyInvocation.MyCommand.Path.Length - $MyInvocation.MyCommand.Name.Length))

# Reset report
$EC2Report = @()
$RDSReport = @()

# Get list of VPCs
$VPCs = Get-EC2Vpc -Region $AWSRegion -AccessKey $AWSProfileAccessKey -SecretKey $AWSProfileSecretKey

# Get list of instances
$EC2Instances = (Get-EC2Instance -Region $AWSRegion -AccessKey $AWSProfileAccessKey -SecretKey $AWSProfileSecretKey).Instances

# Create the report per VPC
ForEach ($VPC in $VPCs) {
  $EC2Instances | Where-Object {$_.VpcId -eq $VPC.VpcId} | ForEach {
    $EC2InstanceProperties = New-Object -TypeName PSObject -Property @{
      'VPC-Id' = $_.VpcId
      'VPC-Name' = ($VPC.Tags | Where-Object {$_.Key -eq 'Name'}).Value
      'Instance-Id' = $_.InstanceId
      'Instance-Name' = ($_.Tags | Where-Object {$_.Key -eq 'Name'}).Value
      'Instance-LaunchTime' = $_.LaunchTime
      'Instance-Type' = $_.InstanceType
      'Instance-PrivateIpAddress' = $_.PrivateIpAddress
      'Instance-State' = $_.State.Name
      'Instance-Key' = $_.KeyName
      'Instance-Description' = ($_.Tags | Where-Object {$_.Key -eq 'Description'}).Value
      'Instance-Project' = ($_.Tags | Where-Object {$_.Key -eq 'Project code'}).Value
      'Instance-ProjectName' = ($_.Tags | Where-Object {$_.Key -eq 'Project name'}).Value
      'Instance-Responsible' = ($_.Tags | Where-Object {$_.Key -eq 'Responsible'}).Value
      'Instance-Platform' = $_.Platform
    }
    $EC2Report += $EC2InstanceProperties
  }
}

$EC2Report | Select 'Instance-Name', 'Instance-Description', 'Instance-Project', 'Instance-Id', 'Instance-Platform', 'Instance-Type', `
  'VPC-Name', 'VPC-Id', 'Instance-PrivateIpAddress', 'Instance-LaunchTime', 'Instance-State', 'Instance-ProjectName', 'Instance-Key', `
  'Instance-Responsible' | Sort -Property ('VPC-Name', 'Instance-Name') | Export-Csv -Path ($ScriptFolder + 'AWS-EC2Instances.csv') `
  -Encoding UTF8 -NoTypeInformation


$RDSInstances = Get-RDSDBInstance -Region $AWSRegion -AccessKey $AWSProfileAccessKey -SecretKey $AWSProfileSecretKey

ForEach ($VPC in $VPCs) {
  $RDSInstances | Where-Object {$_.DBSubnetGroup.VpcId -eq $VPC.VpcId} | ForEach {
    $RDSInstanceTags = Get-RDSTagForResource -ResourceName $_.DBInstanceArn -Region $AWSRegion -AccessKey $AWSProfileAccessKey `
      -SecretKey $AWSProfileSecretKey
    $RDSInstanceProperties = New-Object -TypeName PSObject -Property @{
      'VPC-Id' = $_.DBSubnetGroup.VpcId
      'VPC-Name' = ($VPC.Tags | Where-Object {$_.Key -eq 'Name'}).Value
      'Instance-Name' = $_.DBInstanceIdentifier
      'Instance-EndPoint' = $_.Endpoint.Address
      'Instance-CreateTime' = $_.InstanceCreateTime
      'Instance-Type' = $_.DBInstanceClass
      'Instance-StorageSize' = $_.AllocatedStorage
      'Instance-AvailabilityZone' = $_.AvailabilityZone
      'Instance-State' = $_.DBInstanceStatus
      'Instance-Platform' = $_.Engine
      'Instance-IOps' = $_.Iops
      'Instance-Description' = ($RDSInstanceTags | Where-Object {$_.Key -eq 'Description'}).Value
      'Instance-Project' = ($RDSInstanceTags | Where-Object {$_.Key -eq 'Project code'}).Value
      'Instance-ProjectName' = ($RDSInstanceTags | Where-Object {$_.Key -eq 'Project name'}).Value
      'Instance-Responsible' = ($RDSInstanceTagss | Where-Object {$_.Key -eq 'Responsible'}).Value
    }
    $RDSReport += $RDSInstanceProperties
  }
}

$RDSReport | Select 'Instance-Name', 'Instance-Description', 'Instance-Project', 'Instance-IOps', 'Instance-Platform', 'Instance-Type', `
  'VPC-Name', 'VPC-Id', 'Instance-EndPoint', 'Instance-CreateTime', 'Instance-State', 'Instance-ProjectName', 'Instance-StorageSize', `
  'Instance-AvailabilityZone', 'Instance-Responsible' | Sort -Property ('VPC-Name', 'Instance-Name') | `
  Export-Csv -Path ($ScriptFolder + 'AWS-RDSInstances.csv') -Encoding UTF8 -NoTypeInformation

(Get-RDSTagForResource -ResourceName $RDSInstances[1].DBInstanceArn -Region $AWSRegion -AccessKey $AWSProfileAccessKey `
  -SecretKey $AWSProfileSecretKey).Key['Projectcode']
  
# --- Stop---
 

 Листинг прав IAM для служебного пользователя, который используется для выгрузки данных из консоли AWS:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeTags",
                "ec2:DescribeRegions",
                "ec2:DescribeSnapshots",
                "ec2:StopInstances",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVolumeAttribute",
                "ec2:DescribeImages",
                "ec2:StartInstances",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeVpcs",
                "ec2:DescribeVolumes",
                "ec2:DescribeSubnets",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeInstanceStatus",
                "rds:ListTagsForResource",
                "rds:DescribeDBInstances"
            ],
            "Resource": "*"
        }
    ]
}
Примечание. Здесь для служебного пользователя выданы дополнительные полномочия, чтобы этот пользователь имел возможность перезагружать серверы EC2. Эта опция используется в другом скрипте, предназначенном для быстрого управления серверами без входа в консоль AWS.

Пример отчета по серверам EC2 - файл AWS-EC2Instances.csv

"Instance-Name","Instance-Description","Instance-Project","Instance-Id","Instance-Platform","Instance-Type","VPC-Name","VPC-Id",
  "Instance-PrivateIpAddress","Instance-LaunchTime","Instance-State","Instance-ProjectName","Instance-Key","Instance-Responsible"
"SERVER1","AWS TEST server","INF","i-08993683117971400",,"t2.xlarge","vpc-i-TST","vpc-43a84000",
  "192.168.1.12","09.05.2018 13:29:59","running",,,"Ivanov Vladimir"

Пример отчета по базам данным RDS - файл AWS-RDSInstances.csv

"Instance-Name","Instance-Description","Instance-Project","Instance-IOps","Instance-Platform","Instance-Type","VPC-Name","VPC-Id",
  "Instance-EndPoint","Instance-CreateTime","Instance-State","Instance-ProjectName","Instance-StorageSize","Instance-AvailabilityZone",
  "Instance-Responsible"
"dbs-i-tst",,,"0","postgres","db.t2.large","vpc-i-TST","vpc-43a84000",
  "dbs-i-tst.ctpuy7pji400.eu-west-1.rds.amazonaws.com","27.04.2018 16:44:14","available",,"250","eu-west-1a",
  
Пример отчета в Excel
Пример отчета об объектах AWS, сконвертированный в Excel
 

06.05.2018
Быт - Синхронизация контактов LG G360 с компьютером

Внимание! Данная заметка отражает личное мнение автора, сформированное по отзывам реальных пользователей мобильных телефонов. Автор самостоятельно не тестировал большинство телефонов, упомянутых в заметке, а использовал обзоры/рекомендации/жалобы других пользователей, которые они оставили в интернете преимущественно на сайтах 4pda.ru, market.yandex.ru, otzovik.com и irecommend.ru.

У моей мамы телефон Nokia C2-01 производства еще той самой Нокии, когда компания еще была финской. У телефона от старости стали стираться кнопки, а динамик и микрофон забились пылью и стало плохо слышно собеседников, а собеседники в свою очередь стали плохо разбирать слова мамы.

Я задался целью найти аналогичный телефон и определил следующие критерии для поиска:
1. Кнопочный телефон.
2. Большой экран и большой шрифт.
3. Удобная телефонная книга с возможностью сохранять несколько номеров на один контакт.
4. Возможность импортировать телефонную книгу с компьютера и экспортировать её обратно.
5. Хорошее качество сборки.

Первым делом я обратил внимание на разрекламированный телефон Nokia 3310 New. Изучив обзоры и отзывы об этом телефоне, я понял, что это совсем не тот телефон, который мне нужен, потому что:
- В телефоне неудобная телефонная книга: один контакт - один номер;
- Нет программы для синхронизации контактов с компьютером;
- Использован дешевый пластик корпуса, который легко царапается;
- Слабая батарея и большое энергопотребление.

В дополнение ко всему этому я прошелся по отзывам на другие современные телефоны Nokia и решил отказаться от этой марки совсем.

Далее я обратил свое внимание на китайские телефоны и их локализованные производные: Alcatel, BQ, Lexand, Maxvi, Micromax, Senseit,Texet, Vertex, Zte. Все эти телефоны объединяет один большой недостаток - прошивка. Такое ощущение, что её писали студенты, причем ядро они взяли одно и то же, а потом для каждой модели поменяли только цветовую гамму и некоторые пункты меню. Так как ядро у всех телефонов одно, то все телефоны имеют ужасную телефонную книгу и невозможность синхронизации с компьютером. Так же их всех объединяет посредственное качество сборки и комплектующих.

Лично у меня есть подменный телефон Alcatel 1013D, которым я иногда пользуюсь в командировках. Этот телефон меня бесит: телефонная книга ужасна, СМС набирать одно мучение, блокировка снимается одной клавишей, поэтому телефон может запросто разблокироваться в сумке и названивать кому-нибудь, что очень неприятно в роуминге.

Итак, когда все китайские телефоны и их производные исключены из выбора, как бесполезный хлам, у меня в списке выбора остались только две солидные фирмы, которые до сих пор производят кнопочные телефоны: Philips и LG. Для сравнения я выбрал Philips Xenium E570 и LG G360.

Оба телефона имеют достаточно хорошие отзывы пользователей. Уровень цен на эти телефоны цены почти одинаковый: от 4000 до 5000 рублей в зависимости от магазина. ?У обоих телефонов близкие технические характеристики, но:
- у Philips E570 в 3.3 раза больше емкость аккумулятора;
- Philips E570? моноблок, а LG G360 раскладушка;
- производитель LG G360 заявляет, что телефон можно синхронизировать с компьютером, у Philips E570 такой опции нет.

Именно последняя разница в характеристиках склонила мой выбор в пользу LG G360.

После покупки телефона LG G360 выяснилось, что программа синхронизации LG PC Suite IV, представленная на официальном сайте производителя не подходит для этой модели телефона - она не видит телефон ни по USB кабелю, ни по Bluetooth. Предыдущая версия этой программы LG PC Suite III так же не распознает телефон.

Изучив множество форумов по синхронизации кнопочных телефонов с компьютером, я нашел универсальную программу для всех телефонов Mobiledit. Эта программа смогла подключиться к телефону по Bluetooth и считать телефонную книгу и СМСб, но она не смогла загрузить телефонную книгу в аппарат - то есть функционал софта не полностью решает мою задачу.

Я решил пройтись по официальному сайту компании LG, чтобы найти программы синхронизации для кнопочных телефонов, снятых с производства. Проверив множество телефонов из архива я наткнулся на телефон LG A290, для которого предлагалась маленькая программка для синхронизации с компьютером PC Sync, которая так же подошла к телефону LG G360.

Чтобы синхронизировать телефон LG G360 с компьютером, сначала нужно установить три драйвера: USB контроллера, USB модема и COM порта. Все эти устройства появятся в диспетчере устройств после подключения кабеля между компьютером и телефоном. Устройства появятся со знаком вопроса или как стандартные (без функционала LG)  - необходимо найти такие неопознанные устройства и заменить драйвера для них на драйвера, приложенные к этой заметке.

После того, как компьютер распознал телефон, можно запускать Phone Suite и настраивать его на синхронизацию с телефоном. В настройках программы нужно выбрать COM порт, к которому подключился телефон, а тип мобильного телефона оставить как LG-A290.

После того, как синхронизация настроена, можно загрузить адресную книгу телефона на компьютер.

Во время передачи данных между телефоном и компьютером можно видеть ход выполнения синхронизации.

 Чтобы импортировать контакты из CSV-файла в программу, можно воспользоваться функцией импорта. CSV-файл должен быть в специальном формате, шаблон которого приложен к этой заметке.

 

К заметке прикреплен архив, в котором содержатся:
- Драйвер для телефона для операционной системы Windows - USB driver;
- Программа обновления прошивки телефона (не потребуется) - Support tool;
- Программа для по для синхронизации телефона с компьютером - Phone Suite;
- Пример контактов в CSV-файле для импорта в программу синхронизации, а затем в телефон.

 

Программы для подключения телефона LG G360 к компьютеру
 

 

Вверх