Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Terraform-Lightsail
Search
yuuki sato
June 18, 2020
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Terraform-Lightsail
yuuki sato
June 18, 2020
More Decks by yuuki sato
See All by yuuki sato
JAWS-UG TOHOKU 2022年 活動のふりかえり/jaws-ug_tohoku_review-of-activities_2022
kaba0120
0
110
はじめてのAWS Step Functions -Cloudfrontのキャッシュ誤りを検知するためのシステムを構築してみた-/lets-try-aws-step-functions
kaba0120
0
240
AWS-ハンズオンのススメ/サーバーレスアプリケーションの構築をやってみた
kaba0120
0
120
jaws-ug-tohoku-ec2imagebuilder
kaba0120
0
53
Lightsail_yukisat
kaba0120
0
55
jaws_ug_tohoku_jawsdays2021_recap_yukisat
kaba0120
0
74
Other Decks in Technology
See All in Technology
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.5k
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.3k
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
390
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.2k
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
860
今こそ知りたいAmplifyGen2
mkdev10
2
160
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
150
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
110
Loop Engineering, beyond prompt, context, and harness engineering
glaforge
0
100
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
310
自主式軟體工廠
philipz
0
260
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
5.8k
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
400
The browser strikes back
jonoalderson
0
1.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
360
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
The Invisible Side of Design
smashingmag
301
52k
We Have a Design System, Now What?
morganepeng
55
8.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Transcript
2020/06/18 גࣜձࣾΤεπʔ ࠤ౻ ༏थ Terraform Ͱ LightsailΛߏஙͯ͠Έͨ ͡ΊͯͷTerraform
ࣗݾհ ࠤ౻༏थ!LBCBZBO@ ࣾͰʮ͔ͪΌΜʯͱݺΕͯ·͢ɻ ٶݝઋࢢࡏॅ גࣜձࣾΤεπʔ ΠϯϑϥΤϯδχΞ 8FCܥΞϓϦͷ͓٬͞Μ͕ଟ͍Ͱ͢ ओʹΦϯϓϨϛεڥͱ"84ڥͷߏஙɾࢹۀ ࠷͓ۙ٬͞ΜΦϯϓϨϛεڥ͔Β"84ڥঃʑʹҠߦ
ΞδΣϯμ • Terra Formͱ • جૅࣝ ؆୯ͳΈ ϑΝΠϧߏ ϑΝΠϧͷه๏ •
Trraform Ͱ Lightsail Λ࡞ • ֶश՝ • ·ͱΊ
TerraForm ͱ • HashiCorpʹΑͬͯ࡞͞ΕͨInfrastructure as Code Λ࣮ݱ͢ΔOSS • એݴతͳίʔυ(HCL)ͰΠϯϑϥετϥΫνϟΛهड़Ͱ͖Δ •
༷ʑͳΫϥυϕϯμʔͷαʔϏεΛૢ࡞͢Δ͜ͱ͕Ͱ͖Δ • มߋΛө͢ΔલʹɺมߋՕॴͷ֬ೝ͕ೖΔͷͰ҆৺ͯ͠มߋͰ͖Δɻ
جૅࣝ [ฤ] • ࡞ۀ༻σΟϨΫτϦΛ࡞ • AWSΫϨσϯγϟϧͷઃఆ • ߏϑΝΠϧΛ࡞ • ॳظԽ͠ɺඞཁͳϓϥάΠϯɾ
tfstateϑΝΠϧ͕࡞͞ΕΔ • ϑΝΠϧ࡞ޙʹɺυϥΠϥϯ • σϓϩΠ(ߏங) Ҿ༻ݩ: https://www.terraform.io/
جૅࣝ [ϑΝΠϧߏ] • tfstate ϑΝΠϧ tfstateϑΝΠϧʹΑͬͯߏ͕ཧ͞Ε͍ͯΔɻ νʔϜ։ൃͷ߹S̏ʹΞοϓϩʔυ • provider.tf ͲͷΫϥυαʔϏεΛ༻͢Δ͔هࡌ
• backend.tf tfstateϑΝΠϧΛS̏ʹΞοϓϩʔυ͢ΔͨΊʹهࡌ • versions.tf Terraform ͷόʔδϣϯΛهࡌ(Version ̌.̍̎ ΑΓલه๏ͳͲ͕มΘ͍ͬͯΔ ͨΊ) • main.tf ϦιʔεΛهࡌ
جૅࣝ [֤ϒϩοΫͷհ] • provider ϒϩοΫ ϓϩύΠμʔΛهड़͢Δ (AWS, GCP, AzureͳͲ) Ϧʔδϣϯهࡌ
• terraform ϒϩοΫ όοΫΤϯυઌTerraform ͷόʔδϣϯΛ໌ࣔతʹࢦఆ • variable ϒϩοΫ มΛఆٛ • resource ϒϩοΫ ࡞͍ͨ͠ϦιʔεΛهड़ $ resource "Ϧιʔε໊" "ϩʔΧϧ໊" {} • output ϒϩοΫ • ͷग़ྗ (EIPͳͲඞཁͳใΛ࡞ίϚϯυ࣮ߦޙʹग़ྗͰ͖Δ)
Trraform Ͱ Lightsail Λ࡞ [ΞΧϯτઃఆ] ## AWSΞΧϯτઃఆ $ export AWS_PROFILE=satyu-lightsail
$ export AWS_DEFAULT_REGION=ap-northeast-1 ## ֬ೝ $ aws sts get-caller-identity --query Account --output text ---- xxxxxxxxxxxx ---- ## tfstateϑΝΠϧอଘ༻όέοτ࡞ # มఆٛ $ backetName='lightsail-test.tfbackend' $ region='ap-northeast-1' $ aws_profile='satyu-lightsail' # όέοτ࡞ $ aws s3api create-bucket --bucket "${backetName}" --create-bucket-configuration LocationConstraint="${region}" # όʔδϣχϯά༗ޮԽ $ aws s3api put-bucket-versioning --bucket "${backetName}" --versioning-configuration Status=Enabled $ aws s3api get-bucket-versioning --bucket "${backetName}" ---- { "Status": "Enabled" } ----
Trraform Ͱ Lightsail Λ࡞ [֤ϑΝΠϧ࡞] # provider.tf (ϓϩύΠμͷઃఆ) ---- provider
"aws" { region = "ap-northeast-1" } ---- # backend.tf (όοΫΤϯυͷઃఆ) ---- terraform { backend "s3" { } ---- # versions.tf (Terraformόʔδϣϯͷઃఆ) ---- terraform { required_version = ">= 0.12" } ---- ▪ॳظԽ(όοΫΤϯυͷS3όέοτΛࢦఆ) $ terraform init \ -backend=true \ -backend-config="bucket=${backetName}" \ -backend-config="key=terraform.tfstate" \ -backend-config="region=${region}"
Trraform Ͱ Lightsail Λ࡞ [mainϑΝΠϧ࡞] main.tf --- variable "Instance_name" {}
variable "OS_name" {} variable "Instance_type" {} ## Lightsail Key Pair resource "aws_lightsail_key_pair" "key_pair" { name = "key_pair_${var.Instance_name}" public_key = "${file("./terraform-test.key.pub")}" } ## Get static ip resource "aws_lightsail_static_ip" "static_ip" { name = "${var.Instance_name}_static_ip" } ## Instance Create resource "aws_lightsail_instance" "instance" { name = "${var.Instance_name}" availability_zone = "ap-northeast-1a" blueprint_id = "${var.OS_name}" bundle_id = "${var.Instance_type}" key_pair_name = "${aws_lightsail_key_pair.key_pair.name}" } ## attachment static ip resource "aws_lightsail_static_ip_attachment" "static_ip_attachment" { static_ip_name = "${aws_lightsail_static_ip.static_ip.name}" instance_name = "${aws_lightsail_instance.instance.name}" } output "static_ip" { value = "${aws_lightsail_static_ip.static_ip.ip_address}" } ----
Trraform Ͱ Lightsail Λ࡞ ▪ߏங༰ͷ֬ೝ $ terraform plan -var "Instance_name=lightsail-tf-test"
-var "OS_name=centos_7_1901_01" -var "Instance_type=nano_2_0" ---- Plan: 4 to add, 0 to change, 0 to destroy. ---- ▪Lightsail࡞ $ terraform apply -var "Instance_name=lightsail-tf-test" -var "OS_name=centos_7_1901_01" -var "Instance_type=nano_2_0" ---- Apply complete! Resources: 4 added, 0 changed, 0 destroyed. Outputs: static_ip = 54.250.62.209 ---- ͦΕͧΕɺઃఆ߲ͨ͠ʹͳΓ ੩తIPऔಘͰ͖͍ͯΔɻ
͜͜Ͱ;ͱؾ͖ͮ·ͨ͠ɻɻɻ
Lightsail࡞͚ͩͳΒAWS CLIͰेͰ...
࣮͜Ε͚ͩͰߏஙͰ͖ͪΌ͍·͢ (^^;; ## Πϯελϯε࡞ $ aws lightsail create-instances \ --instance-names
lightsail-tf-test \ --blueprint-id centos_7_1901_01 \ --bundle-id nano_2_0 \ --region ap-northeast-1 \ --availability-zone ap-northeast-1a ## ੩తIPͷऔಘ $ aws lightsail allocate-static-ip --static-ip-name lightsail-tf-test-static-ip ## ੩తIPͷΞλον $ aws lightsail attach-static-ip \ --static-ip-name lightsail-tf-test-static-ip \ --instance-name lightsail-tf-test
TerraFormͳͲͷߏཧπʔϧ͜ͷΑ͏ʹ༷ʑͳαʔϏεΛར༻͢Δ߹ʹศརʂ ͔ͤͬ͘ͳͷͰLightsailߏங࣌ʹ AWS System ManagerͷઃఆΛίʔυԽ
AWS System Managerઃఆʹඞཁͳ͜ͱ • IAMϩʔϧͷ࡞ (ϙϦγʔ: AmazonSSMManagedInstanceCore) • ϋΠϒϦοτΞΫςΟϕʔγϣϯͷొ •
ΠϯελϯεSSM-AgentͷΠϯετʔϧ • ΞΫςΟϕʔγϣϯίʔυɾΞΫςϕʔγϣϯIDΛొ • ϚωʔδυΠϯελϯεొ͞Ε͍ͯΔ͜ͱΛ֬ೝ • ηογϣϯϚωʔδϟଓ֬ೝ
Trraform Ͱ Lightsail Λ࡞ [SSM ొฤ] main.tf ---- ## session_manager
resource "aws_iam_role" "SSMServiceRole-tf" { name = "SSMServiceRole-tf" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "ssm.amazonaws.com"}, "Action": "sts:AssumeRole" } } EOF } resource "aws_iam_role_policy_attachment" "role_attach" { role = "${aws_iam_role.SSMServiceRole-tf.name}" policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" } resource "aws_ssm_activation" "activation" { name = "${var.Instance_name}" description = "session_manager_${var.Instance_name}" iam_role = "${aws_iam_role.SSMServiceRole-tf.id}" registration_limit = "1" depends_on = ["aws_iam_role_policy_attachment.role_attach"] } ----
Trraform Ͱ Lightsail Λ࡞ [SSM ొฤ] ## Instance Create resource
"aws_lightsail_instance" "instance" { name = "${var.Instance_name}" availability_zone = "ap-northeast-1a" blueprint_id = "${var.OS_name}" bundle_id = "${var.Instance_type}" key_pair_name = "${aws_lightsail_key_pair.key_pair.name}" user_data = <<EOF #/bin/bash yum update -y yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm- agent.rpm systemctl stop amazon-ssm-agent amazon-ssm-agent -register -code ${aws_ssm_activation.activation.activation_code} -id $ {aws_ssm_activation.activation.id} -region "ap-northeast-1" systemctl start amazon-ssm-agent systemctl enable amazon-ssm-agent EOF } ϙΠϯτuser_dataʹώΞυΩϡϝϯτͰهࡌ͢ΔͱɺTerraformͷม͕༻Ͱ͖Δ͜ͱɻ
Trraform Ͱ Lightsail Λ࡞ [SSM ొฤ]
Trraform Ͱ Lightsail Λ࡞ [SSM ొฤ]
ֶश՝ • EC̎VPCͦͷଞͷϦιʔεTerraform Ͱߏஙͯ͠Έ͍ͨ ӈਤͷΑ͏ͳWAFͳͲ͏έʔε (ࢀߟ: https://dev.classmethod.jp/articles/terraform-supports-aws-waf-in-v-0-7-8/)
·ͱΊ • ͪΐͬͱ৮ͬͯΈ͚ͨͩͰ͕͢ɺTerraformجຊߏจͳͲΘ͔Γ͍͢ ެࣜυΩϡϝϯτɺࣄྫ͕ͨ͘͞Μ͋ΔͷͰݕࡧ͍͢͠ νʔϜӡ༻ํ๏͕Πϝʔδग़དྷ͍ͯͳ͍ͷ͕՝ • ϑΝΠϧߏઃܭ͔ͬ͠Γ͠ͳ͍ͱίʔυԽ͕େมͦ͏ • ҙ֎ͱࢥͬͨ௨Γʹಈ͍ͯ͘ΕΔͷͰָ͍͠ʂʂ
ࢀߟจݙ <ॻ੶> ࣮ફ5FSSBGPSNɹ"84ʹ͓͚ΔγεςϜઃܭͱϕετϓϥΫςΟε ٕज़ͷઘγϦʔζ <ࢀߟαΠτ> ެࣜIUUQTXXXUFSSBGPSNJPEPDTQSPWJEFSTBXTSMJHIUTBJM@JOTUBODFIUNM ࢀߟ"NB[PO-JHIU4BJMΛγϡοͱ࡞Δ IUUQTXXXUFDIDFFEJODDPNFOHJOFFS@CMPH
ࢀߟ5FSSBGPSNΈͱಋೖ෦Λ؆୯ʹ·ͱΊͯΈΔ IUUQTRJJUBDPNBOGBOHEJUFNT DDGGDFE ࢀߟ5FSSBGPSNೖࢿྉ WରԠ dجຊ͔ࣝΒઃܭӡ༻ɺ͓͖ͬͯ͘UJQT·Ͱd IUUQTRJJUBDPNGVLVCBLBJUFNTCFEDD
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ