{"id":48374,"date":"2023-07-03T07:45:54","date_gmt":"2023-05-24T06:46:07","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/"},"modified":"2024-04-30T11:45:22","modified_gmt":"2024-04-30T03:45:22","slug":"%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883"},"content":{"rendered":"<h1>\u603b\u7ed3<\/h1>\n<p>\u6211\u4e3a\u4e86\u66f4\u6df1\u5165\u7406\u89e3Terraform\uff0c\u642d\u5efa\u4e86\u4e00\u4e2a\u7b80\u5355\u7684AWS\u73af\u5883\uff0c\u5982\u4e0b\u6240\u793a\u3002\u8fd9\u7bc7\u6587\u7ae0\u8bb0\u5f55\u4e86\u8fd9\u4e2a\u8fc7\u7a0b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d84f3913a08637a6b7a29\/2-0.jpeg\" alt=\"\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7_\u69cb\u6210\u56f3.jpg\" \/><\/div>\n<h1>\u73af\u5883<\/h1>\n<p>Terraform\u7248\u672c\uff1a1.5.6<\/p>\n<h1>\u8bf7\u505a\u597d\u51c6\u5907\u3002<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">IAM\u30e6\u30fc\u30b6\u306e\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3068\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u7528\u610f\u3057\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u4ee5\u4e0b6\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6e96\u5099\u3057\u307e\u3059\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 main.tf \r\n\u251c\u2500\u2500 variables.tf\r\n\u251c\u2500\u2500 vpc.tf\r\n\u251c\u2500\u2500 ec2.tf\r\n\u251c\u2500\u2500 rds.tf\r\n\u2514\u2500\u2500 output.tf\r\n<\/code><\/pre>\n<h2>\u6bcf\u4e2a\u6587\u4ef6\u7684\u7ec6\u8282<\/h2>\n<h3>\u4e3b.tf<\/h3>\n<p>\u5bf9\u4e8e\u8981\u4f7f\u7528\u7684\u4f9b\u5e94\u5546\u8fdb\u884c\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code>provider <span class=\"s2\">\"aws\"<\/span> <span class=\"o\">{<\/span>\r\n  region     <span class=\"o\">=<\/span> <span class=\"s2\">\"ap-northeast-1\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># \u81ea\u5206\u306e\u30d1\u30d6\u30ea\u30c3\u30afIP\u53d6\u5f97\u7528<\/span>\r\nprovider <span class=\"s2\">\"http\"<\/span> <span class=\"o\">{}<\/span>\r\n<\/code><\/pre>\n<h3>\u53d8\u91cf.tf<\/h3>\n<p>\u6211\u4f1a\u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u4e8e\u53c2\u8003\u4ed6\u7684\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>variable <span class=\"s2\">\"az_a\"<\/span> <span class=\"o\">{<\/span>\r\n  default     <span class=\"o\">=<\/span> <span class=\"s2\">\"ap-northeast-1a\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\nvariable <span class=\"s2\">\"az_d\"<\/span> <span class=\"o\">{<\/span>\r\n  default     <span class=\"o\">=<\/span> <span class=\"s2\">\"ap-northeast-1d\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\nvariable <span class=\"s2\">\"access_key\"<\/span> <span class=\"o\">{<\/span>\r\n  default     <span class=\"o\">=<\/span> &lt;\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3092\u8a18\u8f09\u3057\u3066\u4e0b\u3055\u3044&gt;\r\n<span class=\"o\">}<\/span>\r\n\r\nvariable <span class=\"s2\">\"secret_key\"<\/span> <span class=\"o\">{<\/span>\r\n  default     <span class=\"o\">=<\/span> &lt;\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u8a18\u8f09\u3057\u3066\u4e0b\u3055\u3044&gt;\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u8bf7\u4e3a\u6211\u521b\u5efa\u4e00\u4e2a\u540d\u4e3avpc.tf\u7684\u6587\u4ef6\u3002<\/h3>\n<p>\u5b9a\u4e49VPC\u53ca\u5176\u76f8\u5173\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># VPC<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_vpc\"<\/span> <span class=\"s2\">\"practice_vpc\"<\/span><span class=\"o\">{<\/span>\r\n  cidr_block           <span class=\"o\">=<\/span> <span class=\"s2\">\"10.0.0.0\/16\"<\/span>\r\n  enable_dns_hostnames <span class=\"o\">=<\/span> <span class=\"nb\">true\r\n  <\/span>tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-vpc\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Public Subnet<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_subnet\"<\/span> <span class=\"s2\">\"practice_public_1a_sn\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  cidr_block        <span class=\"o\">=<\/span> <span class=\"s2\">\"10.0.1.0\/24\"<\/span>\r\n  availability_zone <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.az_a<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-public-1a-sn\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Private Subnet(1a)<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_subnet\"<\/span> <span class=\"s2\">\"practice_private_1a_sn\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  cidr_block        <span class=\"o\">=<\/span> <span class=\"s2\">\"10.0.2.0\/24\"<\/span>\r\n  availability_zone <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.az_a<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-private-1a-sn\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Private Subnet(1d)<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_subnet\"<\/span> <span class=\"s2\">\"practice_private_1d_sn\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  cidr_block        <span class=\"o\">=<\/span> <span class=\"s2\">\"10.0.3.0\/24\"<\/span>\r\n  availability_zone <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.az_d<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-private-1d-sn\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Internet Gateway<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_internet_gateway\"<\/span> <span class=\"s2\">\"practice_igw\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-igw\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Elastic IP<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_eip\"<\/span> <span class=\"s2\">\"practice_eip\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc <span class=\"o\">=<\/span> <span class=\"nb\">true\r\n\r\n  <\/span>tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-eip\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># NAT Gateway<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_nat_gateway\"<\/span> <span class=\"s2\">\"practice_natgw\"<\/span> <span class=\"o\">{<\/span>\r\n  subnet_id     <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_subnet<\/span><span class=\"p\">.practice_public_1a_sn.id<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  allocation_id <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_eip<\/span><span class=\"p\">.practice_eip.id<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-natgw\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Route table(Public Subnet)<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Route table<\/span>\r\nresource <span class=\"s2\">\"aws_route_table\"<\/span> <span class=\"s2\">\"practice_public_rt\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  route <span class=\"o\">{<\/span>\r\n    cidr_block      <span class=\"o\">=<\/span> <span class=\"s2\">\"0.0.0.0\/0\"<\/span>\r\n    gateway_id      <span class=\"o\">=<\/span> aws_internet_gateway.practice_igw.id\r\n  <span class=\"o\">}<\/span>\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-public-rt\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Subnet\u3068Route table\u306e\u95a2\u9023\u4ed8\u3051<\/span>\r\nresource <span class=\"s2\">\"aws_route_table_association\"<\/span> <span class=\"s2\">\"practice_public_rt_associate\"<\/span> <span class=\"o\">{<\/span>\r\n  subnet_id      <span class=\"o\">=<\/span> aws_subnet.practice_public_1a_sn.id\r\n  route_table_id <span class=\"o\">=<\/span> aws_route_table.practice_public_rt.id\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Route table(Private Subnet)<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Route table<\/span>\r\nresource <span class=\"s2\">\"aws_route_table\"<\/span> <span class=\"s2\">\"practice_private_rt\"<\/span> <span class=\"o\">{<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  route <span class=\"o\">{<\/span>\r\n    cidr_block      <span class=\"o\">=<\/span> <span class=\"s2\">\"0.0.0.0\/0\"<\/span>\r\n    gateway_id      <span class=\"o\">=<\/span> aws_nat_gateway.practice_natgw.id\r\n  <span class=\"o\">}<\/span>\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-private-rt\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Subnet\u3068Route table\u306e\u95a2\u9023\u4ed8\u3051<\/span>\r\n<span class=\"c\">#Private Subnet(1a)<\/span>\r\nresource <span class=\"s2\">\"aws_route_table_association\"<\/span> <span class=\"s2\">\"practice_private_1a_rt_associate\"<\/span> <span class=\"o\">{<\/span>\r\n  subnet_id      <span class=\"o\">=<\/span> aws_subnet.practice_private_1a_sn.id\r\n  route_table_id <span class=\"o\">=<\/span> aws_route_table.practice_private_rt.id\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\">#Private Subnet(1d)<\/span>\r\nresource <span class=\"s2\">\"aws_route_table_association\"<\/span> <span class=\"s2\">\"practice_private_1d_rt_associate\"<\/span> <span class=\"o\">{<\/span>\r\n  subnet_id      <span class=\"o\">=<\/span> aws_subnet.practice_private_1d_sn.id\r\n  route_table_id <span class=\"o\">=<\/span> aws_route_table.practice_private_rt.id\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Security Group<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># \u81ea\u5206\u306e\u30d1\u30d6\u30ea\u30c3\u30afIP\u3092\u53d6\u5f97<\/span>\r\ndata <span class=\"s2\">\"http\"<\/span> <span class=\"s2\">\"ifconfig\"<\/span> <span class=\"o\">{<\/span>\r\n  url <span class=\"o\">=<\/span> <span class=\"s2\">\"http:\/\/ipv4.icanhazip.com\/\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\nvariable <span class=\"s2\">\"allowed_cidr\"<\/span> <span class=\"o\">{<\/span>\r\n  default <span class=\"o\">=<\/span> null\r\n<span class=\"o\">}<\/span>\r\n\r\nlocals <span class=\"o\">{<\/span>\r\n  myip          <span class=\"o\">=<\/span> chomp<span class=\"o\">(<\/span>data.http.ifconfig.body<span class=\"o\">)<\/span>\r\n  allowed_cidr  <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>var.allowed_cidr <span class=\"o\">==<\/span> null<span class=\"o\">)<\/span> ? <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">local<\/span><span class=\"p\">.myip<\/span><span class=\"k\">}<\/span><span class=\"s2\">\/32\"<\/span> : var.allowed_cidr\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Security Group for EC2<\/span>\r\nresource <span class=\"s2\">\"aws_security_group\"<\/span> <span class=\"s2\">\"practice_ec2_sg\"<\/span> <span class=\"o\">{<\/span>\r\n  name              <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-ec2-sg\"<\/span>\r\n  description       <span class=\"o\">=<\/span> <span class=\"s2\">\"For EC2 Linux\"<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-ec2-sg\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"c\"># \u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb<\/span>\r\n  ingress <span class=\"o\">{<\/span>\r\n    from_port   <span class=\"o\">=<\/span> 22\r\n    to_port     <span class=\"o\">=<\/span> 22\r\n    protocol    <span class=\"o\">=<\/span> <span class=\"s2\">\"tcp\"<\/span>\r\n    cidr_blocks <span class=\"o\">=<\/span> <span class=\"o\">[<\/span>local.allowed_cidr]\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"c\"># \u30a2\u30a6\u30c8\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb<\/span>\r\n  egress <span class=\"o\">{<\/span>\r\n    from_port   <span class=\"o\">=<\/span> 0\r\n    to_port     <span class=\"o\">=<\/span> 0\r\n    protocol    <span class=\"o\">=<\/span> <span class=\"s2\">\"-1\"<\/span>\r\n    cidr_blocks <span class=\"o\">=<\/span> <span class=\"o\">[<\/span><span class=\"s2\">\"0.0.0.0\/0\"<\/span><span class=\"o\">]<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Security Group for RDS<\/span>\r\nresource <span class=\"s2\">\"aws_security_group\"<\/span> <span class=\"s2\">\"practice_rds_sg\"<\/span> <span class=\"o\">{<\/span>\r\n  name              <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-rds-sg\"<\/span>\r\n  description       <span class=\"o\">=<\/span> <span class=\"s2\">\"For RDS\"<\/span>\r\n  vpc_id            <span class=\"o\">=<\/span> aws_vpc.practice_vpc.id\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-rds-sg\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"c\"># \u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb<\/span>\r\n  ingress <span class=\"o\">{<\/span>\r\n    from_port   <span class=\"o\">=<\/span> 5432\r\n    to_port     <span class=\"o\">=<\/span> 5432\r\n    protocol    <span class=\"o\">=<\/span> <span class=\"s2\">\"tcp\"<\/span>\r\n    cidr_blocks <span class=\"o\">=<\/span> <span class=\"o\">[<\/span><span class=\"s2\">\"10.0.1.0\/24\"<\/span><span class=\"o\">]<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"c\"># \u30a2\u30a6\u30c8\u30d0\u30a6\u30f3\u30c9\u30eb\u30fc\u30eb<\/span>\r\n  egress <span class=\"o\">{<\/span>\r\n    from_port   <span class=\"o\">=<\/span> 0\r\n    to_port     <span class=\"o\">=<\/span> 0\r\n    protocol    <span class=\"o\">=<\/span> <span class=\"s2\">\"-1\"<\/span>\r\n    cidr_blocks <span class=\"o\">=<\/span> <span class=\"o\">[<\/span><span class=\"s2\">\"0.0.0.0\/0\"<\/span><span class=\"o\">]<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h3>ec2.tf\u7684\u4e2d\u6587\u672c\u5730\u5316\u7248\u672c\uff1a\u4e9a\u9a6c\u900aEC2\u8d44\u6e90\u914d\u7f6e\u6587\u4ef6<\/h3>\n<p>\u6211\u5011\u5c07\u5b9a\u7fa9EC2\u53ca\u5176\u76f8\u95dc\u8cc7\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># EC2 Key pair<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nvariable <span class=\"s2\">\"key_name\"<\/span> <span class=\"o\">{<\/span>\r\n  default <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-keypair\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># \u79d8\u5bc6\u9375\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u8a2d\u5b9a<\/span>\r\nresource <span class=\"s2\">\"tls_private_key\"<\/span> <span class=\"s2\">\"practice_private_key\"<\/span> <span class=\"o\">{<\/span>\r\n  algorithm <span class=\"o\">=<\/span> <span class=\"s2\">\"RSA\"<\/span>\r\n  rsa_bits  <span class=\"o\">=<\/span> 2048\r\n<span class=\"o\">}<\/span>\r\n\r\nlocals <span class=\"o\">{<\/span>\r\n  private_key_file <span class=\"o\">=<\/span> <span class=\"s2\">\"&lt;\u4efb\u610f\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8a18\u8f09\u3057\u3066\u4e0b\u3055\u3044&gt;\/<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.key_name<\/span><span class=\"k\">}<\/span><span class=\"s2\">.id_rsa\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># \u79d8\u5bc6\u9375\u3092\u4f5c\u6210<\/span>\r\nresource <span class=\"s2\">\"local_file\"<\/span> <span class=\"s2\">\"practice_private_key_pem\"<\/span> <span class=\"o\">{<\/span>\r\n  filename <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">local<\/span><span class=\"p\">.private_key_file<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  content  <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">tls_private_key<\/span><span class=\"p\">.practice_private_key.private_key_pem<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># \u516c\u958b\u9375\u3092AWS\u306eKey pair\u306b\u30a4\u30f3\u30dd\u30fc\u30c8<\/span>\r\nresource <span class=\"s2\">\"aws_key_pair\"<\/span> <span class=\"s2\">\"practice_keypair\"<\/span> <span class=\"o\">{<\/span>\r\n  key_name   <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.key_name<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  public_key <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">tls_private_key<\/span><span class=\"p\">.practice_private_key.public_key_openssh<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># EC2<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># Amazon Linux 2 \u306e\u6700\u65b0\u7248AMI\u3092\u53d6\u5f97<\/span>\r\ndata <span class=\"s2\">\"aws_ssm_parameter\"<\/span> <span class=\"s2\">\"amzn2_lapractice_ami\"<\/span> <span class=\"o\">{<\/span>\r\n  name <span class=\"o\">=<\/span> <span class=\"s2\">\"\/aws\/service\/ami-amazon-linux-latest\/amzn2-ami-hvm-x86_64-gp2\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># EC2\u4f5c\u6210<\/span>\r\nresource <span class=\"s2\">\"aws_instance\"<\/span> <span class=\"s2\">\"practice_ec2\"<\/span><span class=\"o\">{<\/span>\r\n  ami                         <span class=\"o\">=<\/span> data.aws_ssm_parameter.amzn2_lapractice_ami.value\r\n  instance_type               <span class=\"o\">=<\/span> <span class=\"s2\">\"t2.micro\"<\/span>\r\n  availability_zone           <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.az_a<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  vpc_security_group_ids      <span class=\"o\">=<\/span> <span class=\"o\">[<\/span>aws_security_group.practice_ec2_sg.id]\r\n  subnet_id                   <span class=\"o\">=<\/span> aws_subnet.practice_public_1a_sn.id\r\n  associate_public_ip_address <span class=\"o\">=<\/span> <span class=\"s2\">\"true\"<\/span>\r\n  key_name                    <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.key_name<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n    Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-ec2\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<\/code><\/pre>\n<h3>rds.tf\u53ef\u4ee5\u7528\u4e2d\u6587\u8fdb\u884c\u539f\u751f\u7684\u6539\u5199\u3002<\/h3>\n<p>\u5bf9\u4e8eRDS\u53ca\u5176\u76f8\u5173\u8d44\u6e90\u8fdb\u884c\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># DB Subnet Group<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_db_subnet_group\"<\/span> <span class=\"s2\">\"practice-dbsg\"<\/span> <span class=\"o\">{<\/span>\r\n    name        <span class=\"o\">=<\/span> <span class=\"s2\">\"praivate-dbsg\"<\/span>\r\n    subnet_ids  <span class=\"o\">=<\/span> <span class=\"o\">[<\/span><span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_subnet<\/span><span class=\"p\">.practice_private_1a_sn.id<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>, <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_subnet<\/span><span class=\"p\">.practice_private_1d_sn.id<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span><span class=\"o\">]<\/span>\r\n    tags <span class=\"o\">=<\/span> <span class=\"o\">{<\/span>\r\n        Name <span class=\"o\">=<\/span> <span class=\"s2\">\"terraform-practice-dbsg\"<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># ---------------------------<\/span>\r\n<span class=\"c\"># RDS<\/span>\r\n<span class=\"c\"># ---------------------------<\/span>\r\nresource <span class=\"s2\">\"aws_db_instance\"<\/span> <span class=\"s2\">\"practice_rds\"<\/span> <span class=\"o\">{<\/span>\r\n  identifier           <span class=\"o\">=<\/span> <span class=\"s2\">\"practice-db\"<\/span>\r\n  allocated_storage    <span class=\"o\">=<\/span> 20\r\n  availability_zone    <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">var<\/span><span class=\"p\">.az_a<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  storage_type         <span class=\"o\">=<\/span> <span class=\"s2\">\"gp2\"<\/span>\r\n  engine               <span class=\"o\">=<\/span> <span class=\"s2\">\"postgres\"<\/span>\r\n  engine_version       <span class=\"o\">=<\/span> <span class=\"s2\">\"14.7\"<\/span>\r\n  instance_class       <span class=\"o\">=<\/span> <span class=\"s2\">\"db.t3.micro\"<\/span>\r\n  db_name              <span class=\"o\">=<\/span> &lt;DB\u540d\u3092\u8a18\u8f09\u3057\u3066\u4e0b\u3055\u3044&gt;\r\n  username             <span class=\"o\">=<\/span> &lt;\u30e6\u30fc\u30b6\u540d\u3092\u8a18\u8f09\u3057\u3066\u4e0b\u3055\u3044&gt;\r\n  password             <span class=\"o\">=<\/span> &lt;PW\u3092\u8a18\u8f09\u3057\u3066\u4e0b\u3055\u3044&gt;\r\n  vpc_security_group_ids  <span class=\"o\">=<\/span> <span class=\"o\">[<\/span><span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_security_group<\/span><span class=\"p\">.practice_rds_sg.id<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span><span class=\"o\">]<\/span>\r\n  db_subnet_group_name <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_db_subnet_group<\/span><span class=\"p\">.practice-dbsg.name<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n  skip_final_snapshot <span class=\"o\">=<\/span> <span class=\"nb\">true<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u8f93\u51fa.tf<\/h3>\n<p>\u8bbe\u5b9a\u8f93\u51fa\u6240\u521b\u5efa\u7684EC2\u5b9e\u4f8b\u7684\u516c\u5171IP\u5730\u5740\u3002<\/p>\n<pre class=\"post-pre\"><code>output <span class=\"s2\">\"ec2_global_ips\"<\/span> <span class=\"o\">{<\/span>\r\n  value <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">aws_instance<\/span><span class=\"p\">.practice_ec2.*.public_ip<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u5efa\u7acb\u73af\u5883<\/h1>\n<p>\u4e00\u65e6\u51c6\u5907\u597d\u4e86\uff0c\u6211\u4eec\u5c06\u4f7f\u7528Terraform\u547d\u4ee4\u8fdb\u884c\u5b9e\u9645\u6784\u5efa\u3002<\/p>\n<h3>\u521d\u59cb\u5316\u64cd\u4f5c\u76ee\u5f55<\/h3>\n<p>\u6267\u884cterraform init\uff0c\u5e76\u5b89\u88c5\u6240\u9700\u7684\u63d2\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform init\r\n\r\nInitializing the backend...\r\n\r\nInitializing provider plugins...\r\n- Finding latest version of hashicorp\/aws...\r\n- Finding latest version of hashicorp\/local...\r\n- Finding latest version of hashicorp\/tls...\r\n- Finding latest version of hashicorp\/http...\r\n- Installing hashicorp\/aws v5.17.0...\r\n- Installed hashicorp\/aws v5.17.0 <span class=\"o\">(<\/span>signed by HashiCorp<span class=\"o\">)<\/span>\r\n- Installing hashicorp\/local v2.4.0...\r\n- Installed hashicorp\/local v2.4.0 <span class=\"o\">(<\/span>signed by HashiCorp<span class=\"o\">)<\/span>\r\n- Installing hashicorp\/tls v4.0.4...\r\n- Installed hashicorp\/tls v4.0.4 <span class=\"o\">(<\/span>signed by HashiCorp<span class=\"o\">)<\/span>\r\n- Installing hashicorp\/http v3.4.0...\r\n- Installed hashicorp\/http v3.4.0 <span class=\"o\">(<\/span>signed by HashiCorp<span class=\"o\">)<\/span>\r\n\r\nTerraform has created a lock file .terraform.lock.hcl to record the provider\r\nselections it made above. Include this file <span class=\"k\">in <\/span>your version control repository\r\nso that Terraform can guarantee to make the same selections by default when\r\nyou run <span class=\"s2\">\"terraform init\"<\/span> <span class=\"k\">in <\/span>the future.\r\n\r\nTerraform has been successfully initialized!\r\n\r\nYou may now begin working with Terraform. Try running <span class=\"s2\">\"terraform plan\"<\/span> to see\r\nany changes that are required <span class=\"k\">for <\/span>your infrastructure. All Terraform commands\r\nshould now work.\r\n\r\nIf you ever <span class=\"nb\">set <\/span>or change modules or backend configuration <span class=\"k\">for <\/span>Terraform,\r\nrerun this <span class=\"nb\">command <\/span>to reinitialize your working directory. If you forget, other\r\ncommands will detect it and remind you to <span class=\"k\">do <\/span>so <span class=\"k\">if <\/span>necessary.\r\n<\/code><\/pre>\n<p>\u4e00\u65e6\u51fa\u73b0&#8221;Terraform\u5df2\u6210\u529f\u521d\u59cb\u5316!&#8221;\u7684\u63d0\u793a\uff0c\u5c31\u8868\u793a\u4e00\u5207\u6b63\u5e38\u3002<\/p>\n<h3>\u6587\u6cd5\u68c0\u67e5<\/h3>\n<p>\u6267\u884c&#8221;terraform validate&#8221;\u547d\u4ee4\uff0c\u68c0\u67e5tf\u6587\u4ef6\u7684\u8bed\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform validate\r\n\r\nSuccess! The configuration is valid, but there were some validation warnings as shown above.\r\n<\/code><\/pre>\n<p>\u6210\u529f\u4e86\uff01\u5982\u679c\u663e\u793a\u201c\u914d\u7f6e\u6709\u6548\u201d\uff0c\u90a3\u5c31\u6ca1\u95ee\u9898\u4e86\u3002<\/p>\n<h3>\u786e\u8ba4\u521b\u5efa\u7684\u8d44\u6e90<\/h3>\n<p>\u6267\u884c terraform plan \u547d\u4ee4\uff0c\u4ee5\u786e\u8ba4\u4f1a\u521b\u5efa\u54ea\u4e9b\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform plan\r\n\r\ndata.http.ifconfig: Reading...\r\ndata.http.ifconfig: Read <span class=\"nb\">complete <\/span>after 0s <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>http:\/\/ipv4.icanhazip.com\/]\r\ndata.aws_ssm_parameter.amzn2_lapractice_ami: Reading...\r\ndata.aws_ssm_parameter.amzn2_lapractice_ami: Read <span class=\"nb\">complete <\/span>after 0s <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>\/aws\/service\/ami-amazon-linux-latest\/amzn2-ami-hvm-x86_64-gp2]\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  <span class=\"c\"># aws_db_instance.practice_rds will be created<\/span>\r\n  + resource <span class=\"s2\">\"aws_db_instance\"<\/span> <span class=\"s2\">\"practice_rds\"<\/span> <span class=\"o\">{<\/span>\r\n      + address                               <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n      + allocated_storage                     <span class=\"o\">=<\/span> 20\r\n      + apply_immediately                     <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span>\r\n      + arn                                   <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n      + auto_minor_version_upgrade            <span class=\"o\">=<\/span> <span class=\"nb\">true<\/span>\r\n      + availability_zone                     <span class=\"o\">=<\/span> <span class=\"s2\">\"ap-northeast-1a\"<\/span>\r\n      + backup_retention_period               <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n      + backup_target                         <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n\r\n<span class=\"nt\">-------<\/span>\u9577\u3044\u305f\u3081\u9014\u4e2d\u7701\u7565-------\r\n\r\nPlan: 20 to add, 0 to change, 0 to destroy.\r\n\r\nChanges to Outputs:\r\n  + ec2_global_ips <span class=\"o\">=<\/span> <span class=\"o\">[<\/span>\r\n      + <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>,\r\n    <span class=\"o\">]<\/span>\r\n\r\nNote: You didn<span class=\"s1\">'t use the -out option to save this plan, so Terraform can'<\/span>t guarantee to take exactly these actions <span class=\"k\">if <\/span>you run <span class=\"s2\">\"terraform apply\"<\/span> now.\r\n\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u8ba1\u5212\u7684\u7ed3\u679c\u53ef\u4ee5\u5927\u81f4\u5206\u4e3a\u4ee5\u4e0b\u4e09\u4e2a\u90e8\u5206\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4f5c\u6210\uff1a\u30ea\u30bd\u30fc\u30b9\u540d\u306e\u5f8c\u306b\u300cwill be created\u300d\u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5909\u66f4\uff1a\u30ea\u30bd\u30fc\u30b9\u540d\u306e\u5f8c\u306b\u3001\u300cwill be updated inplace\u300d\u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u524a\u9664\uff1a\u30ea\u30bd\u30fc\u30b9\u540d\u306e\u5f8c\u306b\u3001\u300cwill be destoryed\u300d\u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002<\/ul>\n<p>\u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u6211\u4eec\u5c06\u521b\u5efa20\u4e2a\u65b0\u8d44\u6e90\uff0c\u6ca1\u6709\u4efb\u4f55\u66f4\u6539\u6216\u5220\u9664\u3002<\/p>\n<h3>\u521b\u5efa\u8d44\u6e90<\/h3>\n<p>\u5f53\u4f60\u8fd0\u884cterraform apply\u65f6\uff0c\u5b9e\u9645\u4e0a\u4f1a\u521b\u5efa\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform apply\r\n\r\ndata.http.ifconfig: Reading...\r\ndata.http.ifconfig: Read <span class=\"nb\">complete <\/span>after 0s <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>http:\/\/ipv4.icanhazip.com\/]\r\ndata.aws_ssm_parameter.amzn2_lapractice_ami: Reading...\r\ndata.aws_ssm_parameter.amzn2_lapractice_ami: Read <span class=\"nb\">complete <\/span>after 0s <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>\/aws\/service\/ami-amazon-linux-latest\/amzn2-ami-hvm-x86_64-gp2]\r\n\r\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\r\n  + create\r\n\r\nTerraform will perform the following actions:\r\n\r\n  <span class=\"c\"># aws_db_instance.practice_rds will be created<\/span>\r\n  + resource <span class=\"s2\">\"aws_db_instance\"<\/span> <span class=\"s2\">\"practice_rds\"<\/span> <span class=\"o\">{<\/span>\r\n      + address                               <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n      + allocated_storage                     <span class=\"o\">=<\/span> 20\r\n      + apply_immediately                     <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span>\r\n      + arn                                   <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n      + auto_minor_version_upgrade            <span class=\"o\">=<\/span> <span class=\"nb\">true<\/span>\r\n      + availability_zone                     <span class=\"o\">=<\/span> <span class=\"s2\">\"ap-northeast-1a\"<\/span>\r\n      + backup_retention_period               <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n      + backup_target                         <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>known after apply<span class=\"o\">)<\/span>\r\n\r\n<span class=\"nt\">-------<\/span>\u9577\u3044\u305f\u3081\u9014\u4e2d\u7701\u7565-------\r\n\r\nDo you want to perform these actions?\r\n  Terraform will perform the actions described above.\r\n  Only <span class=\"s1\">'yes'<\/span> will be accepted to approve.\r\n\r\n  Enter a value: <span class=\"nb\">yes<\/span> <span class=\"c\">#yes\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/span>\r\n\r\n\r\nlocal_file.practice_private_key_pem: Creating...\r\naws_key_pair.practice_keypair: Creating...\r\naws_eip.practice_eip: Creating...\r\naws_vpc.practice_vpc: Creating...\r\n\r\n<span class=\"nt\">-------<\/span>\u9577\u3044\u305f\u3081\u9014\u4e2d\u7701\u7565-------\r\n\r\nApply <span class=\"nb\">complete<\/span><span class=\"o\">!<\/span> Resources: 20 added, 0 changed, 0 destroyed.\r\n\r\nOutputs:\r\n\r\nec2_global_ips <span class=\"o\">=<\/span> <span class=\"o\">[<\/span>\r\n  <span class=\"s2\">\"xx.xx.xx.xx\"<\/span>,\r\n<span class=\"o\">]<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u51fa\u73b0\u201c\u7533\u8bf7\u5b8c\u6210\uff01\u201d\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<p>\u6211\u4f1a\u4ece\u7ba1\u7406\u63a7\u5236\u53f0\u4e0a\u786e\u8ba4\u8d44\u6e90\u662f\u5426\u5df2\u7ecf\u521b\u5efa\u3002<br \/>\n\u203b\u4e5f\u53ef\u4ee5\u4f7f\u7528terraform show\u547d\u4ee4\u8fdb\u884c\u786e\u8ba4\u3002<br \/>\n\u4ee5\u4e0b\u662fEC2\u7684\u793a\u4f8b\uff0c\u786e\u8ba4\u5df2\u6210\u529f\u521b\u5efa\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d84f3913a08637a6b7a29\/48-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2023-10-02 105349.png\" \/><\/div>\n<h1>\u6e05\u7406\u73af\u5883<\/h1>\n<p>\u5982\u679c\u7ee7\u7eed\u653e\u7f6e\u4e0d\u7ba1\uff0c\u5c06\u4f1a\u53d1\u751f\u6536\u8d39\uff0c\u6240\u4ee5\u6211\u4f1a\u8fdb\u884c\u5220\u9664\u64cd\u4f5c\u3002<br \/>\n\u5982\u679c\u8981\u8fdb\u884c\u5220\u9664\uff0c\u8bf7\u6267\u884cterraform destroy\u547d\u4ee4\u3002<br \/>\n\u203b\u8bf7\u52a1\u5fc5\u5341\u5206\u6ce8\u610f\uff0c\u56e0\u4e3a\u4e4b\u524d\u521b\u5efa\u7684\u6240\u6709\u8d44\u6e90\u5c06\u88ab\u5220\u9664\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform destroy\r\n\r\ndata.http.ifconfig: Reading...\r\ntls_private_key.practice_private_key: Refreshing state... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>xxx]\r\nlocal_file.practice_private_key_pem: Refreshing state... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>xxx]\r\ndata.http.ifconfig: Read <span class=\"nb\">complete <\/span>after 0s <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>http:\/\/ipv4.icanhazip.com\/]\r\ndata.aws_ssm_parameter.amzn2_lapractice_ami: Reading...\r\n\r\n<span class=\"nt\">-------<\/span>\u9577\u3044\u305f\u3081\u9014\u4e2d\u7701\u7565-------\r\n\r\nDo you really want to destroy all resources?\r\n  Terraform will destroy all your managed infrastructure, as shown above.\r\n  There is no undo. Only <span class=\"s1\">'yes'<\/span> will be accepted to confirm.\r\n\r\n  Enter a value: <span class=\"nb\">yes<\/span> <span class=\"c\">#yes\u3092\u5165\u529b<\/span>\r\n\r\nlocal_file.practice_private_key_pem: Destroying... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>xxx]\r\nlocal_file.practice_private_key_pem: Destruction <span class=\"nb\">complete <\/span>after 0s\r\naws_route_table_association.practice_private_1d_rt_associate: Destroying... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>xxx]\r\naws_route_table_association.practice_private_1a_rt_associate: Destroying... <span class=\"o\">[<\/span><span class=\"nb\">id<\/span><span class=\"o\">=<\/span>xxx]\r\n\r\n<span class=\"nt\">-------<\/span>\u9577\u3044\u305f\u3081\u9014\u4e2d\u7701\u7565-------\r\n\r\nDestroy <span class=\"nb\">complete<\/span><span class=\"o\">!<\/span> Resources: 20 destroyed.\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u663e\u793a&#8221;Destroy complete!&#8221;\uff0c\u5c31\u8868\u793aOK\u4e86\u3002<br \/>\n\u6700\u540e\u4f7f\u7528terraform show\u6765\u786e\u8ba4\u662f\u5426\u5df2\u7ecf\u88ab\u5220\u9664\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>terraform show\r\nThe state file is empty. No resources are represented.\r\n<\/code><\/pre>\n<p>\u6211\u5e76\u6ca1\u6709\u88ab\u5220\u9664\u3002<\/p>\n<h1>\u8bf7\u63d0\u4f9b\u66f4\u591a\u4e0a\u4e0b\u6587\uff0c\u4ee5\u4fbf\u6b63\u786e\u7406\u89e3\u60a8\u60f3\u8981\u7684\u7ffb\u8bd1\u5185\u5bb9\u3002<\/h1>\n<p>\u6211\u53c2\u8003\u4e86\u8fd9\u4e2a\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">https:\/\/kacfg.com\/terraform-vpc-ec2\/<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">https:\/\/y-ohgi.com\/introduction-terraform\/handson\/vpc\/<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">https:\/\/qiita.com\/Brutus\/items\/cd5aab062ea6cebe436c<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u603b\u7ed3 \u6211\u4e3a\u4e86\u66f4\u6df1\u5165\u7406\u89e3Terraform\uff0c\u642d\u5efa\u4e86\u4e00\u4e2a\u7b80\u5355\u7684AWS\u73af\u5883\uff0c\u5982\u4e0b\u6240\u793a\u3002\u8fd9\u7bc7\u6587\u7ae0\u8bb0\u5f55\u4e86\u8fd9\u4e2a\u8fc7\u7a0b\u3002 \u73af\u5883 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48374","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u8f7b\u677e\u6784\u5efaaws\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883\" \/>\n<meta property=\"og:description\" content=\"\u603b\u7ed3 \u6211\u4e3a\u4e86\u66f4\u6df1\u5165\u7406\u89e3Terraform\uff0c\u642d\u5efa\u4e86\u4e00\u4e2a\u7b80\u5355\u7684AWS\u73af\u5883\uff0c\u5982\u4e0b\u6240\u793a\u3002\u8fd9\u7bc7\u6587\u7ae0\u8bb0\u5f55\u4e86\u8fd9\u4e2a\u8fc7\u7a0b\u3002 \u73af\u5883 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u8f7b\u677e\u6784\u5efaaws\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-24T06:46:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T03:45:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d84f3913a08637a6b7a29\/2-0.jpeg\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/\",\"name\":\"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-05-24T06:46:07+00:00\",\"dateModified\":\"2024-04-30T03:45:22+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u8f7b\u677e\u6784\u5efaaws\u73af\u5883\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883","og_description":"\u603b\u7ed3 \u6211\u4e3a\u4e86\u66f4\u6df1\u5165\u7406\u89e3Terraform\uff0c\u642d\u5efa\u4e86\u4e00\u4e2a\u7b80\u5355\u7684AWS\u73af\u5883\uff0c\u5982\u4e0b\u6240\u793a\u3002\u8fd9\u7bc7\u6587\u7ae0\u8bb0\u5f55\u4e86\u8fd9\u4e2a\u8fc7\u7a0b\u3002 \u73af\u5883 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528terraform\u8f7b\u677e\u6784\u5efaaws\u73af\u5883\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-05-24T06:46:07+00:00","article_modified_time":"2024-04-30T03:45:22+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d84f3913a08637a6b7a29\/2-0.jpeg"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/","name":"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-05-24T06:46:07+00:00","dateModified":"2024-04-30T03:45:22+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Terraform\u8f7b\u677e\u6784\u5efaAWS\u73af\u5883"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8terraform%e8%bd%bb%e6%9d%be%e6%9e%84%e5%bb%baaws%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48374"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48374\/revisions"}],"predecessor-version":[{"id":91716,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48374\/revisions\/91716"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}