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
240
AWS-ハンズオンのススメ/サーバーレスアプリケーションの構築をやってみた
kaba0120
0
120
jaws-ug-tohoku-ec2imagebuilder
kaba0120
0
48
Lightsail_yukisat
kaba0120
0
50
jaws_ug_tohoku_jawsdays2021_recap_yukisat
kaba0120
0
64
Other Decks in Technology
See All in Technology
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
140
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.2k
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
120
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.3k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
230
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
220
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
200
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
550
ハーレムエンジニアリング
kazuma777777
0
150
サイバー捜査員研修(前半)
nomizone
1
2k
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Optimizing for Happiness
mojombo
378
71k
Mobile First: as difficult as doing things right
swwweet
225
10k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.2k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
380
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
GraphQLとの向き合い方2022年版
quramy
50
15k
Bash Introduction
62gerente
615
220k
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
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ