2017-12-11 22 views
1

私の具体的な問題はthis guysと同じですが、彼の答えは十分ではなく、テラフォームにもこれ以上解決できる可能性のある新機能が追加されています。aws_s3_bucket_objectデータソースを持つs3オブジェクトのリストを取得するにはどうすればよいですか?

問題は、私はaws_elastic_beanstalk_application_versionを使ってBeanstalkのバージョンを登録していますが、新しいバージョンを登録する前に古いバージョンを削除しています。これはaws_elastic_beanstalk_application_versionが毎回置き換えられるためです。私が行う必要があるのは、新しいものを生成することです。

"count"とaws_s3_bucket_objectデータソースでこれを実行しようとしていますが、s3オブジェクトをリストとして取得する方法がわかりません。私は、ワイルドカードを試してみましたが、それは動作しません:

data "aws_s3_bucket_object" "eb-bucket-data" { 
    bucket = "mybucket" 
    key = "*" 
} 

resource "aws_elastic_beanstalk_application_version" "default" { 
    count  = "${length(data.aws_s3_bucket_object.eb-bucket-data.id)}" 
    name  = "${element(data.aws_s3_bucket_object.eb-bucket-data.key, count.index)}" 
    application = "myapp" 
    bucket  = "mybucket" 
    key  = "${element(data.aws_s3_bucket_object.eb-bucket-data.key, count.index)}" 
} 
+0

:https://github.com/terraform-providers/terraform-provider-aws/issues/2634 – red888

答えて

2

aws_s3_bucket_object data source現在、単一の項目のみを返します。あなたはアイテムのリストを反復することができますが、最初のアイテムのリストを見つける必要があるという最初の問題に戻ります。 (aws_availability_zoneaws_availability_zonesのようなもののように)オブジェクトのリストを返すaws_s3_bucket_objectsデータソースのプルリクエストを作成するショート

あなたは多分external data sourceを使用して砲撃し、AWS CLIを呼び出すことによってこれを達成することができます。

アン(未テスト)の例がこのようなものに見えるかもしれませんため:

data "external" "bucket_objects" { 
    program = ["aws", "s3", "ls", "mybucket", "|", "awk", "'{print", "$4}'", "|", "jq", "-R", "-s", "-c", "'split(\"\n\")'", "|", "jq", "'.[:-1]'"] 
} 

をこれは、バケット内のオブジェクトを一覧表示します

aws s3 ls mybucket | awk '{print $4}' | jq -R -s -c 'split("\n")' | jq '.[:-1]' 

を実行するだけで、ファイル名の要素を取り、にそれらを分割JSON配列をjqを使用して作成してから、externalデータソースは有効なJSONオブジェクトが返されることを期待しているため、JSON配列から末尾の改行要素を削除します。

あなたは、その後のようなものでそれにアクセスすることができる必要があります:この機能要求メイド

resource "aws_elastic_beanstalk_application_version" "default" { 
    count  = "${length(data.external.bucket_objects.result)}" 
    name  = "${data.external.bucket_objects.result[count.index]}" 
    application = "myapp" 
    bucket  = "mybucket" 
    key   = "${data.external.bucket_objects.result[count.index]" 
} 
+0

それは非常にポータブルではない、誰かがどこかでaws cliがインストールされていない場合はどうすれば?データソースは空に戻り、tfはすべてのバージョンの登録を解除しますか? – red888

+0

メモリからは、データソースにエラーがあると思って、計画/適用を中断しますが、試してみたいかどうかをテストするのは簡単です。 – ydaetskcoR

関連する問題