Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
100
はじめてのAWS Step Functions -Cloudfrontのキャッシュ誤りを検知するためのシステムを構築してみた-/lets-try-aws-step-functions
kaba0120
0
230
AWS-ハンズオンのススメ/サーバーレスアプリケーションの構築をやってみた
kaba0120
0
120
jaws-ug-tohoku-ec2imagebuilder
kaba0120
0
44
Lightsail_yukisat
kaba0120
0
47
jaws_ug_tohoku_jawsdays2021_recap_yukisat
kaba0120
0
62
Other Decks in Technology
See All in Technology
Reliability in the Age of AI: Engineering for AI Velocity
rrreeeyyy
0
120
やさしいA2A入門
minorun365
PRO
10
1.5k
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
190
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
500
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
430
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
360
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.4k
タクシーアプリ『GO』の実践的データ活用
mot_techtalk
3
190
Snowflakeと仲良くなる第一歩
coco_se
4
370
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
110
LLMにもCAP定理があるという話
harukasakihara
0
280
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
860
Featured
See All Featured
BBQ
matthewcrist
89
10k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
550
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
From π to Pie charts
rasagy
0
200
New Earth Scene 8
popppiees
3
2.3k
Designing for Performance
lara
611
70k
The Cult of Friendly URLs
andyhume
79
6.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
Speed Design
sergeychernyshev
33
1.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
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ