eb init
Amazon Web Services에는 현재 작업 디렉터리를 elasticbeanstalk 애플리케이션으로 시작할 수 있는 명령이 있습니다 .
이 명령은 대화형입니다. 즉, eb init
옵션 목록으로 응답합니다.
$ eb init
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
(default is 3):
맨 위는 region
옵션, 두 번째는 옵션, 세 번째는 가능한(또는) 옵션 목록입니다 app
.environment
env
내가 찾고 있는 것은 명령을 래핑 eb init
하고 스크립트 상호 작용을 우회할 수 있는 문자열을 전달할 수 있는 것입니다.
ebInit --region=eu-central-1 --app=my-app --env=my-app-live
이것을 구문 분석 stdout
하고 줄을 분할하여 전달된 매개 변수 옵션에 해당하는 숫자를 가져와야 합니다. 옵션이 숫자를 이동할 수 있기 때문에 매우 간단합니다.
개념 증명으로 이와 같은 것을 해도 괜찮을 것 같습니다.
ebInit --region=5 --app=1 --env=1
이러한 대화형 명령이 블랙박스이며 프로그래밍 방식으로 상호작용할 수 없다는 사실이 믿기지 않습니다. node.js를 사용하여 이 작업을 시도했지만 응답하지 못했습니다. 여기 내 이전 stackoverflow 게시물이 있습니다."하위 프로세스를 통해 대화형 명령에 응답”라고 말했지만 사람들의 관심을 끌지는 못했습니다.
나는 이것이 유닉스/리눅스에서 가능한지, 만약 그렇다면 어떻게, 어떤 언어로 가능한지 묻기 위해 이 글을 게시합니다.
답변1
솔루션은 expect
다음 라인을 따라 실행될 수 있습니다.
#!/usr/bin/env expect
# or instead figure out a TCL getopt library
if {[llength $argv] != 3} {
puts stderr "Usage: $argv0 region app env"
exit 64
}
set aws_region [lindex $argv 0]
set aws_app [lindex $argv 1]
set aws_env [lindex $argv 2]
spawn -noecho eb init
set get_regions 1
while {$get_regions} {
expect {
# look for the "1) us-east-1 : US East (N. Virginia)"
# assign to what TCL calls an array
-re {([0-9]+). ([a-z0-9-]+) :} {
set region_to_num($expect_out(2,string)) $expect_out(1,string)
}
# how we break out of the loop, also array entry
# for "default" region if need be
-re {\(default is ([0-9]+)\)} {
set region_to_num(default) $expect_out(1,string)
set get_regions 0
}
}
}
# show what we got based on arguments and parse of eb output
puts "region=$aws_region region_num=$region_to_num($aws_region) env=$aws_env"
expect
또는 JavaScript에서 유사한 라이브러리를 찾거나 작성할 수도 있지만 아마도 더 많은 작업이 필요할 것입니다. 당신이 좋아하는 것이 무엇이든 할 수 있습니다 ...