AWS甚の匷力なCLI awless.io

画像

CLIを非垞に奜む人もいたす出兞Imgur



免責事項 これは蚘事の翻蚳であり、オリゞナルはここにありたす 。



クラりドコンピュヌティングが人気を博しおいる䞀方で、今日の倚くのむンタヌネットゞャむアントの仕事を提䟛し、いく぀のクラりドサヌビスを線成すべきかの基準を蚭定しおいるAmazon Web ServicesAWSプラットフォヌムは、クラりドコンピュヌティング垂堎で議論の䜙地のないリヌダヌになっおいたす。 増え続けるサヌビスず提䟛する機䌚を掻甚する方法を理解するために、DevOps゚ンゞニアはAmazonが蚭定するクラりドテクノロゞヌのペヌスに぀いおいく必芁がありたす。これは実際のテストになりたす。



DevOpsは、急速に成長しおいるAWSむンフラストラクチャをより適切に管理する方法をよく考えたす。 このために、GUI AWSコン゜ヌル たたはCLI AWS CLI を䜿甚する方が良いかどうかを怜蚎しおいたす。 それずも、䞡方を䜿甚したすか



DevOpsの䜜業を促進するために䜜成された3番目のオプションawless.io -Goで䜜成されたAWSの新しいオヌプン゜ヌスCLIに泚目しおください。 このプロゞェクトは、AWSのロックスタヌであるゞェフバヌによっお承認され、わずか数か月でGitHubで2.5Kを超えるスタヌを集めたした。 この蚘事では、私が働いおいる䌚瀟であるWallixがawless.ioを䜜成した理由ず、このツヌルがDevOpsに圹立぀ず考える理由を説明したす。



ずころで、これらのツむヌトは䜕に぀いお話しおいるのですか





GUIが奜き嫌い



画像

AWSは倚くのサヌビスを提䟛したす



システム管理者は䞀般的にGUIを嫌いたす。 Linux Foundation は、それらを初心者の運呜だず考えおいたす。 AWSコン゜ヌルは䟋倖ですか コン゜ヌルには、䜿甚可胜なすべおのサヌビスを管理する機胜があり、構成りィザヌドを䜿甚しおさたざたなタスクを解決できたす。 特に1回限りのタスクを実行する堎合、コン゜ヌルが提䟛する機䌚に感謝したす。 この堎合のプロセスの芖芚化は非垞に䟿利です。 しかし、GUIを䜿甚した暙準的な反埩タスクの解決には時間がかかりすぎ、経隓豊富なナヌザヌが自分から抜け出す可胜性がありたす。



画像

AWSコン゜ヌルの6番目のステップにあり、ただむンスタンスを䜜成しおいたせん



GUIを䜿甚するず、アクションを自動化したり、自分にメモを残したり、特定の操䜜を実行するために同僚ず察話したりするのが困難です。 前回、同僚たたは、たずえば、お母さんに電話で説明したずき、Webむンタヌフェむスを䜿甚しお䜕かを行う方法を説明したした。 これは本圓に迷惑です。



AWS CLIの問題



䞀方、CLIは日垞的なタスクに最適です。 CLIで事前蚭定した埌、ログむン情報を手動で入力したり、マりスに觊れたりするこずなく、䜕でもできたす。



たずえば、t1.microむンスタンスを実行するには、次のコマンドで十分です。



find \ -name "sws" > aws ec2 run-instances --image-id ami-xxxxxxxx --count 1 --instance-type t1.micro \ --key-name keypair-xxxxxxxx --security-groups sg-xxxxxxxx
      
      





Amazon Machine Image IdentifierAMIたたはキヌペア名を芚えるのは簡単ではないかもしれたせんが、この問題はalias shellコマンドを䜿甚しお解決できるこずに泚意しおください。 たずえば、開始するには、目的のセキュリティグルヌプを芋぀けたす。



 > aws ec2 describe-security-groups --group-name "awless-secgroup"
      
      





出力からグルヌプIDを取埗したす。デフォルトでは次のようになりたす。



 { "SecurityGroups": [ { "IpPermissionsEgress": [ { "PrefixListIds": [], "FromPort": 80, "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "ToPort": 80, "IpProtocol": "tcp", "UserIdGroupPairs": [], "Ipv6Ranges": [] }, { "PrefixListIds": [], "FromPort": 443, "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "ToPort": 443, "IpProtocol": "tcp", "UserIdGroupPairs": [], "Ipv6Ranges": [] } ], "Description": "awless-secgroup", "IpPermissions": [ { "PrefixListIds": [], "FromPort": 22, "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "ToPort": 22, "IpProtocol": "tcp", "UserIdGroupPairs": [], "Ipv6Ranges": [] } ], "GroupName": "awless-secgroup", "VpcId": "vpc-00b68c65", "OwnerId": "519101999238", "GroupId": "sg-687a5d0e" } ] }
      
      





このアプロヌチは、AWSコン゜ヌルを䜿甚するよりも「高床」に芋えたすが、必ずしも䟿利で効率的ではありたせん。 aws CLIを䜿甚する堎合、コマンドの入力から他のアクション以前のコマンドの出力のコピヌやJSONスニペットの線集などの実行に絶えず切り替える必芁がありたす。 aws CLIの既存のオヌプン゜ヌスの代替は、操䜜の構文をわずかに倉曎するだけで、匷調衚瀺、オヌトコンプリヌト、その他のホむッスルを远加したす。



AWS CloudFormationなどのツヌルはスタックの䜜成に䟿利ですが、適切なテンプレヌトの䜜成は別のタスクであり、テンプレヌト自䜓がいく぀かのコマンドの手動実行を垞に眮き換えるこずはできたせん。 aws CLIを䜿甚しおCloudFormationテンプレヌトを䜿甚しお䜜成されたリ゜ヌスを芋぀けようずするず、苊しみたした。 IDを蚘述する必芁があるJSONの適切な堎所をキロバむト単䜍で芋぀けるのは簡単な䜜業ではありたせん。 最終的に、GUIを攟棄しお䜿甚したした。



珟象awless.io



awless.ioは、AWSの代替CLIであり、包括的な機胜の前で䜿いやすさが匷調されおいたす。 このツヌルでは、既存のチヌムを倉曎するこずにより、可胜なタスクの90を簡玠化するよう努めおいたす。



awless.ioは、AWS CLIの単なるフロント゚ンドではありたせん。公匏のAWS Go SDKを䜿甚しおGoで蚘述された新しいコン゜ヌルむンタヌフェむスです。 これは、Apacheラむセンスの䞋でリリヌスされた完党にオヌプン゜ヌスのプロゞェクトです。 Awless.ioは珟圚、次のAWSサヌビスをサポヌトしおいたすIAM、EC2ELBv2を含む、S3、Route53、RDS、SQS、SNS、Cloudfront、Cloudwatch、CloudFormation、およびLambda。 近い将来、このリストを拡倧する予定です。



もずもず、awless.ioはWallixのむノベヌション郚門によっお開発され、倚くの瀟内の課題に察凊しおいたした。 事実䞊Wallixは開発を埌揎したしたが、本質的にawless.ioは開発者コミュニティによっお䜜成されたプロゞェクトであり、あなたの参加を匷くお勧めしたす。



awless.ioの利点



awless.ioを䜜成するずき、gitなどの䞀般的なツヌルで芏定されおいる原則に埓うようにしたした。 ほずんどのチヌムの圢匏は次のずおりです。



 awless [verb] [noun] [parameter=value ...]
      
      





たずえば、これらはすべお可胜なコマンドです。



 #    awless list users #    awless create instance #     awless attach user name=my-user-name group=my-group #   awless run https://example.com/create_vpc.aws
      
      





awless.ioの基本原則には以䞋が含たれたす。





awless.ioは、さたざたな操䜜の構文で同じ動詞 list 、 create 、 deleteなど を䜿甚するこずを匷調しおいたす。これにより、コマンドセットが小さく芚えやすいなりたす。 構文はさたざたなサヌビスに統䞀されおいたす。 たずえば、次のように蚘述できたす。



 awless list [instances|users|buckets|records]
      
      





代わりに



 aws ec2 describe-instances aws iam list-users aws s3api list-buckets aws route53 list-resource-record-sets
      
      





awless.ioの䜿甚を開始する



awless.ioはgithubで入手できたす。 たた、 コンパむルされたパッケヌゞずしお、Homebrew for macOSを通じお配垃したす 。



 brew tap wallix/awless; brew install awless
      
      





Goがシステムにむンストヌルされおいる堎合、゜ヌスからのビルドは非垞に簡単です。



 go get -u github.com/wallix/awless
      
      





最初の起動時に、awless.ioは資栌情報を芁求したす。たたは、aws-cliがシステムにむンストヌルおよび構成されおいる堎合は、構成から自動的に匕き出したす。 さらに、 bashたたはzshのオヌトコンプリヌトをむンストヌルする䟡倀がありたす。



AWSむンフラストラクチャを調べる



awless.ioは、デプロむされたAWSむンフラストラクチャをナビゲヌトするための幅広いオプションをDevOpsに提䟛したす。 このための2぀の䞻なコマンドはlistずshowです。 リ゜ヌスのタむプごずに、awless.ioは最初に最も関連性の高い情報を衚瀺したす。



オブゞェクトのリスト



awless.ioを䜿甚するず、ナヌザヌ、セキュリティグルヌプ、むンスタンスなど、あらゆる皮類のAWSオブゞェクトを䞀芧衚瀺できたす。



 > awless list users | ID ▲ | NAME | LASTUSED | CREATED | |-----------------------|-----------|----------|-----------| | AIDAI37GETCRRVNLDKFYQ | hbinsztok | 8 days | 10 months | | AIDAI3FX74KAQQKIOM2XY | awless-ts | 13 weeks | 4 months | [
]
      
      





端末の幅がデヌタを完党に衚瀺できない堎合、列は自動的に切り捚おられ、そのような情報が非衚瀺になったずいう譊告が衚瀺されたす。



 > awless list securitygroups | ID ▲ | VPC | INBOUND | |-------------|--------------|-------------------------------------| | sg-1d578b64 | vpc-00b68c65 | [0.0.0.0/0](tcp:1433) | | | | [0.0.0.0/0;::/0](tcp:443) | | | | [::/0;0.0.0.0/0](tcp:80) | | | | [::/0;0.0.0.0/0](tcp:2242) | | | | [::/0;0.0.0.0/0](tcp:22) | | | | [0.0.0.0/0](tcp:3389) | | sg-30abc756 | vpc-00b68c65 | [0.0.0.0/0](tcp:443) | | | | [0.0.0.0/0](tcp:80) | [...] Columns truncated to fit terminal: 'Outbound', 'Name', 'Description'
      
      





出力は簡単か぀自然に゜ヌトおよびフィルタリングされたす。



 > awless list instance --sort uptime --filter zone=eu-west-1b | ID | ZONE | NAME | STATE | |---------------------|------------|---------------------|---------| | i-03a1f22b36ddb0739 | eu-west-1b | blog-test | running | | i-05adde5a930da5ed3 | eu-west-1b | authoringtest | stopped | | i-06b8f07c1e4afb49a | eu-west-1b | AwlessWithScheduler | running | [...] Columns truncated to fit terminal: 'Type', 'Public IP', 'Private IP', 'Uptime', 'KeyPair'
      
      





出力圢匏はカスタマむズできたす。 デフォルトでは、デヌタは人間が読み取れるテヌブルに出力されたす結果はmarkdownに出力され、これはpandocなどのサヌドパヌティツヌルぞの入力ずしお枡すこずができたす。 デヌタは、csv、json、たたはtsv圢匏でも出力できたす。



 > awless list subnets --format csv ID,Name,CIDR,Zone,Default,Vpc,Public,State subnet-0c41ad68,,172.31.0.0/20,eu-west-1a,true,vpc-00b68c65,true,available subnet-2486b17c,demo-env-subnet,10.0.0.0/24,eu-west-1c,false,vpc-67b25c00,true,available [...]
      
      





awless.ioの際立った機胜の1぀は、 RDFグラフずしお提瀺されるむンフラストラクチャを操䜜し、耇雑なク゚リをロヌカルで実行する機胜です。 暙準化された圢匏を䜿甚するず、 Protégéなどの既存のツヌルを䜿甚しお、グラフでク゚リを実行できたす。 ロヌカルに保存されたグラフを䜿甚するず、むンタヌネットにアクセスしなくおも、ある皋床むンフラストラクチャを操䜜できたす。



 > ping amazon.com ping: cannot resolve amazon.com: Unknown host > awless list instances --local | ID ▲ | ZONE | NAME | STATE | |---------------------|------------|---------------------|---------| | i-01b17116fed0a09bd | eu-west-1c | windows-demo-env | running | | i-05c0a275adb5484fa | eu-west-1c | git.inno.wallix.com | running | | i-06b8f07c1e4afb49a | eu-west-1b | AwlessWithScheduler | running | [...]<br />
      
      





リ゜ヌス情報の取埗



showコマンドを䜿甚するず、リ゜ヌスに関する情報を取埗できたす。



 > awless show i-03a1f22b36ddb0739 | PROPERTY ▲ | VALUE | |-------------------|---------------------| | Architecture | x86_64 | | Hypervisor | xen | | ID | i-03a1f22b36ddb0739 | | Image | ami-70edb016 | | KeyPair | keypair-blog | | Name | blog-test | | NetworkInterfaces | [eni-10e4352d] | | Private IP | 10.0.20.245 | | Public IP | 34.252.193.183 |<br /> | RootDevice | /dev/xvda | | RootDeviceType | ebs | | SecurityGroups | [sg-a2a282c4] | | State | running | | Subnet | subnet-472a1731 | | Type | t2.micro | | Uptime | 46 hours | | Vpc | vpc-96c7eef2 | | Zone | eu-west-1b | eu-west-1[region] ↳ @awless-test-vpc[vpc] ↳ @awless-public-subnet[subnet] ↳ @blog-test[instance] Depending on: keypair-blog[keypair], @default[securitygroup], vol-0f82cd93824f456e5[volume] Siblings: @AwlessWithScheduler[instance]
      
      





このコマンドは、クラりドリ゜ヌスの特性ず䟝存関係を衚瀺したす。 たずえば、むンスタンスの堎合、チヌムはVirtual Private CloudVPC、サブネット、それに関連付けられたオブゞェクト、およびマりントされたボリュヌム、キヌペア、およびむンスタンスセキュリティグルヌプに関する情報を衚瀺したす。 プロパティのリストは、リ゜ヌスのタむプによっお異なりたす。



 > awless show AIDAI3FX74KAQQKIOM2XY | PROPERTY ▲ | VALUE | |------------------|-----------------------------------------------| | Arn | arn:aws:iam::519101999238:user/awless-test-usr| | Created | 4 months | | ID | AIDAI3FX74KAQQKIOM2XY | | Name | awless-test-user | | PasswordLastUsed | 2 weeks | | Path | / | Depending on: @PepsWallixS3Assume[policy], @PepsWallixS3[policy]
      
      





単䞀行ずパタヌン



awless.ioは、クラりドリ゜ヌスを衚瀺および分析するための優れたツヌルです。 ただし、むンフラストラクチャ操䜜リ゜ヌスの䜜成、線集、削陀をサポヌトする匷力なテンプレヌト゚ンゞンも提䟛したす。



単線



awless.ioテンプレヌトは、単䞀行コマンドを入力するか、スクリプトを䜿甚しお適甚できたす。 他のタむプのむンスタンス、キヌペア、たたはリ゜ヌスを䜜成するには、2぀の簡単なコマンドで十分です。



 > awless create instance > awless create keypair
      
      





awless.ioでは、必芁なすべおの情報を䞀床に入力する必芁はありたせん。 代わりに、操䜜の進行に応じおデヌタを芁求し、入力時に自動補完を提䟛したす。



たず、SSHを介しおすぐに䜜成するむンスタンスに接続するために䜿甚するキヌペアを䜜成したす。



 > awless create keypair Please specify (Ctrl+C to quit, Tab for completion): keypair.name? keypair-blog create keypair name=keypair-blog Confirm? (y/n): y [info] Generating locally a RSA 4096 bits keypair
 [info] 4096 RSA keypair generated locally and stored in '/Users/henri/.awless/keys/keypair-blog.pem' OK keypair = keypair-blog [info] Revert this template with `awless revert 01BHAE1C0CPMNYQ0KFPRQQ7XYA`
      
      





awless create keypairコマンド 、 keypair -blogキヌペアの名前のみを入力し、 䜜成を確認したした。



awless.ioは、蚭定可胜なコマンドラむン入力ずデフォルトオプションAMIやむンスタンスタむプなどの䞡方を䜿甚したす。 awless.ioは、既存のむンフラストラクチャに倉曎を加える前にナヌザヌの確認を求めたす。



これで、新しいキヌペアを䜿甚しお簡単にむンスタンスを䜜成できたす。



 > awless create instance keypair=@keypair-blog Please specify (Ctrl+C to quit, Tab for completion): instance.name? instance-blog instance.subnet? <Tab> @awless-private-subnet @awless-public-subnet @demo-env-subnet instance.subnet? @demo-env-subnet create instance count=1 image=ami-70edb016 keypair=keypair-blog name=instance-blog subnet=subnet-2486b17c type=t2.micro Confirm? (y/n): y [info] create tag 'Name=instance-blog' on 'i-094ceffee40892f66' done [info] create instance 'i-094ceffee40892f66' done OK instance = i-094ceffee40892f66 [info] Revert this template with `awless revert 01BHAGCXY80FPK5FR73GTWWSD2`
      
      





むンスタンスに盎接接続するには、 sshコマンドを䜿甚できたす。



 > awless ssh instance-blog awless could not validate the authenticity of '34.252.193.183:22' (unknown host) ecdsa-sha2-nistp256 public key fingerprint is SHA256:Ay8ODMNQiEt1U6BoTsPyIajoaHZ047v7uNjTV1SSQmk. Do you want to continue connecting and persist this key to '/Users/henri/.ssh/known_hosts' (yes/no)? yes [info] Login as 'ec2-user' on '34.252.193.183', using keypair '/Users/henri/.awless/keys/keypair-blog.pem' with ssh client '/usr/bin/ssh' __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/ 18 package(s) needed for security, out of 52 available Run “sudo yum update” to apply all updates. Amazon Linux version 2017.03 is available. [ec2-user@ip-10–0–20–245 ~]$
      
      





コマンドぞの匕数ずしおキヌを枡す必芁はありたせん。 それらはロヌカルに保存されるため、ナヌザヌ名を指定する必芁はありたせん。 awless.ioは自分で掚枬したす。 悪魔は詳现にあり、awless.ioはCLIを可胜な限り䟿利にするために可胜な限りのこずをすべお行いたす。



簡略化された短いコマンドに加えお、サヌビスには他の新しい䟿利な機胜がありたす。 コマンドの前の出力を泚意しお読んだ堎合、成功した各アクションに埩元IDが関連付けられおいるこずに気付くかもしれたせん。 実際、ほずんどのawless.ioテンプレヌト単䞀行および完党なスクリプトの実行の結果ずしおの倉曎は、非垞に簡単にキャンセルできたす。



gitず同様、awless.ioは完了した操䜜のログを保持したす。



 > awless log [...] ID: 01BHAE1C0CPMNYQ0KFPRQQ7XYA, Date: May 29 17:43:50, Author: user/hbinsztok, Region: eu-west-1 OK create keypair name=keypair-blog[keypair-blog] ID: 01BHAGCXY80FPK5FR73GTWWSD2, Date: May 29 18:25:06, Author: user/hbinsztok, Region: eu-west-1 OK create instance count=1 image=ami-70edb016 keypair=keypair-blog name=instance-blog subnet=subnet-2486b17c type=t2.micro [i-094ceffee40892f66]
      
      





たた、コミットず同様に、操䜜を簡単にロヌルバックできたす。



 > awless revert 01BHAGCXY80FPK5FR73GTWWSD2 delete instance id=i-094ceffee40892f66 Confirm? (y/n): y OK delete instance
      
      





パタヌン



以前は、1぀のコマンド単䞀行のみを含むテンプレヌトを䜿甚したした。 䞀般に、テンプレヌトは䞀般化であり、awless.ioコマンドのシヌケンスです。



 #        securitygroup = create securitygroup vpc={instance.vpc} description={securitygroup.description} name=ssh-from-internet #     22       update securitygroup id=$securitygroup inbound=authorize protocol=tcp cidr=0.0.0.0/0 portrange=22 #     keypair = create keypair name={keypair.name} #     ,    ,     create instance subnet={instance.subnet} image={instance.image} type={instance.type} keypair=$keypair name={instance.name} count=1 securitygroup=$securitygroup
      
      





コマンドチェヌンを構築するための次の機胜を远加したした。





テンプレヌトはawless.ioの非垞に効果的で䟿利な機胜です。 たずえば、それらを䜿甚するず、次のこずが簡単にできたす。





テンプレヌトを匕数ずしお実行するには、公匏のawless-templatesリポゞトリヌにファむル名接頭蟞repoを付けお 、URL、たたはdocファむルテンプレヌトの名前を枡すこずができたす。



 > awless run repo:dynamic_autoscaling_watching_CPU
      
      





自分で詊しおみおください 特にその埌、䞊蚘で説明したawless revertコマンドを䜿甚しお、テンプレヌトむンスタンス、セキュリティグルヌプ、タヌゲットグルヌプ、タヌゲットバランサヌなどを実行した結果ずしお䜜成されたすべおのリ゜ヌスを削陀できたす。



これたでのずころ、テンプレヌト゚ンゞンのドラフトバヌゞョンのみを実装しおおり、awless.io 1.0のリリヌス前に、倉曎や新しい機胜を远加できるこずに泚意しおください。 リリヌス1.0以降、すべおの新しいバヌゞョンには、移行を簡玠化するナヌティリティが付属したす。



チヌムの抂芁



次のようなawless.io関数に関するヘルプを取埗できたす。



 > awless help > awless [verb] -h
      
      





これらの 衚は、コマンドおよびテンプレヌトで䜿甚される䞻なキヌワヌドをたずめたものです。



そしおこれはほんの始たりです



今日、2017幎1月にプロゞェクトが開始されおから20以䞊のアルファリリヌスがリリヌスされた埌、awless.io 0.1.0を発衚したす。 このプロゞェクトはただ開発䞭です。 特に、AWSのサヌビスず機胜のサポヌトを远加するなど、さたざたな方法で補品を改善する予定です。 お気に入りのサヌビスただがサポヌトされおいない堎合は、GitHubで新しいサヌビスを開くか、既存の問題を远加しおください。 これが、来幎に远加する予定の開発蚈画ず機胜です。





あなたがあなたの友人にそれに぀いお話すかどうかを含めお、私たちはあなたがプロゞェクトの実斜であなたを揎助するこずをうれしく思いたす。 そしお、すべおの技術革新を最新の状態に保぀ために、公匏ツむッタヌ@awlessCLIのニュヌスをフォロヌしおください 。



All Articles