

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menyebarkan aplikasi dan sumber daya Anda dengan AWS SAM
<a name="serverless-deploying"></a>

Menyebarkan ketentuan aplikasi Anda dan mengonfigurasi AWS sumber daya Anda di AWS Cloud, membuat aplikasi Anda berjalan di cloud. AWS SAM digunakan [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)sebagai mekanisme penyebaran yang mendasarinya. AWS SAM menggunakan artefak build yang Anda buat saat menjalankan **sam build** perintah sebagai input standar untuk menerapkan aplikasi tanpa server Anda.

Dengan AWS SAM, Anda dapat menerapkan aplikasi tanpa server secara manual, atau Anda dapat mengotomatiskan penerapan. Untuk mengotomatiskan penerapan, Anda menggunakan AWS SAM pipeline dengan sistem integrasi berkelanjutan dan penerapan berkelanjutan (CI/CD) pilihan Anda. Pipeline penerapan Anda adalah urutan langkah otomatis yang dilakukan untuk merilis versi baru aplikasi tanpa server Anda. 

Topik di bagian ini memberikan panduan tentang penerapan otomatis dan manual. Untuk menyebarkan aplikasi Anda secara manual, Anda menggunakan AWS SAMCLI perintah. Untuk mengotomatiskan penerapan, lihat topik di bagian ini. Mereka secara khusus menyediakan konten mendalam tentang mengotomatisasi penerapan menggunakan jaringan pipa dan sistem. CI/CD Ini termasuk membuat pipeline starter, menyiapkan otomatisasi, pemecahan masalah penerapan, menggunakan otentikasi pengguna OpenID Connect (OIDC), dan mengunggah file lokal saat penerapan.

**Topics**
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md)
+ [Opsi untuk menerapkan aplikasi Anda dengan AWS SAM](deploying-options.md)
+ [Menggunakan CI/CD sistem dan jaringan pipa untuk digunakan AWS SAM](deploying-cicd-overview.md)
+ [Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud](using-sam-cli-sync.md)

# Pengantar penerapan dengan AWS SAM
<a name="using-sam-cli-deploy"></a>

Gunakan AWS Serverless Application Model perintah Command Line Interface (AWS SAMCLI) `sam deploy` untuk menyebarkan aplikasi tanpa server Anda ke file. AWS Cloud
+ Untuk pengantar AWS SAMCLI, lihat[Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli).
+ Untuk daftar opsi `sam deploy` perintah, lihat[sam deploy](sam-cli-command-reference-sam-deploy.md).
+ Untuk contoh penggunaan `sam deploy` selama alur kerja pengembangan tipikal, lihat[Langkah 3: Menyebarkan aplikasi Anda ke AWS Cloud](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-deploy).

**Topics**
+ [Prasyarat](#using-sam-cli-deploy-prerequisites)
+ [Menyebarkan aplikasi menggunakan sam deploy](#using-sam-cli-deploy-deploying)
+ [Praktik terbaik](#using-sam-cli-deploy-best)
+ [Opsi untuk penyebaran sam](#using-sam-cli-deploy-options)
+ [Pemecahan masalah](#using-sam-cli-deploy-troubleshooting)
+ [Contoh](#using-sam-cli-deploy-examples)
+ [Pelajari selengkapnya](#using-sam-cli-deploy-learn)

## Prasyarat
<a name="using-sam-cli-deploy-prerequisites"></a>

Untuk menggunakan`sam deploy`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Sebelum menggunakan`sam deploy`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).

## Menyebarkan aplikasi menggunakan sam deploy
<a name="using-sam-cli-deploy-deploying"></a>

Saat Anda menerapkan aplikasi tanpa server untuk pertama kalinya, gunakan opsi tersebut. `--guided` Ini AWS SAMCLI akan memandu Anda melalui aliran interaktif untuk mengonfigurasi pengaturan penerapan aplikasi Anda.

**Untuk menyebarkan aplikasi menggunakan aliran interaktif**

1. Pergi ke direktori root proyek Anda. Ini adalah lokasi yang sama dengan AWS SAM template Anda.

   ```
   $ cd sam-app
   ```

1. Jalankan perintah berikut:

   ```
   $ sam deploy --guided
   ```

1. Selama alur interaktif, Anda AWS SAMCLI akan meminta opsi untuk mengonfigurasi pengaturan penerapan aplikasi Anda.

   Kurung (`[ ]`) menunjukkan nilai default. Biarkan jawaban Anda kosong untuk memilih nilai default. Nilai default diperoleh dari file konfigurasi berikut:
   + `~/.aws/config`— Pengaturan AWS akun umum Anda.
   + `~/.aws/credentials`— Kredensi AWS akun Anda.
   + `<project>/samconfig.toml`— File konfigurasi proyek Anda.

   Berikan nilai dengan menjawab AWS SAMCLI petunjuknya. Misalnya, Anda dapat memasukkan `y` nilai **ya**, `n` untuk **tidak**, atau string.

    AWS SAMCLIMenulis tanggapan Anda ke `samconfig.toml` file proyek Anda. Untuk penerapan berikutnya, Anda dapat menggunakan `sam deploy` untuk menerapkan menggunakan nilai yang dikonfigurasi ini. Untuk mengkonfigurasi ulang nilai-nilai ini, gunakan `sam deploy --guided` lagi atau langsung memodifikasi file konfigurasi Anda.

   Berikut ini adalah contoh output:

   ```
   sam-app $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
           Looking for config file [samconfig.toml] :  Found
           Reading default arguments  :  Success
   
           Setting default arguments for 'sam deploy'
           =========================================
           Stack Name [sam-app]: ENTER
           AWS Region [us-west-2]: ENTER
           #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
           Confirm changes before deploy [Y/n]: ENTER
           #SAM needs permission to be able to create roles to connect to the resources in your template
           Allow SAM CLI IAM role creation [Y/n]: ENTER
           #Preserves the state of previously provisioned resources when an operation fails
           Disable rollback [y/N]: ENTER
           HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
           Save arguments to configuration file [Y/n]: ENTER
           SAM configuration file [samconfig.toml]: ENTER
           SAM configuration environment [default]: ENTER
   ```

1. Selanjutnya, AWS SAMCLI menyebarkan aplikasi Anda ke file. AWS Cloud Selama penerapan, kemajuan ditampilkan di prompt perintah Anda. Berikut ini adalah tahapan utama dalam penyebaran:
   + Untuk aplikasi dengan AWS Lambda fungsi yang dikemas sebagai arsip file.zip, AWS SAMCLI ritsleting dan upload paket ke bucket Amazon Simple Storage Service (Amazon S3). Jika perlu, AWS SAMCLI akan membuat ember baru.
   + Untuk aplikasi dengan fungsi Lambda paket sebagai image kontainer, AWS SAMCLI upload gambar ke Amazon Elastic Container Registry (Amazon ECR). Jika perlu, AWS SAMCLI akan membuat repositori baru.
   +  AWS SAMCLIMembuat set AWS CloudFormation perubahan dan menyebarkan aplikasi Anda CloudFormation sebagai tumpukan.
   +  AWS SAMCLIIni memodifikasi AWS SAM template yang Anda gunakan dengan `CodeUri` nilai baru untuk fungsi Lambda Anda.

   Berikut ini adalah contoh dari output AWS SAMCLI deployment:

   ```
           Looking for resources needed for deployment:
   
           Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
           A different default S3 bucket can be set in samconfig.toml and auto resolution of buckets turned off by setting resolve_s3=False
   
           Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
           This parameter will be only saved under [default.global.parameters] in /Users/.../sam-app/samconfig.toml.
   
           Saved arguments to config file
           Running 'sam deploy' for future deployments will use the parameters saved above.
           The above parameters can be changed by modifying samconfig.toml
           Learn more about samconfig.toml syntax at 
           https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
   
           Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  262144 / 619839  (42.29%)Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  524288 / 619839  (84.58%)Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  619839 / 619839  (100.00%)
   
           Deploying with following values
           ===============================
           Stack name                   : sam-app
           Region                       : us-west-2
           Confirm changeset            : True
           Disable rollback             : False
           Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
           Capabilities                 : ["CAPABILITY_IAM"]
           Parameter overrides          : {}
           Signing Profiles             : {}
   
   Initiating deployment
   =====================
   
           Uploading to sam-app-zip/be84c20f868068e4dc4a2c11966edf2d.template  1212 / 1212  (100.00%)
   
   
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   -------------------------------------------------------------------------------------------------
   Operation                LogicalResourceId        ResourceType             Replacement            
   -------------------------------------------------------------------------------------------------
   + Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                            oWorldPermissionProd     n                                               
   + Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
   + Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
   + Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                            yment47fc2d5f9d          yment                                           
   + Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                            tage                                                                     
   + Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                     pi                                              
   -------------------------------------------------------------------------------------------------
   
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680559234/d9f58a77-98bc-41cd-b9f4-433a5a450d7a
   
   
   Previewing CloudFormation changeset before deployment
   ======================================================
   Deploy this changeset? [y/N]: y
   
   2023-04-03 12:00:50 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 5.0 seconds)
   -------------------------------------------------------------------------------------------------
   ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
   -------------------------------------------------------------------------------------------------
   CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
   CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                              Initiated              
   CREATE_COMPLETE          AWS::IAM::Role           HelloWorldFunctionRole   -                      
   CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       -                      
   CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       Resource creation      
                                                                              Initiated              
   CREATE_COMPLETE          AWS::Lambda::Function    HelloWorldFunction       -                      
   CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                            pi                                                                       
   CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        Resource creation      
                            pi                                                Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                            pi                                                                       
   CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                            n                        oWorldPermissionProd                            
   CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                            yment                    yment47fc2d5f9d                                 
   CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   Resource creation      
                            n                        oWorldPermissionProd     Initiated              
   CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   Resource creation      
                            yment                    yment47fc2d5f9d          Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                            yment                    yment47fc2d5f9d                                 
   CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                     tage                                            
   CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   Resource creation      
                                                     tage                     Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                     tage                                            
   CREATE_COMPLETE          AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                            n                        oWorldPermissionProd                            
   CREATE_COMPLETE          AWS::CloudFormation::S   sam-app-zip              -                      
                            tack                                                                     
   -------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   -------------------------------------------------------------------------------------------------
   Outputs                                                                                         
   -------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole                                                   
   Description         Implicit IAM Role created for Hello World function                          
   Value               arn:aws:iam::012345678910:role/sam-app-zip-                                 
   HelloWorldFunctionRole-11ZOGSCG28H0M                                                            
   
   Key                 HelloWorldApi                                                               
   Description         API Gateway endpoint URL for Prod stage for Hello World function            
   Value               https://njzfhdmls0.execute-api.us-west-2.amazonaws.com/Prod/hello/          
   
   Key                 HelloWorldFunction                                                          
   Description         Hello World Lambda Function ARN                                             
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-                 
   HelloWorldFunction-XPqNX4TBu7qn                                                                 
   -------------------------------------------------------------------------------------------------
   
   
   Successfully created/updated stack - sam-app-zip in us-west-2
   ```

1. Untuk melihat aplikasi yang Anda gunakan, lakukan hal berikut:

   1. Buka CloudFormation konsol secara langsung dengan [https://console---aws.amazon.com.rproxy.goskope.comURL/cloudformation](https://console.aws.amazon.com/cloudformation/).

   1. Pilih **Tumpukan**.

   1. Identifikasi tumpukan Anda dengan nama aplikasi dan pilih.

### Verifikasi perubahan sebelum penerapan
<a name="using-sam-cli-deploy-deploying-changes"></a>

Anda dapat mengonfigurasi AWS SAMCLI untuk menampilkan set CloudFormation perubahan Anda dan meminta konfirmasi sebelum menerapkan.

**Untuk mengonfirmasi perubahan sebelum penerapan**

1. Selama`sam deploy --guided`, masukkan **Y** untuk mengonfirmasi perubahan sebelum penerapan.

   ```
   #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
   Confirm changes before deploy [Y/n]: Y
   ```

   Atau, Anda dapat memodifikasi `samconfig.toml` file Anda dengan yang berikut:

   ```
   [default.deploy]
   [default.deploy.parameters]
   confirm_changeset = true
   ```

1. Selama penyebaran, AWS SAMCLI akan meminta Anda untuk mengonfirmasi perubahan sebelum penerapan. Berikut ini adalah contohnya:

   ```
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   -------------------------------------------------------------------------------------------------
   Operation                LogicalResourceId        ResourceType             Replacement            
   -------------------------------------------------------------------------------------------------
   + Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                            oWorldPermissionProd     n                                               
   + Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
   + Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
   + Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                            yment47fc2d5f9d          yment                                           
   + Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                            tage                                                                     
   + Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                     pi                                              
   -------------------------------------------------------------------------------------------------
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680559234/d9f58a77-98bc-41cd-b9f4-433a5a450d7a
   Previewing CloudFormation changeset before deployment
   ======================================================
   Deploy this changeset? [y/N]: y
   ```

### Tentukan parameter tambahan selama penerapan
<a name="using-sam-cli-deploy-deploying-params"></a>

Anda dapat menentukan nilai parameter tambahan untuk dikonfigurasi saat menerapkan. Anda melakukan ini dengan memodifikasi AWS SAM template Anda dan mengonfigurasi nilai parameter Anda selama penerapan.

**Untuk menentukan parameter tambahan**

1. Ubah `Parameters` bagian AWS SAM template Anda. Berikut ini adalah contohnya:

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   ...
   Globals:
   ...
   Parameters:
     DomainName:
       Type: String
       Default: example
       Description: Domain name
   ```

1. Jalankan `sam deploy --guided`. Berikut ini adalah contoh output:

   ```
   sam-app $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
           Looking for config file [samconfig.toml] :  Found
           Reading default arguments  :  Success
   
           Setting default arguments for 'sam deploy'
           =========================================
           Stack Name [sam-app-zip]: ENTER
           AWS Region [us-west-2]: ENTER
           Parameter DomainName [example]: ENTER
   ```

### Konfigurasikan penandatanganan kode untuk fungsi Lambda Anda
<a name="using-sam-cli-deploy-deploying-signing"></a>

Anda dapat mengonfigurasi penandatanganan kode untuk fungsi Lambda Anda saat penerapan. Anda melakukan ini dengan memodifikasi AWS SAM template Anda dan mengonfigurasi penandatanganan kode selama penerapan.

**Untuk mengonfigurasi penandatanganan kode**

1. Tentukan `CodeSigningConfigArn` dalam AWS SAM template Anda. Berikut ini adalah contohnya:

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   ...
   Resources:
     HelloWorldFunction:
       Type: AWS::Serverless::Function
       Properties:
         CodeUri: hello_world/
         Handler: app.lambda_handler
         Runtime: python3.7
         CodeSigningConfigArn: arn:aws:lambda:us-east-1:111122223333:code-signing-config:csc-12e12345db1234567
   ```

1. Jalankan `sam deploy --guided`. Ini AWS SAMCLI akan meminta Anda untuk mengonfigurasi penandatanganan kode. Berikut ini adalah contoh output:

   ```
   #Found code signing configurations in your function definitions
   Do you want to sign your code? [Y/n]: ENTER
   #Please provide signing profile details for the following functions & layers
   #Signing profile details for function 'HelloWorld'
   Signing Profile Name: 
   Signing Profile Owner Account ID (optional):
   #Signing profile details for layer 'MyLayer', which is used by functions {'HelloWorld'}
   Signing Profile Name: 
   Signing Profile Owner Account ID (optional):
   ```

## Praktik terbaik
<a name="using-sam-cli-deploy-best"></a>
+ Saat menggunakan`sam deploy`, AWS SAMCLI menerapkan artefak build aplikasi Anda yang terletak di direktori. `.aws-sam` Saat Anda membuat perubahan pada file asli aplikasi Anda, jalankan `sam build` untuk memperbarui `.aws-sam` direktori sebelum menerapkan.
+ Saat menerapkan aplikasi untuk pertama kalinya, gunakan `sam deploy --guided` untuk mengonfigurasi pengaturan penerapan. Untuk penerapan berikutnya, Anda dapat menggunakan `sam deploy` untuk menerapkan dengan pengaturan yang dikonfigurasi.

## Opsi untuk penyebaran sam
<a name="using-sam-cli-deploy-options"></a>

Berikut ini adalah opsi yang umum digunakan untuk`sam deploy`. Untuk daftar semua opsi, lihat[sam deploy](sam-cli-command-reference-sam-deploy.md).

### Gunakan alur interaktif terpandu untuk menerapkan aplikasi Anda
<a name="using-sam-cli-deploy-options-guided"></a>

Gunakan `--guided` opsi untuk mengonfigurasi pengaturan penerapan aplikasi Anda melalui alur interaktif. Berikut ini adalah contohnya:

```
$ sam deploy --guided
```

Pengaturan penerapan aplikasi Anda disimpan dalam `samconfig.toml` file proyek Anda. Untuk mempelajari selengkapnya, lihat [Konfigurasikan pengaturan proyek](using-sam-cli-configure.md#using-sam-cli-configure-project).

## Pemecahan masalah
<a name="using-sam-cli-deploy-troubleshooting"></a>

Untuk memecahkan masalah AWS SAMCLI, lihat. [AWS SAMCLIpemecahan masalah](sam-cli-troubleshooting.md)

## Contoh
<a name="using-sam-cli-deploy-examples"></a>

### Menyebarkan aplikasi Hello World yang berisi fungsi Lambda yang dikemas sebagai arsip file.zip
<a name="using-sam-cli-deploy-examples-example1"></a>

Sebagai contoh, lihat [Langkah 3: Menyebarkan aplikasi Anda ke AWS Cloud](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-deploy) di tutorial aplikasi Hello World.

### Menyebarkan aplikasi Hello World yang berisi fungsi Lambda yang dikemas sebagai gambar kontainer
<a name="using-sam-cli-deploy-examples-example2"></a>

Pertama, kita gunakan `sam init` untuk membuat aplikasi Hello World kita. Selama aliran interaktif, kami memilih `Python3.9` runtime dan jenis `Image` paket.

```
$ sam init
...
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Multi-step workflow
        ...
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]:  ENTER

Which runtime would you like to use?
        1 - aot.dotnet7 (provided.al2)
        ...
        15 - nodejs12.x
        16 - python3.9
        17 - python3.8
        ...
Runtime: 16

What package type would you like to use?
        1 - Zip
        2 - Image
Package type: 2

Based on your selections, the only dependency manager available is pip.
We will proceed copying the template using pip.
...
Project name [sam-app]: ENTER

    -----------------------
    Generating application:
    -----------------------
    Name: sam-app
    Base Image: amazon/python3.9-base
    Architectures: x86_64
    Dependency Manager: pip
    Output Directory: .
    Configuration file: sam-app/samconfig.toml

    Next steps can be found in the README file at sam-app/README.md
...
```

Selanjutnya, kita `cd` ke direktori root proyek kita dan jalankan`sam build`. AWS SAMCLIMembangun fungsi Lambda kami secara lokal menggunakan. Docker

```
sam-app $ sam build
Building codeuri: /Users/.../sam-app runtime: None metadata: {'Dockerfile': 'Dockerfile', 'DockerContext': '/Users/.../sam-app/hello_world', 'DockerTag': 'python3.9-v1'} architecture: x86_64 functions: HelloWorldFunction
Building image for HelloWorldFunction function
Setting DockerBuildArgs: {} for HelloWorldFunction function
Step 1/5 : FROM public.ecr.aws/lambda/python:3.9
 ---> 0a5e3da309aa
Step 2/5 : COPY requirements.txt ./
 ---> abc4e82e85f9
Step 3/5 : RUN python3.9 -m pip install -r requirements.txt -t .
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in 43845e7aa22d
Collecting requests
  Downloading requests-2.28.2-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 KB 829.5 kB/s eta 0:00:00
Collecting idna<4,>=2.5
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 KB 2.4 MB/s eta 0:00:00
Collecting charset-normalizer<4,>=2
  Downloading charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.2/199.2 KB 2.1 MB/s eta 0:00:00
Collecting certifi>=2017.4.17
  Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 KB 10.2 MB/s eta 0:00:00
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.9/140.9 KB 9.1 MB/s eta 0:00:00
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2022.12.7 charset-normalizer-3.1.0 idna-3.4 requests-2.28.2 urllib3-1.26.15
Removing intermediate container 43845e7aa22d
 ---> cab8ace899ce
Step 4/5 : COPY app.py ./
 ---> 4146f3cd69f2
Step 5/5 : CMD ["app.lambda_handler"]
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in f4131ddffb31
Removing intermediate container f4131ddffb31
 ---> d2f5180b2154
Successfully built d2f5180b2154
Successfully tagged helloworldfunction:python3.9-v1


Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Deploy: sam deploy --guided
```

Selanjutnya, kami menjalankan `sam deploy --guided` untuk menyebarkan aplikasi kami. Ini AWS SAMCLI memandu kami melalui konfigurasi pengaturan penerapan kami. Kemudian, AWS SAMCLI menyebarkan aplikasi kita ke file. AWS Cloud

```
sam-app $ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]: ENTER
        AWS Region [us-west-2]: ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: ENTER
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: ENTER
        SAM configuration file [samconfig.toml]: ENTER
        SAM configuration environment [default]: ENTER

        Looking for resources needed for deployment:

        Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        A different default S3 bucket can be set in samconfig.toml and auto resolution of buckets turned off by setting resolve_s3=False

        Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
        This parameter will be only saved under [default.global.parameters] in /Users/.../sam-app/samconfig.toml.

        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at 
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

e95fc5e75742: Pushed 
d8df51e7bdd7: Pushed 
b1d0d7e0b34a: Pushed 
0071317b94d8: Pushed 
d98f98baf147: Pushed 
2d244e0816c6: Pushed 
eb2eeb1ebe42: Pushed 
a5ca065a3279: Pushed 
fe9e144829c9: Pushed 
helloworldfunction-d2f5180b2154-python3.9-v1: digest: sha256:cceb71401b47dc3007a7a1e1f2e0baf162999e0e6841d15954745ecc0c447533 size: 2206

        Deploying with following values
        ===============================
        Stack name                   : sam-app
        Region                       : us-west-2
        Confirm changeset            : True
        Disable rollback             : False
        Deployment image repository  : 
                                       {
                                           "HelloWorldFunction": "012345678910.dkr.ecr.us-west-2.amazonaws.com/samapp7427b055/helloworldfunction19d43fc4repo"
                                       }
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

Initiating deployment
=====================

HelloWorldFunction may not have authorization defined.
        Uploading to sam-app/682ad27c7cf7a17c7f77a1688b0844f2.template  1328 / 1328  (100.00%)


Waiting for changeset to be created..

CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation                LogicalResourceId        ResourceType             Replacement            
-------------------------------------------------------------------------------------------------
+ Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                         oWorldPermissionProd     n                                               
+ Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
+ Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
+ Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                         yment47fc2d5f9d          yment                                           
+ Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                         tage                                                                     
+ Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                  pi                                              
-------------------------------------------------------------------------------------------------


Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680634124/0ffd4faf-2e2b-487e-b9e0-9116e8299ac4


Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: y

2023-04-04 08:49:15 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS       AWS::CloudFormation::S   sam-app                  User Initiated         
                         tack                                                                     
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                           Initiated              
CREATE_COMPLETE          AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       -                      
CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       Resource creation      
                                                                           Initiated              
CREATE_COMPLETE          AWS::Lambda::Function    HelloWorldFunction       -                      
CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                         pi                                                                       
CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        Resource creation      
                         pi                                                Initiated              
CREATE_COMPLETE          AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                         pi                                                                       
CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                         n                        oWorldPermissionProd                            
CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                         yment                    yment47fc2d5f9d                                 
CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   Resource creation      
                         n                        oWorldPermissionProd     Initiated              
CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   Resource creation      
                         yment                    yment47fc2d5f9d          Initiated              
CREATE_COMPLETE          AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                         yment                    yment47fc2d5f9d                                 
CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                  tage                                            
CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   Resource creation      
                                                  tage                     Initiated              
CREATE_COMPLETE          AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                  tage                                            
CREATE_COMPLETE          AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                         n                        oWorldPermissionProd                            
CREATE_COMPLETE          AWS::CloudFormation::S   sam-app                  -                      
                         tack                                                                     
-------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs                                                                                         
-------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                   
Description         Implicit IAM Role created for Hello World function                          
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-JFML1JOKHJ71  

Key                 HelloWorldApi                                                               
Description         API Gateway endpoint URL for Prod stage for Hello World function            
Value               https://endlwiqqod.execute-api.us-west-2.amazonaws.com/Prod/hello/          

Key                 HelloWorldFunction                                                          
Description         Hello World Lambda Function ARN                                             
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-  
kyg6Y2iNRUPg                                                                                    
-------------------------------------------------------------------------------------------------


Successfully created/updated stack - sam-app in us-west-2
```

## Pelajari selengkapnya
<a name="using-sam-cli-deploy-learn"></a>

Untuk mempelajari lebih lanjut tentang menggunakan AWS SAMCLI `sam deploy` perintah, lihat berikut ini:
+ **[AWS SAM Lokakarya Lengkap: Modul 3 - Terapkan secara manual](https://s12d.com/sam-ws-en-manual-deploy)** - Pelajari cara membuat, mengemas, dan menerapkan aplikasi tanpa server menggunakan aplikasi. AWS SAMCLI

# Opsi untuk menerapkan aplikasi Anda dengan AWS SAM
<a name="deploying-options"></a>

Dengan AWS SAM, Anda dapat menerapkan aplikasi secara manual dan mengotomatiskan penerapan. Gunakan AWS SAMCLI untuk menyebarkan aplikasi Anda secara manual. Untuk mengotomatiskan penyebaran, gunakan saluran pipa dan sistem integrasi berkelanjutan dan penyebaran berkelanjutan (CI/CD). Topik di bagian ini memberikan informasi tentang kedua pendekatan.

**Topics**
+ [Cara menggunakan untuk menyebarkan secara manual AWS SAMCLI](#serverless-sam-cli-using-package-and-deploy)
+ [Menyebarkan dengan CI/CD sistem dan jaringan pipa](#serverless-deploying-ci-cd)
+ [Deployment Gradual](#serverless-deploying-gradual)
+ [Memecahkan masalah penerapan menggunakan AWS SAMCLI](#serverless-deploying-troubleshooting)
+ [Pelajari selengkapnya](#serverless-sam-cli-using-invoke-learn)

## Cara menggunakan untuk menyebarkan secara manual AWS SAMCLI
<a name="serverless-sam-cli-using-package-and-deploy"></a>

Setelah Anda mengembangkan dan menguji aplikasi nirserver secara lokal, Anda dapat men-deploy aplikasi Anda dengan perintah **[sam deploy](sam-cli-command-reference-sam-deploy.md)**.

Untuk AWS SAM memandu Anda melalui penerapan dengan petunjuk, tentukan bendera. **--guided** Saat Anda menentukan flag ini, **sam deploy** perintah akan meressleting artefak aplikasi Anda, mengunggahnya ke Amazon Simple Storage Service (Amazon S3) (untuk arsip file.zip) atau ke Amazon Elastic Container Registry (Amazon ECR) (untuk gambar kontainer). Perintah kemudian menyebarkan aplikasi Anda ke AWS Cloud.

**Contoh:**

```
# Deploy an application using prompts:
sam deploy --guided
```

## Menyebarkan dengan CI/CD sistem dan jaringan pipa
<a name="serverless-deploying-ci-cd"></a>

AWS SAM membantu Anda mengotomatiskan penyebaran menggunakan saluran pipa dan sistem integrasi berkelanjutan dan penerapan berkelanjutan (CI/CD). AWS SAM dapat digunakan untuk membuat pipeline dan menyederhanakan CI/CD tugas untuk aplikasi tanpa server. Beberapa CI/CD sistem mendukung image kontainer AWS SAM build, dan AWS SAM juga menyediakan satu set template pipeline default untuk beberapa CI/CD sistem yang merangkum praktik terbaik AWS penerapan. 

Untuk informasi selengkapnya, lihat [Menggunakan CI/CD sistem dan jaringan pipa untuk digunakan AWS SAM](deploying-cicd-overview.md).

## Deployment Gradual
<a name="serverless-deploying-gradual"></a>

Jika Anda ingin menerapkan AWS SAM aplikasi Anda secara bertahap daripada sekaligus, Anda dapat menentukan konfigurasi penerapan yang menyediakan. AWS CodeDeploy Untuk informasi selengkapnya, lihat [Bekerja dengan konfigurasi penerapan CodeDeploy di AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) *Panduan Pengguna*.

Untuk informasi tentang mengonfigurasi AWS SAM aplikasi untuk diterapkan secara bertahap, lihat. [Menerapkan aplikasi tanpa server secara bertahap dengan AWS SAM](automating-updates-to-serverless-apps.md)

## Memecahkan masalah penerapan menggunakan AWS SAMCLI
<a name="serverless-deploying-troubleshooting"></a>

### AWS SAMCLIerror: “Kendala Keamanan Tidak Puas”
<a name="troubleshooting-security-constraints"></a>

Saat menjalankan **sam deploy --guided**, Anda akan di-prompt dengan pertanyaan `HelloWorldFunction may not have authorization defined, Is this okay? [y/N]`. Jika Anda menanggapi prompt ini dengan **N** (respons default), Anda akan melihat kesalahan berikut:

```
 
Error: Security Constraints Not Satisfied
```

Prompt tersebut menginformasikan bahwa aplikasi yang akan di-deploy mungkin memiliki API dari Amazon API Gateway yang dikonfigurasi tanpa otorisasi. Dengan memberikan tanggapan **N** untuk prompt ini, Anda memberitahu bahwa kesalahan mungkin terjadi.

Untuk memperbaikinya, Anda mempunyai opsi berikut:
+ Konfigurasikan aplikasi Anda dengan otorisasi. Untuk informasi tentang mengonfigurasi otorisasi, lihat [Kontrol akses API dengan AWS SAM template Anda](serverless-controlling-access-to-apis.md).
+ Tanggapi pertanyaan ini dengan **Y** untuk menunjukkan bahwa Anda tidak memiliki masalah dengan men-deploy aplikasi yang memiliki API dari API Gateway yang dikonfigurasi tanpa otorisasi.

## Pelajari selengkapnya
<a name="serverless-sam-cli-using-invoke-learn"></a>

*Untuk contoh langsung penerapan aplikasi tanpa server, lihat berikut ini dari The Complete Workshop: AWS SAM *
+ [Modul 3 - Terapkan secara manual](https://s12d.com/sam-ws-en-manual-deploy) - Pelajari cara membuat, mengemas, dan menerapkan aplikasi tanpa server menggunakan aplikasi. AWS SAMCLI
+ [Modul 4 - CI/CD](https://s12d.com/sam-ws-en-cicd-deploy) - Pelajari cara mengotomatiskan fase pembuatan, paket, dan penerapan dengan membuat pipeline *integrasi dan pengiriman berkelanjutan (*CI/CD).

# Menggunakan CI/CD sistem dan jaringan pipa untuk digunakan AWS SAM
<a name="deploying-cicd-overview"></a>

AWS SAM membantu organisasi membuat saluran pipa untuk CI/CD sistem pilihan mereka, sehingga mereka dapat menyadari manfaat CI/CD dengan sedikit usaha, seperti mempercepat frekuensi penyebaran, mempersingkat lead time untuk perubahan, dan mengurangi kesalahan penerapan.

AWS SAM menyederhanakan CI/CD tugas untuk aplikasi tanpa server dengan bantuan membangun gambar kontainer. Gambar yang AWS SAM disediakan menyertakan AWS SAMCLI dan membangun alat untuk sejumlah AWS Lambda runtime yang didukung. Ini membuatnya lebih mudah untuk membangun dan mengemas aplikasi tanpa server menggunakan file. AWS SAMCLI Gambar-gambar ini juga mengurangi kebutuhan tim untuk membuat dan mengelola gambar mereka sendiri untuk CI/CD sistem. Untuk informasi selengkapnya tentang AWS SAM membangun image container, lihat[Repositori gambar untuk AWS SAM](serverless-image-repositories.md).

Beberapa CI/CD sistem mendukung AWS SAM membangun gambar kontainer. CI/CD Sistem mana yang harus Anda gunakan tergantung pada beberapa faktor. Hal ini termasuk apakah aplikasi Anda menggunakan satu atau beberapa waktu aktif, atau apakah Anda ingin membangun aplikasi Anda dalam citra kontainer atau langsung pada mesin host, baik mesin virtual (VM) atau host bare metal.

AWS SAM juga menyediakan satu set template pipeline default untuk beberapa CI/CD sistem yang merangkum praktik terbaik AWS penerapan. Template pipeline default ini menggunakan format konfigurasi JSON/YAML pipeline standar, dan praktik terbaik bawaan membantu melakukan penerapan multi-akun dan multi-wilayah, serta memverifikasi bahwa pipeline tidak dapat membuat perubahan infrastruktur yang tidak diinginkan.

Anda memiliki dua opsi utama AWS SAM untuk menggunakan aplikasi tanpa server: 1) Ubah konfigurasi pipeline yang ada untuk menggunakan AWS SAMCLI perintah, atau 2) Buat contoh konfigurasi CI/CD pipeline yang dapat Anda gunakan sebagai titik awal untuk aplikasi Anda sendiri.

**Topics**
+ [Apa itu pipa?](#deploying-whatis-pipeline)
+ [Cara AWS SAM mengunggah file lokal saat penerapan](deploy-upload-local-files.md)
+ [Hasilkan CI/CD pipa starter dengan AWS SAM](serverless-generating-example-ci-cd.md)
+ [Cara menyesuaikan saluran pipa starter dengan AWS SAM](serverless-customizing-starter-pipelines.md)
+ [Otomatiskan penerapan aplikasi Anda AWS SAM](serverless-deploying-modify-pipeline.md)
+ [Cara menggunakan otentikasi OIDC dengan pipeline AWS SAM](deploying-with-oidc.md)

## Apa itu pipa?
<a name="deploying-whatis-pipeline"></a>

Pipeline adalah urutan otomatis langkah-langkah yang dilakukan untuk merilis versi baru dari aplikasi. [Dengan AWS SAM, Anda dapat menggunakan banyak CI/CD sistem umum untuk menyebarkan aplikasi Anda, termasuk, [Jenkins [AWS CodePipeline](https://aws.amazon.com/codepipeline)](https://www.jenkins.io/), [GitLab CI/CD](https://docs.gitlab.com/ee/ci/), dan Actions. GitHub](https://github.com/features/actions)

Template pipeline mencakup praktik terbaik AWS penerapan untuk membantu penerapan multi-akun dan Multi-wilayah. AWS lingkungan seperti dev dan produksi biasanya ada di AWS akun yang berbeda. Hal ini memungkinkan tim pengembangan untuk mengonfigurasi pipeline penerapan yang aman, tanpa membuat perubahan infrastruktur yang tidak diinginkan.

Anda juga dapat menyediakan template pipeline kustom Anda sendiri untuk membantu menstandarisasi pipeline di seluruh tim pengembangan. 

# Cara AWS SAM mengunggah file lokal saat penerapan
<a name="deploy-upload-local-files"></a>

Saat Anda menerapkan aplikasi ke AWS Cloud, AWS CloudFormation mengharuskan file lokal Anda diunggah terlebih dahulu ke AWS layanan yang dapat diakses, seperti Amazon Simple Storage Service (Amazon S3). Ini termasuk file lokal referensi AWS SAM template Anda. Untuk memenuhi persyaratan ini, AWS SAMCLI lakukan hal berikut ketika Anda menggunakan `sam package` perintah `sam deploy` or:

1. Secara otomatis mengunggah file lokal Anda ke AWS layanan yang dapat diakses.

1. Secara otomatis memperbarui template aplikasi Anda untuk mereferensikan jalur file baru.

**Topics**
+ [Demo: Gunakan kode fungsi AWS SAMCLI untuk mengunggah Lambda](#deploy-upload-local-files-demo)
+ [Kasus penggunaan yang didukung](#deploy-upload-local-files-use)
+ [Pelajari selengkapnya](#deploy-upload-local-files-learn)

## Demo: Gunakan kode fungsi AWS SAMCLI untuk mengunggah Lambda
<a name="deploy-upload-local-files-demo"></a>

Dalam demo ini, kami menginisialisasi contoh aplikasi Hello World menggunakan jenis paket.zip untuk fungsi Lambda kami. Kami menggunakan AWS SAMCLI untuk secara otomatis mengunggah kode fungsi Lambda kami ke Amazon S3 dan mereferensikan jalur barunya di templat aplikasi kami.

Pertama, kami menjalankan `sam init` untuk menginisialisasi aplikasi Hello World kami.

```
$ sam init
...
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Multi-step workflow
        ...
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: y

Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER

Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER

Project name [sam-app]: demo

    -----------------------
    Generating application:
    -----------------------
    Name: demo
    Runtime: python3.9
    Architectures: x86_64
    Dependency Manager: pip
    Application Template: hello-world
    Output Directory: .
    Configuration file: demo/samconfig.toml
    
...
```

Kode fungsi Lambda kami diatur dalam `hello_world` subdirektori proyek kami.

```
demo
├── README.md
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests
```

Dalam AWS SAM template kami, kami mereferensikan jalur lokal ke kode fungsi Lambda kami menggunakan properti. `CodeUri`

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.9
      ...
```

Selanjutnya, kami menjalankan `sam build` untuk membangun aplikasi kami dan mempersiapkan penerapan.

```
$ sam build
Starting Build use cache
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/7896875f-9bcc-4350-8adb-2c1d543627a1) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: /Users/.../demo/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource
Running PythonPipBuilder:CopySource

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml
...
```

Selanjutnya, kami menjalankan `sam deploy --guided` untuk menyebarkan aplikasi kami.

```
$ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [demo]: ENTER
        AWS Region [us-west-2]: ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: n
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: ENTER
        SAM configuration file [samconfig.toml]: ENTER
        SAM configuration environment [default]: ENTER

        Looking for resources needed for deployment:
        ...
        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at 
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

File with same data already exists at demo/da3c598813f1c2151579b73ad788cac8, skipping upload

        Deploying with following values
        ===============================
        Stack name                   : demo
        Region                       : us-west-2
        Confirm changeset            : False
        Disable rollback             : False
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

Initiating deployment
=====================
...
Waiting for changeset to be created..
CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation                LogicalResourceId        ResourceType             Replacement            
-------------------------------------------------------------------------------------------------
+ Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                         oWorldPermissionProd     n                                               
+ Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
...                     
-------------------------------------------------------------------------------------------------

Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680906292/1164338d-72e7-4593-a372-f2b3e67f542f

2023-04-07 12:24:58 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                           Initiated              
...                    
-------------------------------------------------------------------------------------------------
CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs                                                                                         
-------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                   
Description         Implicit IAM Role created for Hello World function                          
Value               arn:aws:iam::012345678910:role/demo-HelloWorldFunctionRole-VQ4CU7UY7S2K     

Key                 HelloWorldApi                                                               
Description         API Gateway endpoint URL for Prod stage for Hello World function            
Value               https://satnon55e9.execute-api.us-west-2.amazonaws.com/Prod/hello/          

Key                 HelloWorldFunction                                                          
Description         Hello World Lambda Function ARN                                             
Value               arn:aws:lambda:us-west-2:012345678910:function:demo-                        
HelloWorldFunction-G14inKTmSQvK                                                                 
-------------------------------------------------------------------------------------------------
Successfully created/updated stack - demo in us-west-2
```

Selama penerapan, AWS SAMCLI secara otomatis mengunggah kode fungsi Lambda kami ke Amazon S3 dan memperbarui template kami. Template kami yang dimodifikasi di CloudFormation konsol mencerminkan jalur bucket Amazon S3.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: s3://aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8
      Handler: app.lambda_handler
      ...
```

## Kasus penggunaan yang didukung
<a name="deploy-upload-local-files-use"></a>

Secara otomatis AWS SAMCLI dapat memfasilitasi proses ini untuk sejumlah jenis file, jenis CloudFormation sumber daya, dan CloudFormation makro.

### Jenis berkas
<a name="deploy-upload-local-files-use-types"></a>

File dan Docker gambar aplikasi didukung.

### CloudFormation jenis sumber daya
<a name="deploy-upload-local-files-use-resources"></a>

Berikut ini adalah daftar jenis sumber daya yang didukung dan propertinya:


| Sumber daya | Sifat-sifat | 
| --- | --- | 
| AWS::ApiGateway::RestApi | BodyS3Location | 
| AWS::ApiGatewayV2::Api | BodyS3Location | 
| AWS::AppSync:FunctionConfiguration |  `CodeS3Location` `RequestMappingTemplateS3Location` `ResponseMappingTemplateS3Location`  | 
| AWS::AppSync::GraphQLSchema | DefinitionS3Location | 
| AWS::AppSync::Resolver |  `CodeS3Location` `RequestMappingTemplateS3Location` `ResponseMappingTemplateS3Location`  | 
| AWS::CloudFormation::ModuleVersion | ModulePackage | 
| AWS::CloudFormation::ResourceVersion | SchemaHandlerPackage | 
| AWS::ECR::Repository | RepositoryName | 
| AWS::ElasticBeanstalk::ApplicationVersion | SourceBundle | 
| AWS::Glue::Job | Command.ScriptLocation | 
| AWS::Lambda::Function |  `Code` `Code.ImageUri`  | 
| AWS::Lambda::LayerVersion | Content | 
| AWS::Serverless::Api | DefinitionUri | 
| AWS::Serverless::Function |  `CodeUri` `ImageUri`  | 
| AWS::Serverless::GraphQLApi |  `SchemaUri` `Function.CodeUri` `Resolver.CodeUri`  | 
| AWS::Serverless::HttpApi | DefinitionUri | 
| AWS::Serverless::LayerVersion | ContentUri | 
| AWS::Serverless::StateMachine | DefinitionUri | 
| AWS::StepFunctions::StateMachine | DefinitionS3Location | 

### CloudFormation makro
<a name="deploy-upload-local-files-use-macros"></a>

File yang direferensikan menggunakan makro `AWS::Include` transformasi didukung.

## Pelajari selengkapnya
<a name="deploy-upload-local-files-learn"></a>

Untuk mempelajari lebih lanjut tentang `AWS::Include` transformasi, lihat [ AWS::Include transformasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) di *Panduan AWS CloudFormation Pengguna*.

Untuk melihat contoh penggunaan `AWS::Include` transformasi dalam AWS SAM template, lihat pola [API Gateway API API ke SQS](https://serverlessland.com/patterns/apigw-sqs) di *Serverless* Land.

# Hasilkan CI/CD pipa starter dengan AWS SAM
<a name="serverless-generating-example-ci-cd"></a>

Saat Anda siap mengotomatiskan penerapan, Anda dapat menggunakan salah AWS SAM satu templat pipeline pemula untuk menghasilkan pipeline penerapan untuk CI/CD sistem yang Anda pilih untuk digunakan. Pipeline penerapan Anda adalah apa yang Anda konfigurasikan dan gunakan untuk mengotomatiskan penerapan aplikasi tanpa server Anda. Template pipeline pemula sudah dikonfigurasi sebelumnya untuk membantu Anda menyiapkan pipeline penerapan dengan cepat untuk aplikasi tanpa server Anda. 

Dengan template pipeline starter, Anda dapat menghasilkan saluran pipa dalam hitungan menit menggunakan [sam pipeline init](sam-cli-command-reference-sam-pipeline-init.md) perintah.

Template pipeline starter menggunakan JSON/YAML sintaks CI/CD sistem yang sudah dikenal, dan menggabungkan praktik terbaik seperti mengelola artefak di beberapa akun dan wilayah, dan menggunakan jumlah izin minimum yang diperlukan untuk menerapkan aplikasi. [https://github.com/features/actions](https://github.com/features/actions)

Berikut adalah tugas tingkat tinggi yang perlu Anda lakukan untuk menghasilkan konfigurasi alur awal:

1. **Buat sumber daya infrastruktur** — Pipeline Anda memerlukan AWS sumber daya tertentu, misalnya pengguna IAM dan peran dengan izin yang diperlukan, bucket Amazon S3, dan secara opsional repositori Amazon ECR.

1. **Hubungkan repositori Git Anda dengan CI/CD sistem Anda — CI/CD Sistem** Anda perlu mengetahui repositori Git mana yang akan memicu pipeline untuk dijalankan. Perhatikan bahwa langkah ini mungkin tidak diperlukan, tergantung pada kombinasi repositori Git dan CI/CD sistem yang Anda gunakan.

1. **Hasilkan konfigurasi alur Anda** – Langkah ini menghasilkan konfigurasi alur awal yang mencakup dua tahap deployment.

1. **Komit konfigurasi pipeline Anda ke repositori Git Anda** — Langkah ini diperlukan untuk memastikan CI/CD sistem Anda mengetahui konfigurasi pipeline Anda, dan akan berjalan ketika perubahan dilakukan.

Setelah Anda membuat konfigurasi alur awal dan melakukannya ke repositori Git Anda, setiap kali seseorang melakukan perubahan kode ke repositori tersebut, alur Anda akan terpicu untuk berjalan secara otomatis.

Urutan langkah-langkah ini, dan detail setiap langkah, bervariasi berdasarkan sistem CI/CD Anda:
+ Jika Anda menggunakan AWS CodePipeline, lihat[Menghasilkan pipa starter untuk AWS CodePipeline in AWS SAM](serverless-generating-example-ci-cd-codepipeline.md).
+ Jika Anda menggunakan Jenkins, GitLab CI/CD, GitHub Actions, atau Bitbucket Pipelines, lihat. [Gunakan AWS SAM untuk menghasilkan pipa starter untuk Jenkins, GitLab CI/CD, Actions, Bitbucket Pipelines GitHub](serverless-generating-example-ci-cd-others.md)

# Menghasilkan pipa starter untuk AWS CodePipeline in AWS SAM
<a name="serverless-generating-example-ci-cd-codepipeline"></a>

Untuk menghasilkan konfigurasi pipeline starter AWS CodePipeline, lakukan tugas-tugas berikut dalam urutan ini:

1. Buat sumber daya infrastruktur

1. Hasilkan konfigurasi alur

1. Lakukan konfigurasi alur Anda ke Git

1. Hubungkan repositori Git Anda dengan sistem Anda CI/CD 

**catatan**  
Prosedur berikut menggunakan dua AWS SAMCLI perintah, `sam pipeline bootstrap` dan`sam pipeline init`. Alasan ada dua perintah adalah untuk menangani kasus penggunaan di mana administrator (yaitu, pengguna yang memerlukan izin untuk mengatur AWS sumber daya infrastruktur seperti pengguna dan peran IAM) memiliki lebih banyak izin daripada pengembang (yaitu, pengguna yang hanya memerlukan izin untuk mengatur saluran pipa individu, tetapi bukan sumber daya infrastruktur AWS yang diperlukan).

## Langkah 1: Buat sumber daya infrastruktur
<a name="generating-example-step-1"></a>

Saluran pipa yang menggunakan AWS SAM memerlukan AWS sumber daya tertentu, seperti pengguna IAM dan peran dengan izin yang diperlukan, bucket Amazon S3, dan secara opsional repositori Amazon ECR. Anda harus memiliki satu set sumber daya infrastruktur untuk setiap tahap deployment alur.

Anda dapat menjalankan perintah berikut guna membantu penyiapan ini:

```
sam pipeline bootstrap
```

**catatan**  
Jalankan perintah sebelumnya untuk setiap tahap penerapan pipeline Anda.

## Langkah 2: Hasilkan konfigurasi alur
<a name="generating-example-step-2"></a>

Untuk menghasilkan konfigurasi alur, jalankan perintah berikut:

```
sam pipeline init
```

## Langkah 3: Lakukan konfigurasi alur Anda ke repositori Git
<a name="generating-example-step-3"></a>

Langkah ini diperlukan untuk memastikan CI/CD sistem Anda mengetahui konfigurasi pipeline Anda, dan akan berjalan saat perubahan dilakukan.

## Langkah 4: Hubungkan repositori Git Anda dengan sistem Anda CI/CD
<a name="generating-example-step-4"></a>

Untuk AWS CodePipeline Anda sekarang dapat membuat koneksi dengan menjalankan perintah berikut:

```
sam deploy -t codepipeline.yaml --stack-name <pipeline-stack-name> --capabilities=CAPABILITY_IAM --region <region-X>
```

Jika Anda menggunakan GitHub atau Bitbucket, setelah menjalankan **sam deploy** perintah sebelumnya, selesaikan koneksi dengan mengikuti langkah-langkah di bawah **Untuk menyelesaikan koneksi yang ditemukan pada topik Perbarui koneksi** [yang tertunda](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html) di *panduan pengguna konsol Alat Pengembang*. Selain itu, simpan salinan `CodeStarConnectionArn` dari output **sam deploy** perintah, karena Anda akan membutuhkannya jika Anda ingin menggunakan AWS CodePipeline dengan cabang lain selain`main`.

## Mengonfigurasi cabang-cabang lain
<a name="configuring-other-branches"></a>

Secara default, AWS CodePipeline gunakan `main` cabang dengan AWS SAM. Jika ingin menggunakan cabang selain `main`, Anda harus menjalankan kembali perintah **sam deploy**. Perhatikan bahwa bergantung pada repositori Git mana yang digunakan, Anda mungkin juga perlu menyediakan `CodeStarConnectionArn`:

```
# For GitHub and Bitbucket
sam deploy -t codepipeline.yaml --stack-name <feature-pipeline-stack-name> --capabilities=CAPABILITY_IAM --parameter-overrides="FeatureGitBranch=<branch-name> CodeStarConnectionArn=<codestar-connection-arn>"

# For AWS CodeCommit
sam deploy -t codepipeline.yaml --stack-name <feature-pipeline-stack-name> --capabilities=CAPABILITY_IAM --parameter-overrides="FeatureGitBranch=<branch-name>"
```

## Pelajari selengkapnya
<a name="serverless-generating-cicd-learn"></a>

*Untuk contoh langsung menyiapkan CI/CD pipeline, lihat [CI/CD dengan AWS CodePipeline](https://catalog.workshops.aws/complete-aws-sam/en-US/module-4-cicd) di The Complete Workshop. AWS SAM *

# Gunakan AWS SAM untuk menghasilkan pipa starter untuk Jenkins, GitLab CI/CD, Actions, Bitbucket Pipelines GitHub
<a name="serverless-generating-example-ci-cd-others"></a>

Untuk menghasilkan konfigurasi pipeline starter untuk Jenkins, GitLab CI/CD, GitHub Actions, atau Bitbucket Pipelines, lakukan tugas-tugas berikut dalam urutan ini:

1. Buat sumber daya infrastruktur

1. Hubungkan repositori Git Anda dengan sistem Anda CI/CD 

1. Buat objek kredensial

1. Hasilkan konfigurasi alur

1. Lakukan konfigurasi alur Anda ke repositori Git

**catatan**  
Prosedur berikut menggunakan dua AWS SAMCLI perintah, `sam pipeline bootstrap` dan`sam pipeline init`. Alasan ada dua perintah adalah untuk menangani kasus penggunaan di mana administrator (yaitu, pengguna yang memerlukan izin untuk mengatur AWS sumber daya infrastruktur seperti pengguna dan peran IAM) memiliki lebih banyak izin daripada pengembang (yaitu, pengguna yang hanya memerlukan izin untuk mengatur saluran pipa individu, tetapi bukan sumber daya infrastruktur AWS yang diperlukan).

## Langkah 1: Buat sumber daya infrastruktur
<a name="generating-example-step-1"></a>

Saluran pipa yang menggunakan AWS SAM memerlukan AWS sumber daya tertentu, seperti pengguna IAM dan peran dengan izin yang diperlukan, bucket Amazon S3, dan secara opsional repositori Amazon ECR. Anda harus memiliki satu set sumber daya infrastruktur untuk setiap tahap deployment alur.

Anda dapat menjalankan perintah berikut guna membantu penyiapan ini:

```
sam pipeline bootstrap
```

**catatan**  
Jalankan perintah sebelumnya untuk setiap tahap penerapan pipeline Anda.

Anda harus menangkap AWS kredensil (id kunci dan kunci rahasia) untuk pengguna pipeline untuk setiap tahap penerapan pipeline Anda, karena diperlukan untuk langkah selanjutnya.

## Langkah 2: Hubungkan repositori Git Anda dengan sistem Anda CI/CD
<a name="generating-example-step-2"></a>

Menghubungkan repositori Git Anda ke CI/CD sistem Anda diperlukan agar CI/CD sistem dapat mengakses kode sumber aplikasi Anda untuk build dan deployment.

**catatan**  
Anda dapat melewati langkah ini jika menggunakan salah satu kombinasi berikut, karena koneksi dibuat untuk Anda secara otomatis:  
GitHub Tindakan dengan GitHub repositori
GitLab CI/CD dengan repositori GitLab 
Bitbucket Pipelines dengan repositori Bitbucket

Untuk menghubungkan repositori Git Anda dengan CI/CD sistem Anda, lakukan salah satu hal berikut:
+ Jika Anda menggunakan Jenkins, lihat [dokumentasi Jenkins](https://www.jenkins.io/doc/book/pipeline/multibranch/) untuk “Menambahkan sumber cabang.”
+ Jika Anda menggunakan GitLab CI/CD dan repositori Git selain GitLab, lihat [GitLabdokumentasi](https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/) untuk “menghubungkan repositori eksternal.”

## Langkah 3: Buat objek kredensial
<a name="generating-example-step-3"></a>

Setiap CI/CD sistem memiliki caranya sendiri untuk mengelola kredensialnya yang diperlukan agar CI/CD sistem dapat mengakses repositori Git Anda.

Untuk membuat objek kredensial yang diperlukan, lakukan salah satu hal berikut:
+ Jika Anda menggunakan Jenkins, buat satu "kredensial" yang menyimpan id kunci dan kunci rahasia. Ikuti instruksi di blog [Membangun Alur Jenkins dengan AWS SAM](https://aws.amazon.com/blogs/compute/building-a-jenkins-pipeline-with-aws-sam/), di bagian **Konfigurasikan Jenkins**. Anda akan membutuhkan “id Kredensial” untuk langkah berikutnya.
+ Jika Anda menggunakan GitLab CI/CD, buat dua “variabel yang dilindungi”, satu untuk masing-masing id kunci dan kunci rahasia. Ikuti petunjuk dalam [GitLab dokumentasi](https://docs.gitlab.com/ee/ci/variables/) - Anda akan memerlukan dua “kunci variabel” untuk langkah berikutnya.
+ Jika Anda menggunakan GitHub Actions, buat dua “rahasia terenkripsi”, satu untuk masing-masing kunci dan kunci rahasia. Ikuti instruksi dalam [GitHubdokumentasi](https://docs.github.com/en/actions/reference/encrypted-secrets) - Anda akan memerlukan dua “nama rahasia” untuk langkah selanjutnya.
+ Jika Anda menggunakan Bitbucket Pipelines, buat dua “variabel aman”, satu untuk masing-masing id kunci dan kunci rahasia. Ikuti instruksi dalam [Variabel dan rahasia](https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets) - Anda akan memerlukan dua “nama rahasia” untuk langkah berikutnya.

## Langkah 4: Hasilkan konfigurasi alur
<a name="generating-example-step-4"></a>

Untuk menghasilkan konfigurasi alur, jalankan perintah berikut. Anda harus memasukkan objek kredensial yang dibuat pada langkah sebelumnya:

```
sam pipeline init
```

## Langkah 5: Lakukan konfigurasi alur Anda ke repositori Git
<a name="generating-example-step-5"></a>

Langkah ini diperlukan untuk memastikan CI/CD sistem Anda mengetahui konfigurasi pipeline Anda, dan akan berjalan saat perubahan dilakukan.

## Pelajari selengkapnya
<a name="serverless-generating-other-cicd-learn"></a>

*Untuk contoh langsung menyiapkan CI/CD pipeline menggunakan, lihat [CI/CD dengan GitHub](https://s12d.com/sam-ws-en-gh) di GitHub Actions The Complete Workshop. AWS SAM *

# Cara menyesuaikan saluran pipa starter dengan AWS SAM
<a name="serverless-customizing-starter-pipelines"></a>

Sebagai CI/CD administrator, Anda mungkin ingin menyesuaikan template pipeline pemula, dan petunjuk terpandu terkait, yang dapat digunakan pengembang di organisasi Anda untuk membuat konfigurasi pipeline.

 AWS SAMCLIMenggunakan template Cookiecutter saat membuat template pemula. Untuk detail tentang template pemotong kue, [Cookiecutter](https://cookiecutter.readthedocs.io/en/latest/README.html).

Anda juga dapat menyesuaikan prompt yang AWS SAMCLI ditampilkan kepada pengguna saat membuat konfigurasi pipeline menggunakan perintah. `sam pipeline init` Untuk menyesuaikan permintaan pengguna, lakukan hal berikut:

1. **Buat `questions.json` file** — `questions.json` File harus berada di root respositori proyek. Ini adalah direktori yang sama dengan `cookiecutter.json` file. Untuk melihat skema `questions.json` file, lihat [questions.json.schema](https://github.com/aws/aws-sam-cli/blob/2b831b29f76ac9c4e0cbcbd68b37f8f664e136d8/samcli/lib/pipeline/init/questions.json.schema). Untuk melihat `questions.json` file contoh, lihat [questions.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/questions.json).

1. **Peta kunci pertanyaan dengan nama cookiecutter** - Setiap objek dalam `questions.json` file membutuhkan kunci yang cocok dengan nama dalam template cookiecutter. Pencocokan kunci ini adalah bagaimana pengguna AWS SAMCLI memetakan tanggapan meminta ke template pemotong cookie. Untuk melihat contoh pencocokan kunci ini, lihat [Contoh file](#serverless-customizing-starter-pipelines-example-files) bagian nanti dalam topik ini. 

1. **Buat `metadata.json` file** — Deklarasikan jumlah tahapan yang akan dimiliki pipeline dalam file. `metadata.json` Jumlah tahapan menginstruksikan `sam pipeline init` perintah berapa banyak tahapan untuk meminta informasi tentang, atau dalam kasus `--bootstrap` opsi, berapa banyak tahapan untuk membuat sumber daya infrastruktur untuk. Untuk melihat `metadata.json` file contoh yang mendeklarasikan pipeline dengan dua tahap, lihat [metadata.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/metadata.json).

## Contoh proyek
<a name="serverless-customizing-starter-pipelines-example-projects"></a>

Berikut adalah contoh proyek, yang masing-masing menyertakan template Cookiecutter, `questions.json` file, dan file: `metadata.json`
+ Contoh Jenkins: Template pipa [Jenkins dua tahap](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/Jenkins/two-stage-pipeline-template)
+ CodePipeline contoh: [Template CodePipeline pipa dua tahap](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/AWS-CodePipeline/two-stage-pipeline-template)

## Contoh file
<a name="serverless-customizing-starter-pipelines-example-files"></a>

Kumpulan file berikut menunjukkan bagaimana pertanyaan dalam `questions.json` file dikaitkan dengan entri dalam file template Cookiecutter. Perhatikan bahwa contoh ini adalah cuplikan file, bukan file lengkap. Untuk melihat contoh file lengkap, lihat [Contoh proyek](#serverless-customizing-starter-pipelines-example-projects) bagian sebelumnya dalam topik ini.

Contoh **`questions.json`**:

```
{
  "questions": [{
    "key": "intro",
    "question": "\nThis template configures a pipeline that deploys a serverless application to a testing and a production stage.\n",
    "kind": "info"
  }, {
    "key": "pipeline_user_jenkins_credential_id",
    "question": "What is the Jenkins credential ID (via Jenkins plugin \"aws-credentials\") for pipeline user access key?",
    "isRequired": true
  }, {
    "key": "sam_template",
    "question": "What is the template file path?",
    "default": "template.yaml"
  }, {
    ...
```

Contoh **`cookiecutter.json`**:

```
{
  "outputDir": "aws-sam-pipeline",
  "pipeline_user_jenkins_credential_id": "",
  "sam_template": "",
    ...
```

Contoh **`Jenkinsfile`**:

```
pipeline {
  agent any
  environment {
    PIPELINE_USER_CREDENTIAL_ID = '{{cookiecutter.pipeline_user_jenkins_credential_id}}'
    SAM_TEMPLATE = '{{cookiecutter.sam_template}}'
    ...
```

# Otomatiskan penerapan aplikasi Anda AWS SAM
<a name="serverless-deploying-modify-pipeline"></a>

Dalam AWS SAM, cara Anda mengotomatiskan penerapan AWS SAM aplikasi Anda bervariasi tergantung pada CI/CD sistem yang Anda gunakan. Untuk alasan ini, contoh di bagian ini menunjukkan kepada Anda cara mengonfigurasi berbagai CI/CD sistem untuk mengotomatiskan pembuatan aplikasi tanpa server dalam image kontainer AWS SAM build. Gambar kontainer build ini memudahkan pembuatan dan paket aplikasi tanpa server menggunakan file. AWS SAMCLI

Prosedur untuk CI/CD pipeline yang ada untuk menyebarkan aplikasi tanpa server yang AWS SAM digunakan sedikit berbeda tergantung pada CI/CD sistem yang Anda gunakan.

Topik berikut memberikan contoh untuk mengonfigurasi CI/CD sistem Anda untuk membangun aplikasi tanpa server dalam image container AWS SAM build:

**Topics**
+ [Menggunakan AWS CodePipeline untuk menyebarkan dengan AWS SAM](deploying-using-codepipeline.md)
+ [Menggunakan Bitbucket Pipelines untuk menerapkan dengan AWS SAM](deploying-using-bitbucket.md)
+ [Menggunakan Jenkins untuk menyebarkan AWS SAM](deploying-using-jenkins.md)
+ [Menggunakan GitLab CI/CD untuk menyebarkan dengan AWS SAM](deploying-using-gitlab.md)
+ [Menggunakan GitHub Tindakan untuk menyebarkan dengan AWS SAM](deploying-using-github.md)

# Menggunakan AWS CodePipeline untuk menyebarkan dengan AWS SAM
<a name="deploying-using-codepipeline"></a>

Untuk mengonfigurasi [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)pipeline agar mengotomatiskan pembuatan dan penerapan AWS SAM aplikasi, CloudFormation template dan `buildspec.yml` file harus berisi baris yang melakukan hal berikut:

1. Referensikan citra kontainer build dengan waktu aktif yang diperlukan dari citra yang tersedia. Contoh berikut menggunakan citra kontainer build `public.ecr.aws/sam/build-nodejs20.x`.

1. Konfigurasikan tahapan pipeline untuk menjalankan AWS SAM perintah command line interface (CLI) yang diperlukan. Contoh berikut menjalankan dua AWS SAMCLI perintah: **sam build** dan **sam deploy** (dengan opsi yang diperlukan).

Contoh ini mengasumsikan bahwa Anda telah mendeklarasikan semua fungsi dan lapisan dalam file AWS SAM template Anda dengan`runtime: nodejs20.x`.

**CloudFormation cuplikan templat:**

```
  CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Environment:
        ComputeType: BUILD_GENERAL1_SMALL
        Image: public.ecr.aws/sam/build-nodejs20.x
        Type: LINUX_CONTAINER
      ...
```

**`buildspec.yml`cuplikan:**

```
version: 0.2
phases:
  build:
    commands:
      - sam build
      - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

Untuk daftar citra kontainer build Amazon Elastic Container Registry (Amazon ECR) yang tersedia untuk waktu aktif yang berbeda, lihat [Repositori gambar untuk AWS SAM](serverless-image-repositories.md).

# Menggunakan Bitbucket Pipelines untuk menerapkan dengan AWS SAM
<a name="deploying-using-bitbucket"></a>

Untuk mengonfigurasi [Bitbucket Pipeline](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/) untuk mengotomatiskan pembuatan dan penerapan AWS SAM aplikasi Anda, `bitbucket-pipelines.yml` file Anda harus berisi baris yang melakukan hal berikut:

1. Referensikan citra kontainer build dengan waktu aktif yang diperlukan dari citra yang tersedia. Contoh berikut menggunakan citra kontainer build `public.ecr.aws/sam/build-nodejs20.x`.

1. Konfigurasikan tahapan pipeline untuk menjalankan AWS SAM perintah command line interface (CLI) yang diperlukan. Contoh berikut menjalankan dua AWS SAMCLI perintah: **sam build** dan **sam deploy** (dengan opsi yang diperlukan).

Contoh ini mengasumsikan bahwa Anda telah mendeklarasikan semua fungsi dan lapisan dalam file AWS SAM template Anda dengan`runtime: nodejs20.x`.

```
image: public.ecr.aws/sam/build-nodejs20.x

pipelines:
  branches:
    main: # branch name
      - step:
          name: Build and Package
          script:
            - sam build
            - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

Untuk daftar citra kontainer build Amazon Elastic Container Registry (Amazon ECR) yang tersedia untuk waktu aktif yang berbeda, lihat [Repositori gambar untuk AWS SAM](serverless-image-repositories.md).

# Menggunakan Jenkins untuk menyebarkan AWS SAM
<a name="deploying-using-jenkins"></a>

Untuk mengonfigurasi pipeline [Jenkins](https://www.jenkins.io/) untuk mengotomatiskan pembuatan dan penerapan AWS SAM aplikasi Anda, Anda `Jenkinsfile` harus berisi baris yang melakukan hal berikut:

1. Referensikan citra kontainer build dengan waktu aktif yang diperlukan dari citra yang tersedia. Contoh berikut menggunakan citra kontainer build `public.ecr.aws/sam/build-nodejs20.x`.

1. Konfigurasikan tahapan pipeline untuk menjalankan AWS SAM perintah command line interface (CLI) yang diperlukan. Contoh berikut menjalankan dua AWS SAMCLI perintah: **sam build** dan **sam deploy** (dengan opsi yang diperlukan).

Contoh ini mengasumsikan bahwa Anda telah mendeklarasikan semua fungsi dan lapisan dalam file AWS SAM template Anda dengan`runtime: nodejs20.x`.

```
pipeline {
    agent { docker { image 'public.ecr.aws/sam/build-nodejs20.x' } }
    stages {
        stage('build') {
            steps {
                sh 'sam build'
                sh 'sam deploy --no-confirm-changeset --no-fail-on-empty-changeset'
            }
        }
    }
}
```

Untuk daftar citra kontainer build Amazon Elastic Container Registry (Amazon ECR) yang tersedia untuk waktu aktif yang berbeda, lihat [Repositori gambar untuk AWS SAM](serverless-image-repositories.md).

# Menggunakan GitLab CI/CD untuk menyebarkan dengan AWS SAM
<a name="deploying-using-gitlab"></a>

Untuk mengonfigurasi [GitLab](https://about.gitlab.com)pipeline agar mengotomatiskan pembuatan dan penerapan AWS SAM aplikasi, `gitlab-ci.yml` file harus berisi baris yang melakukan hal berikut:

1. Referensikan citra kontainer build dengan waktu aktif yang diperlukan dari citra yang tersedia. Contoh berikut menggunakan citra kontainer build `public.ecr.aws/sam/build-nodejs20.x`.

1. Konfigurasikan tahapan pipeline untuk menjalankan AWS SAM perintah command line interface (CLI) yang diperlukan. Contoh berikut menjalankan dua AWS SAMCLI perintah: **sam build** dan **sam deploy** (dengan opsi yang diperlukan).

Contoh ini mengasumsikan bahwa Anda telah mendeklarasikan semua fungsi dan lapisan dalam file AWS SAM template Anda dengan`runtime: nodejs20.x`.

```
image: public.ecr.aws/sam/build-nodejs20.x
deploy:
  script:
    - sam build
    - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

Untuk daftar citra kontainer build Amazon Elastic Container Registry (Amazon ECR) yang tersedia untuk waktu aktif yang berbeda, lihat [Repositori gambar untuk AWS SAM](serverless-image-repositories.md).

# Menggunakan GitHub Tindakan untuk menyebarkan dengan AWS SAM
<a name="deploying-using-github"></a>

Untuk mengonfigurasi [GitHub](https://github.com/)pipeline untuk mengotomatiskan pembuatan dan penerapan AWS SAM aplikasi, Anda harus terlebih dahulu menginstal antarmuka baris AWS SAM perintah (CLI) di host Anda. Anda dapat menggunakan [GitHub Tindakan](https://github.com/features/actions) dalam GitHub alur kerja untuk membantu penyiapan ini.

Contoh GitHub alur kerja berikut menyiapkan host Ubuntu menggunakan serangkaian GitHub Tindakan, lalu menjalankan AWS SAMCLI perintah untuk membangun dan menyebarkan aplikasi AWS SAM :

```
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v3
      - uses: aws-actions/setup-sam@v2
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-2
      - run: sam build --use-container
      - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

Untuk daftar citra kontainer build Amazon Elastic Container Registry (Amazon ECR) yang tersedia untuk waktu aktif yang berbeda, lihat [Repositori gambar untuk AWS SAM](serverless-image-repositories.md).

# Cara menggunakan otentikasi OIDC dengan pipeline AWS SAM
<a name="deploying-with-oidc"></a>

AWS Serverless Application Model (AWS SAM) mendukung otentikasi pengguna OpenID Connect (OIDC) untuk Bitbucket, GitHub Actions, dan integrasi GitLab berkelanjutan dan pengiriman berkelanjutan (akun CI/CD) platforms. With this support, you can use authorized CI/CD pengguna dari salah satu platform ini untuk mengelola pipeline aplikasi tanpa server Anda. Jika tidak, Anda perlu membuat dan mengelola beberapa AWS Identity and Access Management (IAM) pengguna untuk mengontrol akses ke AWS SAM saluran pipa.

## Siapkan OIDC dengan pipa AWS SAM
<a name="deploying-with-oidc-setup"></a>

Selama proses `sam pipeline bootstrap` konfigurasi, lakukan hal berikut untuk mengatur OIDC dengan pipeline Anda AWS SAM .

1. Saat diminta untuk memilih penyedia identitas, pilih **OIDC**.

1. Selanjutnya, pilih penyedia OIDC yang didukung.

1. Masukkan URL penyedia OIDC, dimulai dengan. **https://**
**catatan**  
AWS SAM referensi URL ini ketika menghasilkan jenis `AWS::IAM::OIDCProvider` sumber daya.

1. Selanjutnya, ikuti petunjuknya dan masukkan informasi CI/CD platform yang diperlukan untuk mengakses platform yang dipilih. Detail ini bervariasi menurut platform dan dapat mencakup:
   + ID klien OIDC.
   + Nama repositori kode atau pengidentifikasi unik universal (UUID).
   + Nama grup atau organisasi yang terkait dengan repositori.
   + GitHub organisasi tempat repositori kode milik.
   + GitHub nama repositori.
   + Cabang tempat penerapan akan terjadi.

1. AWS SAM menampilkan ringkasan konfigurasi OIDC yang dimasukkan. Masukkan nomor untuk pengaturan untuk mengeditnya, atau tekan Enter untuk melanjutkan.

1. Ketika diminta untuk mengkonfirmasi pembuatan sumber daya yang diperlukan untuk mendukung koneksi OIDC yang dimasukkan, tekan Y untuk melanjutkan.

AWS SAM menghasilkan `AWS::IAM::OIDCProvider` AWS CloudFormation sumber daya dengan konfigurasi yang disediakan yang mengasumsikan peran eksekusi pipeline. Untuk mempelajari lebih lanjut tentang jenis CloudFormation sumber daya ini, lihat [AWS: :IAM:: OIDCProvider](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-oidcprovider.html) di *AWS CloudFormation Panduan Pengguna*.

**catatan**  
Jika sumber daya penyedia identitas (iDP) sudah ada di sumber daya Anda Akun AWS, AWS SAM referensikan itu alih-alih membuat sumber daya baru.

## Contoh
<a name="deploying-with-oidc-setup-example"></a>

Berikut ini adalah contoh pengaturan OIDC dengan AWS SAM pipeline.

```
Select a permissions provider:
    1 - IAM (default)
    2 - OpenID Connect (OIDC)
Choice (1, 2): 2
Select an OIDC provider:
    1 - GitHub Actions
    2 - GitLab
    3 - Bitbucket
Choice (1, 2, 3): 1
Enter the URL of the OIDC provider [https://token.actions.githubusercontent.com]:
Enter the OIDC client ID (sometimes called audience) [sts.amazonaws.com]:
Enter the GitHub organization that the code repository belongs to. If there is no organization enter your username instead: my-org
Enter GitHub repository name: testing
Enter the name of the branch that deployments will occur from [main]:

[3] Reference application build resources
Enter the pipeline execution role ARN if you have previously created one, or we will create one for you []:
Enter the CloudFormation execution role ARN if you have previously created one, or we will create one for you []:
Please enter the artifact bucket ARN for your Lambda function. If you do not have a bucket, we will create one for you []:
Does your application contain any IMAGE type Lambda functions? [y/N]:

[4] Summary
Below is the summary of the answers:
    1 - Account: 123456
    2 - Stage configuration name: dev
    3 - Region: us-east-1
    4 - OIDC identity provider URL: https://token.actions.githubusercontent.com
    5 - OIDC client ID: sts.amazonaws.com
    6 - GitHub organization: my-org
    7 - GitHub repository: testing
    8 - Deployment branch: main
    9 - Pipeline execution role: [to be created]
    10 - CloudFormation execution role: [to be created]
    11 - Artifacts bucket: [to be created]
    12 - ECR image repository: [skipped]
Press enter to confirm the values above, or select an item to edit the value:

This will create the following required resources for the 'dev' configuration:
    - IAM OIDC Identity Provider
    - Pipeline execution role
    - CloudFormation execution role
    - Artifact bucket
Should we proceed with the creation? [y/N]:
```

## Pelajari selengkapnya
<a name="deploying-with-oidc-setup-learn-more"></a>

Untuk informasi selengkapnya tentang penggunaan OIDC dengan AWS SAM pipeline, lihat. [sam pipeline bootstrap](sam-cli-command-reference-sam-pipeline-bootstrap.md)

# Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud
<a name="using-sam-cli-sync"></a>

 AWS Serverless Application Model Perintah Command Line Interface (AWS SAMCLI) `sam sync` menyediakan opsi untuk menyinkronkan perubahan aplikasi lokal dengan cepat ke file AWS Cloud. Gunakan `sam sync` saat mengembangkan aplikasi Anda untuk:

1. Secara otomatis mendeteksi dan menyinkronkan perubahan lokal ke file AWS Cloud.

1. Sesuaikan perubahan lokal apa yang disinkronkan ke file. AWS Cloud

1. Siapkan aplikasi Anda di cloud untuk pengujian dan validasi.

Dengan`sam sync`, Anda dapat membuat alur kerja pengembangan cepat yang mempersingkat waktu yang diperlukan untuk menyinkronkan perubahan lokal Anda ke cloud untuk pengujian dan validasi.

**catatan**  
`sam sync`Perintah ini direkomendasikan untuk lingkungan pengembangan. Untuk lingkungan produksi, sebaiknya gunakan `sam deploy` atau konfigurasi pipeline *continuous integration and delivery (CI/CD*). Untuk mempelajari selengkapnya, lihat [Menyebarkan aplikasi dan sumber daya Anda dengan AWS SAM](serverless-deploying.md).

`sam sync`Perintah adalah bagian dari AWS SAM Accelerate *AWS SAM Accelerate*menyediakan alat yang dapat Anda gunakan untuk mempercepat pengalaman mengembangkan dan menguji aplikasi tanpa server di. AWS Cloud

**Topics**
+ [Secara otomatis mendeteksi dan menyinkronkan perubahan lokal ke AWS Cloud](#using-sam-cli-sync-auto)
+ [Kustomisasi perubahan lokal apa yang disinkronkan ke AWS Cloud](#using-sam-cli-sync-customize)
+ [Siapkan aplikasi Anda di cloud untuk pengujian dan validasi](#using-sam-cli-sync-test)
+ [Opsi untuk perintah sinkronisasi sam](#using-sam-cli-sync-options)
+ [Pemecahan masalah](#using-sam-cli-sync-troubleshooting)
+ [Contoh](#using-sam-cli-sync-examples)
+ [Pelajari selengkapnya](#using-sam-cli-sync-learn)

## Secara otomatis mendeteksi dan menyinkronkan perubahan lokal ke AWS Cloud
<a name="using-sam-cli-sync-auto"></a>

Jalankan `sam sync` dengan `--watch` opsi untuk mulai menyinkronkan aplikasi Anda ke file. AWS Cloud Ini melakukan hal berikut:

1. **Membangun aplikasi Anda** — Proses ini mirip dengan menggunakan `sam build` perintah.

1. **Menerapkan aplikasi Anda** — AWS SAMCLI Menyebarkan aplikasi Anda untuk AWS CloudFormation menggunakan pengaturan default Anda. Nilai default berikut digunakan:

   1. AWS kredensi dan pengaturan konfigurasi umum yang ditemukan di folder `.aws` pengguna Anda.

   1. Pengaturan penerapan aplikasi ditemukan di `samconfig.toml` file aplikasi Anda.

   Jika nilai default tidak dapat ditemukan, AWS SAMCLI akan memberi tahu Anda dan keluar dari proses sinkronisasi.

1. **Perhatikan perubahan lokal** — AWS SAMCLI Tetap berjalan dan perhatikan perubahan lokal pada aplikasi Anda. Inilah yang disediakan `--watch` opsi.

   Opsi ini dapat dihidupkan secara default. Untuk nilai default, lihat `samconfig.toml` file aplikasi Anda. Berikut ini adalah file contoh:

   ```
   ...
   [default.sync]
   [default.sync.parameters]
   watch = true
   ...
   ```

1. **Sinkronkan perubahan lokal ke AWS Cloud** — Saat Anda membuat perubahan lokal, AWS SAMCLI mendeteksi dan menyinkronkan perubahan tersebut AWS Cloud melalui metode tercepat yang tersedia. Tergantung pada jenis perubahan, berikut ini dapat terjadi:

   1. Jika sumber daya yang diperbarui mendukung AWS layanan APIs, AWS SAMCLI akan menggunakannya untuk menyebarkan perubahan Anda. Ini menghasilkan sinkronisasi cepat untuk memperbarui sumber daya Anda di AWS Cloud.

   1. Jika sumber daya Anda yang diperbarui tidak mendukung AWS layanan APIs, AWS SAMCLI maka akan melakukan CloudFormation penerapan. Ini memperbarui seluruh aplikasi Anda di AWS Cloud. Meskipun tidak secepat itu, itu mencegah Anda dari keharusan memulai penerapan secara manual.

Karena `sam sync` perintah secara otomatis memperbarui aplikasi Anda di AWS Cloud, disarankan untuk lingkungan pengembangan saja. Ketika Anda berlari`sam sync`, Anda akan diminta untuk mengkonfirmasi:

```
**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]: ENTER
```

## Kustomisasi perubahan lokal apa yang disinkronkan ke AWS Cloud
<a name="using-sam-cli-sync-customize"></a>

Berikan opsi untuk menyesuaikan perubahan lokal apa yang disinkronkan ke. AWS Cloud Ini dapat mempercepat waktu yang diperlukan untuk melihat perubahan lokal Anda di cloud untuk pengujian dan validasi.

Misalnya, berikan `--code` opsi untuk menyinkronkan hanya perubahan kode, seperti kode AWS Lambda fungsi. Selama pengembangan, jika Anda berfokus secara khusus pada kode Lambda, ini akan membuat perubahan Anda ke cloud dengan cepat untuk pengujian dan validasi. Berikut ini adalah contohnya:

```
$ sam sync --code --watch
```

Untuk menyinkronkan hanya perubahan kode untuk fungsi atau lapisan Lambda tertentu, gunakan opsi. `--resource-id` Berikut ini adalah contohnya:

```
$ sam sync --code --resource-id HelloWorldFunction --resource-id HelloWorldLayer
```

## Siapkan aplikasi Anda di cloud untuk pengujian dan validasi
<a name="using-sam-cli-sync-test"></a>

`sam sync`Perintah secara otomatis menemukan metode tercepat yang tersedia untuk memperbarui aplikasi Anda di file. AWS Cloud Ini dapat mempercepat alur kerja pengembangan dan pengujian cloud Anda. Dengan memanfaatkan AWS layanan APIs, Anda dapat dengan cepat mengembangkan, menyinkronkan, dan menguji sumber daya yang didukung. Untuk contoh langsung, lihat [Modul 6 - AWS SAM Mempercepat](https://s12d.com/sam-ws-en-accelerate) di Lokakarya *Lengkap AWS SAM *.

## Opsi untuk perintah sinkronisasi sam
<a name="using-sam-cli-sync-options"></a>

Berikut ini adalah beberapa opsi utama yang dapat Anda gunakan untuk memodifikasi `sam sync` perintah. Untuk daftar semua opsi, lihat[sam sync](sam-cli-command-reference-sam-sync.md).

### Lakukan penerapan satu kali CloudFormation
<a name="using-sam-cli-sync-options-single-deploy"></a>

Gunakan `--no-watch` opsi untuk mematikan sinkronisasi otomatis. Berikut ini adalah contohnya:

```
$ sam sync --no-watch
```

 AWS SAMCLIAkan melakukan CloudFormation penyebaran satu kali. Perintah ini mengelompokkan tindakan yang dilakukan oleh `sam build` dan `sam deploy` perintah.

### Lewati CloudFormation penerapan awal
<a name="using-sam-cli-sync-options-skip-deploy-sync"></a>

Anda dapat menyesuaikan apakah CloudFormation penerapan diperlukan setiap kali `sam sync` dijalankan.
+ Menyediakan `--no-skip-deploy-sync` untuk memerlukan CloudFormation penerapan setiap kali `sam sync` dijalankan. Ini memastikan bahwa infrastruktur lokal Anda disinkronkan CloudFormation, mencegah penyimpangan. Menggunakan opsi ini memang menambah waktu tambahan untuk alur kerja pengembangan dan pengujian Anda.
+ Menyediakan `--skip-deploy-sync` untuk membuat CloudFormation penyebaran opsional. Ini AWS SAMCLI akan membandingkan AWS SAM template lokal Anda dengan CloudFormation template yang Anda gunakan dan akan melewati CloudFormation penerapan awal jika perubahan tidak terdeteksi. Melewatkan CloudFormation penerapan dapat menghemat waktu Anda saat menyinkronkan perubahan lokal ke file. AWS Cloud

  Jika tidak ada perubahan yang terdeteksi, AWS SAMCLI akan tetap melakukan CloudFormation penerapan dalam skenario berikut:
  + Jika sudah 7 hari atau lebih sejak CloudFormation penerapan terakhir Anda.
  + Jika sejumlah besar perubahan kode fungsi Lambda terdeteksi, menjadikan CloudFormation penerapan metode tercepat untuk memperbarui aplikasi Anda.

Berikut ini adalah contohnya:

```
$ sam sync --skip-deploy-sync
```

### Sinkronkan sumber daya dari tumpukan bersarang
<a name="using-sam-cli-sync-options-nested-stack"></a>

**Untuk menyinkronkan sumber daya dari tumpukan bersarang**

1. Berikan tumpukan root menggunakan`--stack-name`.

1. Identifikasi sumber daya dalam tumpukan bersarang menggunakan format berikut:`nestedStackId/resourceId`.

1. Berikan sumber daya di tumpukan bersarang menggunakan`--resource-id`.

   Berikut ini adalah contohnya:

   ```
   $ sam sync --code --stack-name sam-app --resource-id myNestedStack/HelloWorldFunction
   ```

Untuk informasi selengkapnya tentang membuat aplikasi bersarang, lihat[Gunakan kembali kode dan sumber daya menggunakan aplikasi bersarang di AWS SAM](serverless-sam-template-nested-applications.md).

### Tentukan CloudFormation tumpukan tertentu untuk diperbarui
<a name="using-sam-cli-sync-options-stack-name"></a>

Untuk menentukan CloudFormation tumpukan tertentu untuk diperbarui, berikan `--stack-name` opsi. Berikut ini adalah contohnya:

```
$ sam sync --stack-name dev-sam-app
```

### Mempercepat waktu pembuatan dengan membangun proyek Anda di folder sumber
<a name="using-sam-cli-sync-options-source"></a>

Untuk runtime dan metode build yang didukung, Anda dapat menggunakan `--build-in-source` opsi untuk membangun proyek secara langsung di folder sumber. Secara default, AWS SAM CLI build dalam direktori sementara, yang melibatkan penyalinan kode sumber dan file proyek. Dengan`--build-in-source`, AWS SAM CLI build langsung di folder sumber Anda, yang mempercepat proses pembuatan dengan menghapus kebutuhan untuk menyalin file ke direktori sementara.

Untuk daftar runtime dan metode build yang didukung, lihat` --build-in-source`.

### Tentukan file dan folder yang tidak akan memulai sinkronisasi
<a name="using-sam-cli-sync-options-exclude"></a>

Gunakan `--watch-exclude` opsi untuk menentukan file atau folder apa pun yang tidak akan memulai sinkronisasi saat diperbarui. Untuk informasi selengkapnya tentang metrik ini, lihat `--watch-exclude`.

Berikut ini adalah contoh yang mengecualikan `package-lock.json` file yang terkait dengan `HelloWorldFunction` fungsi kami:

```
$ sam sync --watch --watch-exclude HelloWorldFunction=package-lock.json
```

Ketika perintah ini dijalankan, AWS SAM CLI akan memulai proses sinkronisasi. Ini termasuk yang berikut:
+ Jalankan `sam build` untuk membangun fungsi Anda dan mempersiapkan aplikasi Anda untuk penerapan.
+ Jalankan `sam deploy` untuk menyebarkan aplikasi Anda.
+ Perhatikan perubahan pada aplikasi Anda.

Saat kami memodifikasi `package-lock.json` file, file AWS SAM CLI tidak akan memulai sinkronisasi. Ketika file lain diperbarui, AWS SAM CLI akan memulai sinkronisasi, yang akan menyertakan `package-lock.json` file.

Berikut ini adalah contoh menentukan fungsi Lambda dari tumpukan anak:

```
$ sam sync --watch --watch-exclude ChildStackA/MyFunction=database.sqlite3
```

## Pemecahan masalah
<a name="using-sam-cli-sync-troubleshooting"></a>

Untuk memecahkan masalah AWS SAMCLI, lihat. [AWS SAMCLIpemecahan masalah](sam-cli-troubleshooting.md)

## Contoh
<a name="using-sam-cli-sync-examples"></a>

### Menggunakan sam sync untuk memperbarui aplikasi Hello World
<a name="using-sam-cli-sync-examples-example1"></a>

Dalam contoh ini, kita mulai dengan menginisialisasi contoh aplikasi Hello World. Untuk mempelajari lebih lanjut tentang aplikasi ini, lihat[Tutorial: Menyebarkan aplikasi Hello World dengan AWS SAM](serverless-getting-started-hello-world.md).

Menjalankan `sam sync` memulai proses build dan deployment.

```
$ sam sync
				
The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without
performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.
**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]:
Queued infra sync. Waiting for in progress code syncs to complete...
Starting infra sync.
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/0663e6fe-a888-4efb-b908-e2344261e9c7) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource

Build Succeeded

Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f.
Execute the following command to deploy the packaged template
sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f --stack-name <YOUR STACK NAME>


    Deploying with following values
    ===============================
    Stack name                   : sam-app
    Region                       : us-west-2
    Disable rollback             : False
    Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
    Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
    Parameter overrides          : {}
    Signing Profiles             : null

Initiating deployment
=====================


2023-03-17 11:17:19 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 0.5 seconds)
---------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
CREATE_IN_PROGRESS                  AWS::IAM::Role                      HelloWorldFunctionRole              -
CREATE_IN_PROGRESS                  AWS::IAM::Role                      HelloWorldFunctionRole              Resource creation Initiated
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   Resource creation Initiated
                                                                        ack
CREATE_COMPLETE                     AWS::IAM::Role                      HelloWorldFunctionRole              -
CREATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
CREATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
CREATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  Resource creation Initiated
CREATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   Resource creation Initiated
CREATE_COMPLETE                     AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
CREATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Resource creation Initiated
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   Resource creation Initiated
                                                                        5f9d
CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          Resource creation Initiated
CREATE_COMPLETE                     AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
CREATE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
CREATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
---------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
----------------------------------------------------------------------------------------------------------------------------------------------
Outputs
----------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole
Description         Implicit IAM Role created for Hello World function
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF

Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/

Key                 HelloWorldFunction
Description         Hello World Lambda Function ARN
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco
----------------------------------------------------------------------------------------------------------------------------------------------
Stack creation succeeded. Sync infra completed.

Infra sync completed.
CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.
```

Setelah penerapan selesai, kami memodifikasi `HelloWorldFunction` kode. The AWS SAMCLI mendeteksi perubahan ini dan menyinkronkan aplikasi kita ke file. AWS Cloud Sejak AWS Lambda mendukung AWS layanan APIs, sinkronisasi cepat dilakukan.

```
Syncing Lambda Function HelloWorldFunction...
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource
Finished syncing Lambda Function HelloWorldFunction.
```

Selanjutnya, kita memodifikasi endpoint API kita di AWS SAM template aplikasi. Kami berubah `/hello` menjadi`/helloworld`.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    ...
    Properties:
      ...
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /helloworld
            Method: get
```

Karena sumber daya Amazon API Gateway tidak mendukung API AWS layanan, maka secara AWS SAMCLI otomatis melakukan CloudFormation penerapan. Berikut ini adalah contoh output:

```
Queued infra sync. Waiting for in progress code syncs to complete...
Starting infra sync.
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource

Build Succeeded

Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9.
Execute the following command to deploy the packaged template
sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9 --stack-name <YOUR STACK NAME>


    Deploying with following values
    ===============================
    Stack name                   : sam-app
    Region                       : us-west-2
    Disable rollback             : False
    Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
    Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
    Parameter overrides          : {}
    Signing Profiles             : null

Initiating deployment
=====================


2023-03-17 14:41:18 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 0.5 seconds)
---------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
---------------------------------------------------------------------------------------------------------------------------------------------
UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
UPDATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   -
UPDATE_COMPLETE                     AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   -
                                                                        d3cd
UPDATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Requested update requires the
                                                                        ssionProd                           creation of a new physical
                                                                                                            resource; hence creating one.
UPDATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Resource creation Initiated
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   Resource creation Initiated
                                                                        d3cd
CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   -
                                                                        d3cd
UPDATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
UPDATE_COMPLETE                     AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
UPDATE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
SS
DELETE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
DELETE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
DELETE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
DELETE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
---------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
----------------------------------------------------------------------------------------------------------------------------------------------
Outputs
----------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole
Description         Implicit IAM Role created for Hello World function
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF

Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/

Key                 HelloWorldFunction
Description         Hello World Lambda Function ARN
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco
----------------------------------------------------------------------------------------------------------------------------------------------


Stack update succeeded. Sync infra completed.

Infra sync completed.
```

## Pelajari selengkapnya
<a name="using-sam-cli-sync-learn"></a>

Untuk deskripsi semua `sam sync` opsi, lihat[sam sync](sam-cli-command-reference-sam-sync.md).