Saya mencoba menjalankan Terraform di dalam wadah Docker di mesin Windows saya. Saya sebenarnya berhasil menjalankan Terraform dalam wadah Docker. Namun saya ingin menjalankan perintah 'terraform apply --auto-approve' alih-alih 'terraform apply' sehingga terraform tidak meminta konfirmasi untuk menerapkan perubahan.

Saya menggunakan AWS sebagai penyedia. Saya memiliki file docker sendiri yang saya tulis dan menggunakan hashicorp/terraform:light sebagai gambar dasar.

Berikut ini adalah file docker saya:

# Use an official HashiCorp Terraform runtime as a base image.
FROM hashicorp/terraform:light AS base
#To create working directory.
WORKDIR /trojanwall-infra
# To add contents to the working directory.
ADD . /trojanwall-infra 
# Copy the contents.
COPY . /trojanwall-infra
# To check the current version of Hashicorp Terraform. 



# Use the base image to create a packaged image. 
FROM base AS package
#To add to the working directory.
WORKDIR /root/.aws
# To copy the AWS credentials to root folder.
COPY ./Key/aws/config /root/.aws
COPY ./Key/aws/credentials /root/.aws



# Use the packaged image to create a final image.
FROM package AS final
#To add to the working directory.
WORKDIR /trojanwall-infra
# To Run Terraform init and initialize.
RUN terraform init
#RUN command inside the container.
CMD ["plan"]
CMD ["apply"] 

Dockerfile di atas benar-benar berfungsi, tetapi akan meminta konfirmasi 'ya'/'tidak' saat dijalankan sebagai wadah Docker. Saya ingin menggunakannya agak sebagai berikut:

#RUN command inside the container.
CMD ["apply", "--auto-approve"] 

Tetapi dikatakan bahwa ini adalah format yang tidak valid. Tebak CMD dockerfile tidak dapat menjalankan banyak perintah dengan cara ini.

Adakah yang bisa memberikan wawasan dan membantu saya?

0
arjunbnair 10 Mei 2021, 22:51

2 jawaban

Jawaban Terbaik

Saya telah memperbaiki masalah menggunakan 'ENTRYPOINT' di file buruh pelabuhan itu sendiri. Alasan mengapa 'terapkan' dan 'rencana' sederhana berfungsi di file Docker adalah karena perintah terraform disetel sebagai 'ENTRYPOINT' di gambar dasar itu sendiri (yaitu, hashicorp/terraform).

Mengingat hal itu, saya membuat file bernama 'run' (cukup membuat file tanpa ekstensi) di sistem file dan menambahkan perintah terraform plan dan terraform apply --auto-approve ke dalamnya dan juga menambahkan baris kode baru 'ENTRYPOINT /trojanwall-infra/run' ke dalam file '.dockerignore'. Oleh karena itu, setelah wadah Docker dibuat dan dijalankan, jika pertama ambil file shell 'run' di sistem file dan jalankan dan membuat '--auto-approve' masuk gambar.

Dockerfile yang dimodifikasi:

.dockerignore (Bagian terakhir dari yang asli)

# Use the packaged image to create a final image.
FROM package AS final
#To add to the working directory.
WORKDIR /trojanwall-infra
# To Run Terraform init and initialize.
RUN terraform init
#RUN Terraform run command inside the container.
ENTRYPOINT /trojanwall-infra/run

jalankan (File tanpa ekstensi namun masih berfungsi seperti file shell di dalam wadah)

terraform plan
terraform apply --auto-approve

Ini adalah informasi baru bagi saya dan saya harap ini bermanfaat bagi semua orang yang mencari jawaban.

Terima kasih teman-teman.

0
arjunbnair 12 Mei 2021, 19:19

Versi Terraform apa yang Anda gunakan? Versi saya (0.14.8) tidak memiliki opsi --auto-apply, dan saya tidak dapat melihatnya disebutkan di tempat lain di web. Saya menduga Anda bermaksud menggunakan -auto-approve, yang seharusnya berfungsi seperti yang Anda coba:

# ...

# RUN command inside the container.
CMD ["apply", "-auto-approve"] 
1
lxop 10 Mei 2021, 23:32