AWS 환경을 SDK for Ruby로 만들어 보십시오.
개요
코드로 AWS 환경을 구축하는데 이른바 Infrastructure as Code(Iac)라면 CloudFormtion과Terraform이 주류지만 AWS는 주요 프로그래밍 언어로 자원과 조작을 구축할 수 있는 SDK를 제공한다.
SDK에서는 이번에는 루비구축 환경(VPC, IGW, Subnet, RouteTable)을 사용하는 해슨을 소개하고 싶다!
※ MacOS, SDK for Ruby 버전 3
장생불로
1. 사전 준비
필요한 물건
물론 각 자원을 가동하기 위해서는 AWS의 계정이 필요하다.이미 보유한 것을 전제로 진행하오니 양해해 주십시오
이것도 말할 필요도 없이... 루비로 코드를 쓰고 작업 단말기에 설치하세요.
사이트 축소판 그림
AWS SDK for Ruby Developer Guide
이쪽 공식 홈페이지에 따라 진행하겠습니다.
2. SDK 설치 및 설정
SDK 설치
SDK for Ruby는gem으로 배포됩니다.루비의 외부 라이브러리죠.
Gemfile에서 다음
bundle install
을 보완하고 실행gem 'aws-sdk'
다음 명령을 실행하여gem
sudo gem install aws-sdk
※ 시간이 오래 걸립니다.터미널 화면이 5분 정도 머물렀지만 다운된 것은 아니다.인증 정보 설정
SDK를 통해 AWS에 액세스하는 인증 정보는 로컬 파일에 기술되어 있습니다.장소는
~/.aws/credentials
입니다.# ディレクトリを作成
mkdir ~/.aws
# 移動
cd ~/.aws
# vimでcredentialsファイルを編集
sudo vim credentials
vim로 다음과 같은 내용을 기술하다[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
※ 위your_access_key_id
、your_secret_access_key
에 방문키, 비밀방문키를 입력하기 위해서는 아래 작업을 한쪽에 놓고액세스 키 및 비밀 액세스 키 만들기
※ 계정당 2개의 방문키만 만들 수 있습니다.만약 이미 두 가지 상황이 있다면, 사용하지 않은 내용을 삭제하십시오
※ 이 창을 닫으면 비밀 방문버튼이 보이지 않습니다!닫으면 생성된 키를 삭제하고 다시 만듭니다
※ 이미지 액세스 키가 삭제되어 사용할 수 없으니 탓하지 마세요(웃음)
esc
키=>:wq
를 통해 편집 내용을 저장하고vim환경 변수를 사용하여 영역 설정하기
도쿄 지역 설정
export AWS_REGION=ap-northeast-1
3. 코드 쓰기
이번 목표는 VPC, 서브넷, 네트워크 게이트웨이, 로드맵 작성이다.완료된 rb 파일 AWS 리소스만 실행하면 시작됩니다!이런 핸디캡을 느낄 수 있도록 하기 위해서 일단 여기까지 하겠습니다.
# sdkをrubyファイルに読み込み
require 'aws-sdk'
# VPCなどはEC2のカテゴリなのでAws::EC2::Clientクラスからインスタンスを作成
client = Aws::EC2::Client.new(region: "ap-northeast-1")
# VPC ----------------------------------------------------------------
# VPCを作成 上で作成したclientインスタンスに対してcreate_vpc()メソッドを適用する
resp_vpc = client.create_vpc({
cidr_block: "10.0.0.0/16", # 必須項目 IPアドレス範囲を指定する
})
# 出来上がったVPCのIDを取得(他のリソース作成時やアタッチする時に使用する)
VPC_ID = resp_vpc.vpc.vpc_id
puts VPC_ID
# IGW ----------------------------------------------------------------
# インターネットゲートウェイ(IGW)を作成
resp_igw = client.create_internet_gateway({
})
# IGWのID
IGW_ID = resp_igw.internet_gateway.internet_gateway_id
# IGWをVPCにアタッチ
client.attach_internet_gateway({
internet_gateway_id: IGW_ID, # 上で作成したIGWのID
vpc_id: VPC_ID, # 上で作成したVPCのID
})
puts IGW_ID
# Subnet ----------------------------------------------------------------
# サブネットを作成(インターネット向けパブリックサブネット)
resp_pubsub1 = client.create_subnet({
availability_zone: "ap-northeast-1a",
cidr_block: "10.0.0.0/24", # 必須項目
vpc_id: VPC_ID, # 必須項目
})
# サブネットのID
SUB_ID1 = resp_pubsub1.subnet.subnet_id
puts SUB_ID1
# RouteTable ----------------------------------------------------------------
# ルートテーブルを作成
resp_rt = client.create_route_table({
vpc_id: VPC_ID, # 必須項目
})
# ルートテーブルのID
RT_ID = resp_rt.route_table.route_table_id
# ルートを作成(IGWに向けたルート)
resp_route = client.create_route({
destination_cidr_block: "0.0.0.0/0", # インターネット向けルート
gateway_id: IGW_ID, # IGWのID
route_table_id: RT_ID, # 必須項目 ルートテーブルのID
})
# ルートテーブルをサブネットに紐付け
client.associate_route_table({
route_table_id: RT_ID, # 必須項目 ルートテーブルのID
subnet_id: SUB_ID1, # 紐付けるサブネットのID
})
puts RT_ID
# まとめてリソースにタグ(名前)を追加 ----------------------------------------------------------------
client.create_tags({
resources: [VPC_ID, IGW_ID, SUB_ID1, RT_ID], # 必須項目 名前をつけるリソースのID
tags: [
{
key: 'Name',
value: 'HogeTestVPC', # VPCの名前
},
{
key: 'Name',
value: 'HogeTestIGW', # IGWの名前
},
{
key: 'Name',
value: 'HogeTestPublicSubnet1a', # Subnetの名前
},
{
key: 'Name',
value: 'HogeTestPublicRT', # RTの名前
},
],
})
puts "Create environment successfully done!"
적당한 디렉터리에 상술한 코드를 입력하세요.rb 파일로 저장하고 cd
명령으로 저장하는 디렉터리로 이동합니다.ruby 保存したファイル名.rb
실행 후 AWS에서 리소스 작성을 시작합니다.4.코드를 어떻게 썼어요?
아래의 공식 문서에서 상응하는 코드를 끌어와 필요한 요소를 기술할 뿐이다.여기가 가장 큰 혈인데 어떤 자원에 대해 뭘 하고 싶으세요?이렇게 하면 문서에서 (쓰기 방법의 좋고 나쁨을 잠시 논하지 않고) 찾을 수 있다면, 조작 자원의 코드를 쓸 수 있다.
AWS SDK for Ruby V3
5.앞으로
공식 문서의 독법, EC2와 다른 자원에 대한 기술 방법 등도 기사에 썼으면 좋겠다.또 이번에는 리소스를 만드는 데 그쳤지만 SDK의 능력은 프로그래밍이 가능하고 쓰기 방법에 따라 AWS 리소스도 자기 생각대로 작동할 수 있기 때문에 이 부분도 연구해서 기사로 썼으면 좋겠다고 생각했다.
6. 요약
제가 루비와 AWS에서 완전히 벗어난 초보자가 아닐까요?이런 수준에서 작업 중에 SDK for Ruby를 사용했다.의외로 일본어로 쓴 기사가 적어 고민하면서 영어 문서와 싸우면서 썼기 때문에 같은 SDK를 쓰기 시작한 분들을 도와주면 좋겠다고 생각했어요.
또 SDK가 제공하는 언어를 배우는 사람이라면 기릿에서 버전 관리를 하면서 기릿허브로 끌어올리는 것도 그룹으로 나쁘지 않다.(CFn도 Terraform도 아닌데 왜 SDK일까? 이렇게 토로하면 더 좋을 것 같은데 웃음...개인적으로는 SDK의 학습 원가가 낮고 자원 조작을 유연하게 할 가능성도 크다고 생각한다.)
마지막으로 게재된 코드가 정상적으로 작동하는 것으로 확인되었으나 "잘 못 썼으니 더 좋은 작법이 있다"는 댓글이나 지적이 있으면 사정을 봐주십시오(>인서함;)
Reference
이 문제에 관하여(AWS 환경을 SDK for Ruby로 만들어 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ekodhikodhi/items/2ff246cc63faf9d6b129텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)