質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS OpsWorks

AWS OpsWorksは、AWSが提供するChefベースのアプリケーション管理サービス。クラウド上でアプリケーションの起動や設定、デプロイ、停止などを管理することができます。セットアップやデプロイの際に起こる人的ミスや工数負荷を軽減するなど、運用の自動化も可能です。

AWS CodeStar

AWS CodeStarは、ソフトウェア開発プロジェクトを作成し、管理および操作できるクラウドサービス。継続的デリバリーのツールチェーン全体を手軽に設定し、コードのリリースをすばやく開始できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

2711閲覧

[Terraform][AWS]アクセスキーとシークレットキーが上手く設定出来ない

ren0826nosuke

総合スコア34

Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS OpsWorks

AWS OpsWorksは、AWSが提供するChefベースのアプリケーション管理サービス。クラウド上でアプリケーションの起動や設定、デプロイ、停止などを管理することができます。セットアップやデプロイの際に起こる人的ミスや工数負荷を軽減するなど、運用の自動化も可能です。

AWS CodeStar

AWS CodeStarは、ソフトウェア開発プロジェクトを作成し、管理および操作できるクラウドサービス。継続的デリバリーのツールチェーン全体を手軽に設定し、コードのリリースをすばやく開始できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/09/10 06:02

編集2020/09/10 08:56

解決したいこと

アクセスキーとシークレットアクセスキーを環境変数に設定したい。

##現状
Terraformを使うためにまずAWSのアクセスキーの設定をしようとしました。その際に環境変数として読み込ませて、terraformコマンドを試しに打ち込んでみると以下のエラーが発生し上手く実行出来ませんでした。

##エラー文

Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ------------------------------------------------------------------------ Error: error configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. status code: 403, request id: b4360b49-f7b8-4b38-8163-19e89decca60

##実行コマンド

$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=~~~~~~~~~~~ $ export AWS_DEFAULT_REGION=ap-northeast-1 $ terraform init # ここでエラー発生しました $ terraform plan

##記述ファイル

provider.tf

provider "aws" { region = "ap-northeast-1" access_key = "アクセスキー" secret_key = "シークレットキー" }

main.tf

resource "aws_instance" "example" { ami = "ami-0f9ae750e8274075b" instance_type = "t3.micro" }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問事項に対する直接的な回答ではありませんが、認証情報を記述するのではなく profile に置き換えてみるのはいかがでしょうか。

aws cli の configure サブコマンドで設定できる「プロファイル」を terraform から参照できるはずです。aws cli の設定が正しくできており、かつデプロイに必要なIAMポリシーを持っているならば、terraformでのデプロイも動くはずです。記述としても、おそらくそちらの方がスッキリして良いのではないかと思います。

このあたりの詳細な説明は巷に解説記事が出てますので割愛しますが、以下の記事などは参考になるのではないかと思います。

https://qiita.com/takumiabe/items/07943f23436aa983f397#%E6%93%8D%E4%BD%9C%E7%94%A8aws%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E6%89%B1%E3%81%84

投稿2020/09/10 15:51

hassaku_63

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/09/10 16:16

補足すると、profileは環境変数AWS_PROFILEでも設定可能です。 環境変数を使うメリットはterraformのコードにクレデンシャル情報を一切記述しなくていいことで、環境変数さえ変えれば別の環境に同じterraformのコードを適用できることです。 自分が上で指摘している通り、環境変数が設定されている場合はそもそも認証情報を記述する必要がありません。 認証情報の渡し方についてはTerraformのドキュメントに詳細に記述があります。 https://registry.terraform.io/providers/hashicorp/aws/latest/docs また、環境変数を使って設定できるものについてはAWSの下記ドキュメントが参考になります。 https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-envvars.html#envvars-list (これはcliのものですが、基本的にほぼどのsdkでも同じです) direnvとかを使って環境変数を本番、ステージング、開発環境ごとに分けたりなどがやりやすくなります。 実際に自分はprofileを環境変数で切り替えて使用しています。 AWSの認証情報を取得する大まかな優先順位は大体どのsdkでも 環境変数 ↓ 共有クレデンシャル(主にはユーザがaws configureで設定したもの) ↓ IAMロール になっています。 このあたりの話をすると大きく話がそれてしまうのでこのへんで。
hassaku_63

2020/09/10 16:26

コメントありがとうございます。ご指摘の通りで、 > 環境変数が設定されている場合はそもそも認証情報を記述する必要がありません この状態がベストではあるだろうと思います。tf ファイルもコードレポジトリに載せるものですし、認証情報に関わる記述は可能な限り排除すべきと考えます。 この点について、私のコメントを真に受けると質問者の方に変な認識を植え付けてしまいそうなので訂正いたします。
hassaku_63

2020/09/10 17:11

なので、認証情報自体に問題があるのかどうか、これを切り分ける観点でひとまず aws cli のプロファイル設定を行います。AWS CLIの実行結果で切り分けできるのでは、というような意図がありました。 > 記述としても、おそらくそちらの方がスッキリして良いのではないかと思います。 上記に関しては yu_1985 さんの指摘通りですので、回答を訂正いたします。反論はありません。
ren0826nosuke

2020/09/11 00:55

お二人とも詳細な解説ありがとうございます! 一度このやり方を試してみたのですが、シークレットキーを貼り付けた際に文字数制限?なのか全部入りきらなくて断念したのですが、そのような場合どうすれば良いでしょうか??
yu_1985

2020/09/11 03:33

特にそんなところで制限はないはずですが…。 設定されたファイルはホームディレクトリの.aws/配下にあるはずなので正しく設定できているか確認してください。
ren0826nosuke

2020/09/11 09:22

シークレットキーが.aws/配下になかったです(泣 解決したので、yu_1985さんをベストアンサーにしました!
guest

0

ベストアンサー

printenvコマンドなどで、環境変数が正しく設定されているか確認してください。
念の為に環境変数を設定する際に値は""で囲っておいたほうが安全です。

また、provider "aws" のところで余計な設定をしていないかも確認してみてください。

投稿2020/09/10 08:28

yu_1985

総合スコア7586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ren0826nosuke

2020/09/10 08:46

環境変数確認結果内容は大丈夫そうでした。 providerの記述は問題なさそうなんですけど、ファイル内容追記したのでよければ確認お願いします。
ren0826nosuke

2020/09/11 00:51

一度中身無しで試してみたのですが変化ありませんでした。。
yu_1985

2020/09/11 03:36 編集

環境変数に余計なスペースが入ってるとかありがちですが、問題ないですか? 環境変数に限らず、値をセットするときはダブルクオーテーションで囲っておいたほうが安全なケースは多いです。 あと、使っている鍵自体に権限が足りているか、とか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問