Share
Embed
Transcript
24 slides
-
ΞδΣϯμ • 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औಘͰ͖͍ͯΔɻ -
࣮͜Ε͚ͩͰߏஙͰ͖ͪΌ͍·͢ (^^;; ## Πϯελϯε࡞ $ 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 -
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ͷม͕༻Ͱ͖Δ͜ͱɻ -
ࢀߟจݙ <ॻ੶> ࣮ફ5FSSBGPSNɹ"84ʹ͓͚ΔγεςϜઃܭͱϕετϓϥΫςΟε ٕज़ͷઘγϦʔζ <ࢀߟαΠτ> ެࣜIUUQTXXXUFSSBGPSNJPEPDTQSPWJEFSTBXTSMJHIUTBJM@JOTUBODFIUNM ࢀߟ"NB[PO-JHIU4BJMΛγϡοͱ࡞Δ IUUQTXXXUFDIDFFEJODDPNFOHJOFFS@CMPH
ࢀߟ5FSSBGPSNΈͱಋೖ෦Λ؆୯ʹ·ͱΊͯΈΔ IUUQTRJJUBDPNBOGBOHEJUFNT DDGGDFE ࢀߟ5FSSBGPSNೖࢿྉ WରԠ dجຊ͔ࣝΒઃܭӡ༻ɺ͓͖ͬͯ͘UJQT·Ͱd IUUQTRJJUBDPNGVLVCBLBJUFNTCFEDD