<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Terraform</title>
	<atom:link href="https://techgrowup.net/tag/terraform/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Tue, 30 May 2023 05:34:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>Terraform</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>terraformを使おうとすると急にエラーが出た</title>
		<link>https://techgrowup.net/tfenv-error/</link>
					<comments>https://techgrowup.net/tfenv-error/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Mon, 08 May 2023 01:29:15 +0000</pubDate>
				<category><![CDATA[エラー集]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Terraform]]></category>
		<category><![CDATA[trenv]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1576</guid>

					<description><![CDATA[事象 　私の環境はMac M1を利用しており、tfenvを用いてTerraformを利用していましたが、GW明けに利用しようとすると、急に&#8221;terraformはPCに影響を与えます。ゴミ箱に移動してください&#038; [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">事象</h2>



<p class="wp-block-paragraph">　私の環境はMac M1を利用しており、tfenvを用いてTerraformを利用していましたが、GW明けに利用しようとすると、急に&#8221;terraformはPCに影響を与えます。ゴミ箱に移動してください&#8221;のようなエラーが出てきました。</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">原因</h2>



<p class="wp-block-paragraph">　HashiCorp社側で秘密鍵の更新がMacOSだと4/24に行われたようです。</p>





<a rel="noopener" target="_blank" href="https://discuss.hashicorp.com/t/hcsec-2023-01-hashicorp-response-to-circleci-security-alert/48842/2" title="HCSEC-2023-01 - HashiCorp Response to CircleCI Security Alert" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img fetchpriority="high" decoding="async" src="https://techgrowup.net/wp-content/uploads/cocoon-resources/blog-card-cache/11439bd7ac50cc52e8ba2149ec707335.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">HCSEC-2023-01 - HashiCorp Response to CircleCI Security Alert</div><div class="blogcard-snippet external-blogcard-snippet">HashiCorp has finished analysis of the subset of repositories that were integrated with CircleCI and have created and ex...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://discuss.hashicorp.com/t/hcsec-2023-01-hashicorp-response-to-circleci-security-alert/48842/2" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">discuss.hashicorp.com</div></div></div></div></a>




<h2 class="wp-block-heading">解決方法</h2>



<p class="wp-block-paragraph">　再インストールすることで解決します(以下は私が利用している1.3.4での例です)</p>



<pre class="wp-block-code"><code>tfenv uninstall 1.3.4
tfenv install 1.3.4
tfenv use 1.3.4</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/tfenv-error/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TerraformでLambdaに固定グローバルIPを振る</title>
		<link>https://techgrowup.net/terrafor-lambda-elastic-ip/</link>
					<comments>https://techgrowup.net/terrafor-lambda-elastic-ip/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sat, 16 Jul 2022 10:18:30 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[Elastic IP]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[Terraform]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1544</guid>

					<description><![CDATA[概要 今回は接続するサーバーや環境によって、グローバルIP制限が掛けられていることが多々あるかと思います。そのようなときにLambdaから固定IPを振る必要があるため、Terraformでどのようにresouceを作って [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">概要</h2>



<p class="wp-block-paragraph"> 今回は接続するサーバーや環境によって、グローバルIP制限が掛けられていることが多々あるかと思います。そのようなときにLambdaから固定IPを振る必要があるため、Terraformでどのようにresouceを作っていけばよいか解説します。</p>



<p class="wp-block-paragraph"> 全体の構成としては以下のような形になり、VPC配下にパブリックサブネットとプライベートサブネットを作成します。その後パブリックサブネットのルートにはIGW(インターネットゲートウェイ)を入れ、プライベートサブネットのルートにNATゲートウェイを入れます。そしてNATゲートウェイにEIPを付与すればLambdaが固定IPでインターネットに出られるようになります。<br><span class="red"> ※今回VPCはデフォルトで作成されているものを利用することとします。</span></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="677" src="https://techgrowup.net/wp-content/uploads/2022/07/スクリーンショット-2022-07-16-19.14.19-1024x677.png" alt="" class="wp-image-1545" srcset="https://techgrowup.net/wp-content/uploads/2022/07/スクリーンショット-2022-07-16-19.14.19-1024x677.png 1024w, https://techgrowup.net/wp-content/uploads/2022/07/スクリーンショット-2022-07-16-19.14.19-300x198.png 300w, https://techgrowup.net/wp-content/uploads/2022/07/スクリーンショット-2022-07-16-19.14.19-768x508.png 768w, https://techgrowup.net/wp-content/uploads/2022/07/スクリーンショット-2022-07-16-19.14.19-1536x1016.png 1536w, https://techgrowup.net/wp-content/uploads/2022/07/スクリーンショット-2022-07-16-19.14.19.png 1878w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">EIPとIGWとNATゲートウェイの作成</h2>



<p class="wp-block-paragraph"> まずEIPを作成します。適宜リソース名などは必要に応じて変更してください。</p>



<pre class="wp-block-code"><code>resource "aws_eip" "eip" {
  vpc = true

  tags = {
    Name = "EIP"
  }
}</code></pre>



<p class="wp-block-paragraph"> 続いてIGWを作成します。</p>



<pre class="wp-block-code"><code>resource "aws_internet_gateway" "gw" {
  vpc_id = "vpc-id" //利用するvpcのidを入力する

  tags = {
    Name = "gw"
  }
} </code></pre>



<p class="wp-block-paragraph"> 続いてNATゲートウェイを作成します。subnet_idの部分は後ほどプライベートサブネットを作成します。</p>



<pre class="wp-block-code"><code>resource "aws_nat_gateway" "nat_gateway" {
  allocation_id     = aws_eip.eip.id
  subnet_id         = aws_subnet.private_subnet.id
  connectivity_type = "public"

  tags = {
    Name = "Nat Gateway"
  }
}</code></pre>



<h2 class="wp-block-heading">サブネットを作成する</h2>



<p class="wp-block-paragraph"> まずパブリックサブネットを作成し、ルートテーブルにIGWを紐付けます。</p>



<pre class="wp-block-code"><code>resource "aws_subnet" "public_subnet" {
  availability_zone = "ap-northeast-1a"
  vpc_id            = "vpc-id" //利用するvpcのidを入力する
  cidr_block        = "172.31.16.0/20" // VPCのCidrによって変更してください

  tags = {
    Name = "Public Subnet"
  }
}

resource "aws_route_table" "public_subnet_route_table" {
  vpc_id = "vpc-id" //利用するvpcのidを入力する

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.gw.id
  }

  tags = {
    Name = " Public Subnet Route Table"
  }
}

resource "aws_route_table_association" "public_subnet_route_table_association" {
  subnet_id      = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public_subnet_route_table.id
}</code></pre>



<p class="wp-block-paragraph"> 続いてプライベートサブネットを作成し、NATゲートウェイをルートテーブルに入れます。</p>



<pre class="wp-block-code"><code>resource "aws_subnet" "private_subnet" {
  availability_zone = "ap-northeast-1a"
  vpc_id            = "vpc-id" //利用するvpcのidを入力する
  cidr_block        = "172.31.32.0/20" // VPCのCidrによって変更してください

  tags = {
    Name = "Private Subnet"
  }
}

resource "aws_route_table" "private_subnet_route_table" {
  vpc_id = "vpc-id" //利用するvpcのidを入力する

  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.nat_gateway.id
  }

  tags = {
    Name = "Private Subnet Route Table"
  }
}

resource "aws_route_table_association" "private_subnet_route_table_association" {
  subnet_id      = aws_subnet.private_subnet.id
  route_table_id = aws_route_table.private_subnet_route_table.id
}</code></pre>



<h2 class="wp-block-heading">Lambdaへの紐付け</h2>



<p class="wp-block-paragraph"> まずセキュリティグループを作成します。今回は全ての通信を許可しておきます。</p>



<pre class="wp-block-code"><code>resource "aws_security_group" "security_group" {
  name        = "SecurityGroup"
  description = " security group"
  vpc_id      = "vpc-id" //利用するvpcのidを入力する
  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = &#91;"0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = &#91;"0.0.0.0/0"]

  }

  tags = {
    Name = " Security Group"
  }
}</code></pre>



<p class="wp-block-paragraph"> そして最後にLambdaをプライベートサブネット内に配置します。aws_lambda_functionのresouce内に以下を記載してください。</p>



<pre class="wp-block-code"><code>  vpc_config {
    security_group_ids = &#91;aws_security_group.security_group.id]
    subnet_ids         = &#91;aws_subnet.private_subnet.id]
  }</code></pre>



<h2 class="wp-block-heading">終わりに</h2>



<p class="wp-block-paragraph"> これでLambdaへ固定IPを振ることができたと思います。Terraformは日々アップデートが入り書き方が変わっていく可能性もあるので、上手く行かなかったら公式サイトを読んでみてください。</p>





<a rel="noopener" target="_blank" href="https://registry.terraform.io/" title="Terraform Registry" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fregistry.terraform.io%2F?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Terraform Registry</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://registry.terraform.io/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">registry.terraform.io</div></div></div></div></a>

]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/terrafor-lambda-elastic-ip/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TerraformでtfstateをS3で管理する</title>
		<link>https://techgrowup.net/terraform%e3%81%a7tfstate%e3%82%92s3%e3%81%a7%e7%ae%a1%e7%90%86%e3%81%99%e3%82%8b/</link>
					<comments>https://techgrowup.net/terraform%e3%81%a7tfstate%e3%82%92s3%e3%81%a7%e7%ae%a1%e7%90%86%e3%81%99%e3%82%8b/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sun, 17 Apr 2022 15:58:25 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[IaC]]></category>
		<category><![CDATA[Terraform]]></category>
		<category><![CDATA[運用]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1523</guid>

					<description><![CDATA[ローカルPCへのAWS設定 　ローカルPCにAWSの設定を入れます。(AWSマネジメントコンソール上でアクセスキーを取得しているものとします。　ターミナル上でaws configureと入力し、取得済みのID、Keyを入 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">ローカルPCへのAWS設定</h2>



<p class="wp-block-paragraph">　ローカルPCにAWSの設定を入れます。(AWSマネジメントコンソール上でアクセスキーを取得しているものとします。<br>　ターミナル上でaws configureと入力し、取得済みのID、Keyを入力します。リージョンは利用したいもので問題ありません(東京ならap-northeast-1)。フォーマットはjsonが良いでしょう。</p>



<pre class="wp-block-code"><code>$ aws configure
(※下記については右のコマンドで確認可「$ cat ~/.aws/credentials」)
AWS Access Key ID &#91;None]: AWSアカウントで発行したアクセスキー IDを入力
AWS Secret Access Key &#91;None]: AWSアカウントで発行したシークレットアクセスキーを入力
(※下記については右のコマンドで確認可「$ cat ~/.aws/credentials」)
Default region name &#91;None]: ap-northeast-1など利用したいリージョン名を入力
Default output format &#91;None]: jsonを入力</code></pre>



<h2 class="wp-block-heading">tfstateを管理するためのS3を準備</h2>



<p class="wp-block-paragraph"> まずtfstateを管理するためのS3バケットを作成します。適当にmain.tfなどの名前をつけたtfファイルを用意して、下記コードをコピペして後、tfstateを管理するバケットの名前を変更してください。</p>



<pre class="wp-block-code"><code>terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  profile = "default"
  region  = "ap-northeast-1"
}

resource "aws_s3_bucket" "terraform_state" {
  bucket = "terraform-state" #適当なユニークの名前に変えてください
}

resource "aws_s3_bucket_versioning" "versioning_example" {
  bucket = aws_s3_bucket.terraform_state.id
  versioning_configuration {
    status = "Enabled"
  }
}</code></pre>



<p class="wp-block-paragraph"> 次にterraformを初期化します</p>



<pre class="wp-block-code"><code>$ terraform init</code></pre>



<p class="wp-block-paragraph">  次に上記を反映させるためにplanとapplyをします</p>



<pre class="wp-block-code"><code>$ terraform plan</code></pre>



<p class="wp-block-paragraph"> planでは作成(変更/削除も含む)されるリソースが表示されるので、S3のバケットが作成されることを確認してください。問題なければapplyを実行します。</p>



<pre class="wp-block-code"><code>$ terraform apply</code></pre>



<p class="wp-block-paragraph"> ここで「Do you want to perform these actions? Terraform will perform the actions described above. Only &#8216;yes&#8217; will be accepted to approve.」と聞かれるので「yes」入力してEnterを押しましょう。</p>



<p class="wp-block-paragraph"> すると「Apply complete! Resources: 2 added, 0 changed, 0 destroyed」となると思いますので一旦完了です。</p>



<h2 class="wp-block-heading">tfstateの管理を作成したS3バケットにする</h2>



<p class="wp-block-paragraph"> 現状ではtfstateの管理はローカルになっていて、tfstate用にS3バケットが作成されただけなので、今後はS3に管理してもらうようにします。以下のようにbackendの部分を追加し、tfstate用のバケット名に変更しましょう。</p>



<pre class="wp-block-code"><code>terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }

  backend "s3" {
    bucket  = "" #作成したtfstate用のS3バケット名を入力
    region  = "ap-northeast-1"
    key     = "terraform.tfstate"
    encrypt = true
  }
}</code></pre>



<p class="wp-block-paragraph"> 続いてもう一度初期化を実行します</p>



<pre class="wp-block-code"><code>$ terraform init</code></pre>



<p class="wp-block-paragraph"> ここでtfstateの管理対象がS3に切り替わりました。</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">複数人でteffaformを変更する際のTips</h2>



<p class="wp-block-paragraph"> 複数人でterraformを利用するときは、1つのS3バケットを利用していると同時に変更を走らせてしまったときなどにコンフリクトしてしまったり不用意に削除してしまったりすることがあるので、backendにDynamoDBを利用して状態をロックするような仕組みを用います。</p>



<p class="wp-block-paragraph"> まずDynamoDBのテーブルを作成します。main.tfなどのtfファイルに以下を追加しましょう。</p>



<pre class="wp-block-code"><code>resource "aws_dynamodb_table" "terraform_state_lock" {
  name = "terraform_state_lock"
  read_capacity = 1
  write_capacity = 1
  hash_key = "LockID"

  attribute {
    name = "LockID"
    type = "S"
  }
}</code></pre>



<p class="wp-block-paragraph"> そして、planとapplyを同様に実行しましょう。</p>



<h2 class="wp-block-heading">backendにDynamoDBを追加する</h2>



<p class="wp-block-paragraph"> 最初に追加したコードのbackend部分にDynamoDBを追加します。</p>



<pre class="wp-block-code"><code>terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~&gt; 3.27"
    }
  }

  required_version = "&gt;= 0.14.9"

  backend "s3" {
    bucket  = ""
    region  = "ap-northeast-1"
    key     = "terraform.tfstate"
    encrypt = true
    dynamodb_table = "terraform_state_lock" #追加した部分
  }
}</code></pre>



<p class="wp-block-paragraph"> そしてbackendが変更されたので、terraformを初期化するのですが、現在のsteteとバッティングして怒られので今回はmigrateを実行します。</p>



<pre class="wp-block-code"><code>$ terraform init -migrate-state</code></pre>



<p class="wp-block-paragraph"> こうすることで複数人で開発ができるようになりました。以上になります。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/terraform%e3%81%a7tfstate%e3%82%92s3%e3%81%a7%e7%ae%a1%e7%90%86%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-07-09 00:06:31 by W3 Total Cache
-->